Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -9,14 +9,271 @@ from Gradio_UI import GradioUI
|
|
9 |
|
10 |
# Below is an example of a tool that does nothing. Amaze us with your creativity !
|
11 |
@tool
|
12 |
-
def
|
13 |
-
|
14 |
-
|
15 |
Args:
|
16 |
-
|
17 |
-
|
|
|
|
|
18 |
"""
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
@tool
|
22 |
def get_current_time_in_timezone(timezone: str) -> str:
|
@@ -55,7 +312,13 @@ with open("prompts.yaml", 'r') as stream:
|
|
55 |
|
56 |
agent = CodeAgent(
|
57 |
model=model,
|
58 |
-
tools=[
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
max_steps=6,
|
60 |
verbosity_level=1,
|
61 |
grammar=None,
|
|
|
9 |
|
10 |
# Below is an example of a tool that does nothing. Amaze us with your creativity !
|
11 |
@tool
|
12 |
+
def task_manager(action: str, task_id: str = None, description: str = None, priority: str = None) -> str:
|
13 |
+
"""Un outil pour gérer une liste de tâches avec priorités.
|
14 |
+
|
15 |
Args:
|
16 |
+
action: L'action à effectuer ('add', 'list', 'complete', 'delete')
|
17 |
+
task_id: L'identifiant de la tâche (pour complete/delete)
|
18 |
+
description: La description de la tâche (pour add)
|
19 |
+
priority: La priorité de la tâche ('high', 'medium', 'low') (pour add)
|
20 |
"""
|
21 |
+
import os
|
22 |
+
import json
|
23 |
+
|
24 |
+
# Fichier de stockage des tâches
|
25 |
+
tasks_file = "agent_tasks.json"
|
26 |
+
|
27 |
+
# Charger les tâches existantes
|
28 |
+
if os.path.exists(tasks_file):
|
29 |
+
with open(tasks_file, 'r') as f:
|
30 |
+
try:
|
31 |
+
tasks = json.load(f)
|
32 |
+
except:
|
33 |
+
tasks = []
|
34 |
+
else:
|
35 |
+
tasks = []
|
36 |
+
|
37 |
+
if action == "add" and description:
|
38 |
+
# Générer un ID simple
|
39 |
+
task_id = str(len(tasks) + 1)
|
40 |
+
task = {
|
41 |
+
"id": task_id,
|
42 |
+
"description": description,
|
43 |
+
"priority": priority or "medium",
|
44 |
+
"completed": False
|
45 |
+
}
|
46 |
+
tasks.append(task)
|
47 |
+
with open(tasks_file, 'w') as f:
|
48 |
+
json.dump(tasks, f)
|
49 |
+
return f"Tâche ajoutée avec ID: {task_id}"
|
50 |
+
|
51 |
+
elif action == "list":
|
52 |
+
if not tasks:
|
53 |
+
return "Aucune tâche trouvée."
|
54 |
+
|
55 |
+
result = "Liste des tâches:\n"
|
56 |
+
for task in tasks:
|
57 |
+
status = "✓" if task["completed"] else "□"
|
58 |
+
result += f"{status} [{task['id']}] ({task['priority']}) {task['description']}\n"
|
59 |
+
return result
|
60 |
+
|
61 |
+
elif action == "complete" and task_id:
|
62 |
+
for task in tasks:
|
63 |
+
if task["id"] == task_id:
|
64 |
+
task["completed"] = True
|
65 |
+
with open(tasks_file, 'w') as f:
|
66 |
+
json.dump(tasks, f)
|
67 |
+
return f"Tâche {task_id} marquée comme terminée."
|
68 |
+
return f"Tâche {task_id} non trouvée."
|
69 |
+
|
70 |
+
elif action == "delete" and task_id:
|
71 |
+
tasks = [task for task in tasks if task["id"] != task_id]
|
72 |
+
with open(tasks_file, 'w') as f:
|
73 |
+
json.dump(tasks, f)
|
74 |
+
return f"Tâche {task_id} supprimée."
|
75 |
+
|
76 |
+
return "Action non reconnue. Utilisez 'add', 'list', 'complete', ou 'delete'."
|
77 |
+
|
78 |
+
@tool
|
79 |
+
def timer_tool(action: str, duration: int = None, timer_name: str = "default") -> str:
|
80 |
+
"""Un outil pour gérer des minuteurs et chronomètres.
|
81 |
+
|
82 |
+
Args:
|
83 |
+
action: L'action à effectuer ('start', 'check', 'stop')
|
84 |
+
duration: Durée en secondes pour le minuteur (uniquement pour 'start')
|
85 |
+
timer_name: Nom du minuteur/chronomètre (optionnel)
|
86 |
+
"""
|
87 |
+
import os
|
88 |
+
import json
|
89 |
+
import time
|
90 |
+
|
91 |
+
timers_file = "agent_timers.json"
|
92 |
+
|
93 |
+
# Charger les minuteurs existants
|
94 |
+
if os.path.exists(timers_file):
|
95 |
+
with open(timers_file, 'r') as f:
|
96 |
+
try:
|
97 |
+
timers = json.load(f)
|
98 |
+
except:
|
99 |
+
timers = {}
|
100 |
+
else:
|
101 |
+
timers = {}
|
102 |
+
|
103 |
+
current_time = time.time()
|
104 |
+
|
105 |
+
if action == "start":
|
106 |
+
if duration:
|
107 |
+
# C'est un minuteur
|
108 |
+
timers[timer_name] = {
|
109 |
+
"type": "timer",
|
110 |
+
"start_time": current_time,
|
111 |
+
"duration": duration,
|
112 |
+
"end_time": current_time + duration
|
113 |
+
}
|
114 |
+
result = f"Minuteur '{timer_name}' démarré pour {duration} secondes."
|
115 |
+
else:
|
116 |
+
# C'est un chronomètre
|
117 |
+
timers[timer_name] = {
|
118 |
+
"type": "stopwatch",
|
119 |
+
"start_time": current_time
|
120 |
+
}
|
121 |
+
result = f"Chronomètre '{timer_name}' démarré."
|
122 |
+
|
123 |
+
with open(timers_file, 'w') as f:
|
124 |
+
json.dump(timers, f)
|
125 |
+
return result
|
126 |
+
|
127 |
+
elif action == "check":
|
128 |
+
if timer_name not in timers:
|
129 |
+
return f"Aucun minuteur/chronomètre nommé '{timer_name}' trouvé."
|
130 |
+
|
131 |
+
timer = timers[timer_name]
|
132 |
+
if timer["type"] == "timer":
|
133 |
+
remaining = timer["end_time"] - current_time
|
134 |
+
if remaining <= 0:
|
135 |
+
return f"Le minuteur '{timer_name}' est terminé !"
|
136 |
+
else:
|
137 |
+
return f"Il reste {int(remaining)} secondes sur le minuteur '{timer_name}'."
|
138 |
+
else:
|
139 |
+
elapsed = current_time - timer["start_time"]
|
140 |
+
return f"Le chronomètre '{timer_name}' est en cours depuis {int(elapsed)} secondes."
|
141 |
+
|
142 |
+
elif action == "stop":
|
143 |
+
if timer_name not in timers:
|
144 |
+
return f"Aucun minuteur/chronomètre nommé '{timer_name}' trouvé."
|
145 |
+
|
146 |
+
timer = timers[timer_name]
|
147 |
+
if timer["type"] == "timer":
|
148 |
+
remaining = timer["end_time"] - current_time
|
149 |
+
if remaining <= 0:
|
150 |
+
message = f"Le minuteur '{timer_name}' était déjà terminé."
|
151 |
+
else:
|
152 |
+
message = f"Le minuteur '{timer_name}' arrêté. Il restait {int(remaining)} secondes."
|
153 |
+
else:
|
154 |
+
elapsed = current_time - timer["start_time"]
|
155 |
+
message = f"Chronomètre '{timer_name}' arrêté après {int(elapsed)} secondes."
|
156 |
+
|
157 |
+
del timers[timer_name]
|
158 |
+
with open(timers_file, 'w') as f:
|
159 |
+
json.dump(timers, f)
|
160 |
+
return message
|
161 |
+
|
162 |
+
return "Action non reconnue. Utilisez 'start', 'check', ou 'stop'."
|
163 |
+
|
164 |
+
@tool
|
165 |
+
def inspiration_generator(mode: str = "quote", theme: str = None, length: str = "medium") -> str:
|
166 |
+
"""Un outil qui génère des phrases inspirantes, des mantras ou des défis créatifs aléatoires.
|
167 |
+
|
168 |
+
Args:
|
169 |
+
mode: Type de contenu à générer ('quote', 'mantra', 'challenge')
|
170 |
+
theme: Thème optionnel (ex: 'success', 'creativity', 'health')
|
171 |
+
length: Longueur du texte ('short', 'medium', 'long')
|
172 |
+
"""
|
173 |
+
import random
|
174 |
+
|
175 |
+
# Bases de données de citations par thème
|
176 |
+
quotes = {
|
177 |
+
"success": [
|
178 |
+
"Le succès n'est pas final, l'échec n'est pas fatal : c'est le courage de continuer qui compte.",
|
179 |
+
"Le succès, c'est d'aller d'échec en échec sans perdre son enthousiasme.",
|
180 |
+
"Le succès semble être lié à l'action. Les gens qui réussissent sont ceux qui bougent.",
|
181 |
+
],
|
182 |
+
"creativity": [
|
183 |
+
"La créativité, c'est l'intelligence qui s'amuse.",
|
184 |
+
"Tout ce que vous pouvez imaginer est réel.",
|
185 |
+
"La créativité n'attend pas l'inspiration, elle la provoque.",
|
186 |
+
],
|
187 |
+
"health": [
|
188 |
+
"La santé n'est pas tout, mais sans la santé tout n'est rien.",
|
189 |
+
"Prendre soin de son corps est une nécessité, pas un luxe.",
|
190 |
+
"Votre corps est le temple de votre âme, prenez-en soin.",
|
191 |
+
],
|
192 |
+
"general": [
|
193 |
+
"Le meilleur moment pour planter un arbre était il y a 20 ans. Le deuxième meilleur moment est maintenant.",
|
194 |
+
"Ne jugez pas chaque jour par ce que vous récoltez, mais par les graines que vous plantez.",
|
195 |
+
"La seule limite à notre réalisation de demain sera nos doutes d'aujourd'hui.",
|
196 |
+
]
|
197 |
+
}
|
198 |
+
|
199 |
+
# Mantras par thème
|
200 |
+
mantras = {
|
201 |
+
"success": [
|
202 |
+
"Je suis capable de réussir tout ce que j'entreprends.",
|
203 |
+
"Chaque jour, je me rapproche de mes objectifs.",
|
204 |
+
"Je transforme les obstacles en opportunités."
|
205 |
+
],
|
206 |
+
"creativity": [
|
207 |
+
"Mon esprit est une source infinie d'idées nouvelles.",
|
208 |
+
"Je vois des possibilités là où d'autres voient des limites.",
|
209 |
+
"Ma créativité s'exprime librement dans tout ce que je fais."
|
210 |
+
],
|
211 |
+
"health": [
|
212 |
+
"Mon corps est fort, mon esprit est clair.",
|
213 |
+
"Je choisis la santé et le bien-être chaque jour.",
|
214 |
+
"Je respecte et honore mon corps à chaque instant."
|
215 |
+
],
|
216 |
+
"general": [
|
217 |
+
"Je suis exactement là où je dois être.",
|
218 |
+
"Je suis en paix avec ce qui est, et enthousiaste pour ce qui vient.",
|
219 |
+
"Aujourd'hui, j'accueille toutes les possibilités."
|
220 |
+
]
|
221 |
+
}
|
222 |
+
|
223 |
+
# Défis créatifs par thème
|
224 |
+
challenges = {
|
225 |
+
"success": [
|
226 |
+
"Identifiez trois obstacles à votre succès et trouvez une solution pour chacun aujourd'hui.",
|
227 |
+
"Contactez quelqu'un qui a réussi dans votre domaine et demandez-lui son meilleur conseil.",
|
228 |
+
"Définissez trois petites victoires que vous pouvez accomplir aujourd'hui."
|
229 |
+
],
|
230 |
+
"creativity": [
|
231 |
+
"Créez quelque chose en utilisant uniquement des objets bleus.",
|
232 |
+
"Écrivez une histoire de 50 mots qui commence et finit par le même mot.",
|
233 |
+
"Dessinez votre idée avec votre main non dominante."
|
234 |
+
],
|
235 |
+
"health": [
|
236 |
+
"Essayez une nouvelle recette saine que vous n'avez jamais préparée auparavant.",
|
237 |
+
"Faites une séance d'exercice de 7 minutes sans équipement.",
|
238 |
+
"Méditez pendant 5 minutes en vous concentrant uniquement sur votre respiration."
|
239 |
+
],
|
240 |
+
"general": [
|
241 |
+
"Faites quelque chose aujourd'hui que vous remettez à plus tard depuis longtemps.",
|
242 |
+
"Écrivez trois choses pour lesquelles vous êtes reconnaissant(e) et pourquoi.",
|
243 |
+
"Passez une heure sans technologie et notez comment vous vous sentez."
|
244 |
+
]
|
245 |
+
}
|
246 |
+
|
247 |
+
# Sélectionner la base de données appropriée
|
248 |
+
if mode == "quote":
|
249 |
+
database = quotes
|
250 |
+
elif mode == "mantra":
|
251 |
+
database = mantras
|
252 |
+
elif mode == "challenge":
|
253 |
+
database = challenges
|
254 |
+
else:
|
255 |
+
return "Mode non reconnu. Utilisez 'quote', 'mantra', ou 'challenge'."
|
256 |
+
|
257 |
+
# Sélectionner le thème
|
258 |
+
if theme and theme in database:
|
259 |
+
selected_theme = theme
|
260 |
+
else:
|
261 |
+
selected_theme = random.choice(list(database.keys()))
|
262 |
+
|
263 |
+
# Sélectionner le contenu en fonction de la longueur
|
264 |
+
options = database[selected_theme]
|
265 |
+
|
266 |
+
if length == "short":
|
267 |
+
# Sélectionner le plus court
|
268 |
+
result = min(options, key=len)
|
269 |
+
elif length == "long":
|
270 |
+
# Sélectionner le plus long
|
271 |
+
result = max(options, key=len)
|
272 |
+
else:
|
273 |
+
# Sélectionner aléatoirement
|
274 |
+
result = random.choice(options)
|
275 |
+
|
276 |
+
return result
|
277 |
|
278 |
@tool
|
279 |
def get_current_time_in_timezone(timezone: str) -> str:
|
|
|
312 |
|
313 |
agent = CodeAgent(
|
314 |
model=model,
|
315 |
+
tools=[
|
316 |
+
final_answer,
|
317 |
+
task_manager,
|
318 |
+
timer_tool,
|
319 |
+
inspiration_generator,
|
320 |
+
get_current_time_in_timezone
|
321 |
+
], ## add your tools here (don't remove final answer)
|
322 |
max_steps=6,
|
323 |
verbosity_level=1,
|
324 |
grammar=None,
|