from smolagents.tools import Tool class HttpSearchTool(Tool): name = "http_search" description = ( "Simule une recherche web sur un petit corpus connu (Qwen, OpenAI, modèles IA) " "et renvoie un résumé lisible des résultats." ) inputs = { "query": { "type": "string", "description": "La requête de recherche (texte libre).", } } output_type = "string" def __init__(self): super().__init__() # Petit corpus interne, extensible facilement self.docs = [ { "title": "Qwen2.5 Coder 32B Instruct", "url": "https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct", "summary": ( "Qwen2.5 Coder 32B Instruct est un grand modèle de langage " "spécialisé pour le code, avec de bonnes capacités de " "raisonnement et de génération de programmes." ), "keywords": ["qwen", "qwen2.5", "coder", "32b", "code"], }, { "title": "OpenAI (organisation)", "url": "https://openai.com", "summary": ( "OpenAI est une entreprise de recherche en intelligence " "artificielle qui développe des modèles comme GPT et des " "outils pour les développeurs." ), "keywords": ["openai", "gpt", "chatgpt", "organisation"], }, { "title": "Modèles de langage pour le code", "url": "https://example.com/code-models", "summary": ( "Les modèles de langage pour le code aident à écrire, " "expliquer et corriger du code dans de nombreux langages " "de programmation." ), "keywords": ["code", "llm", "coder", "programming"], }, ] def forward(self, query: str) -> str: q = query.lower() # Filtrage très simple par mots-clés matches = [] for doc in self.docs: score = 0 for kw in doc["keywords"]: if kw in q: score += 1 if score > 0: matches.append((score, doc)) if not matches: return ( f"Aucun résultat trouvé dans le corpus interne pour la requête " f'"{query}". Le moteur de recherche externe est désactivé dans ' "ce POC." ) # Trier par score décroissant matches.sort(key=lambda x: x[0], reverse=True) top_docs = [d for score, d in matches[:3]] lines = [ f'Voici quelques résultats simulés pour la requête "{query}" :', "", ] for idx, doc in enumerate(top_docs, start=1): lines.append(f"{idx}. {doc['title']}") lines.append(f" Lien : {doc['url']}") lines.append(f" Résumé : {doc['summary']}") lines.append("") return "\n".join(lines).strip()