Voiid-m commited on
Commit
74a2eb5
·
verified ·
1 Parent(s): 7aa7c0f

Class update

Browse files
Files changed (1) hide show
  1. tools/web_search.py +44 -8
tools/web_search.py CHANGED
@@ -4,24 +4,60 @@ import duckduckgo_search
4
 
5
  class DuckDuckGoSearchTool(Tool):
6
  name = "web_search"
7
- description = "Performs a duckduckgo web search based on your query (think a Google search) then returns the top search results."
8
- inputs = {'query': {'type': 'string', 'description': 'The search query to perform.'}}
 
 
 
 
 
 
 
 
9
  output_type = "string"
10
 
11
- def __init__(self, max_results=10, **kwargs):
12
  super().__init__()
13
  self.max_results = max_results
14
  try:
15
  from duckduckgo_search import DDGS
16
  except ImportError as e:
17
  raise ImportError(
18
- "You must install package `duckduckgo_search` to run this tool: for instance run `pip install duckduckgo-search`."
 
19
  ) from e
20
  self.ddgs = DDGS(**kwargs)
21
 
22
  def forward(self, query: str) -> str:
 
23
  results = self.ddgs.text(query, max_results=self.max_results)
24
- if len(results) == 0:
25
- raise Exception("No results found! Try a less restrictive/shorter query.")
26
- postprocessed_results = [f"[{result['title']}]({result['href']})\n{result['body']}" for result in results]
27
- return "## Search Results\n\n" + "\n\n".join(postprocessed_results)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  class DuckDuckGoSearchTool(Tool):
6
  name = "web_search"
7
+ description = (
8
+ "Effectue une recherche web DuckDuckGo et renvoie un court résumé en français "
9
+ "des principaux résultats."
10
+ )
11
+ inputs = {
12
+ "query": {
13
+ "type": "string",
14
+ "description": "La requête de recherche à effectuer.",
15
+ }
16
+ }
17
  output_type = "string"
18
 
19
+ def __init__(self, max_results: int = 5, **kwargs):
20
  super().__init__()
21
  self.max_results = max_results
22
  try:
23
  from duckduckgo_search import DDGS
24
  except ImportError as e:
25
  raise ImportError(
26
+ "Vous devez installer le paquet `duckduckgo-search` pour utiliser ce tool "
27
+ "(ex: `pip install duckduckgo-search`)."
28
  ) from e
29
  self.ddgs = DDGS(**kwargs)
30
 
31
  def forward(self, query: str) -> str:
32
+ # Récupération des résultats bruts
33
  results = self.ddgs.text(query, max_results=self.max_results)
34
+
35
+ # Aucun résultat trouvé message clair plutôt qu'exception
36
+ if not results:
37
+ return (
38
+ f'Aucun résultat trouvé pour la requête "{query}". '
39
+ "Essaie une formulation plus courte ou plus générale."
40
+ )
41
+
42
+ # On ne garde que les premiers résultats les plus utiles
43
+ top_results = results[:3]
44
+
45
+ # Construction d'un résumé lisible en français
46
+ lines = [f'Voici quelques résultats pour la requête "{query}" :', ""]
47
+ for idx, r in enumerate(top_results, start=1):
48
+ title = r.get("title", "").strip()
49
+ url = r.get("href", "").strip()
50
+ snippet = r.get("body", "").strip()
51
+
52
+ # On coupe les extraits trop longs
53
+ if len(snippet) > 220:
54
+ snippet = snippet[:217].rstrip() + "..."
55
+
56
+ lines.append(f"{idx}. {title or '(titre manquant)'}")
57
+ if url:
58
+ lines.append(f" Lien : {url}")
59
+ if snippet:
60
+ lines.append(f" Résumé : {snippet}")
61
+ lines.append("") # ligne vide entre les résultats
62
+
63
+ return "\n".join(lines).strip()