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:
parent
28bc15b404
commit
2f9e3272d9
2 changed files with 34 additions and 0 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue