File size: 4,123 Bytes
64278c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from smolagents import CodeAgent, DuckDuckGoSearchTool, FinalAnswerTool, HfApiModel, Tool, tool, VisitWebpageTool
import os

@tool
def suggest_menu(occasion: str) -> str:
    """
    Предлагает меню на основе случая.
    Args:
        occasion: Тип случая для вечеринки (casual, formal, superhero).
    """
    if occasion == "casual":
        return "Пицца, закуски и напитки."
    elif occasion == "formal":
        return "3-ходовой ужин с вином и десертом."
    elif occasion == "superhero":
        return "Буфет с высокоэнергетической и здоровой едой."
    else:
        return "Пользовательское меню для дворецкого."

@tool
def catering_service_tool(query: str) -> str:
    """
    Этот инструмент возвращает самый рейтинговый сервис кейтеринга в Готэм-Сити.
    
    Args:
        query: Поисковый запрос для поиска сервисов кейтеринга.
    """
    # Примерный список сервисов кейтеринга и их рейтингов
    services = {
        "Gotham Catering Co.": 4.9,
        "Wayne Manor Catering": 4.8,
        "Gotham City Events": 4.7,
    }
    
    # Найти самый рейтинговый сервис кейтеринга (симуляция фильтрации поискового запроса)
    best_service = max(services, key=services.get)
    
    return best_service

class SuperheroPartyThemeTool(Tool):
    name = "superhero_party_theme_generator"
    description = """
    Этот инструмент предлагает творческие идеи вечеринок на тему супергероев на основе категории.
    понимает такие категории:
        "classic heroes"
        "villain masquerade"
        "futuristic Gotham"
    Он возвращает уникальную идею вечеринки."""
    
    inputs = {
        "category": {
            "type": "string",
            "description": "Тип вечеринки супергероев (например, 'классические герои', 'маскарад злодеев', 'футуристический Готэм').",
        }
    }
    
    output_type = "string"

    def forward(self, category: str):
        themes = {
            "classic heroes": "Гала Лиги Справедливости: Гости приходят одетыми в своих любимых героев DC с тематическими коктейлями, такими как 'Панч Криптонита'.",
            "villain masquerade": "Бал злодеев Готэма: Таинственный маскарад, где гости одеваются как классические злодеи Бэтмена.",
            "futuristic Gotham": "Ночь Нео-Готэма: Вечеринка в стиле киберпанка, вдохновленная Бэтменом из будущего, с неоновыми украшениями и футуристическими гаджетами."
        }
        
        return themes.get(category.lower(), "Идея тематической вечеринки не найдена. Попробуйте 'классические герои', 'маскарад злодеев' или 'футуристический Готэм'.")


# Альфред, дворецкий, готовит меню для вечеринки
agent = CodeAgent(
    tools=[
        DuckDuckGoSearchTool(), 
        VisitWebpageTool(),
        suggest_menu,
        catering_service_tool,
        SuperheroPartyThemeTool()
    ], 
    model=HfApiModel(token=os.getenv('hf_token')),
    max_steps=10,
    verbosity_level=2
)

agent.run("Дайте мне лучшее меню для вечеринки в особняке Уэйна. Идея вечеринки - тема 'маскарад злодеев'")