N0rthw1nd's picture
Update app.py
fce901f verified
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
import numpy as np
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
@tool
def simple_btc_trend_tool(num_points: int = 100 ) -> str:
"""A tool that calculates the current BTC trend using a simple linear regression over the latest measurements.
Args:
num_points: Number of latest data points to use for the regression. Default is 100.
Returns:
A string describing the BTC trend (rising, falling, or stable) along with the calculated slope.
"""
try:
# Fetch BTC market data for the last day from CoinGecko API
# Timeframe is 5 min
url = "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart"
params = {
"vs_currency": "usd",
"days": "1",
}
response = requests.get(url, params=params)
data = response.json()
prices = data.get("prices", [])
if len(prices) < num_points:
return "Not enough data points available to calculate the trend."
# Select the last num_points measurements
recent_prices = prices[-num_points:]
print('recent_prices: ', recent_prices)
# Define the x axis as the index of the price points
indexes = [i for i in range(num_points)]
price_values = [ pt[1] for pt in recent_prices ]
# Perform a simple linear regression using numpy's polyfit (y = mx + q )
slope, intercept = np.polyfit(indexes, price_values, 1)
# Interpret the slope (m) to determine the trend
if slope > 0:
trend = "rising"
elif slope < 0:
trend = "falling"
else:
trend = "stable"
return f"Based on the last {num_points} data points, BTC is {trend} with a slope of {slope:.4f} USD per second."
except Exception as e:
return f"Error computing BTC trend: {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=[image_generation_tool, get_current_time_in_timezone, simple_btc_trend_tool, final_answer], ## 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()