feat: add compose deliverable, scenario definitions, eval stub, and CI

This commit is contained in:
Justin Visser 2026-08-09 20:59:58 +02:00
parent ef9e102b05
commit 7c3934daee
8 changed files with 148 additions and 0 deletions

0
eval/fixtures/.gitkeep Normal file
View file

23
eval/run_eval.py Normal file
View file

@ -0,0 +1,23 @@
"""Eval harness entry point.
Fixture mode (default, key-free): byte-snapshots of deterministic pipeline
stages against recorded cassettes. Live mode: property assertions only
LLM output is constrained, not pinned.
"""
from pathlib import Path
import yaml
SCENARIOS_FILE = Path(__file__).parent / "scenarios.yaml"
def load_scenarios() -> dict:
"""Load the shared scenario definitions."""
with SCENARIOS_FILE.open() as handle:
return yaml.safe_load(handle)
if __name__ == "__main__":
scenarios = load_scenarios()
print(f"{len(scenarios['scenarios'])} scenarios, {len(scenarios['refinements'])} refinements")

45
eval/scenarios.yaml Normal file
View file

@ -0,0 +1,45 @@
# One source of truth for three consumers: golden eval queries, demo fixture
# keys, and UI suggestion chips. Every chip therefore has a fixture, and every
# fixture has a golden query.
scenarios:
- key: focus-coding
chip: "Focus while coding"
query: "something calm for while I'm programming, but not boring"
facets: { activity: coding, familiarity: mixed }
- key: workout-energy
chip: "Energy for the gym"
query: "high-energy music for a heavy workout"
facets: { activity: workout, mood: energetic }
- key: dutch-chill
chip: "Dutch-language & relaxed"
query: "relaxed Dutch-language music for lounging on the couch"
facets: { language: nl, mood: relaxed }
- key: nineties-nostalgia
chip: "90s nostalgia"
query: "take me back to the nineties"
facets: { era: "1990s" }
- key: discover-new
chip: "Surprise me with something new"
query: "something I don't know yet but will probably like"
facets: { familiarity: new } # asserts known-track exclusion
- key: rainy-sunday
chip: "Rainy Sunday"
query: "melancholic but warm, for a rainy Sunday morning"
facets: { mood: melancholic }
- key: dinner-background
chip: "Background for dinner"
query: "something jazzy for during dinner, not too present"
facets: { mood: understated }
# Multi-turn refinement goldens: reuse the grounded pool, no re-grounding.
refinements:
- key: focus-coding-refine
after: focus-coding
query: "a bit more electronic, and drop number 3"

0
eval/snapshots/.gitkeep Normal file
View file