File size: 3,836 Bytes
7b57849
9b5b26a
 
 
c19d193
6aae614
9b5b26a
7b57849
9b5b26a
 
7b57849
9b5b26a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
7b57849
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
7b57849
 
 
 
 
 
 
 
 
ae7a494
7b57849
ae7a494
7b57849
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e121372
7b57849
 
 
 
13d500a
8c01ffb
9b5b26a
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
7b57849
 
 
 
 
 
 
 
 
 
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
7b57849
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
116
117
118
119
120
121
122
123
124
125
126
127
128
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
import math

@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
    """A tool that does nothing yet 
    Args:
        arg1: the first argument
        arg2: the second argument
    """
    return "What magic will you build ?"

@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:
        tz = pytz.timezone(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)}"

@tool
def get_random_joke() -> str:
    """A tool that fetches a random joke from the Official Joke API.
    Returns:
        A string containing a random joke.
    """
    try:
        response = requests.get("https://official-joke-api.appspot.com/random_joke")
        if response.status_code == 200:
            data = response.json()
            joke = f"{data['setup']} {data['punchline']}"
            return joke
        else:
            return f"Failed to fetch a joke. Status code: {response.status_code}"
    except Exception as e:
        return f"Error occurred while fetching joke: {str(e)}"

@tool
def reverse_text(text: str) -> str:
    """A tool that reverses the given text.
    Args:
        text: The text to be reversed.
    Returns:
        A string that is the reverse of the input text.
    """
    return text[::-1]

# --- Yeni Eklenen Araçlar ---

@tool
def calculate_factorial(n: int) -> str:
    """Verilen bir sayının faktöriyelini hesaplar.
    Args:
        n: Negatif olmayan bir tam sayı.
    Returns:
        n sayısının faktöriyeli veya hata mesajı.
    """
    try:
        result = math.factorial(n)
        return f"{n}! = {result}"
    except Exception as e:
        return f"Error calculating factorial for {n}: {str(e)}"

@tool
def check_palindrome(text: str) -> str:
    """Girilen metnin palindrom olup olmadığını kontrol eder.
    Args:
        text: Kontrol edilecek metin.
    Returns:
        Metnin palindrom olup olmadığına dair bir açıklama.
    """
    # Metni küçük harfe çevirip, alfasayısal karakterler dışındaki tüm karakterleri kaldırıyoruz.
    normalized_text = ''.join(char.lower() for char in text if char.isalnum())
    if normalized_text == normalized_text[::-1]:
        return "Yes, the text is a palindrome."
    else:
        return "No, the text is not a palindrome."

final_answer = FinalAnswerTool()

# Eğer model aşırı yüklü ise, alternatif endpoint kullanabilirsiniz:
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,
    # final_answer aracını silmeyin; ek olarak diğer tool'ları da ekleyebilirsiniz.
    tools=[
        final_answer, 
        my_custom_tool, 
        get_current_time_in_timezone, 
        get_random_joke, 
        reverse_text,
        calculate_factorial,
        check_palindrome
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

GradioUI(agent).launch()