Spaces:
Sleeping
Sleeping
File size: 5,397 Bytes
6b14cc6 c82482f 6b14cc6 5ee2dd5 6b14cc6 c82482f 5ee2dd5 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 c82482f 6b14cc6 9b5b26a 5ee2dd5 9b5b26a 6b14cc6 c82482f 9b5b26a 6b14cc6 9b5b26a 6b14cc6 9b5b26a 6b14cc6 8c01ffb 5ee2dd5 6b14cc6 ae7a494 6b14cc6 ae7a494 6b14cc6 c82482f 6b14cc6 5ee2dd5 6b14cc6 5ee2dd5 6b14cc6 |
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 156 157 158 159 |
from smolagents import CodeAgent, tool
import datetime
import pytz
import yaml
import requests
import json
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
# Text Analyzer Tool
@tool
def text_analyzer(text: str) -> str:
"""Analyzes text and returns statistics about it.
Args:
text: The text to analyze.
"""
try:
# Simple word count
words = text.split()
word_count = len(words)
# Character count
char_count = len(text)
# Unique words
unique_words = len(set(word.lower() for word in words))
# Average word length
avg_word_length = sum(len(word) for word in words) / max(1, word_count)
# Most common words (top 5)
word_freq = {}
for word in words:
word_lower = word.lower()
word_freq[word_lower] = word_freq.get(word_lower, 0) + 1
common_words = sorted(word_freq.items(), key=lambda x: x[1], reverse=True)[:5]
common_words_str = ", ".join(f"{word} ({count})" for word, count in common_words)
return f"""Text Analysis Results:
- Word count: {word_count}
- Character count: {char_count}
- Unique words: {unique_words}
- Average word length: {avg_word_length:.2f}
- Most common words: {common_words_str}
"""
except Exception as e:
return f"Error analyzing text: {str(e)}"
# Timezone Tool
@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)}"
# Weather Forecast Tool
@tool
def weather_forecast(location: str) -> str:
"""Fetches weather forecast for a specified location.
Args:
location: The location to get weather forecast for (city name or coordinates).
"""
try:
# Connect to a public weather API
api_url = f"https://wttr.in/{location}?format=j1"
# Make the API request
response = requests.get(api_url, timeout=10)
response.raise_for_status() # Raise an exception for HTTP errors
# Parse the JSON response
weather_data = response.json()
# Extract relevant information
current_condition = weather_data.get("current_condition", [{}])[0]
weather_desc = current_condition.get("weatherDesc", [{}])[0].get("value", "Unknown")
temp_c = current_condition.get("temp_C", "Unknown")
temp_f = current_condition.get("temp_F", "Unknown")
feels_like_c = current_condition.get("FeelsLikeC", "Unknown")
humidity = current_condition.get("humidity", "Unknown")
wind_speed = current_condition.get("windspeedKmph", "Unknown")
wind_dir = current_condition.get("winddir16Point", "Unknown")
# Get forecast for upcoming days
forecast = weather_data.get("weather", [])
forecast_info = ""
if forecast:
forecast_info = "\n\nForecast for the next few days:\n"
for day in forecast[:3]: # Limit to 3 days
date = day.get("date", "Unknown")
max_temp_c = day.get("maxtempC", "Unknown")
min_temp_c = day.get("mintempC", "Unknown")
desc = day.get("hourly", [{}])[0].get("weatherDesc", [{}])[0].get("value", "Unknown")
forecast_info += f"- {date}: {desc}, Max: {max_temp_c}°C, Min: {min_temp_c}°C\n"
# Format the response
weather_report = f"""
Weather for {location}:
Current Conditions: {weather_desc}
Temperature: {temp_c}°C / {temp_f}°F (Feels like: {feels_like_c}°C)
Humidity: {humidity}%
Wind: {wind_speed} km/h, Direction: {wind_dir}
{forecast_info}
"""
return weather_report.strip()
except requests.exceptions.RequestException as e:
return f"Error fetching weather for {location}: Connection error - {str(e)}"
except json.JSONDecodeError:
return f"Error fetching weather for {location}: Invalid response from weather service"
except Exception as e:
return f"Error fetching weather for {location}: {str(e)}"
# Set up the agent with our tools
final_answer = FinalAnswerTool()
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
from smolagents import HfApiModel
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
custom_role_conversions=None,
)
# Create agent with our tools (now 4 including final_answer)
agent = CodeAgent(
model=model,
tools=[text_analyzer, get_current_time_in_timezone, weather_forecast, final_answer],
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
# Launch the Gradio UI
GradioUI(agent).launch() |