File size: 2,927 Bytes
5ed6f3b
9b5b26a
 
 
c19d193
6aae614
b8ae322
9b5b26a
 
b8ae322
572dfbb
9e8f79d
572dfbb
 
e27cd26
572dfbb
 
b8ae322
572dfbb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b8ae322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1ce23aa
5ed6f3b
b8ae322
5ed6f3b
b8ae322
 
 
 
5ed6f3b
 
b8ae322
 
5ed6f3b
 
 
 
b8ae322
8c01ffb
9206cbc
572dfbb
8c01ffb
 
 
 
 
 
861422e
1ce23aa
8fe992b
b8ae322
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
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

# Below is an example of a tool that does nothing. Amaze us with your creativity!

@tool
def generate_keywords(topic: str, max_keywords: int) -> str:
    """A tool that generates the most relevant keywords based on a given topic.
    Args:
        topic: the subject or theme for which keywords need to be generated
        max_keywords: the maximum number of keywords to generate
    """
    # Basic preprocessing to remove common stopwords (without external libraries)
    stopwords = set(["и", "в", "на", "с", "по", "для", "как", "что", "это", "а", "но", "я", "у", "за", "из", "о", "об", "от"])
    
    # Splitting the topic into words and filtering out short words and stopwords
    words = topic.lower().split()
    filtered_words = [word for word in words if len(word) > 2 and word not in stopwords]
    
    # Generating unique keywords by frequency and limiting to max_keywords
    keyword_frequency = {}
    for word in filtered_words:
        keyword_frequency[word] = keyword_frequency.get(word, 0) + 1
    
    # Sorting keywords by frequency (descending) and selecting top ones
    sorted_keywords = sorted(keyword_frequency.keys(), key=lambda x: keyword_frequency[x], reverse=True)
    top_keywords = sorted_keywords[:max_keywords]
    
    return ", ".join(top_keywords) if top_keywords else "Нет релевантных ключевых слов"


@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """A tool that fetches the current local time in a specified timezone.
    Args:
        timezone: A string representing a valid timezone (e.g., 'America/New_York').
    """
    try:
        # Create timezone object
        tz = pytz.timezone(timezone)
        # Get current time in that 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)}"


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


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

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)
    
agent = CodeAgent(
    model=model,
    tools=[final_answer, generate_keywords], # add your tools here (don't remove final_answer)
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)


GradioUI(agent).launch()