File size: 2,992 Bytes
f457dfb
9b5b26a
f457dfb
9b5b26a
f457dfb
 
6aae614
9b5b26a
 
 
 
f457dfb
9b5b26a
f457dfb
9b5b26a
 
 
 
f457dfb
9b5b26a
f457dfb
8c01ffb
f457dfb
 
 
 
 
 
 
 
8c01ffb
f457dfb
 
 
 
 
 
 
 
ae7a494
f457dfb
 
 
 
 
ae7a494
f457dfb
 
 
 
 
 
 
8c01ffb
f457dfb
 
 
 
 
 
 
 
8c01ffb
f457dfb
 
 
 
 
 
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
f457dfb
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
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
from smolagents import CodeAgent, HfApiModel, load_tool, tool
import datetime
import random
import pytz
yaml
from deep_translator import GoogleTranslator
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """Получает текущее локальное время в указанном часовом поясе.
    Args:
        timezone: Название часового пояса (например, 'Europe/Moscow').
    """
    try:
        tz = pytz.timezone(timezone)
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
        return f"Текущее время в {timezone}: {local_time}"
    except Exception as e:
        return f"Ошибка: {str(e)}"

@tool
def generate_random_number(min_value: int, max_value: int) -> int:
    """Генерирует случайное число в заданном диапазоне.
    Args:
        min_value: Минимальное значение.
        max_value: Максимальное значение.
    """
    return random.randint(min_value, max_value)

@tool
def convert_text_case(text: str, to_upper: bool) -> str:
    """Конвертирует текст в верхний или нижний регистр.
    Args:
        text: Исходный текст.
        to_upper: Если True - в верхний регистр, иначе - в нижний.
    """
    return text.upper() if to_upper else text.lower()

@tool
def get_current_date() -> str:
    """Возвращает текущую дату и день недели."""
    now = datetime.datetime.now()
    return now.strftime("Сегодня %Y-%m-%d, %A")

@tool
def translate_text(text: str) -> str:
    """Переводит текст на немецкий язык.
    Args:
        text: Исходный текст.
    """
    return GoogleTranslator(source='auto', target='de').translate(text)

@tool
def generate_password(length: int) -> str:
    """Генерирует случайный пароль заданной длины.
    Args:
        length: Длина пароля.
    """
    characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()"
    return "".join(random.choice(characters) for _ in range(length))

final_answer = FinalAnswerTool()
model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)
    
agent = CodeAgent(
    model=model,
    tools=[final_answer, get_current_time_in_timezone, generate_random_number, convert_text_case, get_current_date, translate_text, generate_password],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

GradioUI(agent).launch()