Spaces:
Sleeping
Sleeping
File size: 2,266 Bytes
fd18d93 8fe992b 74a2eb5 8fe992b 74a2eb5 8fe992b 74a2eb5 8fe992b 74a2eb5 8fe992b 74a2eb5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
from typing import Any, Optional
from smolagents.tools import Tool
import duckduckgo_search
class DuckDuckGoSearchTool(Tool):
name = "web_search"
description = (
"Effectue une recherche web DuckDuckGo et renvoie un court résumé en français "
"des principaux résultats."
)
inputs = {
"query": {
"type": "string",
"description": "La requête de recherche à effectuer.",
}
}
output_type = "string"
def __init__(self, max_results: int = 5, **kwargs):
super().__init__()
self.max_results = max_results
try:
from duckduckgo_search import DDGS
except ImportError as e:
raise ImportError(
"Vous devez installer le paquet `duckduckgo-search` pour utiliser ce tool "
"(ex: `pip install duckduckgo-search`)."
) from e
self.ddgs = DDGS(**kwargs)
def forward(self, query: str) -> str:
# Récupération des résultats bruts
results = self.ddgs.text(query, max_results=self.max_results)
# Aucun résultat trouvé → message clair plutôt qu'exception
if not results:
return (
f'Aucun résultat trouvé pour la requête "{query}". '
"Essaie une formulation plus courte ou plus générale."
)
# On ne garde que les premiers résultats les plus utiles
top_results = results[:3]
# Construction d'un résumé lisible en français
lines = [f'Voici quelques résultats pour la requête "{query}" :', ""]
for idx, r in enumerate(top_results, start=1):
title = r.get("title", "").strip()
url = r.get("href", "").strip()
snippet = r.get("body", "").strip()
# On coupe les extraits trop longs
if len(snippet) > 220:
snippet = snippet[:217].rstrip() + "..."
lines.append(f"{idx}. {title or '(titre manquant)'}")
if url:
lines.append(f" Lien : {url}")
if snippet:
lines.append(f" Résumé : {snippet}")
lines.append("") # ligne vide entre les résultats
return "\n".join(lines).strip()
|