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],
|
"summary": (item.get("summary", "") or "")[:200],
|
||||||
"section_anchor": item.get("section_anchor", ""),
|
"section_anchor": item.get("section_anchor", ""),
|
||||||
"section_heading": item.get("section_heading", ""),
|
"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
|
return sources
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -346,6 +346,10 @@ class SearchService:
|
||||||
"creator_slug": cr.slug,
|
"creator_slug": cr.slug,
|
||||||
"created_at": km.created_at.isoformat() if hasattr(km, "created_at") and km.created_at else "",
|
"created_at": km.created_at.isoformat() if hasattr(km, "created_at") and km.created_at else "",
|
||||||
"score": 0.0,
|
"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"):
|
if scope in ("all", "creators"):
|
||||||
|
|
@ -1118,6 +1122,13 @@ class SearchService:
|
||||||
if not payload.get("creator_name") and payload.get("creator_id"):
|
if not payload.get("creator_name") and payload.get("creator_id"):
|
||||||
needs_db_lookup.add(payload["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
|
# Batch fetch creators from DB
|
||||||
creator_map: dict[str, dict[str, str]] = {}
|
creator_map: dict[str, dict[str, str]] = {}
|
||||||
if needs_db_lookup:
|
if needs_db_lookup:
|
||||||
|
|
@ -1133,6 +1144,21 @@ class SearchService:
|
||||||
for c in result.scalars().all():
|
for c in result.scalars().all():
|
||||||
creator_map[str(c.id)] = {"name": c.name, "slug": c.slug}
|
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:
|
for r in qdrant_results:
|
||||||
payload = r.get("payload", {})
|
payload = r.get("payload", {})
|
||||||
cid = payload.get("creator_id", "")
|
cid = payload.get("creator_id", "")
|
||||||
|
|
@ -1174,6 +1200,10 @@ class SearchService:
|
||||||
"match_context": "",
|
"match_context": "",
|
||||||
"section_anchor": payload.get("section_anchor", "") if result_type == "technique_section" else "",
|
"section_anchor": payload.get("section_anchor", "") if result_type == "technique_section" else "",
|
||||||
"section_heading": payload.get("section_heading", "") 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
|
return enriched
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue