public user IDs, plans priced by tutor cost, age-based tutor tone, self-service account deletion
- profile publicId ("User482917", accounts/public_id.py); admin shows and searches it
- plans API reports aiDailyQuota per plan and freeAiDailyQuota; migration 0007 sets the
temporary prices (monthly 99,000 / yearly 990,000 toman, 5 tutor questions a day) unless
an admin already edited the yearly plan
- tutor tone follows the learner's age (18+ gets an adult tone at any grade); notation
still follows the grade's book; answer cache keyed by tone (prompt tutor-v12-age-tone)
- POST /api/user/delete: phone users confirm with a fresh SMS code (same checks as login,
now shared in verify_phone_otp), guests type "حذف"; payment records are kept, demo
accounts refused
- delete_users --skip-paid
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -138,3 +138,23 @@ class GuardrailThroughTheApiTests(TestCase):
|
||||
self.assertEqual(response.json()['answer'], guardrails.REFUSAL)
|
||||
self.assertEqual(response.json()['usedChunks'], [])
|
||||
self.assertEqual(Message.objects.get(role='assistant').text, guardrails.REFUSAL)
|
||||
|
||||
|
||||
class AgeToneTests(SimpleTestCase):
|
||||
"""لحن از سن، محتوا از پایه: بزرگسالی که سومِ دبستان برداشته لحنِ کودکانه نمیگیرد."""
|
||||
|
||||
def test_adult_in_a_primary_grade_gets_the_adult_tone_but_the_books_notation(self):
|
||||
from .services.generation import _NUMBERS, _TONE
|
||||
|
||||
prompt = system_prompt('سوم', age=40)
|
||||
self.assertIn(_TONE['adult'], prompt)
|
||||
self.assertNotIn(_TONE['primary'], prompt)
|
||||
self.assertIn(_NUMBERS['primary'], prompt)
|
||||
self.assertIn('بزرگسال', prompt.split('\n')[0])
|
||||
|
||||
def test_child_or_unknown_age_keeps_the_grade_tone(self):
|
||||
from .services.generation import _TONE
|
||||
|
||||
self.assertIn(_TONE['primary'], system_prompt('سوم', age=8))
|
||||
self.assertIn(_TONE['primary'], system_prompt('سوم'))
|
||||
self.assertIn(_TONE['upper'], system_prompt('دوازدهم', age=17))
|
||||
|
||||
Reference in New Issue
Block a user