# QModel 8.5 Configuration Template # ================================== # Copy this to .env and update values for your environment # LLM Backend Selection # Options: "gguf" (local GGUF file), "ollama", "hf" (HuggingFace), or "lmstudio" LLM_BACKEND=gguf # ───────────────────────────────────────────────────────────────────── # GGUF BACKEND (if LLM_BACKEND=gguf) — self-contained, no external daemon # ───────────────────────────────────────────────────────────────────── GGUF_MODEL_PATH=./models/Qwen2.5-14B-Instruct-Q8_0.gguf GGUF_N_CTX=8192 # Context window size GGUF_N_GPU_LAYERS=-1 # -1 = offload all layers to GPU (Metal on Mac) # ───────────────────────────────────────────────────────────────────── # OLLAMA BACKEND (if LLM_BACKEND=ollama) # ───────────────────────────────────────────────────────────────────── # OLLAMA_HOST=http://localhost:11434 # OLLAMA_MODEL=qwen2.5:14b # Available models: llama3.1, mistral, neural-chat, openhermes # ───────────────────────────────────────────────────────────────────── # HUGGINGFACE BACKEND (if LLM_BACKEND=hf) # ───────────────────────────────────────────────────────────────────── # HF_MODEL_NAME=Qwen/Qwen2.5-14B-Instruct # HF_DEVICE=auto # Options: auto, cuda, cpu # HF_MAX_NEW_TOKENS=2048 # Popular models: # - Qwen/Qwen2.5-14B-Instruct (recommended) # ───────────────────────────────────────────────────────────────────── # LM STUDIO BACKEND (if LLM_BACKEND=lmstudio) # ───────────────────────────────────────────────────────────────────── # LMSTUDIO_URL=http://localhost:1234 # LMSTUDIO_MODEL=qwen2.5-14b-instruct # Model loaded in LM Studio # ───────────────────────────────────────────────────────────────────── # EMBEDDING MODEL (shared by all backends) # ───────────────────────────────────────────────────────────────────── EMBED_MODEL=intfloat/multilingual-e5-large # ───────────────────────────────────────────────────────────────────── # DATA FILES # ───────────────────────────────────────────────────────────────────── FAISS_INDEX=QModel.index METADATA_FILE=metadata.json # ───────────────────────────────────────────────────────────────────── # RETRIEVAL SETTINGS # ───────────────────────────────────────────────────────────────────── TOP_K_SEARCH=20 # Candidate pool size TOP_K_RETURN=5 # Final results returned to user # ───────────────────────────────────────────────────────────────────── # GENERATION SETTINGS # ───────────────────────────────────────────────────────────────────── TEMPERATURE=0.2 # 0.0=deterministic, 1.0=creative MAX_TOKENS=2048 # Max output length # ───────────────────────────────────────────────────────────────────── # SAFETY & QUALITY # ───────────────────────────────────────────────────────────────────── # Confidence gate: skip the LLM and return "not found" unless retrieval found # something genuinely relevant (direct reference / verbatim text match, or): # - USE_RERANKER=true → best cross-encoder relevance (0-1) >= RERANK_MIN_SCORE # - USE_RERANKER=false → best dense cosine similarity >= DENSE_MIN_SCORE # (multilingual-e5-large scale; recalibrate if EMBED_MODEL changes) # Calibrate with: python -m eval.run_eval --show-failures # On the golden set the reranker gate refuses 92% of off-topic questions vs 36% for # the dense gate, for ~1 s per answer; set false only where the model can't be loaded. USE_RERANKER=true # Rewrite queries without the LLM (regex intent + thesaurus terms), ~2 s faster per # question. Follow-ups with chat history always use the LLM rewrite. FAST_QUERY_REWRITE=true RERANK_MIN_SCORE=0.05 DENSE_MIN_SCORE=0.80 # Hadith boost: Score bonus when intent=hadith # Prevents Quran verses from outranking relevant Hadiths HADITH_BOOST=0.08 # Quran boost: Score bonus when intent=tafsir/quran # Prevents Hadiths from outranking relevant Quran verses QURAN_BOOST=0.12 # ───────────────────────────────────────────────────────────────────── # RANKING # ───────────────────────────────────────────────────────────────────── RERANK_ALPHA=0.6 # 60% dense (embedding), 40% sparse (BM25) # ───────────────────────────────────────────────────────────────────── # CACHING # ───────────────────────────────────────────────────────────────────── CACHE_SIZE=512 # Max cache entries CACHE_TTL=3600 # Cache expiry in seconds # ───────────────────────────────────────────────────────────────────── # SECURITY # ───────────────────────────────────────────────────────────────────── ALLOWED_ORIGINS=* # CORS origins (restrict in production: origin1.com,origin2.com) # ───────────────────────────────────────────────────────────────────── # USAGE EXAMPLES # ───────────────────────────────────────────────────────────────────── # # Self-contained (GGUF, e.g. HF Spaces): # LLM_BACKEND=gguf # GGUF_MODEL_PATH=./models/Qwen2.5-14B-Instruct-Q8_0.gguf # # Development (Ollama): # LLM_BACKEND=ollama # OLLAMA_HOST=http://localhost:11434 # OLLAMA_MODEL=qwen2.5:14b # # Production (HuggingFace GPU): # LLM_BACKEND=hf # HF_MODEL_NAME=Qwen/Qwen2.5-14B-Instruct # HF_DEVICE=cuda # # Production (HuggingFace CPU): # LLM_BACKEND=hf # HF_MODEL_NAME=Qwen/Qwen2.5-14B-Instruct # HF_DEVICE=cpu