Youlln commited on
Commit
973e5fe
·
verified ·
1 Parent(s): ae7a494

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +270 -7
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 my_custom_tool(arg1:str, arg2:int)-> str: #it's import to specify the return type
13
- #Keep this format for the description / args / args description but feel free to modify the tool
14
- """A tool that does nothing yet
15
  Args:
16
- arg1: the first argument
17
- arg2: the second argument
 
 
18
  """
19
- return "What magic will you build ?"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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=[final_answer], ## add your tools here (don't remove final answer)
 
 
 
 
 
 
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,