7.9 KiB
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 onlyorganStateProfile: whether this is a leanwork_organor portablepersonapersonalityVectors: the six canonical trait-vector families used for voice and behavior projectionvalues: value labels and priorities that should bend speech tonecurrentMood: 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 forceactivation: awake/running status, current load, initiative speed, interruptibility, cooldown multipliers, heat multiplier, pending-turn flag, and last wake/finish timestampscharacterStateVector: the 64-float deterministicweksa.utterance_embedding_handoff.v0.1speaker-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 valuesutteranceEmbeddingBasis: 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.valuesarray 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 frombge-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.