| import os |
| import json |
| from dotenv import load_dotenv |
|
|
| load_dotenv(override=True) |
|
|
| TOXICITY_KEYWORDS = [ |
| "fuck", "shit", "bitch", "bastard", "asshole", "dick", "pussy", |
| "nigger", "faggot", "retard", "chutiya", "madarchod", "behenchod", |
| "gandu", "harami", "sala", "lund", "maa ki", "teri maa", "bhen ke", |
| "randi", "kutti", "ullu", "bakwaas" |
| ] |
|
|
| def is_toxic(text: str) -> bool: |
| text_lower = text.lower() |
| return any(word in text_lower for word in TOXICITY_KEYWORDS) |
|
|
| def analyze_with_groq(text: str) -> dict: |
| from groq import Groq |
| |
| if is_toxic(text): |
| return { |
| "language": {"language": "detected", "confidence": 100}, |
| "translation": {"translated": text, "method": "none"}, |
| "intent": {"intent": "complaint", "confidence": 100}, |
| "sentiment": {"sentiment": "negative", "confidence": 100}, |
| "urgency": "high", |
| "reply": {"reply": "We have received your message. Please note that abusive language is not tolerated. Our team will review your concern and respond professionally."} |
| } |
|
|
| prompt = f""" |
| You are an AI customer support analyzer. Analyze the following customer message and return a JSON response. |
| |
| Customer message: "{text}" |
| |
| Instructions: |
| - Detect the language (return the language name in lowercase, e.g. "english", "urdu", "roman_urdu", "arabic", "french", "punjabi", etc.) |
| - Translate to English if not already in English |
| - Classify intent as one of: "billing", "technical support", "refund", "complaint", "general inquiry", "compliment" |
| - Analyze sentiment as one of: "positive", "neutral", "negative" |
| - Set urgency as "high" if the issue is serious (outage, fraud, urgent complaint) else "normal" |
| - Write a warm, empathetic, human-sounding reply in the SAME language as the original message |
| - Confidence scores should be between 0-100 |
| |
| Return ONLY valid JSON in this exact format, no extra text: |
| {{ |
| "language": {{ |
| "language": "english", |
| "confidence": 95 |
| }}, |
| "translation": {{ |
| "translated": "english version of the message", |
| "method": "groq" |
| }}, |
| "intent": {{ |
| "intent": "technical support", |
| "confidence": 88 |
| }}, |
| "sentiment": {{ |
| "sentiment": "negative", |
| "confidence": 91 |
| }}, |
| "urgency": "high", |
| "reply": {{ |
| "reply": "warm empathetic reply in original language" |
| }} |
| }} |
| """ |
|
|
| try: |
| client = Groq(api_key=os.getenv("GROQ_API_KEY")) |
| |
| chat_completion = client.chat.completions.create( |
| messages=[ |
| { |
| "role": "user", |
| "content": prompt, |
| } |
| ], |
| model="llama-3.3-70b-versatile", |
| temperature=0.0, |
| response_format={"type": "json_object"} |
| ) |
|
|
| raw = chat_completion.choices[0].message.content or "" |
| |
| |
| return json.loads(raw) |
|
|
| except Exception as e: |
| error_msg = str(e) |
| print(f"Groq API Error: {error_msg}") |
| return { |
| "language": {"language": "unknown", "confidence": 0}, |
| "translation": {"translated": text, "method": f"error: {error_msg}"}, |
| "intent": {"intent": "general inquiry", "confidence": 0}, |
| "sentiment": {"sentiment": "neutral", "confidence": 0}, |
| "urgency": "normal", |
| "reply": {"reply": f"SYSTEM ERROR: {error_msg}"} |
| } |