fix(documentary): keep frames when batch summary is missing

This commit is contained in:
linyq 2026-04-03 02:09:02 +08:00
parent ad02059e5d
commit df034d104b
2 changed files with 32 additions and 7 deletions

View File

@ -135,7 +135,13 @@ JSON 必须包含以下键:
}
)
summary = payload["overall_activity_summary"]
raw_summary = payload.get("overall_activity_summary", "")
if isinstance(raw_summary, str):
summary = raw_summary
elif raw_summary is None:
summary = ""
else:
summary = str(raw_summary)
return FrameBatchResult(
batch_index=batch_index,
@ -160,10 +166,4 @@ JSON 必须包含以下键:
f"{len(payload['frame_observations'])} < {expected_frame_count}"
)
if "overall_activity_summary" not in payload:
return "Batch response must include overall_activity_summary"
if not isinstance(payload["overall_activity_summary"], str):
return "Batch response overall_activity_summary must be a string"
return ""

View File

@ -162,6 +162,31 @@ class DocumentaryFrameAnalysisServiceTests(unittest.TestCase):
self.assertEqual("人物从房间走到街道", batch.overall_activity_summary)
self.assertEqual("", batch.fallback_summary)
def test_parse_batch_preserves_frames_when_summary_is_missing(self):
service = DocumentaryFrameAnalysisService()
raw_response = """
{
"frame_observations": [
{"observation": "第一帧画面"},
{"observation": "第二帧画面"}
]
}
""".strip()
batch = service._parse_batch_response(
batch_index=2,
raw_response=raw_response,
frame_paths=[
"/tmp/keyframe_000000_000000000.jpg",
"/tmp/keyframe_000075_000003000.jpg",
],
time_range="00:00:00,000-00:00:06,000",
)
self.assertEqual("success", batch.status)
self.assertEqual(2, len(batch.frame_observations))
self.assertEqual("", batch.overall_activity_summary)
def test_cache_key_changes_when_interval_changes(self):
service = DocumentaryFrameAnalysisService()