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() |