File size: 3,327 Bytes
5ed6f3b
9b5b26a
 
 
c19d193
6aae614
9b5b26a
 
9e8f79d
1056355
 
e27cd26
1056355
 
e27cd26
1056355
 
 
 
e27cd26
1056355
 
 
 
 
e27cd26
 
1056355
 
e27cd26
1056355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
1056355
 
 
 
 
 
1ce23aa
1056355
 
 
1ce23aa
1056355
 
1ce23aa
5ed6f3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c5e9a1e
8c01ffb
9206cbc
1ce23aa
1056355
1ce23aa
 
 
9206cbc
8c01ffb
 
 
 
 
 
861422e
1ce23aa
8fe992b
9206cbc
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
88
89
90
91
92
93
94
95
96
97
98
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 keyword_research_tool(topic: str, max_results: int) -> str:
    """Генерирует релевантные ключевые слова для заданной темы
    Args:
        topic: Основная тема для генерации ключевых слов
        max_results: Максимальное количество возвращаемых ключевых слов
    """
    import random
    from typing import List
    
    # Базовые модификаторы для расширения темы
    modifiers = [
        "лучшие", "топ", "как", "советы", "рецепты",
        "польза", "вред", "отзывы", "купить", "сделать",
        "обзор", "курс", "уроки", "для начинающих", 
        "2023", "идеи", "примеры", "методы", "технологии",
        "тренды", "планы", "стоимость", "бесплатно", "преимущества"
    ]
    
    # Разбиваем тему на основные слова
    seed_words = [word.strip() for word in topic.split() if len(word) > 3]
    
    # Генерируем комбинации
    candidates = set()
    
    # Добавляем базовые варианты
    candidates.add(topic)
    candidates.add(f"лучшие {topic}")
    candidates.add(f"{topic} 2023")
    
    # Генерируем комбинации с модификаторами
    for modifier in modifiers:
        candidates.add(f"{modifier} {topic}")
        candidates.add(f"{topic} {modifier}")
        for word in seed_words:
            candidates.add(f"{modifier} {word}")
            candidates.add(f"{word} {modifier}")
    
    # Добавляем вопросы
    question_words = ["как", "что", "где", "когда", "почему"]
    for qw in question_words:
        candidates.add(f"{qw} {topic}")
        for word in seed_words:
            candidates.add(f"{qw} {word}")
    
    # Преобразуем в список и перемешиваем
    results = list(candidates)
    random.shuffle(results)
    
    # Выбираем запрошенное количество
    return ", ".join(results[:max(max_results, 1)])

# Initialize components
final_answer = FinalAnswerTool()

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

# Load tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

# Load prompt templates
with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

# Create agent
agent = CodeAgent(
    tools=[
        image_generation_tool,
        keyword_research_tool,
        final_answer,
        DuckDuckGoSearchTool()
    ],
    model=model,
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

# Launch UI
GradioUI(agent).launch()