File size: 4,240 Bytes
5ed6f3b
9b5b26a
 
 
c19d193
6aae614
9b5b26a
 
9e8f79d
d3f4ae6
1056355
e27cd26
d3f4ae6
 
e27cd26
1056355
d3f4ae6
1056355
d3f4ae6
 
 
 
e27cd26
d3f4ae6
 
 
 
 
 
 
 
 
 
 
 
 
1056355
d3f4ae6
 
 
9b5b26a
d3f4ae6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1ce23aa
d3f4ae6
 
 
 
1ce23aa
d3f4ae6
1ce23aa
5ed6f3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c5e9a1e
8c01ffb
9206cbc
1ce23aa
d3f4ae6
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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 generate_keywords(topic: str, max_keywords: int = 30) -> str:
    """Генерирует релевантные ключевые слова для заданной темы
    Args:
        topic: Тема для генерации (на русском языке)
        max_keywords: Максимальное количество возвращаемых ключевых слов
    """
    import random
    from collections import deque
    
    # Инициализация компонентов генерации
    base_words = [w.strip().lower() for w in topic.split() if len(w) > 2]
    if not base_words:
        return "Необходимо указать более конкретную тему"
    
    # Паттерны для генерации
    patterns = [
        ["вопросы", "что такое", "как сделать", "почему", "когда", "где найти"],
        ["топ", "лучшие", "рейтинг", "самые популярные"],
        ["методы", "способы", "технологии", "решения"],
        ["обзор", "отзывы", "сравнение", "виды"],
        ["курс", "урок", "обучение", "самоучитель"],
        ["2025", "новинки", "тренды", "будущее"],
        ["для начинающих", "профессиональные", "премиум"],
        ["бесплатно", "купить", "заказать", "стоимость"],
        ["преимущества", "недостатки", "польза", "вред"],
        ["идеи", "примеры", "кейсы", "истории успеха"]
    ]
    
    # Генерация вариантов
    keywords = set()
    queue = deque([(0, [], base_words)])
    
    while queue:
        level, current, remaining = queue.popleft()
        
        if level >= 3 or not remaining:
            if current:
                keywords.add(" ".join(current))
            continue
            
        # Добавляем паттерны
        if level == 0:
            for pattern_group in patterns:
                for p in pattern_group:
                    new_phrase = [p] + current
                    queue.append((level+1, new_phrase, remaining))
        
        # Комбинируем слова
        for i in range(len(remaining)):
            next_word = remaining[i]
            new_phrase = current + [next_word]
            new_remaining = remaining[:i] + remaining[i+1:]
            queue.append((level+1, new_phrase, new_remaining))
            
            # Добавляем модификаторы
            modifiers = ["", "2025", "курс", "обзор", "топ", "способы"]
            for mod in modifiers:
                if mod:
                    modified = current + [f"{next_word}-{mod}"]
                    queue.append((level+2, modified, new_remaining))
    
    # Ранжирование и выборка
    result = sorted(keywords, 
                   key=lambda x: (-len(x.split()), x))
    random.shuffle(result[:len(result)//2])
    
    return ", ".join(result[:max(max_keywords, 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,
        generate_keywords,
        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()