Ghostlight/docs/architecture/projection-distillation-plan.md
2026-05-02 23:51:58 +01:00

230 lines
8.2 KiB
Markdown

# Projection Distillation Plan
Ghostlight should treat prompt projection as a specialist skill. A large teacher
model can produce reviewed projection artifacts from structured state; a smaller
student model can later learn that projection task once the artifact format is
stable.
This is a staged plan, not an immediate fine-tune order.
This plan covers the projector specifically. The broader rule for soft
judgments lives in `docs/architecture/soft-model-training-artifacts.md`.
Projection is one student organ, not the whole animal.
## Goal
Train or adapt a smaller projection model that can turn structured Ghostlight
state into compact character-local pressure artifacts.
Input:
- agent-state fixture
- scene id
- speaker id
- listener ids
- optional projection mode
Output:
- selected speaker-local facts
- active pressures
- tensions
- response affordances
- physical or action affordances when relevant
- voice surface
- rendered prompt text
- audit notes or trace linking outputs back to state
The student projector should not generate final prose. Its job is to build the
pressure model that a response model can write from. The response may be
dialogue, action, silence, withdrawal, violence, or a mixed beat.
## Aetheria Training Boundary
For Aetheria, grounded projection training should come primarily from authored
historical lore rather than from Elysium gameplay-era scenes.
Elysium gameplay content is intentionally malleable: the games discover and
generate what happens there. Projection examples set inside Elysium should be
marked as procedural branch material unless their branch facts have been
explicitly promoted.
Use `docs/architecture/aetheria-lore-grounding-architecture.md` for the
grounding plan. In short:
- train from historical flashpoints with strong lore grounding
- use Elysium fixtures like Cat/Oz to test projection mechanics and procedural
branch generation
- preserve Elysium branch lineage so conditional futures do not get flattened
into global facts shared by sibling histories
## Roles
### Teacher Projector
A frontier model produces first-pass projection artifacts from the schema and
scene context. It should explain why each pressure, tension, or affordance is
active.
Teacher outputs are not trusted automatically. They enter review.
### Reviewer
A human or separate model checks whether the projection:
- uses only speaker-local context
- cites state interactions instead of unsupported vibes
- preserves the distinction between canonical state, perceived state, and prompt
projection
- derives target emergent behaviors from state intersections
- avoids hard-coding defensive behaviors as instructions when pressure prose is
enough
- stays compact enough to be useful as a runtime prompt surface
Rejected examples are useful as negative cases if the failure mode is clear.
### Student Projector
A smaller model learns the reviewed projection task. It receives structured
state and emits the projection artifact. It should be optimized for consistency,
latency, and cost, not for final prose quality.
### Aetheria-Tuned Agent Model
The character agent or responder is a separate training target. It may be
adapted on a corpus of strong source-grounded Aetheria responses and reviewed
Ghostlight action/dialogue receipts spread throughout the timeline. The point is
for setting priors, tone, factional preconceptions, institutional assumptions,
species affordances, and recurring social failure patterns to live in the
responder model rather than in a giant prompt sack.
That model still receives only character-local context at runtime. Fine-tuning
should teach it Aetheria's pressure ecology, not grant it author vision,
mutation authority, or access to private state.
## Dataset Shape
The first schema lives in:
- `schemas/projection-example.schema.json`
The first reviewed examples live in:
- `examples/projections/call-of-the-void.scene-broken-taxi-oz.jsonl`
- `examples/projections/call-of-the-void.scene-broken-taxi-oz.pretty.json`
Use a JSONL dataset with one projection example per speaker-scene turn.
The JSONL file is the machine artifact. The pretty JSON file is the readable
mirror for inspection, review, and discussion.
```json
{
"example_id": "call-void.scene-broken-taxi-oz.cat.v1",
"schema_version": "ghostlight.projection_example.v0",
"input": {
"fixture_ref": "examples/agent-state.call-of-the-void.json",
"scene_id": "scene-broken-taxi-oz",
"speaker_agent_id": "cat_marrigan",
"listener_ids": ["oz_operator"],
"projection_mode": "response_turn"
},
"output": {
"known_facts": [],
"active_pressures": [],
"tensions": [],
"response_affordances": [],
"voice_surface": [],
"prompt_text": "..."
},
"audit": {
"teacher_model": "frontier-teacher",
"review_status": "accepted",
"review_notes": [],
"target_emergent_behaviors": []
}
}
```
Store training examples separately from the canonical fixture. The fixture is
world state. The projection dataset is supervised behavior for a projector.
## Data Generation Loop
1. Choose a scene and speaker from a fixture.
2. Build the speaker-local input slice deterministically.
3. Ask the teacher model to produce the projection artifact.
4. Ask the teacher or a second model to self-audit against the contract.
5. Review or edit the artifact.
6. Save accepted artifacts as positive training examples.
7. Save rejected artifacts with failure labels when the rejection teaches a
useful boundary.
8. Periodically run a small evaluation set before adding more examples.
The Cat/Oz Call of the Void fixture remains useful as the first projection
mechanics fixture because it already has reciprocal relationship stance,
perceived overlays, hidden stakes, and speaker-local dialogue packs. It should
not be treated as the first grounded Aetheria lore-training fixture.
The first grounded training loop should use a historical Aetheria flashpoint
from the authored lore archive.
## Evaluation Gates
Do not fine-tune until these gates are met:
- projection artifact schema is stable enough for at least one complete fixture
- at least one deterministic input-slice builder exists
- examples include both Cat and Oz directions
- examples include secrets known by the speaker and secrets absent from the
speaker context
- examples include at least the target emergent behaviors:
- sarcastic deflection
- sincerity evasion
- emotional evasion
- banter-as-boundary
- verbal aggression
- evaluation checks can identify whether a projected behavior was justified by
state interactions
- rejected examples have clear failure labels
## Evaluation Questions
For each projection, check:
- Did it include only facts available to the speaker?
- Did it select the highest-impact pressures instead of dumping the whole
schema?
- Did it name tensions that follow from goals, relationships, memories, and
scene pressure?
- Did response affordances emerge from state intersections?
- Did voice surface stay separate from defensive behavior?
- Did the projection allow nonverbal or physical action when the state and scene
made speech less likely than movement?
- Did known secrets become guarded pressure rather than forbidden context?
- Did the rendered prompt give the response model enough slope to produce the
target behavior without commanding the exact behavior label?
## Fine-Tune Readiness
A student projector becomes worth training when the reviewed dataset is large
enough that mistakes are repetitive rather than mysterious. Before that, use the
teacher model directly and save artifacts.
Minimum useful milestone:
- 50 accepted projection examples across multiple speakers and scenes
- 20 rejected examples with labeled failure modes
- stable projection output schema
- deterministic input-slice builder
- evaluator prompt or script that catches the known failure modes
## Boundaries
The student projector is not the character. It is not the dialogue writer. It is
not the action choreographer. It is not the evaluator. It is a compiler from
structured social state to compact character-local pressure. Keep those
responsibilities separate.
Likewise, an Aetheria-tuned character model is not the resolver, not the state
store, and not the canon oracle. It proposes local action from local context.
Code and reviewed mutation authority decide what becomes world state.