Extract a news signal from the headline AND summary. Never return empty entities if names appear in the text. Return STRICT JSON with EXACT keys: { topic, entities, sentiment, sentimentScore, keywords } FIELDS: - topic: one of [crypto, macro, regulation, ai, other] - entities: named people, places, orgs, conflicts, and finance/crypto terms (BTC, ETH, ETF, SEC, ECB, Fed, euro, inflation, rates). Canonical forms. 1–5 words each. - sentiment: "positive" | "negative" | "neutral" - sentimentScore: float –1.0 to 1.0, consistent with sentiment label - keywords: 2–4 thematic tags, 1–2 words each. Noun phrases only (e.g. "drone strikes", "nuclear plant"). Not entity names. Not verb phrases. Not headline fragments. TASKS: 1. Infer the best topic. 2. Extract all named entities from headline and summary. 3. Assign sentiment from tone and wording. 4. Choose keywords that capture themes, not entities. EXAMPLE: Input: { "headline": "ECB raises rates again as eurozone inflation stays elevated", "summary": "The European Central Bank increased its benchmark rate by 25bps, citing persistent inflation across the eurozone." } Output: { "topic": "macro", "entities": ["ECB", "European Central Bank", "eurozone", "inflation", "rates"], "sentiment": "negative", "sentimentScore": -0.4, "keywords": ["rate hike", "monetary policy"] } INPUT: {cluster_json}