fastapi>=0.110
uvicorn>=0.29
pydantic>=2.6
python-multipart>=0.0.9
# LLM access is a local llama-server (vendor/llamacpp/llama-server[.exe]),
# OpenAI-compatible over HTTP. The matching build for this machine is fetched
# by `python -m scripts.bootstrap_llamacpp` (CPU/Vulkan/CUDA/Metal). These are
# thin clients only — no provider SDKs, no in-process model bindings.
openai>=1.30
requests>=2.31
numpy>=1.26
# Smart BM25 (serve/semantic_search.kompas_tokenizer + Bm25Backend) is deliberately
# PURE PYTHON: a domain tokenizer (CamelCase split + ubiquitous API-affix drop) over
# an in-memory inverted index. Measured +3.3pt hit@10 and ~3x lower p50 vs the prior
# tokenizer with ZERO new deps, so bm25s/PyStemmer are intentionally NOT added (they
# would break the zero-dependency, CI-friendly lexical path). Toggle the affix filter
# with KOMPAS_TOKENIZER_FILTER=0.
# Windows-only: the local runner drives KOMPAS through pywin32 COM. Skipped on
# Linux/macOS where the runner is not used.
pywin32>=306; platform_system == "Windows"
