pagepiper/app/api
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
..
__init__.py feat: add database schema and migration runner 2026-05-04 17:10:38 -07:00
chat.py feat(api): add retriever, synthesizer, and chat endpoint (BSL — BYOK gate) 2026-05-04 17:47:10 -07:00
ingest.py feat(api): add library CRUD endpoints and FastAPI factory 2026-05-04 17:24:50 -07:00
library.py fix(api): lazy config reads, log ingest exceptions, suppress migrations in tests 2026-05-04 17:28:23 -07:00
search.py fix(search): defensive _get_bm25 guard, null-safe text_snippet 2026-05-04 17:43:16 -07:00