File size: 3,184 Bytes
efc0b2a
 
 
 
 
 
b0cbd03
 
efc0b2a
 
 
 
b0cbd03
efc0b2a
 
 
 
b0cbd03
efc0b2a
b0cbd03
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
efc0b2a
 
b0cbd03
efc0b2a
b0cbd03
 
 
 
 
 
 
 
 
efc0b2a
b0cbd03
ae1c34a
b0cbd03
 
 
ae1c34a
 
b0cbd03
 
 
ae1c34a
 
b0cbd03
ae1c34a
 
b0cbd03
 
 
 
ae1c34a
 
 
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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()