Spaces:
Sleeping
Sleeping
| from dataclasses import dataclass, field | |
| from typing import Dict, List | |
| class IntentClassifier: | |
| intent_keywords: Dict[str, List[str]] = field(default_factory=lambda:{ | |
| "rag":["document","policy","manual","procedure","hr"], | |
| "web":["latest","today","news","current","price","stock"], | |
| "admin":["delete","remove","export","salary","confidential"], | |
| "general":["explain","summary","help"] | |
| }) | |
| llm_client: any = None | |
| async def classify(self, text: str) -> str: | |
| t = text.lower() | |
| scores={k:0 for k in self.intent_keywords} | |
| for k, words in self.intent_keywords.items(): | |
| for w in words: | |
| if w in t: scores[k]+=1 | |
| best = max(scores, key=scores.get) | |
| if scores[best] > 0: return best | |
| # LLM fallback with error handling | |
| if self.llm_client: | |
| try: | |
| prompt=f"Classify into rag/web/admin/general. User: '{text}'" | |
| out = (await self.llm_client.simple_call(prompt)).strip().lower() | |
| return out if out in scores else "general" | |
| except Exception: | |
| # LLM failed (not configured or unavailable), default to general | |
| return "general" | |
| return "general" | |