File size: 3,577 Bytes
5dcc0bf
 
9f79217
9b5b26a
8d98764
9b5b26a
c19d193
6aae614
88b369f
3e25cf9
8d98764
9b5b26a
 
8d98764
1d69ff0
8d98764
1d69ff0
9b5b26a
 
 
 
 
8d98764
88b369f
8d98764
9f79217
 
8d98764
1d69ff0
8d98764
 
1d69ff0
9f79217
 
 
 
 
 
 
 
 
8d98764
 
9f79217
8d98764
88b369f
8d98764
9f79217
8d98764
 
1d69ff0
8d98764
 
1d69ff0
9f79217
8d98764
9f79217
8d98764
 
 
 
 
 
 
 
9f79217
8d98764
9f79217
8d98764
 
 
 
 
88b369f
544b5bc
c991dfb
 
9f79217
8d98764
13d500a
8c01ffb
861422e
 
a5c8aa4
8d98764
045306d
 
9f79217
8d98764
 
 
 
 
9f79217
88b369f
 
8d98764
 
 
 
045306d
 
8fe992b
8d98764
8c01ffb
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#Àlex Bescós (1709480) | Aleix Vers (1702621)

from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

# Herramienta para obtener la hora en una zona horaria específica
@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """A tool that fetches the current local time in a specified timezone.
    Args:
        timezone: A string representing a valid timezone (e.g., 'America/New_York').
    """
    try:
        tz = pytz.timezone(timezone)
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
        return f"The current local time in {timezone} is: {local_time}"
    except Exception as e:
        return f"Error fetching time for timezone '{timezone}': {str(e)}"

# Primer nuevo tool: Traductor de texto
@tool
def text_translator(text: str, target_language: str) -> str:
    """A tool that translates text to a specified target language.
    Args:
        text: The text to be translated.
        target_language: The target language code (e.g., 'es' for Spanish, 'fr' for French).
    """
    try:
        try:
            from translate import Translator
        except ImportError:
            import subprocess, sys
            subprocess.check_call([sys.executable, "-m", "pip", "install", "translate"])
            from translate import Translator
        
        translator = Translator(to_lang=target_language)
        translation = translator.translate(text)
        return f"Translation to {target_language}: {translation}"
    except Exception as e:
        return f"Translation failed: {str(e)}"

# Segundo nuevo tool: Búsqueda y resumen de información
@tool
def search_and_summarize(query: str, max_results: int = 3) -> str:
    """A tool that performs a web search and provides summaries of the top results.
    Args:
        query: The search query.
        max_results: Maximum number of results to return (default 3).
    """
    try:
        search_results = DuckDuckGoSearchTool()(query)
        
        if not search_results:
            return "No results found for the query."
            
        summaries = []
        for i, result in enumerate(search_results[:max_results]):
            summaries.append(f"Result {i+1}:\nTitle: {result.get('title', 'No title')}\n"
                           f"URL: {result.get('link', 'No URL')}\n"
                           f"Snippet: {result.get('snippet', 'No snippet available')}")
        
        return "\n\n".join(summaries)
    except Exception as e:
        return f"Search and summarize failed: {str(e)}"

# Configuración del modelo y herramientas
final_answer = FinalAnswerTool()
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id="mistralai/Mistral-Small-3.1-24B-Instruct-2503",
    custom_role_conversions=None,
)

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

# Creación del agente con todas las herramientas
agent = CodeAgent(
    model=model,
    tools=[
        final_answer, 
        image_generation_tool, 
        get_current_time_in_timezone, 
        text_translator, 
        search_and_summarize
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

# Lanzamiento de la interfaz
GradioUI(agent).launch()