File size: 3,929 Bytes
c0b5446
6aae614
9b5b26a
c0b5446
 
553d231
 
 
 
af81fb8
553d231
 
 
9b5b26a
c0b5446
 
 
 
 
 
9b5b26a
c0b5446
 
9b5b26a
c0b5446
 
9b5b26a
c0b5446
 
9b5b26a
 
 
c0b5446
9b5b26a
 
 
 
c0b5446
 
9b5b26a
 
 
8c01ffb
 
ae7a494
c0b5446
 
 
ae7a494
c0b5446
 
 
 
af81fb8
 
c0b5446
8c01ffb
 
c0b5446
 
 
 
9b5b26a
c0b5446
8c01ffb
c0b5446
 
9b5b26a
8c01ffb
8fe992b
c0b5446
8c01ffb
 
 
 
 
 
c0b5446
9b5b26a
c0b5446
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
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
import os, sys, datetime, requests, pytz, yaml
from dotenv import load_dotenv

final_answer = FinalAnswerTool()

# ============================================================================================
# Uncomment when runnng locally. Leave commented when running atop HuggingFace Hub.
# ============================================================================================
# load_dotenv(f"{os.path.expanduser("~")}/WORKSPACES.d/AGENTIC.GEN.AI.d/.env")
# ============================================================================================

# ============================================================================================
# Here's an example of a tool that does nothing, but it shows the structure you should follow.
#   - Reuse this format for the DESCRIPTION, the ARGS, and the ARGS DESCRIPTIONS.
#   - However, copy template and feel free to modify the tool.
#   - Important: It's important to always specify the function's return type.
# ============================================================================================
@tool
def my_custom_tool(arg1:str, arg2:int) -> str:
    """An example custom tool that does nothing. 
    Args:
        arg1: The first argument.
        arg2: The second argument.
    """
    return "Hello, World!"
# ============================================================================================

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """A tool that retrieves 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) # Create timezone object.
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") # Get current time in that TZ.
        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)}"



# ================================================================================
# If the agent does not answer, the model is likely overloaded. Please use a different model,
# or use the following HuggingFace Inference Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' 
# ================================================================================
model = HfApiModel(max_tokens=2096,
                   temperature=0.5,
                   model_id='Qwen/Qwen2.5-Coder-32B-Instruct', # Change if overloaded.
                  #token = os.environ['HF_TOKEN'], # Uncomment when run locally; Comment when run on HF Hub.
                   custom_role_conversions=None,)
# ================================================================================


# ================================================================================
# Use load_tool() from the 'smolagents' library to get ready-made tools available
# in HuggingFace Hub.
# ================================================================================
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# ================================================================================

with open("prompts.yaml", 'r') as stream:     # yaml.safe_load() permits only built-in
    prompt_templates = yaml.safe_load(stream) # Python datastructures to be instantiated.
    
agent = CodeAgent(
    model=model,
    tools=[final_answer, image_generation_tool], # Append 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()