Spaces:
Sleeping
Sleeping
| # tools_engine.py - intent detection + web search | |
| from transformers import pipeline | |
| import re | |
| print(">>> Tools: Loading Intent Classification Model...") | |
| try: | |
| intent_classifier = pipeline("zero-shot-classification", model="typeform/distilbert-base-uncased-mnli") | |
| except Exception as e: | |
| print(f"Intent model load failed: {e}") | |
| intent_classifier = None | |
| def analyze_intent(user_text): | |
| if not user_text: | |
| return "general" | |
| text_lower = user_text.lower().strip() | |
| direct_chat_triggers = [ | |
| "hi","hello","hey","hlo","namaste", | |
| "what is your name", "who are you", "your name" | |
| ] | |
| if text_lower in direct_chat_triggers or any(text_lower.startswith(t + " ") for t in direct_chat_triggers): | |
| return "general" | |
| candidate_labels = ["internet search","general conversation","coding request","checking time"] | |
| try: | |
| if intent_classifier: | |
| result = intent_classifier(user_text, candidate_labels) | |
| top_label = result['labels'][0] | |
| confidence = result['scores'][0] | |
| mapping = { | |
| "internet search": "internet_search", | |
| "general conversation": "general", | |
| "coding request": "coding_request", | |
| "checking time": "checking_time" | |
| } | |
| if confidence > 0.45: | |
| return mapping.get(top_label, "general") | |
| except Exception: | |
| pass | |
| return "general" | |
| def perform_web_search(user_text, max_results=4): | |
| try: | |
| from duckduckgo_search import DDGS | |
| except Exception as e: | |
| print(f"Search library import failed: {e}") | |
| return {"query": user_text, "results": []} | |
| try: | |
| query = user_text or "" | |
| remove_phrases = ["search for","find","google","look up","lookup","what is","tell me"] | |
| q = query.lower() | |
| for p in remove_phrases: | |
| q = q.replace(p, "") | |
| q = q.strip() or query | |
| results = list(DDGS().text(q, max_results=max_results)) | |
| structured = {"query": q, "results": []} | |
| for r in results: | |
| title = (r.get("title") or "").strip() | |
| body = (r.get("body") or "").strip() | |
| body = re.sub(r'\s+',' ', body) | |
| url = r.get("href") or r.get("url") or r.get("link") or "" | |
| snippet = body[:320] | |
| structured["results"].append({"title": title, "snippet": snippet, "url": url}) | |
| return structured | |
| except Exception as e: | |
| print(f"Search error: {e}") | |
| return {"query": user_text, "results": []} | |