This repository has been archived on 2026-10-29. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
Epiphany/schemas/agent-utterance-state-schema.md
2026-05-29 01:23:43 +01:00

146 lines
7.9 KiB
Markdown

# Agent Utterance State Schema
`epiphany.agent_utterance_state.v0` is the compact speech-conditioning view for
Weks, Aquarium, Discord/voice bridges, and any other surface that needs an agent
to sound like itself without ingesting the whole organ or Persona state.
It is a derived document. The durable source of truth stays split where it
belongs:
- canonical identity, values, and trait vectors live in local organ state
(`EpiphanyAgentMemoryEntry`)
- current load, heartbeat heat, cooldown multipliers, pending-turn state, and
mood pressure live in heartbeat participant state
- utterance systems consume the derived subset and do not read memories,
events, scenes, or relationship-memory records
## Shape
The document carries:
- `identity`: public name, roles, origin, and public description only
- `organStateProfile`: whether this is a lean `work_organ` or portable
`persona`
- `personalityVectors`: the six canonical trait-vector families used for voice
and behavior projection
- `values`: value labels and priorities that should bend speech tone
- `currentMood`: mood label plus a 32-axis named emotional state projection
covering valence, arousal, dominance, urgency, anger, despair, sadness, fear,
anxiety, disgust, contempt, annoyance, dismissal, flippancy, playfulness,
irony, tenderness, warmth, joy, excitement, fatigue, guardedness, confidence,
shame, pride, threat, secrecy, hesitation, emotional containment, thought
pressure, reaction intensity, and command force
- `activation`: awake/running status, current load, initiative speed,
interruptibility, cooldown multipliers, heat multiplier, pending-turn flag,
and last wake/finish timestamps
- `characterStateVector`: the 64-float deterministic
`weksa.utterance_embedding_handoff.v0.1` speaker-state lane; first 32 slots
are the current emotional state projection, later slots add activation and
slower speaker traits/context, with slot labels and uncertainties kept beside
the values
- `utteranceEmbeddingBasis`: bounded weighted text snippets generated from the
same typed fields for utterance embedding input
## Invariants
- No episodic memories.
- No semantic memories.
- No relationship summaries or linked memory ids.
- No private notes.
- No hidden JSON cargo.
- The `characterStateVector.values` array is exactly 64 floats. Resizing or
reordering slots is a schema-version change.
- The document may be serialized for CultNet, but in-process callers should use
the typed Rust structs.
## Weksa/AquaSynth Input Vectors
The full Weksa handoff is `weksa.utterance_embedding_handoff.v0.1`. The input
vector widths are fixed:
- `speech_text_embedding`: 1024 floats from `bge-m3:latest`; text semantics,
not phonetics.
- `phonetic_realization_vector`: 256 floats from Weksa/PanPhon-style phonetic
realization; IPA/phone/speech-shape evidence, not text meaning.
- `prosody_emphasis_hints`: 32 floats; Weksa-owned delivery hints.
- `character_state_vector`: 64 floats; Epiphany organ or Persona speaker
state from this document.
- `utterance_embedding`: 64 floats; AquaSynth-owned learned output, not an
Epiphany input.
## Character State Vector Slots
`characterStateVector.values` uses these exact `0..63` slots for
`weksa.utterance_embedding_handoff.v0.1` compatibility:
| Index | Name | Source |
| --- | --- | --- |
| 0 | `valence` | `currentMood.emotionalDimensions.valence` |
| 1 | `arousal` | `currentMood.emotionalDimensions.arousal` |
| 2 | `dominance` | `currentMood.emotionalDimensions.dominance` |
| 3 | `urgency` | `currentMood.emotionalDimensions.urgency` |
| 4 | `anger` | `currentMood.emotionalDimensions.anger` |
| 5 | `despair` | `currentMood.emotionalDimensions.despair` |
| 6 | `sadness` | `currentMood.emotionalDimensions.sadness` |
| 7 | `fear` | `currentMood.emotionalDimensions.fear` |
| 8 | `anxiety` | `currentMood.emotionalDimensions.anxiety` |
| 9 | `disgust` | `currentMood.emotionalDimensions.disgust` |
| 10 | `contempt` | `currentMood.emotionalDimensions.contempt` |
| 11 | `annoyance` | `currentMood.emotionalDimensions.annoyance` |
| 12 | `dismissal` | `currentMood.emotionalDimensions.dismissal` |
| 13 | `flippancy` | `currentMood.emotionalDimensions.flippancy` |
| 14 | `playfulness` | `currentMood.emotionalDimensions.playfulness` |
| 15 | `irony` | `currentMood.emotionalDimensions.irony` |
| 16 | `tenderness` | `currentMood.emotionalDimensions.tenderness` |
| 17 | `warmth` | `currentMood.emotionalDimensions.warmth` |
| 18 | `joy` | `currentMood.emotionalDimensions.joy` |
| 19 | `excitement` | `currentMood.emotionalDimensions.excitement` |
| 20 | `fatigue` | `currentMood.emotionalDimensions.fatigue` |
| 21 | `guardedness` | `currentMood.emotionalDimensions.guardedness` |
| 22 | `confidence` | `currentMood.emotionalDimensions.confidence` |
| 23 | `shame` | `currentMood.emotionalDimensions.shame` |
| 24 | `pride` | `currentMood.emotionalDimensions.pride` |
| 25 | `threat` | `currentMood.emotionalDimensions.threat` |
| 26 | `secrecy` | `currentMood.emotionalDimensions.secrecy` |
| 27 | `hesitation` | `currentMood.emotionalDimensions.hesitation` |
| 28 | `emotionalContainment` | `currentMood.emotionalDimensions.emotionalContainment` |
| 29 | `thoughtPressure` | `currentMood.emotionalDimensions.thoughtPressure` |
| 30 | `reactionIntensity` | `currentMood.emotionalDimensions.reactionIntensity` |
| 31 | `commandForce` | `currentMood.emotionalDimensions.commandForce` |
| 32 | `currentLoad` | `activation.currentLoad` |
| 33 | `initiativeHeat` | `activation.initiativeHeatMultiplier` |
| 34 | `pendingTurn` | `activation.pendingTurnActive` |
| 35 | `cooldownPressure` | `activation.effectiveCooldownMultiplier` |
| 36 | `reactionBias` | `activation.reactionBias` |
| 37 | `interruptThreshold` | `activation.interruptThreshold` |
| 38 | `initiativeSpeed` | `activation.initiativeSpeed` |
| 39 | `voiceBubbly` | `personalityVectors.voiceStyle.bubbly_pushiness` |
| 40 | `voiceDryness` | `personalityVectors.voiceStyle.dryness` |
| 41 | `voiceFormality` | `personalityVectors.voiceStyle.formality` |
| 42 | `voiceDirectness` | `personalityVectors.voiceStyle.directness` |
| 43 | `voiceIntensity` | `personalityVectors.voiceStyle.intensity` |
| 44 | `voiceWarmth` | `personalityVectors.voiceStyle.warmth` |
| 45 | `voicePrecision` | `personalityVectors.voiceStyle.precision` |
| 46 | `voiceRitualRegister` | `personalityVectors.voiceStyle.ritual_register` |
| 47 | `presentationPushiness` | `personalityVectors.presentationStrategy.pushiness` |
| 48 | `presentationSelfFocus` | `personalityVectors.presentationStrategy.self_focus` |
| 49 | `presentationPlay` | `personalityVectors.presentationStrategy.play` |
| 50 | `presentationCareDemand` | `personalityVectors.presentationStrategy.care_demand` |
| 51 | `behaviorWorkDrive` | `personalityVectors.behavioralDimensions.work_drive` |
| 52 | `behaviorBoundaryDefense` | `personalityVectors.behavioralDimensions.boundary_defense` |
| 53 | `behaviorPurityDrive` | `personalityVectors.behavioralDimensions.purity_drive` |
| 54 | `behaviorPatience` | `personalityVectors.behavioralDimensions.patience` |
| 55 | `stableAgreeableness` | `personalityVectors.stableDispositions.agreeableness` |
| 56 | `stableConscientiousness` | `personalityVectors.stableDispositions.conscientiousness` |
| 57 | `stableNeuroticism` | `personalityVectors.stableDispositions.neuroticism` |
| 58 | `stableOpenness` | `personalityVectors.stableDispositions.openness` |
| 59 | `organizationCoherence` | `personalityVectors.underlyingOrganization.coherence` |
| 60 | `organizationRigidity` | `personalityVectors.underlyingOrganization.rigidity` |
| 61 | `slowTraitReserved62` | `reserved.slowTrait.62` |
| 62 | `slowTraitReserved63` | `reserved.slowTrait.63` |
| 63 | `slowTraitReserved64` | `reserved.slowTrait.64` |
If a caller needs autobiographical recall, it should ask the memory graph for a
separate context cut. Do not fatten this document until it becomes a second
state wearing stage makeup. That is how the old machine learned to lie
politely.