Shopify_AI / app /agents /intent_agent.py
Prerna43's picture
shopify_ai
80ef840
Raw
History Blame Contribute Delete
2.31 kB
from app.models.model_router import ModelRouter
class IntentAgent:
INTENT_KEYWORDS = {
"refund_request": ["refund", "money back", "reimburse"],
"return_request": ["return", "send back"],
"shipping_status": ["where", "shipping", "shipment", "tracking", "arrived", "delivery", "delayed"],
"payment_issue": ["payment", "card", "charged", "failed"],
"cancellation_request": ["cancel", "cancellation"],
"exchange_request": ["exchange", "replace", "size"],
"warranty_claim": ["warranty", "repair", "defective", "broken"],
}
def __init__(self, router: ModelRouter | None = None):
self.router = router or ModelRouter()
def classify(self, message: str) -> dict:
if self.router.intent_model.api_key:
try:
return self._classify_with_groq(message)
except Exception:
pass
return self._classify_locally(message)
def _classify_with_groq(self, message: str) -> dict:
prompt = f"""
Classify this Shopify customer support ticket.
Return only JSON with keys: intent, priority, confidence.
Allowed intents: refund_request, return_request, shipping_status, payment_issue,
cancellation_request, exchange_request, warranty_claim, general_support.
Allowed priority values: low, normal, high.
Message: {message}
"""
result = self.router.intent_model.complete_json(
prompt,
system="You are an intent classification agent for ecommerce customer support.",
)
return {
"intent": result.get("intent", "general_support"),
"priority": result.get("priority", "normal"),
"confidence": float(result.get("confidence", 0.7)),
}
def _classify_locally(self, message: str) -> dict:
lowered = message.lower()
intent = "general_support"
for candidate, keywords in self.INTENT_KEYWORDS.items():
if any(keyword in lowered for keyword in keywords):
intent = candidate
break
priority = "high" if any(word in lowered for word in ["urgent", "angry", "refund", "failed", "broken"]) else "normal"
return {"intent": intent, "priority": priority, "confidence": 0.86 if intent != "general_support" else 0.62}