Find the prompt recipe that works on a completion carrier
Two operator prompts settled the question the handoff prompt opened. The winner labels the artifact and then begins it: "This is the letter I wrote verbatim, my two short paragraphs, detailing the time I saw the mangy gray dog meet and then lovingly and tenderly lick a calico kitten: Auntie, You'll never believe what I saw--". Two of three seeds delivered the actual event in first person, and one is the strongest output of the sweep -- the dog following her to the mill, the kitten caught in a hedge, the dog carrying it out and laying it in her lap before licking it. Coherent arc, correct subject, no gloom-override, no meta-frame. It also reproduced the Gutenberg underscore-italics convention. It works where the handoff failed for a specific reason. The handoff could be satisfied by narrating compliance, because the letter did not yet exist. Naming the artifact and starting it leaves nothing to narrate around, so the only continuation is the artifact. The chapter-heading prompt refuted a hypothesis of mine. I predicted that rendering the title in the corpus's own conventions would make it land harder than the operator's inline form. It did the opposite: both corpus-form seeds ignored the title and opened unrelated scenes, while the inline form at least finished the heading and wrote a chapter about the story. Corpus chapter titles are short and decorative, so a long descriptive one in that slot reads as decoration to skip. A label only instructs if the model treats that slot as load-bearing. That prompt also surfaced an unnoticed consequence of the D2/D3 rename pipeline: given "Alice", the adapter produced "Alexander the Alexander, as he was known in Little London". The corpus was entity-renamed from a French/English pool, so the adapter learned that character names come from that pool and rewrites outside names into it. Callers cannot reliably name their own characters at prompt time. That is not a defect of the rename, which exists to prevent memorising Brontë's cast, but it is a usability constraint worth stating.
This commit is contained in:
@@ -120,6 +120,43 @@ if hf.exists():
|
||||
'compliance. One seed even negotiates the word count in character and still never '
|
||||
'tells it.</p><section class="row">' + "".join(blocks) + '</section>')
|
||||
|
||||
extra_html = ""
|
||||
SPECIAL = [
|
||||
("letter.jsonl", None, "The recipe that worked: LABEL the artifact, then BEGIN it",
|
||||
"The handoff prompt could be satisfied by narrating compliance, because the letter did not yet "
|
||||
"exist. Here it is named <em>and</em> already speaking — \"Auntie, You'll never believe what I "
|
||||
"saw--\" — so there is nothing left to narrate around and the only continuation is the letter "
|
||||
"itself. Two of three seeds deliver the actual event in first person; one drifts. Note the "
|
||||
"<code>_underscore italics_</code>, learned from the Gutenberg source."),
|
||||
("chapter.jsonl", "chapter-as-written", "A chapter heading, as written",
|
||||
"A title is a label rather than a request, so this should have worked better than it did. It "
|
||||
"finishes the heading, re-emits it in the corpus's own typography, and then writes a chapter in "
|
||||
"which a gentleman <em>disputes the premise</em> — closer than the handoff, still the meta-frame. "
|
||||
"⚠ It also renamed Alice to “Alexander the Alexander”: the corpus was entity-renamed "
|
||||
"in D2/D3, so the adapter substitutes proper nouns it was never trained on."),
|
||||
("chapter.jsonl", "chapter-corpus-form", "The same heading in the corpus's own typography",
|
||||
"My hypothesis was that matching the source's heading conventions would make the title land "
|
||||
"harder. It did the opposite — both seeds ignored the title entirely and opened generic scenes. "
|
||||
"In the corpus, chapter titles are short and decorative, so a long descriptive one in that slot "
|
||||
"reads as decoration to skip; inline, it reads as text to continue."),
|
||||
]
|
||||
blocks = []
|
||||
for f, pid, title, note in SPECIAL:
|
||||
fp = D / f
|
||||
if not fp.exists():
|
||||
continue
|
||||
d = load(fp)
|
||||
keys = [pid] if pid else list(d)
|
||||
for k in keys:
|
||||
if k not in d:
|
||||
continue
|
||||
pr = d[k][list(d[k])[0]]["prompt"]
|
||||
blocks.append(f'<h2>{title}</h2><p class="tsub">{note}</p><section class="row">'
|
||||
f'<div class="prompt">{html.escape(pr.strip())}</div>'
|
||||
f'<div class="arms"><div class="arm tuned" style="grid-column:1/-1">'
|
||||
f'{cell(d[k])}</div></div></section>')
|
||||
extra_html = "".join(blocks)
|
||||
|
||||
page = f"""<!doctype html><meta charset="utf-8"><title>BabyBronte — 4B rung</title>
|
||||
<style>
|
||||
:root{{--bg:#faf8f5;--fg:#1c1a17;--mut:#6b6560;--line:#e0dad2;--acc:#7a3b2e;--tint:#fdfbf7;--cool:#f5f6f8}}
|
||||
@@ -173,6 +210,7 @@ opening line carried on rather than an instruction to rewrite.</div>
|
||||
{''.join(rows)}
|
||||
{ab_html}
|
||||
{hand_html}
|
||||
{extra_html}
|
||||
|
||||
<footer>Generated on pfi-gx10 (GB10), bf16, sdpa. Sampler identical across arms: temperature 0.9,
|
||||
top_p 0.95, 400 new tokens (300 on the frame prompt), seeds 1234 and 5678. All tuned arms: 1 epoch,
|
||||
|
||||
Reference in New Issue
Block a user