Spaces:
Sleeping
Sleeping
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()
|