# ── Required ────────────────────────────────────────────── OPENAI_API_KEY=sk-your-openai-key-here # ── Path overrides (optional, all have defaults) ────────── RAG_PERSIST_DIR=db/chroma_db RAG_DOCS_DIR=docs RAG_METRICS_DIR=metrics RAG_COLLECTION=telecom_rag # ── Model selection ─────────────────────────────────────── EMBED_MODEL=text-embedding-3-small CHAT_MODEL=gpt-4o CHAT_TEMPERATURE=0 # ── Retrieval tuning ────────────────────────────────────── RETRIEVAL_K=8 # Candidates fetched from ChromaDB SCORE_THRESHOLD=0.35 # Min cosine similarity (0‒1); raise for precision MAX_CONTEXT_DOCS=5 # Max chunks sent to the LLM per query # ── Token optimisation ──────────────────────────────────── MAX_HISTORY_TURNS=6 # Compress chat history after this many Q/A pairs HIGHLIGHT_SENTENCES=5 # Sentences extracted per chunk via keyword overlap MAX_CHUNK_CHARS=1200 # Hard cap on each chunk after highlighting