File size: 1,613 Bytes
b156b8a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
from duckduckgo_search import DDGS
from tools.interfaces.interface_wikipedia_search import WikipediaSearchInterface

        
class SearchTool(WikipediaSearchInterface):
    """
        Classe concrète qui implémente l'interface WikipediaSearchInterface.
        Fournit des méthodes de recherche via Wikipedia et DuckDuckGo.
    """
    
    def __init__(self):
        self.wikipedia_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
    
    def query_wikipedia(self, query: str) -> str:
        """
            Fait une recherche Internet avec DuckDuckGo (backend='api') et retourne 3 résultats.
        """        
        try:
            result = self.wikipedia_tool.run(query)
            return f"(Wikipedia) Résumé : {result}"
        except Exception as e:
            return f"(Wikipedia) Erreur : {e}"

    def web_search(self, query: str) -> str:
        """
            Fait une recherche Internet avec DuckDuckGo (backend='api') et retourne 3 résultats.
        """
        try:
            with DDGS() as ddgs:
                results = ddgs.text(query, max_results=3, backend="api")
                if not results:
                    return "Aucun résultat trouvé."
                output = ""
                for i, r in enumerate(results, start=1):
                    output += f"{i}. {r['title']}\n{r['href']}\n{r['body']}\n\n"
                return output.strip()
        except Exception as e:
            return f"Erreur lors de la recherche : {e}"