Caller generation overhaul, Devon intern, frontend redesign
Caller system: structured JSON backgrounds, voice-personality matching (68 profiles), thematic inter-caller awareness, adaptive call shapes, show pacing, returning caller memory with relationships/arcs, post-call quality signals, 95 comedy writer entries. Devon the Intern: persistent show character with tool-calling LLM (web search, Wikipedia, headlines, webpage fetch), auto-monitoring, 6 API endpoints, full frontend UI. Frontend: wrap-up nudge button, caller info panel with shape/energy/emotion badges, keyboard shortcuts (1-0/H/W/M/D), pinned SFX, visual polish, Devon panel. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -52,7 +52,8 @@ class RegularCallerService:
|
||||
def add_regular(self, name: str, gender: str, age: int, job: str,
|
||||
location: str, personality_traits: list[str],
|
||||
first_call_summary: str, voice: str = None,
|
||||
stable_seeds: dict = None) -> dict:
|
||||
stable_seeds: dict = None,
|
||||
structured_background: dict = None) -> dict:
|
||||
"""Promote a first-time caller to regular"""
|
||||
# Retire oldest if at cap
|
||||
if len(self._regulars) >= MAX_REGULARS:
|
||||
@@ -70,8 +71,11 @@ class RegularCallerService:
|
||||
"personality_traits": personality_traits,
|
||||
"voice": voice,
|
||||
"stable_seeds": stable_seeds or {},
|
||||
"structured_background": structured_background,
|
||||
"relationships": {},
|
||||
"call_history": [
|
||||
{"summary": first_call_summary, "timestamp": time.time()}
|
||||
{"summary": first_call_summary, "timestamp": time.time(),
|
||||
"arc_status": "ongoing"}
|
||||
],
|
||||
"last_call": time.time(),
|
||||
"created_at": time.time(),
|
||||
@@ -81,18 +85,37 @@ class RegularCallerService:
|
||||
print(f"[Regulars] Promoted {name} to regular (total: {len(self._regulars)})")
|
||||
return regular
|
||||
|
||||
def update_after_call(self, regular_id: str, call_summary: str):
|
||||
def update_after_call(self, regular_id: str, call_summary: str,
|
||||
key_moments: list = None, arc_status: str = "ongoing"):
|
||||
"""Update a regular's history after a returning call"""
|
||||
for regular in self._regulars:
|
||||
if regular["id"] == regular_id:
|
||||
regular.setdefault("call_history", []).append(
|
||||
{"summary": call_summary, "timestamp": time.time()}
|
||||
)
|
||||
entry = {
|
||||
"summary": call_summary,
|
||||
"timestamp": time.time(),
|
||||
"arc_status": arc_status,
|
||||
}
|
||||
if key_moments:
|
||||
entry["key_moments"] = key_moments
|
||||
regular.setdefault("call_history", []).append(entry)
|
||||
regular["last_call"] = time.time()
|
||||
self._save()
|
||||
print(f"[Regulars] Updated {regular['name']} call history ({len(regular['call_history'])} calls)")
|
||||
return
|
||||
print(f"[Regulars] Regular {regular_id} not found for update")
|
||||
|
||||
def add_relationship(self, regular_id: str, other_name: str,
|
||||
rel_type: str, context: str):
|
||||
"""Track a relationship between regulars"""
|
||||
for regular in self._regulars:
|
||||
if regular["id"] == regular_id:
|
||||
regular.setdefault("relationships", {})[other_name] = {
|
||||
"type": rel_type,
|
||||
"context": context,
|
||||
}
|
||||
self._save()
|
||||
print(f"[Regulars] {regular['name']} → {other_name}: {rel_type}")
|
||||
return
|
||||
|
||||
|
||||
regular_caller_service = RegularCallerService()
|
||||
|
||||
Reference in New Issue
Block a user