Create Relay Bot MVP
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
from app.llm.prompts import CLASSIFIER_PROMPT
|
||||
from app.llm.schemas import Classification
|
||||
|
||||
|
||||
def _confidence(value: object) -> float:
|
||||
named_levels = {"high": 0.9, "medium": 0.6, "low": 0.3}
|
||||
if isinstance(value, str) and value.lower() in named_levels:
|
||||
return named_levels[value.lower()]
|
||||
try:
|
||||
return min(1.0, max(0.0, float(value)))
|
||||
except (TypeError, ValueError):
|
||||
return 0.0
|
||||
|
||||
|
||||
def _flag(value: object) -> bool:
|
||||
if isinstance(value, str):
|
||||
return value.strip().lower() in {"true", "yes", "1"}
|
||||
return bool(value)
|
||||
|
||||
|
||||
class MessageClassifier:
|
||||
def __init__(self, llm):
|
||||
self.llm = llm
|
||||
|
||||
async def classify(self, text: str) -> Classification:
|
||||
data = await self.llm.json(
|
||||
[{"role": "user", "content": f"{CLASSIFIER_PROMPT}\nMessage:\n{text}"}]
|
||||
)
|
||||
return Classification(
|
||||
is_question=_flag(data.get("is_question")),
|
||||
project_related=_flag(data.get("project_related")),
|
||||
asks_new_decision=_flag(data.get("asks_new_decision")),
|
||||
rhetorical=_flag(data.get("rhetorical")),
|
||||
blocker=_flag(data.get("blocker")),
|
||||
confidence=_confidence(data.get("confidence", 0)),
|
||||
)
|
||||
Reference in New Issue
Block a user