rahuketu86 commited on
Commit
07a150b
·
verified ·
1 Parent(s): 62ff6d4

Upload agent

Browse files
agent.json CHANGED
@@ -1,15 +1,19 @@
1
  {
2
  "class": "CodeAgent",
3
  "tools": [
 
 
4
  "suggest_menu",
 
 
5
  "final_answer"
6
  ],
7
  "model": {
8
  "class": "LiteLLMModel",
9
  "data": {
10
  "num_ctx": 16384,
11
- "last_input_token_count": 2563,
12
- "last_output_token_count": 109,
13
  "model_id": "ollama_chat/gemma3:12b",
14
  "api_base": "http://localhost:11434"
15
  }
@@ -39,6 +43,8 @@
39
  "description": null,
40
  "requirements": [
41
  "bs4",
 
 
42
  "matplotlib",
43
  "pandas",
44
  "requests",
 
1
  {
2
  "class": "CodeAgent",
3
  "tools": [
4
+ "web_search",
5
+ "visit_webpage",
6
  "suggest_menu",
7
+ "catering_service_tool",
8
+ "superhero_party_theme_generator",
9
  "final_answer"
10
  ],
11
  "model": {
12
  "class": "LiteLLMModel",
13
  "data": {
14
  "num_ctx": 16384,
15
+ "last_input_token_count": 2530,
16
+ "last_output_token_count": 66,
17
  "model_id": "ollama_chat/gemma3:12b",
18
  "api_base": "http://localhost:11434"
19
  }
 
43
  "description": null,
44
  "requirements": [
45
  "bs4",
46
+ "duckduckgo_search",
47
+ "markdownify",
48
  "matplotlib",
49
  "pandas",
50
  "requests",
app.py CHANGED
@@ -5,7 +5,11 @@ from smolagents import GradioUI, CodeAgent, LiteLLMModel
5
  # Get current directory path
6
  CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
7
 
 
 
8
  from tools.suggest_menu import SimpleTool as SuggestMenu
 
 
9
  from tools.final_answer import FinalAnswerTool as FinalAnswer
10
 
11
 
@@ -16,7 +20,11 @@ model_id='ollama_chat/gemma3:12b',
16
  api_base='http://localhost:11434',
17
  )
18
 
 
 
19
  suggest_menu = SuggestMenu()
 
 
20
  final_answer = FinalAnswer()
21
 
22
 
@@ -25,7 +33,7 @@ with open(os.path.join(CURRENT_DIR, "prompts.yaml"), 'r') as stream:
25
 
26
  agent = CodeAgent(
27
  model=model,
28
- tools=[suggest_menu],
29
  managed_agents=[],
30
  class='CodeAgent',
31
  max_steps=20,
 
5
  # Get current directory path
6
  CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
7
 
8
+ from tools.web_search import DuckDuckGoSearchTool as WebSearch
9
+ from tools.visit_webpage import VisitWebpageTool as VisitWebpage
10
  from tools.suggest_menu import SimpleTool as SuggestMenu
11
+ from tools.catering_service_tool import SimpleTool as CateringServiceTool
12
+ from tools.superhero_party_theme_generator import SuperheroPartyThemeTool as SuperheroPartyThemeGenerator
13
  from tools.final_answer import FinalAnswerTool as FinalAnswer
14
 
15
 
 
20
  api_base='http://localhost:11434',
21
  )
22
 
23
+ web_search = WebSearch()
24
+ visit_webpage = VisitWebpage()
25
  suggest_menu = SuggestMenu()
26
+ catering_service_tool = CateringServiceTool()
27
+ superhero_party_theme_generator = SuperheroPartyThemeGenerator()
28
  final_answer = FinalAnswer()
29
 
30
 
 
33
 
34
  agent = CodeAgent(
35
  model=model,
36
+ tools=[web_search, visit_webpage, suggest_menu, catering_service_tool, superhero_party_theme_generator],
37
  managed_agents=[],
38
  class='CodeAgent',
39
  max_steps=20,
requirements.txt CHANGED
@@ -1,4 +1,6 @@
1
  bs4
 
 
2
  matplotlib
3
  pandas
4
  requests
 
1
  bs4
2
+ duckduckgo_search
3
+ markdownify
4
  matplotlib
5
  pandas
6
  requests
tools/catering_service_tool.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from smolagents import Tool
2
+ from typing import Any, Optional
3
+
4
+ class SimpleTool(Tool):
5
+ name = "catering_service_tool"
6
+ description = "This tool returns the highest-rated catering service in Gotham City."
7
+ inputs = {'query': {'type': 'string', 'description': 'A search term for finding catering services.'}}
8
+ output_type = "string"
9
+
10
+ def forward(self, query: str) -> str:
11
+ """
12
+ This tool returns the highest-rated catering service in Gotham City.
13
+
14
+ Args:
15
+ query: A search term for finding catering services.
16
+ """
17
+ # Example list of catering services and their ratings
18
+ services = {
19
+ "Gotham Catering Co.": 4.9,
20
+ "Wayne Manor Catering": 4.8,
21
+ "Gotham City Events": 4.7,
22
+ }
23
+
24
+ # Find the highest rated catering service (simulating search query filtering)
25
+ best_service = max(services, key=services.get)
26
+
27
+ return best_service
tools/superhero_party_theme_generator.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, Optional
2
+ from smolagents.tools import Tool
3
+
4
+ class SuperheroPartyThemeTool(Tool):
5
+ name = "superhero_party_theme_generator"
6
+ description = """
7
+ This tool suggests creative superhero-themed party ideas based on a category.
8
+ It returns a unique party theme idea."""
9
+ inputs = {'category': {'type': 'string', 'description': "The type of superhero party (e.g., 'classic heroes', 'villain masquerade', 'futuristic Gotham')."}}
10
+ output_type = "string"
11
+
12
+ def forward(self, category: str):
13
+ themes = {
14
+ "classic heroes": "Justice League Gala: Guests come dressed as their favorite DC heroes with themed cocktails like 'The Kryptonite Punch'.",
15
+ "villain masquerade": "Gotham Rogues' Ball: A mysterious masquerade where guests dress as classic Batman villains.",
16
+ "futuristic Gotham": "Neo-Gotham Night: A cyberpunk-style party inspired by Batman Beyond, with neon decorations and futuristic gadgets."
17
+ }
18
+
19
+ return themes.get(category.lower(), "Themed party idea not found. Try 'classic heroes', 'villain masquerade', or 'futuristic Gotham'.")
20
+
21
+ def __init__(self, *args, **kwargs):
22
+ self.is_initialized = False
tools/visit_webpage.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, Optional
2
+ from smolagents.tools import Tool
3
+ import re
4
+ import smolagents
5
+ import markdownify
6
+ import requests
7
+
8
+ class VisitWebpageTool(Tool):
9
+ name = "visit_webpage"
10
+ description = "Visits a webpage at the given url and reads its content as a markdown string. Use this to browse webpages."
11
+ inputs = {'url': {'type': 'string', 'description': 'The url of the webpage to visit.'}}
12
+ output_type = "string"
13
+
14
+ def __init__(self, max_output_length: int = 40000):
15
+ super().__init__()
16
+ self.max_output_length = max_output_length
17
+
18
+ def forward(self, url: str) -> str:
19
+ try:
20
+ import re
21
+
22
+ import requests
23
+ from markdownify import markdownify
24
+ from requests.exceptions import RequestException
25
+
26
+ from smolagents.utils import truncate_content
27
+ except ImportError as e:
28
+ raise ImportError(
29
+ "You must install packages `markdownify` and `requests` to run this tool: for instance run `pip install markdownify requests`."
30
+ ) from e
31
+ try:
32
+ # Send a GET request to the URL with a 20-second timeout
33
+ response = requests.get(url, timeout=20)
34
+ response.raise_for_status() # Raise an exception for bad status codes
35
+
36
+ # Convert the HTML content to Markdown
37
+ markdown_content = markdownify(response.text).strip()
38
+
39
+ # Remove multiple line breaks
40
+ markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content)
41
+
42
+ return truncate_content(markdown_content, self.max_output_length)
43
+
44
+ except requests.exceptions.Timeout:
45
+ return "The request timed out. Please try again later or check the URL."
46
+ except RequestException as e:
47
+ return f"Error fetching the webpage: {str(e)}"
48
+ except Exception as e:
49
+ return f"An unexpected error occurred: {str(e)}"
tools/web_search.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, Optional
2
+ from smolagents.tools import Tool
3
+ import duckduckgo_search
4
+
5
+ class DuckDuckGoSearchTool(Tool):
6
+ name = "web_search"
7
+ description = "Performs a duckduckgo web search based on your query (think a Google search) then returns the top search results."
8
+ inputs = {'query': {'type': 'string', 'description': 'The search query to perform.'}}
9
+ output_type = "string"
10
+
11
+ def __init__(self, max_results=10, **kwargs):
12
+ super().__init__()
13
+ self.max_results = max_results
14
+ try:
15
+ from duckduckgo_search import DDGS
16
+ except ImportError as e:
17
+ raise ImportError(
18
+ "You must install package `duckduckgo_search` to run this tool: for instance run `pip install duckduckgo-search`."
19
+ ) from e
20
+ self.ddgs = DDGS(**kwargs)
21
+
22
+ def forward(self, query: str) -> str:
23
+ results = self.ddgs.text(query, max_results=self.max_results)
24
+ if len(results) == 0:
25
+ raise Exception("No results found! Try a less restrictive/shorter query.")
26
+ postprocessed_results = [f"[{result['title']}]({result['href']})\n{result['body']}" for result in results]
27
+ return "## Search Results\n\n" + "\n\n".join(postprocessed_results)