# Tool selection utilities for determining which tools to use from config import ( YOUTUBE_PATTERNS, REVERSE_TEXT_PATTERNS, WIKIPEDIA_PATTERNS, WEB_SEARCH_PATTERNS, AI_PATTERNS, FILE_PATTERNS ) def determine_tools_needed(question): """Determine which tools should be used for a given question.""" question_lower = question.lower() # YouTube detection needs_youtube = any(pattern in question_lower for pattern in YOUTUBE_PATTERNS) # Reverse text detection is_reverse_text = ( any(pattern in question_lower for pattern in REVERSE_TEXT_PATTERNS) or (question_lower != question_lower[::-1] and "ecnetnes" in question_lower or "sdrow" in question_lower) ) # Wikipedia detection needs_wikipedia = any(pattern in question_lower for pattern in WIKIPEDIA_PATTERNS) # Web search detection needs_web_search = any(pattern in question_lower for pattern in WEB_SEARCH_PATTERNS) # Knowledge retrieval for AI/agent questions needs_knowledge = any(term in question_lower for term in AI_PATTERNS) # File analysis detection has_file_analysis = any(pattern in question_lower for pattern in FILE_PATTERNS) return { "use_youtube": needs_youtube, "use_wikipedia": needs_wikipedia, "is_reverse_text": is_reverse_text, "use_web_search": needs_web_search, "use_knowledge_retrieval": needs_knowledge, "use_webpage_visit": needs_web_search and ("link" in question_lower or "paper" in question_lower), "has_file_analysis": has_file_analysis } def needs_special_handling(question, tool_selection): """Check if question needs special handling beyond standard tools.""" question_lower = question.lower() # Reverse text questions if tool_selection.get("is_reverse_text", False): return True # Mathematical table analysis if "table" in question_lower and ("commutative" in question_lower or "operation" in question_lower): return True # Grocery/botany questions if "grocery" in question_lower and "botany" in question_lower: return True # File analysis questions if tool_selection.get("has_file_analysis", False): return True return False