dfb6425395
Lyra now switches register based on what she's doing at the table instead of
being a wishy-washy companion mid-session.
Modes (lyra/modes.py):
- Talk (default companion) + Cash (live cash copilot); a mode = prompt card +
tool allow-list. Tool gating via tools.specs(allow=).
- Two-register Cash voice: act-first one-line logging when fed facts; full warm
companion voice for strategy / tilt / mental game.
- mode persisted per chat session (new sessions.mode column); auto-switch into
Cash when start_session fires; UI forces cloud backend in Cash (tools only
fire there).
Stack tracking + HUD:
- log_stack tool + poker_stack_log table; live net while sitting (stack - buy-in).
- poker.hud() bundle; /session HUD page (stack sparkline, hands, villains, notes,
stats) polling /session/data every 5s; Talk/Cash switcher + Session nav.
Endpoints: /session, /session/data, GET/POST /sessions/{id}/mode, /modes.
tests/test_modes.py (gating, mode roundtrip, stack/HUD); 36 tests green. v0.3.0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
Changelog
0.3.0 — session modes + live HUD
Lyra stopped being a wishy-washy companion during live poker. She now switches register based on what she's actually doing at the table.
Conversation modes
- Two modes — 💬 Talk (the companion, default) and ♠ Cash (live cash
copilot). A mode bundles a prompt card + a tool allow-list (
lyra/modes.py). - Two-register Cash voice — quiet, act-first logging when Brian feeds facts (stack, hand, read → logged in one line, no narration); full warm companion voice when he asks for strategy or signals tilt/card-dead/steaming. Mental game and strategy never get clipped.
- Tool gating by mode — Talk offers journaling + read-only poker lookups;
Cash unlocks the full live toolset.
tools.specs(allow=…)does the filtering. - Auto-switch — opening a session (
start_session) flips the chat into Cash mode automatically; the UI badge/HUD follow. Manual switch overrides anytime. - Mode persists per chat session (new
modecolumn); Cash mode forces the cloud backend, since tools only fire there.
Session HUD
- Live HUD at
/session(bottom-nav tab on mobile, header link on desktop) — polls every 5s: header (venue/stakes/elapsed/live net), stack with stack-over-time sparkline, hands this session (tap → replay), villains seen, her notes, and session stats. - Stack tracking — new
log_stacktool +poker_stack_logtable → current stack, live net while still sitting (stack − buy-in), and the sparkline series.
Next
- Strategy RAG (poker books/notes) plugs into Cash's coaching register.
0.2.0 — first working system
The leap from "chat + memory baseline" to a working, persistent companion with a real poker copilot. Highlights:
Self & inner life
- Autonomy Core — evolving self-state (mood, valence/energy/confidence/curiosity, self-narrative, relationship), injected into every turn.
- Dream cycle — unattended loop driven by four drives (continuity, coherence, curiosity, stability); consolidates memory and reflects on its own. Runs as a systemd service on the MI50 (free/local).
- Two-step metacognitive reflection — draft → examine own draft for flattery / sycophantic drift / repetition → revise; what she catches is stored as metacognition.
- Time awareness — perceives the current moment, time since Brian last spoke, and time since her own last reflection.
- Permanent journal — every reflection + a deliberate "knowing" journal note kept forever (the capped lists are just a working window).
- Accurate self-model — knows her own architecture (memory tiers, dream cycle); won't recite stale specs or confabulate how she works.
- Anti-repetition — idle reflections draw varied grist (resurfaced memories / "wander" prompts) and are permitted non-Brian interiority.
Memory & consolidation
- Tiered memory: exchanges → session gists → profile → monthly eras → narrative.
- Map-reduce consolidation; gists dated by the real conversation, not the run.
Poker copilot
- Structured session / hand / villain tracking + stats ($/hr by stake/venue/game).
- Hand-history reconstruction from rough shorthand → replayable table viewer with
live stacks, progressive board, step-through;
xfor unknown cards (never invented). - Auto-accumulating villain dossiers + player lookup; stats emerge with sample size.
- Deterministic equity tool (
analyze_spot, treys) — exact equity / made hands / outs; mandated over LLM eyeballing. - Session recap generation (
.md, Brian's format) + export;/handsbrowser. - Backfill of historical sessions/villains from curated
.mdlogs.
Tools & web
- Tool-calling in chat (cloud): poker tools,
journal_write,note. - Web UI: Markdown chat, cloud model selector, live /logs, /self (read her mind), /journal, /hands + /hand/{id} replayer, /recap/{id}.
- 👍/👎 rating system — feedback on replies and thoughts stored as
(context, content, rating);/ratings/export(JSONL) seeds future fine-tuning. - RTO black-and-orange theme across all pages.
Ops
- Role-based backends (cloud / MI50 / local Ollama); MI50 OpenAI-compatible backend.
- systemd user services for
lyra-webandlyra-dream, with bounded stop timeouts. - SQLite WAL + busy-timeout so the dream process and web server coexist.
0.1.0 — scaffold
- uv project, SQLite memory with cosine recall, LLM router (local/cloud), persona + chat loop, web UI baseline, ChatGPT history import.