legco_ai_assistant/backend/app/services
Woody 284028bb1f feat: Phase 3.1 + 3.2 — YouTube config infra and URL extraction
Phase 3.1 — Configuration & Infrastructure:
- Add youtube_proxy_enabled, yt_dlp_timeout, yt_dlp_cache_ttl config fields
- Add yt-dlp and hls.js dependencies
- Create models/youtube.py (request/response schemas)
- Create service stubs (youtube_service, hls_proxy)
- Create router stub and register in main.py
- 11 config tests

Phase 3.2 — YouTube URL Extraction:
- yt-dlp wrapper with async extraction (run_in_executor)
- Format selection: ≤480p video-only + highest-bitrate audio (VOD)
- Combined format fallback: same URL for live streams
- In-memory URL cache: 5min TTL live, 30min VOD
- lru_cache singleton service for cache persistence
- Error handling: DownloadError → 200 with error field
- 18 extract tests, 82/82 total pass (zero regressions)

Real-URL verified: VOD (5bF3tkO5jAA) 24 formats, Live (fN9uYWCjQaw) 6 HLS
2026-05-09 15:53:04 +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 feat: track highlight generation prompt, response, and timing in history (Phase 5.5) 2026-04-29 11:18:21 +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
hls_proxy.py feat: Phase 3.1 + 3.2 — YouTube config infra and URL extraction 2026-05-09 15:53:04 +08:00
llm_client.py fix: vLLM structured output missing thinking-control extra_body 2026-04-29 21:01:10 +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 feat: structured LLM output for decompose + citation fuzzy matching (Phase 5) 2026-04-28 15:39:17 +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
youtube_service.py feat: Phase 3.1 + 3.2 — YouTube config infra and URL extraction 2026-05-09 15:53:04 +08:00