| # Architecture — Plane Mode Scholar |
|
|
| ## Agent pipeline (Best Agent) |
|
|
| ``` |
| User message |
| → classify_intent |
| → retrieve_chunks (vector search on pack) |
| → retrieve_memories (hybrid filter + rerank) |
| → pack_prompt (budget: chunks + memories + working memory) |
| → generate (Qwen3.5-9B, streaming) |
| → extract_candidates (regex + LLM JSON) |
| → persist / consolidate / index_memory |
| ``` |
|
|
| ## Memory types |
|
|
| | Type | Written when | |
| |------|----------------| |
| | misconception | Quiz miss, teach-back gap, user states confusion | |
| | review_item | SRS scheduler after miss or gap | |
| | session_summary | End session | |
| | study_goal / deadline | Pack create or chat extraction | |
| | user_preference | Chat patterns | |
|
|
| ## Spaced repetition |
|
|
| SM-2 lite in `memory/scheduler.py`. First review is **due immediately** after a quiz miss so the Home dashboard and recall banner work within the same demo session. |
|
|
| ## Storage |
|
|
| - SQLite: packs, sessions, turns, memories, logs |
| - Vector stores: `pack_{id}` for chunks, `memory_{pack_id}` for memories |
| - Persistent disk on HF Space: `/data/plane_mode_scholar` |
|
|
| ## Judge automation |
|
|
| - `docs/readiness_cases.jsonl` — 5 scripted scenarios |
| - `scripts/readiness_check.py` — automated SRS + trace shape checks |
| - `tests/test_scheduler.py` — unit tests for due-now scheduling |
|
|