File size: 3,279 Bytes
9b5b26a
 
 
 
c19d193
6aae614
17f2a3a
8f9943c
8fe992b
9b5b26a
 
 
17f2a3a
8f9943c
 
17f2a3a
 
8f9943c
17f2a3a
 
 
9b5b26a
8f9943c
 
17f2a3a
 
 
 
8f9943c
9b5b26a
17f2a3a
 
 
 
 
 
 
 
 
8f9943c
17f2a3a
 
 
1556b80
 
 
 
 
 
 
 
 
 
 
 
 
17f2a3a
 
 
8f9943c
 
1556b80
8f9943c
 
17f2a3a
8f9943c
 
1556b80
8f9943c
 
9b5b26a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
 
6aae614
17f2a3a
e121372
7315cd5
17f2a3a
 
 
13d500a
8c01ffb
 
9b5b26a
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
17f2a3a
7315cd5
8c01ffb
 
 
 
 
861422e
8fe992b
 
9b5b26a
aff4542
bb6962a
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
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
import subprocess
from typing import Dict, Optional

from Gradio_UI import GradioUI

@tool
def execute_shell_command(
    command: str,
    shell: bool = True,
    cwd: Optional[str] = None,
    timeout: Optional[int] = None
) -> Dict[str, str]:
    """
    Execute a shell command and return its output.
    
    Args:
        command: Command to execute as a string
        shell: Whether to execute command through shell
        cwd: Working directory for command execution
        timeout: Timeout in seconds
    
    Returns:
        Dictionary containing stdout, stderr, and return_code
    """
    try:
        process = subprocess.Popen(
            command,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            shell=shell,
            cwd=cwd,
            universal_newlines=True
        )
        
        stdout, stderr = process.communicate(timeout=timeout)
        return_code = process.returncode
        
        # Format output more concisely
        if return_code == 0:
            return {
                "stdout": stdout.strip(),
                "stderr": "",
                "return_code": "0"
            }
        else:
            return {
                "stdout": "",
                "stderr": stderr.strip(),
                "return_code": str(return_code)
            }
        
    except subprocess.TimeoutExpired:
        process.kill()
        return {
            "stdout": "",
            "stderr": f"Timeout after {timeout}s",
            "return_code": "-1"
        }
    except Exception as e:
        return {
            "stdout": "",
            "stderr": str(e),
            "return_code": "-1"
        }

@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()
search_tool = DuckDuckGoSearchTool()
model = HfApiModel(
    max_tokens=1024,
    temperature=0.5,
    model_id='https://wxknx1kg971u7k1n.us-east-1.aws.endpoints.huggingface.cloud',
    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=[execute_shell_command, image_generation_tool, search_tool, final_answer],
    max_steps=3,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)


if __name__ == "__main__":
    GradioUI(agent).launch()