File size: 4,298 Bytes
863c551
9b5b26a
 
 
c19d193
6aae614
9b5b26a
 
 
ef04855
505cc32
863c551
505cc32
 
863c551
 
505cc32
 
863c551
505cc32
a7c88c6
9b5b26a
 
 
863c551
 
 
 
 
 
 
 
 
 
9b5b26a
 
 
 
 
 
8c01ffb
a7c88c6
 
863c551
 
 
 
 
 
 
 
 
a7c88c6
 
 
 
 
 
 
 
8c01ffb
a7c88c6
 
863c551
 
 
 
 
 
a7c88c6
 
 
 
 
 
 
 
 
 
 
 
863c551
6aae614
a7c88c6
863c551
e121372
a7c88c6
 
d43e830
a7c88c6
13d500a
8c01ffb
863c551
9b5b26a
8c01ffb
863c551
861422e
 
ef04855
863c551
8c01ffb
8fe992b
a7c88c6
 
863c551
a7c88c6
 
 
 
 
 
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
863c551
a7c88c6
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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

@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
    """
    A tool that does (currently) nothing special, just a placeholder.

    Args:
        arg1: Текстовая строка в качестве первого аргумента.
        arg2: Целое число в качестве второго аргумента.

    Returns:
        Строка с сообщением-заглушкой.
    """
    return "What magic will you build?"

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """
    Fetches the current local time in a specified timezone.

    Args:
        timezone: Название часового пояса (например, 'America/New_York').

    Returns:
        Строка в формате 'YYYY-MM-DD HH:MM:SS' с локальным временем,
        или сообщение об ошибке, если часовой пояс не удалось обработать.
    """
    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)}"

@tool
def get_weather(location: str) -> str:
    """
    Fetches the current weather for a given location using wttr.in.

    Args:
        location: Название местоположения (например, 'London').

    Returns:
        Текстовое описание текущей погоды или сообщение об ошибке.
    """
    try:
        response = requests.get(f"http://wttr.in/{location}?format=3")
        if response.status_code == 200:
            return response.text
        else:
            return f"Error: Received status code {response.status_code}"
    except Exception as e:
        return f"Error fetching weather: {str(e)}"

@tool
def get_random_joke() -> str:
    """
    Fetches a random joke from the official-joke-api.

    Returns:
        Строка вида "setup - punchline" или сообщение об ошибке.
    """
    try:
        response = requests.get("https://official-joke-api.appspot.com/random_joke")
        if response.status_code == 200:
            joke_data = response.json()
            setup = joke_data.get("setup", "")
            punchline = joke_data.get("punchline", "")
            return f"{setup} - {punchline}"
        else:
            return f"Error: Received status code {response.status_code}"
    except Exception as e:
        return f"Error fetching joke: {str(e)}"

# Инструмент для вывода финального ответа
final_answer = FinalAnswerTool()

# Инициализация модели для агента через API Hugging Face
model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

# Загрузка инструмента генерации изображений с удалённого репозитория
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

# Загрузка шаблонов промтов из YAML-файла
with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

# Создание агента с расширенным списком инструментов
agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        my_custom_tool,                # Если переименовали выше, то здесь тоже
        get_current_time_in_timezone,
        get_weather,
        get_random_joke,
        image_generation_tool,
        DuckDuckGoSearchTool()
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

# Запуск пользовательского интерфейса через Gradio
GradioUI(agent).launch()