feat(memory): T03 complete — memory wired into orchestrator (consult + --explain-context surface + context to LLM + render); T01-T03 now done in workplan (ralph iters 1-3)

This commit is contained in:
2026-05-26 03:13:06 +02:00
parent 905485acce
commit e8f7320bb4
2 changed files with 60 additions and 19 deletions

View File

@@ -23,6 +23,7 @@ from rich.console import Console
from rich.panel import Panel
from cya.context.collector import collect, render_explanation
from cya.memory import recall_preferences
from cya.safety.risk import classify, get_user_confirmation
from cya.llm.adapter import AssistanceRequest, FakeLLMAdapter
@@ -62,7 +63,29 @@ def handle_request(
except Exception as exc:
console.print(f"[red]Context explanation error: {exc}[/red]")
# 2. Risk classification + mandatory confirmation (T03)
# T03 (memory wiring): consult after context (so safety can see it in future T04 0002),
# before risk/LLM. Real T02 prefs now available; graceful.
memory = {}
try:
memory = recall_preferences(".")
except Exception:
memory = {"error": "recall failed (graceful degradation)"}
if explain_context and memory.get("items"):
try:
prov = memory.get("provenance", [{}])[0]
console.print(
Panel(
f"Phase: {memory.get('phase')} | {len(memory.get('items', []))} items | {prov.get('source', 'local')}",
title="Memory Consulted (T03)",
border_style="blue",
padding=(0, 1),
)
)
except Exception:
pass
# 2. Risk classification + mandatory confirmation (T03 safety; T04 0002 will feed memory signals)
assessment = classify(user_request, envelope)
if assessment.requires_confirmation:
@@ -91,18 +114,23 @@ def handle_request(
# 3. Call through the single LLMAdapter boundary (T04)
adapter = FakeLLMAdapter()
ctx = (envelope.to_dict() if envelope else {}) or {}
ctx["memory"] = memory # T03: memory now in context passed to LLM (for personalization + explain)
llm_request = AssistanceRequest(
user_request=user_request,
context=envelope.to_dict() if envelope else None,
context=ctx,
)
llm_response = adapter.complete(llm_request)
# 4. Render final user-facing artifact (T06 responsibility)
# 4. Render final user-facing artifact (T06 responsibility; T03 memory surface)
mem_line = ""
if memory.get("items"):
mem_line = f"\n[dim]Memory: {len(memory.get('items', []))} prefs (phase {memory.get('phase')}, {memory.get('provenance', [{}])[0].get('source', 'local')})[/dim]"
console.print(
Panel(
f"[bold]Suggestion:[/bold]\n{llm_response.suggestion}\n\n"
f"[dim]{llm_response.explanation}\n"
f"Rationale: {llm_response.rationale}[/dim]",
f"Rationale: {llm_response.rationale}{mem_line}[/dim]",
title="LLM Response (via T04 seam)",
border_style="magenta",
padding=(1, 1),