YOKPilot3 / config.py
mfirat007's picture
Upload 32 files
0a6fd56 verified
Raw
History Blame Contribute Delete
4.2 kB
import os
from pathlib import Path
APP_TITLE = "MitrAnlil Yükseköğretim Mevzuatı AI Asistanı"
APP_VERSION = "MitrAnlil Normative Runtime v1.3"
OFFICIAL_SOURCE_URL = (
"https://www.mevzuat.gov.tr/"
)
ROOT_DIR = Path(__file__).resolve().parent
DATA_DIR = Path(os.getenv("MITRANLIL_DATA_DIR", str(ROOT_DIR / "data"))).resolve()
SOURCE_DIR = DATA_DIR / "source"
NORMALIZED_DIR = DATA_DIR / "normalized"
STRUCTURAL_DIR = DATA_DIR / "structural"
MCKF_DIR = DATA_DIR / "mckf"
FEEDBACK_DIR = DATA_DIR / "feedback"
ANALYTICS_DIR = DATA_DIR / "analytics"
ADMIN_DIR = DATA_DIR / "admin"
TEST_DATA_DIR = DATA_DIR / "tests"
REGISTRY_DIR = DATA_DIR / "registry"
ONBOARDING_DIR = DATA_DIR / "onboarding"
INSTITUTION_REGISTRY_PATH = ONBOARDING_DIR / "institutions.json"
SUBMISSIONS_DIR = ONBOARDING_DIR / "submissions"
CANDIDATE_BUILDS_DIR = ONBOARDING_DIR / "builds"
PUBLISH_BACKUPS_DIR = ONBOARDING_DIR / "backups"
SOURCE_TEXT_PATH = SOURCE_DIR / "2547_clean.txt"
LEGAL_DOCUMENT_REGISTRY_PATH = REGISTRY_DIR / "legal_documents.json"
DECISION_CONTRACT_REGISTRY_PATH = REGISTRY_DIR / "normative_decision_contracts.json"
MCKF_ONTOLOGY_PATH = MCKF_DIR / "2547_mckf_ontology.json"
MCKF_SEMANTIC_FRAMES_PATH = MCKF_DIR / "2547_semantic_frames.jsonl"
MCKF_RETRIEVAL_INDEX_PATH = MCKF_DIR / "2547_retrieval_index.json"
CORPUS_MCKF_ONTOLOGY_PATH = MCKF_DIR / "corpus_mckf_ontology.json"
CORPUS_SEMANTIC_FRAMES_PATH = MCKF_DIR / "corpus_semantic_frames.jsonl"
CORPUS_RETRIEVAL_INDEX_PATH = MCKF_DIR / "corpus_retrieval_index.json"
CROSS_DOCUMENT_EDGES_PATH = MCKF_DIR / "cross_document_edges.jsonl"
RDFOX_PILOT_MANIFEST_PATH = MCKF_DIR / "rdfox_pilot_manifest.json"
RDFOX_PILOT_TRIPLES_PATH = MCKF_DIR / "rdfox_pilot_triples.nt"
RDFOX_PILOT_RULES_PATH = MCKF_DIR / "rdfox_pilot_rules.dlog"
MCKF_SHAPES_PATH = MCKF_DIR / "mckf_shapes.ttl"
MCKF_VALIDATION_REPORT_PATH = MCKF_DIR / "validation_report.json"
RUNTIME_BUILD_MANIFEST_PATH = MCKF_DIR / "runtime_build_manifest.json"
FEEDBACK_LOG_PATH = Path(os.getenv("FEEDBACK_LOG_PATH", str(FEEDBACK_DIR / "dialogue_feedback.jsonl")))
USAGE_LOG_PATH = Path(os.getenv("USAGE_LOG_PATH", str(ANALYTICS_DIR / "usage_events.jsonl")))
CLARIFICATION_LOG_PATH = Path(os.getenv("CLARIFICATION_LOG_PATH", str(ANALYTICS_DIR / "clarification_events.jsonl")))
ADMIN_EXAMPLES_PATH = Path(os.getenv("ADMIN_EXAMPLES_PATH", str(ADMIN_DIR / "example_questions.json")))
LLM_PROVIDER = os.getenv("LLM_PROVIDER", "auto").strip().lower()
HF_MODEL = os.getenv("HF_MODEL") or os.getenv("GEN_MODEL", "Qwen/Qwen2.5-7B-Instruct")
HF_TOKEN = os.getenv("HF_TOKEN") or os.getenv("HUGGINGFACEHUB_API_TOKEN")
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
# NOT: llama-3.3-70b-versatile, Groq tarafından 16 Ağustos 2026'da tamamen
# kapatılıyor (bkz. https://console.groq.com/docs/deprecations). Groq'un
# resmi önerisi openai/gpt-oss-120b veya qwen/qwen3.6-27b. gpt-oss-120b'yi
# seçtik: daha büyük parametre sayısı + reasoning modu, katı JSON claim
# şemamız (proof_bundle.py) için daha güvenilir talimat takibi sağlıyor,
# ayrıca Groq'ta token başına daha ucuz ve daha hızlı (bkz. sohbet
# geçmişindeki fiyat/hız karşılaştırması). Free tier'da TPM sınırı
# llama-3.3-70b-versatile'a göre daha düşük (8K vs 12K) — demo öncesi
# Groq konsolünden hesap tier'ını ve gerçek istek hacmini test et.
GROQ_MODEL = os.getenv("GROQ_MODEL", "openai/gpt-oss-120b")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
# NOT: proof_bundle.py'deki synthesis claim mekanizması ve llm_claim_prompt
# içindeki few-shot örnekler çıktı uzunluğunu artırdı; 1000 tokenlık eski
# sınır, çok maddeli sentez cevaplarında JSON'un ortadan kesilip parse
# hatası vermesine yol açabilirdi. 1500'e çıkarıldı — bu, girdi promptunun
# değil yalnızca modelin ÜRETTİĞİ çıktının üst sınırıdır.
MAX_NEW_TOKENS = int(os.getenv("MAX_NEW_TOKENS", "1500"))
MAX_CONTEXT_CHARS = int(os.getenv("MAX_CONTEXT_CHARS", "3000"))
CHATBOT_HEIGHT = int(os.getenv("CHATBOT_HEIGHT", "660"))
EVAL_CONTEXT_MAX_CHARS = int(os.getenv("EVAL_CONTEXT_MAX_CHARS", "6000"))