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>
85 lines
4.5 KiB
Markdown
85 lines
4.5 KiB
Markdown
# 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 `mode` column); 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_stack` tool + `poker_stack_log` table → 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; `x` for 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; `/hands` browser.
|
||
- **Backfill** of historical sessions/villains from curated `.md` logs.
|
||
|
||
### 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-web` and `lyra-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.
|