legco_ai_assistant/backend/app/services
Woody 73c1789698 fix: Q\&A chunking always fell back to token — LLM never called, missing API fields
Three bugs caused 'Chunk by Question' to silently produce token chunks:

1. QuestionChunkingStrategy.chunk_pages() had a broken event-loop check
   that always skipped LLM structure detection in FastAPI's async context.
   Fixed by making chunk_pages() async and removing the is_running() guard.

2. get_chunking_strategy() factory never passed an LLMClient to
   QuestionChunkingStrategy. Fixed by creating LLMClient in the factory
   with graceful fallback to regex-only when config is incomplete.

3. rag.list_documents() and list_chunks() didn't extract strategy_type
   or Q&A fields from ChromaDB metadata, so the frontend always showed
   chunking_strategy='token' and null Q&A fields. Fixed by reading
   these fields from ChromaDB and routing them through the API.

Also: TokenChunkingStrategy.chunk_pages() made async for consistency
with the question strategy; ingest router updated to await it.
Tests updated (asyncio.run() for sync tests, async mock chunk_pages).
2026-05-15 14:46:45 +08:00
..
__init__.py feat: Phase 1.1 project setup with config, database, and models 2026-04-22 16:13:52 +08:00
asr_client.py fix: Phase 2 ASR pipeline — 9 bugs resolved, Full Transcript works end-to-end 2026-05-06 18:26:17 +08:00
chunk_highlight_service.py fix: vLLM highlight batch failure — replace guided_json with response_format + add debug logging 2026-05-15 11:08:36 +08:00
embedding_client.py feat(backend): add embedding client and update LLM client 2026-04-23 13:26:43 +08:00
highlight_cache.py feat: add SQLite highlight cache service (Phase 5.4.3) 2026-04-29 09:26:20 +08:00
history_service.py feat: track highlight generation prompt, response, and timing in history (Phase 5.5) 2026-04-29 11:18:21 +08:00
llm_client.py fix: vLLM highlight batch failure — replace guided_json with response_format + add debug logging 2026-05-15 11:08:36 +08:00
llm_client_dp.py feat: inject Pydantic JSON schema into Deepseek prompt (Phase 6) 2026-05-04 15:17:24 +08:00
prompt_service.py feat: configurable SubQuestions via Step 1.2 system prompt page 2026-05-04 17:22:14 +08:00
query_decomposer.py feat: configurable SubQuestions via Step 1.2 system prompt page 2026-05-04 17:22:14 +08:00
rag.py fix: Q\&A chunking always fell back to token — LLM never called, missing API fields 2026-05-15 14:46:45 +08:00
relevance_filter.py fix: wrap filter chunks in XML tags for clearer LLM input 2026-04-30 13:59:03 +08:00
video_service.py feat: Phase 2.3 ASR proxy + full transcript and 2.4 frontend hooks 2026-05-06 13:41:24 +08:00