FinanceEducationAssistant / src /agents /ModerationAgent.py
Fade0510's picture
Add initial version of the app
e5e35a3
Raw
History Blame Contribute Delete
1.98 kB
import logging
from typing import Any, Dict
from dotenv import load_dotenv
from openai import OpenAI
logger = logging.getLogger(__name__)
class ModerationAgent:
"""
Wrapper around OpenAI Moderation API.
Uses the latest moderation model and returns a simple flagged/not-flagged result.
"""
def __init__(self):
load_dotenv()
self.client = OpenAI()
def classify(self, text: str) -> Dict[str, Any]:
text = (text or "").strip()
if not text:
return {"flagged": False, "categories": {}, "source": "empty"}
try:
moderation = self.client.moderations.create(
model="omni-moderation-latest",
input=text,
)
result = moderation.results[0]
categories = (
result.categories.model_dump()
if hasattr(result.categories, "model_dump")
else dict(result.categories)
)
category_scores = (
result.category_scores.model_dump()
if hasattr(result.category_scores, "model_dump")
else dict(result.category_scores)
)
flagged = bool(result.flagged)
logger.info(
"ModerationAgent: flagged=%s categories=%s",
flagged,
[k for k, v in categories.items() if v],
)
return {
"flagged": flagged,
"categories": categories,
"category_scores": category_scores,
"source": "openai_moderation",
}
except Exception as e:
logger.exception("Moderation API call failed")
return {
"flagged": False,
"categories": {},
"error": str(e),
"source": "error",
}
def is_flagged(self, text: str) -> bool:
return bool(self.classify(text).get("flagged"))