""" هم‌خوانیِ نامِ collection و کلیدِ فیلترِ Qdrant با دادهٔ موجودِ تیمِ دیگر. در Rag_backend نامِ collection این‌طور ساخته می‌شه: f"{subject.name} {subject.grade.title}".lower() و فیلترِ درس با کلیدِ payloadِ "lesson_number" (برای درس‌های متنی) یا "chapter" (برای ریاضی) انجام می‌شه. اینجا هر دو از settings قابلِ تنظیم‌ان چون اسمِ دقیقِ گرید حساسه (کاربر قبلاً با اسمِ نادرست به مشکل خورده بود). """ from django.conf import settings def rag_is_configured() -> bool: return bool( settings.OPENAI_API_KEY and settings.QDRANT_API_KEY and not settings.RAG_FORCE_MOCK ) def resolve_grade_title(grade_id, fallback: str = '') -> str: """gradeId → عنوانِ گرید همان‌طور که در نامِ collectionِ تیمِ دیگه اومده.""" overrides = getattr(settings, 'RAG_GRADE_TITLE_OVERRIDES', {}) or {} if grade_id in overrides: return str(overrides[grade_id]) if grade_id is not None: try: from content.models import Grade grade = Grade.objects.filter(pk=grade_id).only('title').first() if grade is not None: return grade.title except Exception: pass return fallback def build_collection_name(subject: str, grade_title: str) -> str: template = getattr(settings, 'RAG_COLLECTION_NAME_TEMPLATE', '{subject} {grade}') return template.format(subject=(subject or '').strip(), grade=(grade_title or '').strip()).lower() def retrieval_top_k() -> int: return int(getattr(settings, 'RAG_RETRIEVAL_TOP_K', 4))