chess-tutor / src /chess_tutor /web /sample_payload.py
github-actions[bot]
deploy prod from 06dbd16a01ddcfe02b2d936c681e3e4eaa9b141f
8e756fd
Raw
History Blame Contribute Delete
2.05 kB
"""Sample web payload for UI smoke tests without running inference."""
from __future__ import annotations
from typing import Any
from chess_tutor.puzzles.puzzle_record import load_puzzle_records
from chess_tutor.web.sections import ui_layout_config
from chess_tutor.web.version import version_info
def build_sample_web_payload() -> dict[str, Any]:
"""Return a minimal inference-shaped payload with one playable puzzle ladder."""
record = load_puzzle_records(["00008"]).get("00008")
if record is None:
raise RuntimeError("Puzzle 00008 is unavailable (install local puzzle shards).")
series = {
"title": "Sample tactics",
"principle_category": "tactics",
"themes": ["crushing"],
"rating_min": 1800,
"rating_max": 1900,
"lichess_study_url": None,
"puzzles": [
{
"index": 1,
"id": record.puzzle_id,
"rating": 1834,
"theme": "crushing",
"fen": record.fen,
"solution_uci": list(record.solution_uci),
"lichess_url": f"https://lichess.org/training/{record.puzzle_id}",
},
],
}
return {
"ui_layout": ui_layout_config(),
"header": {
"username": "sample-player",
"site": "lichess",
"player_elo": 1500,
"native_player_elo": None,
"elo_bracket": "1500-1599",
"n_games": 100,
"policy": "teacher",
},
"rating_outlook": ["Listed (site): 1500 Elo [1500-1599]"],
"narrative_sections": [
{
"title": "Sample coaching report",
"body": "Long narrative content above the puzzle section.\n" * 20,
}
],
"narrative_markdown": "Sample coaching report",
"opening_cards": [],
"puzzle_series": [series],
"lichess_study_url": None,
"lichess_study_error": None,
"version": version_info(),
}