feat: Add Hall of Fame leaderboard backed by a dedicated results table
agharsallah+1: Codex
c952d77
Add a competitive-results leaderboard as a dedicated, durable table
(leaderboard_entries) detached from the event ledger: the events log stays
the run trace, while one denormalised scoreboard row per decided run records
who won on which model. A row is written only when a run is finished, has a
winner, names a concrete winning model, and ran a competitive scenario; the
run_id links each row back to its full trace for replay.
- src/core/leaderboard_store.py: LeaderboardEntry + LeaderboardStore
(SQLAlchemy, separate table in the same database as the event store),
build_entry write gate, memoised make_leaderboard_store factory.
- src/core/leaderboard.py: model / agent / fairness / sessions / headline
aggregations over stored entries, with a per-seat fairness rollup.
- src/ui/fishbowl/session.py: record a scoreboard row on finalize.
- src/ui/fishbowl/hall_of_fame.py + app.py: the "Hall of Fame" tab —
champion headline, model podium with win-rate bars, sessions with replay,
and t…
feat: Replace llama.cpp backend with in-process transformers backend for local GPU inference
agharsallah
7d636f8
feat(roadmap): add comprehensive arena roadmap outlining sessions, winners, and leaderboard features
agharsallah
7066a96
docs: add as-built Fishbowl UI architecture page
agharsallah+1: Codex
0ce95fa
Document the shipped Fishbowl Gradio UI to match the code, per the
"document as we build" rule: a new architecture/fishbowl-ui.md companion
covering the two-tab theater (Lab/Show), the gr.HTML + gr.Timer render
loop over view_model_at, the hybrid scrub-vs-play transport, the
say-vs-think MindCard and "Read their minds" toggle, mood->avatar
mapping, the three layouts, FishbowlSession, the view_model_at snapshot
contract, and the engine-never-imports-UI modularity invariant.
Flip the plan-of-record status banner to reflect Phases 0-3 shipped
(Phase 4 still pending), mark Phase 2 (The Show) and Phase 3 (The Lab)
as shipped, add the promised "Realized" banner, and link the new page
from the README architecture map.
Co-Authored-By: Codex <codex@openai.com>
feat: add Fishbowl UI presenter layer and say-vs-think engine support
agharsallah+1: Codex
ade9df5
Implements the data foundation (Phases 0-1 of the Fishbowl UI plan) the
Gradio frontend will bind to — all additive, engine left untouched, modularity
preserved (the engine never imports the UI).
- src/ui/fishbowl/: derive_cast_state (per-agent {said,thought,mood} ledger
view), adapter (engine -> say/narrate/poke/verdict + hue/tier/voice/mood with
graceful fallbacks), view_model_at (pure prefix-replay snapshot at any scrubbed
step, with real tokens/rounds from the governor)
- DeterministicTinyModel is now schema-aware, gated on output_extra_fields: it
synthesizes thought/mood offline so the mind-reader works with no API key, while
plain agents stay byte-identical
- AgentManifest gains optional hue/archetype; Conductor.inject_user_event gains an
optional label; cast manifests declare output_extra_fields + presentation metadata
- tests/test_fishbowl.py (15 tests, incl. an offline proof the ledger carries
thought+mood); full suite 277 passed, ruff clean
- docs: manifest-spe…
feat: add Fishbowl UI ADR and implementation plan for Gradio presenter layer
agharsallah
a13e4e8
feat: update model endpoint URLs and enhance documentation with mermaid diagrams
agharsallah
2a8eab2
feat: add architecture review and scenario authoring documentation
agharsallah
49aa5c4
feat: update setup instructions and dependencies for uv integration
agharsallah
39e9569
Refactor code structure for improved readability and maintainability
Five new engine modules (zero breaking changes to existing tests):
Manifest system (src/core/manifest.py):
- AgentManifest: full declarative spec — identity, communication contract,
scheduling, model profile, memory config, capability grants
- ModelProfile: tiny|fast|balanced|strong → resolved to concrete model name
via env vars (MODEL_TINY / MODEL_FAST / MODEL_BALANCED / MODEL_STRONG)
- MemoryConfig: window, use_salience, salience_top_k, reflection_threshold
- ScheduleConfig: tick_every, max_consecutive
Structured output (src/core/structured.py):
- json_instruction(): appends JSON constraint block to every agent prompt
- parse_agent_output(): three-tier parser (clean JSON → embedded JSON → fallback wrap)
- _raw_fallback flag for compliance rate tracking
- Works with any model on any endpoint — constraint is in the prompt, not tool-use
Salience-scored memory (src/core/memory.py):
- SalienceMemory: ranks visible events by relevance×recency×importance score
…