draw a diagram in tutor answers: validated JSON from the model, rendered by the app; add the fourth companion tedi

The model ends a shape question with <diagram>{json}</diagram>; rag/services/diagram.py
splits it off before mathtext, validates it against a whitelist and stores it on
Message.diagram (ai_tutor.0006). It reaches the app in the SSE done event and in
conversation history. Prompt tutor-v6-diagrams; a hint next to the question (shape
words only) raised gpt-4.1-mini from 3/12 to 12/12 diagrams, 0/8 on arithmetic.

progress.0005 adds tedi (600 xp) to the companion catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-28 17:44:44 +03:30
parent 74c3ee5e86
commit 33d8f43d74
10 changed files with 581 additions and 9 deletions

View File

@@ -388,6 +388,22 @@ preferred setup, because there is then no key to leak. **Never let the server ru
`django-insecure-…` fallback from `config/settings.py`: that string is committed here, so
anyone who can read this repo can forge a token for any user.**
## وضعیت ۲۰۲۶-۰۹-۲۸ — شکل در دستیار، آزمونِ جزیره، همراهِ چهارم (هنوز دیپلوی نشده)
- **شکل در جوابِ دستیار:** مدل در انتهای جواب یک بلوکِ `<diagram>{JSON}</diagram>` می‌نویسد؛
`rag/services/diagram.py` آن را پیش از `mathtext` جدا و سخت‌گیرانه اعتبارسنجی می‌کند، روی
`Message.diagram` (migration `ai_tutor.0006`) می‌نشیند و در `done`ِ SSE و تاریخچه می‌آید.
فرانت (`components/Diagram.tsx`) خودش SVG می‌کشد؛ HTML/SVGِ مدل هرگز وارد صفحه نمی‌شود.
پرامپت `tutor-v6-diagrams`. سنجش با gpt-4.1-mini: قاعده فقط در پرامپتِ سیستم ۳ از ۱۲
شکل می‌داد؛ با یادآوریِ کنارِ سوال (`hint_for`، بر اساسِ کلمه‌های شکل‌دار) ۱۲ از ۱۲، و ۰ از ۸
برای سوالِ بی‌شکل. فقط ~۶۰ فراخوانی روی ۸ سوال سنجیده شده.
- **فرانت آزمونِ جزیره را بازی می‌کند** (`/nodes/{id}/quiz`): هر درس فقط یک سوال دارد و
درس‌به‌درس یعنی ~۱۱ دور برای هر جزیره. خانه حالا خودِ مسیر است با دکمه‌ی «شروع».
- **همراهِ چهارم «تدی»** (شکلکِ `mobile-preview/mascot-pack`، شش حالت) با migration
`progress.0005` (slugِ `tedi`، ۶۰۰ امتیاز؛ اسم و امتیاز تصمیمِ محصولی).
- محلی: `PUBLIC_BASE_URL` پیش‌فرضش دامنه‌ی اصلی است، پس «پرداخت» روی لپ‌تاپ به سرورِ واقعی
می‌رود و ۴۰۴ می‌گیرد؛ باگِ سرور نیست. گزارش: `~/Desktop/گزارشات Tadrisino/گزارش-۲۵/`.
## وضعیت ۲۰۲۶-۰۹-۲۷ — دامنه‌ی تازه و فرانتِ تازه، هر دو زنده
- ✅ **پیامکِ کدِ ورود واقعاً می‌رسد** (۲۱:۴۴). اسمِ الگو را سینیور داد: `SMSVerify`، با همان سه