Merge pull request #234 from j-sperling/j-sperling/fix/bird-x-engagement-validation

fix(bird_x): skip all-None engagement dicts
This commit is contained in:
Matt Van Horn
2026-04-13 15:52:44 -04:00
committed by GitHub
2 changed files with 28 additions and 2 deletions
+1 -1
View File
@@ -460,7 +460,7 @@ def parse_bird_response(response: Dict[str, Any], query: str = "") -> List[Dict[
"url": url, "url": url,
"author_handle": author_handle.lstrip("@"), "author_handle": author_handle.lstrip("@"),
"date": date, "date": date,
"engagement": engagement, "engagement": engagement if any(v is not None for v in engagement.values()) else None,
"why_relevant": "", # Bird doesn't provide relevance explanations "why_relevant": "", # Bird doesn't provide relevance explanations
"relevance": _compute_relevance(query, str(tweet.get("text", ""))) if query else 0.7, "relevance": _compute_relevance(query, str(tweet.get("text", ""))) if query else 0.7,
} }
+27 -1
View File
@@ -175,7 +175,7 @@ class TestVendoredBirdRuntime(unittest.TestCase):
} }
] ]
items = parse_bird_response(tweets, "test query") items = parse_bird_response(tweets, "test query")
self.assertIsNone(items[0]["engagement"]["likes"]) self.assertIsNone(items[0]["engagement"])
def test_fallback_to_second_key(self): def test_fallback_to_second_key(self):
tweets = [ tweets = [
@@ -203,6 +203,32 @@ class TestVendoredBirdRuntime(unittest.TestCase):
items = parse_bird_response(tweets, "test query") items = parse_bird_response(tweets, "test query")
self.assertEqual(0, items[0]["engagement"]["likes"]) self.assertEqual(0, items[0]["engagement"]["likes"])
def test_engagement_none_when_all_fields_missing(self):
"""All-None engagement dict should become None, not propagate."""
tweets = [
{
"id": "1",
"text": "test",
"permanent_url": "https://x.com/u/status/1",
}
]
items = parse_bird_response(tweets, "test query")
self.assertIsNone(items[0]["engagement"])
def test_engagement_preserved_when_any_field_present(self):
"""Engagement dict kept when at least one metric exists."""
tweets = [
{
"id": "1",
"text": "test",
"permanent_url": "https://x.com/u/status/1",
"likeCount": 5,
}
]
items = parse_bird_response(tweets, "test query")
self.assertIsNotNone(items[0]["engagement"])
self.assertEqual(5, items[0]["engagement"]["likes"])
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()