| 1234567891011121314151617181920212223242526272829303132333435 |
- from __future__ import annotations
- from typing import Any, Dict
- from news_mcp.config import NEWS_ENTITY_BLACKLIST
- from news_mcp.llm import call_extraction, call_summary
- def _filter_entities(entities, blacklist=None):
- banned = set(x.strip().lower() for x in (blacklist if blacklist is not None else NEWS_ENTITY_BLACKLIST))
- out = []
- for ent in entities or []:
- key = str(ent).strip().lower()
- if not key or key in banned:
- continue
- out.append(ent)
- return out
- async def classify_cluster_groq(cluster: Dict[str, Any]) -> Dict[str, Any]:
- parsed = await call_extraction(cluster)
- out = dict(cluster)
- out.update({
- "topic": parsed.get("topic", cluster.get("topic")),
- "entities": _filter_entities(parsed.get("entities", [])),
- "sentiment": parsed.get("sentiment", "neutral"),
- "sentimentScore": parsed.get("sentimentScore"),
- "keywords": parsed.get("keywords", []),
- })
- return out
- async def summarize_cluster_groq(cluster: Dict[str, Any]) -> Dict[str, Any]:
- parsed = await call_summary(cluster)
- return parsed
|