# Document processing chunk_size: 600 overlap: 100 chunk_tokenizer: gpt2 # File paths data_dir: data/documents output_dir: data/embeddings # Logging log_level: INFO # Phase 3: cross-encoder reranking reranker: model: cross-encoder/ms-marco-MiniLM-L-6-v2 batch_size: 32 score_threshold: 0.1 top_k: 5 # Phase 3: context window (token counting for LLM prompt) context: max_tokens: 4000 tokenizer: gpt2 # Phase 3: RAG generation (Ollama) generation: model: qwen2.5-coder:14b stream: false cache_ttl: 300 # Phase 4: multi-provider LLM routing llm: default_provider: ollama default_model_by_provider: ollama: qwen2.5:7b openai: gpt-4o-mini anthropic: claude-sonnet-4-6 gemini: gemini-2.5-flash allowed_models_by_provider: ollama: - qwen2.5:7b - deepseek-r1:8b - qwen2.5-coder:14b openai: - gpt-4o-mini - gpt-4.1-mini anthropic: - claude-sonnet-4-6 - claude-haiku-4-5 gemini: - gemini-2.5-flash - gemini-2.5-pro request_timeout_seconds: 60 # Phase 4: API production controls api: auth_enabled: true api_keys: - dev-key-1 rate_limit_per_minute: 120 redis_rate_limit_enabled: true redis_url: redis://localhost:6379/0 # Evaluation settings # Inline scoring adds ~200 ms per response (NLI model warm after first call). # Set DOC_PROFILE=demo to use a lighter profile without inline NLI scoring. evaluation: inline_enabled: true nli_model: cross-encoder/nli-deberta-v3-small