Files
2026-04-05 00:43:23 +05:30

35 lines
1.4 KiB
Python

"""Classifier Agent — adds metadata tags to extracted signals."""
import logging
from backend.providers import call_llm
from backend.db.models import Signal
from backend.agents.json_utils import extract_json_object
logger = logging.getLogger("thirdeye.agents.classifier")
SYSTEM_PROMPT = """You are a fast metadata classifier. Given an extracted signal, add classification tags.
Respond ONLY with valid JSON (no markdown, no backticks):
{"sentiment": "positive|neutral|negative|urgent", "urgency": "none|low|medium|high|critical", "keywords": ["3-5 searchable keywords"]}
"""
async def classify_signal(signal: Signal) -> Signal:
"""Add classification metadata to a signal."""
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"Classify this signal:\nType: {signal.type}\nSummary: {signal.summary}\nQuote: {signal.raw_quote}"},
]
try:
result = await call_llm("fast_small", messages, temperature=0.1, max_tokens=200)
parsed = extract_json_object(result.get("content", ""))
signal.sentiment = parsed.get("sentiment", signal.sentiment)
signal.urgency = parsed.get("urgency", signal.urgency)
signal.keywords = parsed.get("keywords", signal.keywords)
except Exception as e:
logger.warning(f"Classification failed, using defaults: {e}")
# Keep defaults — classification failure is non-fatal
return signal