"""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"])