MasterOfHugs commited on
Commit
4a79093
·
verified ·
1 Parent(s): 759adc5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +132 -47
app.py CHANGED
@@ -1,47 +1,132 @@
1
- # tool_docstring_test.py
2
- from smolagents import tool
3
- import json, sys
4
-
5
- results = []
6
-
7
- # Variante A : une ligne par argument, sans "Args:" (format minimal)
8
- try:
9
- @tool
10
- def f_a(query: str, max_results: int = 5) -> str:
11
- """query: La requête exacte à rechercher sur internet
12
- max_results: Nombre maximum de résultats à retourner"""
13
- return "A"
14
- results.append(("A", "OK"))
15
- except Exception as e:
16
- results.append(("A", f"ERR: {type(e).__name__}: {e}"))
17
-
18
- # Variante B : style Google (Args: block)
19
- try:
20
- @tool
21
- def f_b(query: str, max_results: int = 5) -> str:
22
- """
23
- Perform a web search.
24
-
25
- Args:
26
- query (str): The search query.
27
- max_results (int): Maximum results to return.
28
- """
29
- return "B"
30
- results.append(("B", "OK"))
31
- except Exception as e:
32
- results.append(("B", f"ERR: {type(e).__name__}: {e}"))
33
-
34
- # Variante C : Sphinx-like param lines (param: desc)
35
- try:
36
- @tool
37
- def f_c(query: str, max_results: int = 5) -> str:
38
- """
39
- query (str): The search query.
40
- max_results (int): Maximum results to return.
41
- """
42
- return "C"
43
- results.append(("C", "OK"))
44
- except Exception as e:
45
- results.append(("C", f"ERR: {type(e).__name__}: {e}"))
46
-
47
- print(json.dumps(results, ensure_ascii=False, indent=2))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from smolagents import CodeAgent, HfApiModel, tool
2
+ from duckduckgo_search import DDGS
3
+ import requests
4
+ from bs4 import BeautifulSoup
5
+ import datetime
6
+ import pytz
7
+ import yaml
8
+ from tools.final_answer import FinalAnswerTool
9
+ from Gradio_UI import GradioUI
10
+ import json
11
+
12
+ #---------------------------------------------------------------------------#
13
+ #--------------------------------- Tools ----------------------------------#
14
+ #---------------------------------------------------------------------------#
15
+
16
+ @tool
17
+ def web_search(query: str, max_results: int = 5) -> str:
18
+ """
19
+ Recherche des informations sur internet via DuckDuckGo et retourne une liste de résultats JSON.
20
+
21
+ Args:
22
+ query (str): La requête de recherche.
23
+ max_results (int): Nombre maximum de résultats à retourner.
24
+
25
+ Returns:
26
+ str: Liste JSON des résultats de recherche.
27
+ """
28
+ try:
29
+ with DDGS() as ddgs:
30
+ results = list(ddgs.text(query, max_results=max_results))
31
+ return json.dumps(results, ensure_ascii=False, indent=2)
32
+ except Exception as e:
33
+ return json.dumps({"error": str(e)})
34
+
35
+ @tool
36
+ def get_current_time_in_timezone(timezone: str) -> str:
37
+ """
38
+ Retourne l’heure locale actuelle dans un fuseau horaire donné.
39
+
40
+ Args:
41
+ timezone (str): Un fuseau horaire valide (ex: 'America/New_York').
42
+
43
+ Returns:
44
+ str: Heure locale formatée ou message d’erreur.
45
+ """
46
+ try:
47
+ tz = pytz.timezone(timezone)
48
+ local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
49
+ return f"L’heure locale à {timezone} est {local_time}"
50
+ except Exception as e:
51
+ return f"Erreur pour le fuseau horaire '{timezone}': {str(e)}"
52
+
53
+ @tool
54
+ def visit_webpage(url: str) -> str:
55
+ """
56
+ Télécharge le HTML complet d’une page web avec User-Agent.
57
+
58
+ Args:
59
+ url (str): URL de la page web.
60
+
61
+ Returns:
62
+ str: Contenu HTML de la page.
63
+ """
64
+ headers = {
65
+ "User-Agent": (
66
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
67
+ "AppleWebKit/537.36 (KHTML, like Gecko) "
68
+ "Chrome/122.0.0.0 Safari/537.36"
69
+ )
70
+ }
71
+ resp = requests.get(url, headers=headers, timeout=10)
72
+ resp.raise_for_status()
73
+ return resp.text
74
+
75
+ @tool
76
+ def parse_html(html: str, css_selector: str) -> list:
77
+ """
78
+ Extrait du texte d’éléments HTML via un sélecteur CSS.
79
+
80
+ Args:
81
+ html (str): Code HTML complet.
82
+ css_selector (str): Sélecteur CSS (ex: 'table tr td:last-child').
83
+
84
+ Returns:
85
+ list: Liste de textes extraits des éléments correspondant au sélecteur.
86
+ """
87
+ soup = BeautifulSoup(html, "html.parser")
88
+ elements = soup.select(css_selector)
89
+ return [el.get_text(strip=True) for el in elements]
90
+
91
+ #---------------------------------------------------------------------------#
92
+ #------------------------------- Agent Init -------------------------------#
93
+ #---------------------------------------------------------------------------#
94
+
95
+ final_answer = FinalAnswerTool()
96
+
97
+ # Utiliser un modèle gratuit
98
+ model = HfApiModel(
99
+ max_tokens=1024,
100
+ temperature=0.5,
101
+ model_id='Qwen/Qwen2.5-small-Instruct',
102
+ custom_role_conversions=None,
103
+ )
104
+
105
+ # Charger les templates de prompt
106
+ with open("prompts.yaml", 'r') as stream:
107
+ prompt_templates = yaml.safe_load(stream)
108
+
109
+ # Créer l’agent avec les outils
110
+ agent = CodeAgent(
111
+ model=model,
112
+ tools=[
113
+ final_answer,
114
+ web_search,
115
+ get_current_time_in_timezone,
116
+ visit_webpage,
117
+ parse_html
118
+ ],
119
+ max_steps=6,
120
+ verbosity_level=1,
121
+ grammar=None,
122
+ planning_interval=None,
123
+ name="InfoAgent",
124
+ description="Un agent capable de donner l’heure, rechercher sur internet et analyser des pages web",
125
+ prompt_templates=prompt_templates
126
+ )
127
+
128
+ #---------------------------------------------------------------------------#
129
+ #------------------------------- Launch UI --------------------------------#
130
+ #---------------------------------------------------------------------------#
131
+
132
+ GradioUI(agent).launch()