pagepiper/app
pyr0ball 0e493ab560 feat(api): add retriever, synthesizer, and chat endpoint (BSL — BYOK gate)
- app/services/retriever.py: hybrid BM25 + semantic Retriever with BM25-only fallback when llm=None
- app/services/synthesizer.py: LLM answer synthesis with citation assembly over retrieved chunks
- app/api/chat.py: POST /api/chat endpoint with 402 gate when PAGEPIPER_OLLAMA_URL is unset
- tests/test_synthesizer.py: 3 TDD unit tests (mocked LLM, context building, system prompt)
- tests/test_chat_api.py: 2 integration tests (402 without Ollama, 200 with mocked retriever+LLM)
2026-05-04 17:47:10 -07:00
..
api feat(api): add retriever, synthesizer, and chat endpoint (BSL — BYOK gate) 2026-05-04 17:47:10 -07:00
services feat(api): add retriever, synthesizer, and chat endpoint (BSL — BYOK gate) 2026-05-04 17:47:10 -07:00
__init__.py feat: add database schema and migration runner 2026-05-04 17:10:38 -07:00
config.py fix(config): handle /v1 suffix in PAGEPIPER_OLLAMA_URL; add DATA_DIR mkdir guard 2026-05-04 17:13:50 -07:00
deps.py feat(api): add library CRUD endpoints and FastAPI factory 2026-05-04 17:24:50 -07:00
main.py feat(api): add library CRUD endpoints and FastAPI factory 2026-05-04 17:24:50 -07:00