feat: Added source_video_id, start_time, end_time, and video_filename t…

- "backend/search_service.py"
- "backend/chat_service.py"

GSD-Task: S05/T01
This commit is contained in:
jlightner 2026-04-04 11:40:59 +00:00
parent 28bc15b404
commit 2f9e3272d9
2 changed files with 34 additions and 0 deletions

View file

@ -258,6 +258,10 @@ def _build_sources(items: list[dict[str, Any]]) -> list[dict[str, str]]:
"summary": (item.get("summary", "") or "")[:200],
"section_anchor": item.get("section_anchor", ""),
"section_heading": item.get("section_heading", ""),
"source_video_id": item.get("source_video_id", ""),
"start_time": item.get("start_time"),
"end_time": item.get("end_time"),
"video_filename": item.get("video_filename", ""),
})
return sources

View file

@ -346,6 +346,10 @@ class SearchService:
"creator_slug": cr.slug,
"created_at": km.created_at.isoformat() if hasattr(km, "created_at") and km.created_at else "",
"score": 0.0,
"source_video_id": str(km.source_video_id) if km.source_video_id else "",
"start_time": km.start_time,
"end_time": km.end_time,
"video_filename": (sv.filename or "") if sv else "",
})
if scope in ("all", "creators"):
@ -1118,6 +1122,13 @@ class SearchService:
if not payload.get("creator_name") and payload.get("creator_id"):
needs_db_lookup.add(payload["creator_id"])
# Collect source_video_ids for key_moment results to batch-fetch filenames
video_ids_needed: set[str] = set()
for r in qdrant_results:
payload = r.get("payload", {})
if payload.get("type") == "key_moment" and payload.get("source_video_id"):
video_ids_needed.add(payload["source_video_id"])
# Batch fetch creators from DB
creator_map: dict[str, dict[str, str]] = {}
if needs_db_lookup:
@ -1133,6 +1144,21 @@ class SearchService:
for c in result.scalars().all():
creator_map[str(c.id)] = {"name": c.name, "slug": c.slug}
# Batch fetch video filenames for key_moment results
video_map: dict[str, str] = {}
if video_ids_needed:
valid_vids = []
for vid in video_ids_needed:
try:
valid_vids.append(uuid_mod.UUID(vid))
except (ValueError, AttributeError):
pass
if valid_vids:
v_stmt = select(SourceVideo).where(SourceVideo.id.in_(valid_vids))
v_result = await db.execute(v_stmt)
for sv in v_result.scalars().all():
video_map[str(sv.id)] = sv.filename or ""
for r in qdrant_results:
payload = r.get("payload", {})
cid = payload.get("creator_id", "")
@ -1174,6 +1200,10 @@ class SearchService:
"match_context": "",
"section_anchor": payload.get("section_anchor", "") if result_type == "technique_section" else "",
"section_heading": payload.get("section_heading", "") if result_type == "technique_section" else "",
"source_video_id": payload.get("source_video_id", "") if result_type == "key_moment" else "",
"start_time": payload.get("start_time") if result_type == "key_moment" else None,
"end_time": payload.get("end_time") if result_type == "key_moment" else None,
"video_filename": video_map.get(payload.get("source_video_id", ""), "") if result_type == "key_moment" else "",
})
return enriched