| | 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() |