Spaces:
Sleeping
Sleeping
File size: 6,059 Bytes
9b5b26a c19d193 6aae614 8fe992b 9b5b26a 5df72d6 9b5b26a c27b220 e5d7c9f 2199496 9b5b26a 898ebf0 2199496 9b5b26a 898ebf0 e5d7c9f 40130ed e5d7c9f 2199496 e5d7c9f 2199496 e5d7c9f 2199496 e5d7c9f 2199496 e5d7c9f 2199496 e5d7c9f 2199496 e5d7c9f 898ebf0 2199496 898ebf0 9b5b26a e311a66 e5d7c9f 9b5b26a 8c01ffb 6aae614 ae7a494 e121372 bf6d34c 29ec968 fe328e0 13d500a 8c01ffb 9b5b26a 8c01ffb 861422e 9b5b26a 8c01ffb 8fe992b 2199496 8c01ffb 861422e 8fe992b 9b5b26a 8c01ffb | 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 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | 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
# Below is an example of a tool that does nothing. Amaze us with your creativity !
@tool
def get_weather(city: str) -> str:
"""A tool that retrieves the current weather for a city using DuckDuckGoSearchTool
Args:
city: the name of the city
Returns:
str: Weather information for the specified city, or error message
"""
try:
# Create instance first, then call setup on the instance
web_search_tool = DuckDuckGoSearchTool(max_results=3)
web_search_tool.setup() # Call setup on instance, not class
# Search for weather information
search_query = f"current weather {city} temperature forecast"
results = web_search_tool(search_query)
# Debug: Print raw results to understand the structure
print(f"Raw results type: {type(results)}")
print(f"Raw results: {results}")
# Process results based on different possible return types
if results:
weather_info = []
# Handle different result formats
if isinstance(results, list):
for i, result in enumerate(results[:3]): # Use top 3 results
print(f"Result {i}: {type(result)} - {result}")
if isinstance(result, dict):
# Handle dictionary results
text = result.get('snippet', result.get('body', result.get('content', '')))
title = result.get('title', '')
url = result.get('url', '')
# Combine title and text for better context
combined = f"{title} {text}".strip()
elif isinstance(result, str):
# Handle string results
combined = result
else:
# Handle object results with attributes
combined = ""
for attr in ['snippet', 'body', 'content', 'text', 'description']:
if hasattr(result, attr):
value = getattr(result, attr)
if value:
combined += f"{value} "
# Also try title
if hasattr(result, 'title'):
title = getattr(result, 'title')
if title:
combined = f"{title} {combined}"
# Filter for weather-related content
if combined and any(keyword in combined.lower() for keyword in
['temperature', 'weather', '°f', '°c', 'degrees', 'sunny',
'cloudy', 'rain', 'forecast', 'humidity', 'wind']):
weather_info.append(combined[:200]) # Limit length
elif isinstance(results, str):
# Handle single string result
weather_info = [results[:300]]
else:
# Handle other result types
weather_info = [str(results)[:300]]
# Format final response
if weather_info:
return f"Weather in {city}: {' | '.join(weather_info)}"
else:
return f"Found search results for {city} but no clear weather information. Raw results: {str(results)[:200]}"
else:
return f"No search results found for weather in {city}"
except ImportError as e:
return f"Error: DuckDuckGoSearchTool not available. Import error: {str(e)}"
except AttributeError as e:
return f"Error: Problem with DuckDuckGoSearchTool setup or usage: {str(e)}"
except TypeError as e:
return f"Error: Incorrect parameters for DuckDuckGoSearchTool: {str(e)}"
except Exception as e:
return f"Error fetching weather information for city '{city}': {str(e)}"
@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()
# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face 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',# it is possible that this model may be overloaded
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=[final_answer, get_weather, get_current_time_in_timezone], ## add 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() |