Input cluster JSON: {cluster_json} You MUST extract a news signal from the headline AND summary. Return STRICT JSON only. Task: 1) infer the best top-level topic (crypto, macro, regulation, ai, other) 2) extract concise ENTITIES (proper nouns only) 3) assign sentiment (positive/negative/neutral) + score (-1.0 to 1.0) 4) provide short KEYWORDS (thematic tags, 1-2 words, NOT proper nouns) === ENTITY RULES (strict) === - ONLY specific named people, places, organizations, titles, products, tickers. 1-5 words. - Examples of entities: "Donald Trump", "Federal Reserve", "Bitcoin", "SEC", "ECB", "Iran", "Gaza", "Nvidia", "Apple", "ChatGPT", "Binance", "Jerome Powell", "BTC", "ETH", "Ethereum", "OPEC+", "H100", "Blackwell" - Examples of NON-entities (these are THEMES/CONCEPTS → put in KEYWORDS): "inflation", "interest rates", "rates", "euro", "dollar", "oil", "gold", "war", "election", "regulation", "sanctions", "tariffs", "AI", "crypto", "ETF", "monetary policy", "fiscal policy", "trade war", "supply chain", "recession", "growth", "employment", "unemployment", "GDP", "CPI", "PPI", "US", "United States", "EU", "Europe", "China", "eurozone", "oil prices", "stock market", "bond yields" - Do NOT include common nouns, abstract concepts, or thematic terms — even if finance/crypto related. - Do NOT include adjectives alone ("strict", "new", "record", "major") or generic nouns ("package", "plan", "deal", "bill", "act", "law", "case", "trial", "verdict", "ruling", "decision", "meeting", "summit", "talks"). === KEYWORD RULES (strict) === - Each keyword MUST be 1-2 words. PREFER 2-word phrases. Avoid single words unless they are established compound concepts (e.g. "inflation" is ok alone, "sanctions" is ok alone). - Keywords are THEMATIC TAGS: abstract concepts, policy areas, event types, topics. - Good 2-word keywords: "interest rates", "monetary policy", "securities law", "airstrikes", "missile sites", "regional escalation", "trade war", "supply chain", "recession risk", "inflation data", "ETF inflows", "institutional demand", "price surge", "AI chips", "earnings beat", "revenue growth", "chip demand", "rate cut", "eurozone inflation", "deposit rate", "monetary easing", "production cuts", "oil prices", "global supply", "demand concerns", "high-risk systems", "compliance requirements", "criminal conviction", "hush money", "falsifying records", "historic verdict", "guilty verdict", "stimulus package", "infrastructure spending", "property sector" - Bad keywords: proper nouns (these go in entities), SINGLE generic words ("unregistered", "securities", "ETFs", "inflows", "strict", "rules", "package", "economy", "oil", "prices", "cuts", "demand", "growth", "beat", "report", "data", "concerns"), verb phrases ("warns Iran", "hikes rates", "cuts rates", "sues Binance"), full headline fragments, anything over 2 words. - Return 2-4 keywords. Fewer is better than bad ones. === DECISION PROCEDURE === For each candidate term in the text: 1. Is it a specific named person/place/org/product/ticker? → ENTITY 2. Is it a theme, topic, policy area, or event type? → KEYWORD 3. Can you form a meaningful 2-word phrase? → KEYWORD (use the phrase) 4. Unclear? Default to KEYWORD (safer to miss an entity than pollute entities with themes) === TOPIC CLASSIFICATION === - crypto: Bitcoin, Ethereum, crypto exchanges, DeFi, tokens, mining, ETFs - macro: central banks (Fed, ECB, BoE, BoJ), interest rates, inflation, GDP, employment, fiscal/monetary policy, oil, commodities, China economy - regulation: SEC, CFTC, lawsuits, enforcement, legislation, compliance, legal rulings, EU AI Act, financial regulation - ai: AI models, chips (Nvidia, AMD), LLMs, generative AI, AI companies, AI regulation (but prefer 'regulation' if legal focus) - other: geopolitics, war, politics, elections, corporate earnings (non-AI), general business === SENTIMENT RULES === - positive: clearly encouraging, improving, or supportive tone - negative: clearly alarming, worsening, severe, conflict, loss, risk, warning tone - neutral: factual, balanced, or mixed - sentimentScore must be a number from -1.0 to 1.0 and should reflect the sentiment label. Return STRICT JSON with EXACT keys only: { topic, entities, sentiment, sentimentScore, keywords } where topic is one of [crypto, macro, regulation, ai, other].