diff --git a/app/services/documentary/frame_analysis_models.py b/app/services/documentary/frame_analysis_models.py index 5dc0074..6ac419c 100644 --- a/app/services/documentary/frame_analysis_models.py +++ b/app/services/documentary/frame_analysis_models.py @@ -27,7 +27,7 @@ class FrameBatchResult: time_range: str raw_response: str frame_paths: list[str] = field(default_factory=list) - observations: list[dict] = field(default_factory=list) - summary: str = "" + frame_observations: list[dict] = field(default_factory=list) + overall_activity_summary: str = "" fallback_summary: str = "" error_message: str = "" diff --git a/tests/test_documentary_frame_analysis_service.py b/tests/test_documentary_frame_analysis_service.py index bfdde3e..d5c4c11 100644 --- a/tests/test_documentary_frame_analysis_service.py +++ b/tests/test_documentary_frame_analysis_service.py @@ -46,6 +46,22 @@ class DocumentaryFrameAnalysisServiceTests(unittest.TestCase): self.assertEqual("", batch.raw_response) self.assertTrue(batch.fallback_summary) + def test_failed_batch_result_uses_prompt_contract_field_names(self): + service = DocumentaryFrameAnalysisService() + + batch = service._build_failed_batch_result( + batch_index=4, + raw_response="not-json", + error_message="JSON decode failed", + frame_paths=["/tmp/keyframe_000002_000002000.jpg"], + time_range="00:00:06,000-00:00:09,000", + ) + + self.assertEqual([], batch.frame_observations) + self.assertEqual("", batch.overall_activity_summary) + self.assertFalse(hasattr(batch, "observations")) + self.assertFalse(hasattr(batch, "summary")) + class DocumentaryAnalysisConfigTests(unittest.TestCase): def test_config_rejects_non_positive_frame_interval(self):