CuriousPeachSeeker commited on
Commit
dcdde16
·
verified ·
1 Parent(s): 525fbfa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -133
app.py CHANGED
@@ -1,148 +1,66 @@
1
- """
2
- Smolagents CodeAgent + Gradio UI
3
-
4
- - Runs a code-capable LLM (Qwen2.5-Coder) as an agent that can call tools.
5
- - Tools: final answer (required), current time in a timezone, optional image generation.
6
- - System prompt is loaded from prompts.yaml.
7
- - Launches a Gradio UI to chat with the agent.
8
- """
9
-
10
  import datetime
11
- from pathlib import Path
12
-
13
  import pytz
14
  import yaml
15
- from smolagents import CodeAgent, load_tool, tool
16
-
17
- # InferenceClientModel: in newer smolagents it's in __init__, in older versions only in .models
18
- try:
19
- from smolagents import InferenceClientModel
20
- except ImportError:
21
- try:
22
- from smolagents.models import InferenceClientModel
23
- except ImportError:
24
- raise ImportError(
25
- "InferenceClientModel not found. Upgrade smolagents: pip install -U smolagents"
26
- ) from None
27
-
28
- # Adjust imports to your project layout
29
- try:
30
- from tools.final_answer import FinalAnswerTool
31
- from Gradio_UI import GradioUI
32
- except ImportError:
33
- FinalAnswerTool = None
34
- GradioUI = None
35
 
 
36
 
37
- # ---- Tools (register these with the agent) ----
 
 
 
 
 
 
 
 
 
38
 
39
  @tool
40
  def get_current_time_in_timezone(timezone: str) -> str:
41
- """Get the current local time in a given timezone.
42
  Args:
43
- timezone: IANA timezone name (e.g. 'America/New_York', 'Europe/London').
44
  """
45
  try:
 
46
  tz = pytz.timezone(timezone)
 
47
  local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
48
  return f"The current local time in {timezone} is: {local_time}"
49
  except Exception as e:
50
- return f"Error: invalid timezone '{timezone}' or {e}"
51
-
52
-
53
- @tool
54
- def my_custom_tool(arg1: str, arg2: int) -> str:
55
- """Example custom tool — extend with your own logic.
56
- Args:
57
- arg1: First argument (string).
58
- arg2: Second argument (integer).
59
- """
60
- # Replace with real logic (e.g. API call, computation)
61
- return f"Processed: arg1={arg1!r}, arg2={arg2}"
62
-
63
-
64
- def load_prompt_templates(path: str = "prompts.yaml") -> dict | None:
65
- """Load system prompt / templates from YAML."""
66
- p = Path(path)
67
- if not p.exists():
68
- return None
69
- with open(p, "r") as f:
70
- return yaml.safe_load(f)
71
-
72
-
73
- def create_model(
74
- model_id: str = "Qwen/Qwen2.5-Coder-32B-Instruct",
75
- max_tokens: int = 2096,
76
- temperature: float = 0.5,
77
- ):
78
- """Create the inference model for the agent."""
79
- return InferenceClientModel(
80
- model_id=model_id,
81
- max_tokens=max_tokens,
82
- temperature=temperature,
83
- custom_role_conversions=None,
84
- )
85
-
86
-
87
- def create_agent(
88
- model=None,
89
- tools=None,
90
- prompt_templates=None,
91
- max_steps: int = 6,
92
- use_image_tool: bool = False,
93
- ):
94
- """Build CodeAgent with model, tools, and optional prompt templates."""
95
- if model is None:
96
- model = create_model()
97
- if tools is None:
98
- tools = []
99
-
100
- # Required: final answer tool
101
- final_answer = FinalAnswerTool()
102
- agent_tools = [final_answer]
103
-
104
- # Add custom tools
105
- agent_tools.append(get_current_time_in_timezone)
106
- agent_tools.append(my_custom_tool)
107
-
108
- # Optional: image generation from Hub
109
- if use_image_tool:
110
- try:
111
- image_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
112
- agent_tools.append(image_tool)
113
- except Exception as e:
114
- print(f"Image tool not loaded: {e}")
115
-
116
- # Any extra tools passed in
117
- agent_tools.extend(tools)
118
-
119
- if prompt_templates is None:
120
- prompt_templates = load_prompt_templates()
121
-
122
- return CodeAgent(
123
- model=model,
124
- tools=agent_tools,
125
- max_steps=max_steps,
126
- verbosity_level=1,
127
- grammar=None,
128
- planning_interval=None,
129
- name=None,
130
- description=None,
131
- prompt_templates=prompt_templates,
132
- )
133
-
134
-
135
- def main():
136
- prompt_templates = load_prompt_templates()
137
- model = create_model()
138
- agent = create_agent(
139
- model=model,
140
- prompt_templates=prompt_templates,
141
- max_steps=6,
142
- use_image_tool=False, # set True to enable image generation
143
- )
144
- GradioUI(agent).launch()
145
-
146
-
147
- if __name__ == "__main__":
148
- main()
 
1
+ from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel, load_tool, tool
 
 
 
 
 
 
 
 
2
  import datetime
3
+ import requests
 
4
  import pytz
5
  import yaml
6
+ from tools.final_answer import FinalAnswerTool
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ from Gradio_UI import GradioUI
9
 
10
+ # Below is an example of a tool that does nothing. Amaze us with your creativity!
11
+ @tool
12
+ def my_custom_tool(arg1:str, arg2:int)-> str: # it's important to specify the return type
13
+ # Keep this format for the tool description / args description but feel free to modify the tool
14
+ """A tool that does nothing yet
15
+ Args:
16
+ arg1: the first argument
17
+ arg2: the second argument
18
+ """
19
+ return "What magic will you build ?"
20
 
21
  @tool
22
  def get_current_time_in_timezone(timezone: str) -> str:
23
+ """A tool that fetches the current local time in a specified timezone.
24
  Args:
25
+ timezone: A string representing a valid timezone (e.g., 'America/New_York').
26
  """
27
  try:
28
+ # Create timezone object
29
  tz = pytz.timezone(timezone)
30
+ # Get current time in that timezone
31
  local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
32
  return f"The current local time in {timezone} is: {local_time}"
33
  except Exception as e:
34
+ return f"Error fetching time for timezone '{timezone}': {str(e)}"
35
+
36
+
37
+ final_answer = FinalAnswerTool()
38
+ model = InferenceClientModel(
39
+ max_tokens=2096,
40
+ temperature=0.5,
41
+ model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
42
+ custom_role_conversions=None,
43
+ )
44
+
45
+
46
+ # Import tool from Hub
47
+ image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
48
+
49
+ # Load system prompt from prompt.yaml file
50
+ with open("prompts.yaml", 'r') as stream:
51
+ prompt_templates = yaml.safe_load(stream)
52
+
53
+ agent = CodeAgent(
54
+ model=model,
55
+ tools=[final_answer], # add your tools here (don't remove final_answer)
56
+ max_steps=6,
57
+ verbosity_level=1,
58
+ grammar=None,
59
+ planning_interval=None,
60
+ name=None,
61
+ description=None,
62
+ prompt_templates=prompt_templates # Pass system prompt to CodeAgent
63
+ )
64
+
65
+
66
+ GradioUI(agent).launch()