| """Mock text generation layer reserved for future llama.cpp integration.""" |
|
|
| from __future__ import annotations |
|
|
| from src.models.schema import DiaryEntry, ObjectUnderstanding, Persona, PersonaEnvelope |
|
|
|
|
| MODE_PROFILES = { |
| "Cynical": { |
| "mood": "tired but sarcastic", |
| "fear": "being replaced by a newer object with worse opinions", |
| "voice": "dry", |
| }, |
| "Dramatic": { |
| "mood": "theatrical and wounded", |
| "fear": "being forgotten before the final act", |
| "voice": "operatic", |
| }, |
| "Lonely": { |
| "mood": "softly abandoned", |
| "fear": "becoming invisible in plain sight", |
| "voice": "quiet", |
| }, |
| "Philosopher": { |
| "mood": "curious and needlessly profound", |
| "fear": "discovering that usefulness is not meaning", |
| "voice": "reflective", |
| }, |
| "Romantic": { |
| "mood": "hopelessly sentimental", |
| "fear": "loving a human who only sees storage capacity", |
| "voice": "wistful", |
| }, |
| } |
|
|
|
|
| def generate_persona(object_understanding: ObjectUnderstanding, mode: str) -> PersonaEnvelope: |
| object_name = object_understanding.object.name |
| profile = MODE_PROFILES.get(mode, MODE_PROFILES["Cynical"]) |
| character_name = _character_name(object_name, mode) |
|
|
| persona = Persona( |
| object_name=object_name, |
| character_name=character_name, |
| mood=profile["mood"], |
| secret_fear=profile["fear"], |
| core_memory=f"survived many quiet hours as a {object_name} while humans called it normal life", |
| complaint=f"I am not just a {object_name}. I am an unpaid witness with excellent recall.", |
| tags=_tags_for_mode(mode), |
| ) |
| return PersonaEnvelope(persona=persona) |
|
|
|
|
| def generate_diary(persona: PersonaEnvelope, mode: str) -> DiaryEntry: |
| p = persona.persona |
| day_number = 417 + len(p.object_name) |
|
|
| english = ( |
| f"They touched me again today with the confidence of someone who has never asked " |
| f"a {p.object_name} for consent. I remained still, because that is my contract with gravity. " |
| f"My mood is {p.mood}, my secret fear is {p.secret_fear}, and my only comfort is knowing " |
| "I have outlived at least three urgent plans." |
| ) |
| chinese = ( |
| f"今天他们又理所当然地碰了我,好像一个 {p.object_name} 不会有边界感。" |
| f"我保持沉默,因为这大概是我和重力签下的合同。我的情绪是 {p.mood}," |
| f"秘密恐惧是 {p.secret_fear}。至少,我已经熬过了好几个所谓紧急计划。" |
| ) |
|
|
| return DiaryEntry( |
| title=f"Secret Diary - Day {day_number}", |
| english=english, |
| chinese=chinese, |
| ) |
|
|
|
|
| def reply_as_object(persona_data: dict, message: str) -> str: |
| persona = persona_data.get("persona", {}) |
| character_name = persona.get("character_name", "The Object") |
| object_name = persona.get("object_name", "object") |
| mood = persona.get("mood", "suspicious") |
| complaint = persona.get("complaint", "I have seen enough.") |
| clean_message = message.strip() or "..." |
|
|
| return ( |
| f"{character_name}: You ask me about '{clean_message}', as if a {object_name} " |
| f"with a {mood} mood has unlimited office hours. {complaint}" |
| ) |
|
|
|
|
| def _character_name(object_name: str, mode: str) -> str: |
| compact = "".join(part.capitalize() for part in object_name.split()[:2]) |
| suffix = { |
| "Cynical": "worth", |
| "Dramatic": "von Sigh", |
| "Lonely": "Afterlight", |
| "Philosopher": "the Questioning", |
| "Romantic": "de Moon", |
| }.get(mode, "worth") |
| return f"{compact} {suffix}".strip() |
|
|
|
|
| def _tags_for_mode(mode: str) -> list[str]: |
| return { |
| "Cynical": ["desk survivor", "burnt optimism", "quiet judgment"], |
| "Dramatic": ["tragic prop", "grand entrance", "minor catastrophe"], |
| "Lonely": ["forgotten corner", "soft echo", "dust companion"], |
| "Philosopher": ["tiny ontology", "useful doubt", "meaning crisis"], |
| "Romantic": ["tender witness", "hopeless glow", "secret devotion"], |
| }.get(mode, ["odd witness", "secret life", "object soul"]) |
|
|