Spaces:
Sleeping
Sleeping
File size: 4,775 Bytes
9b5b26a c19d193 6aae614 8fe992b 9b5b26a ae06c52 9b5b26a ae06c52 9b5b26a ae06c52 9b5b26a ae06c52 9b5b26a 8c01ffb 6aae614 ae7a494 e121372 bf6d34c 29ec968 fe328e0 13d500a 8c01ffb 9b5b26a 8c01ffb 861422e 9b5b26a 8c01ffb 8fe992b d2f6a24 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 |
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
# My first tool !
@tool
def coin_predictor_tool()-> str: #it's import to specify the return type
#Keep this format for the description / args / args description but feel free to modify the tool
!pip install -q llama-index requests
# Step 2: Define the Agent Tool
from llama_index.core.tools import FunctionTool
import requests
from datetime import datetime
def coin_predictor_tool() -> str:
"""
Predicts Bitcoin's price for today (March 10, 2025) based on available data or trends.
Returns a formatted string with the predicted price and reasoning.
"""
# Simulate current date
today = datetime(2025, 3, 10)
current_date_str = today.strftime('%Y-%m-%d')
# Placeholder for real data (replace with API call in practice)
# Example: Fetch last 7 days of BTC prices from an API
try:
# Hypothetical API call (e.g., CoinGecko)
url = "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart"
params = {
"vs_currency": "usd",
"days": "7", # Last 7 days
"interval": "daily"
}
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
data = response.json()
# Extract prices (simulated here; replace with real data)
prices = data.get("prices", []) # [[timestamp, price], ...]
if not prices:
raise ValueError("No price data available")
# Simple prediction: Average of last 7 days + trend adjustment
recent_prices = [price[1] for price in prices[-7:]] # Last 7 days' closing prices
avg_price = sum(recent_prices) / len(recent_prices)
# Assume a trend (e.g., based on last day's change)
last_change = recent_prices[-1] - recent_prices[-2]
trend_factor = 1 + (last_change / recent_prices[-2]) # % change applied
predicted_price = avg_price * trend_factor
except Exception as e:
# Fallback simulation if API fails or for demo purposes
print(f"API error: {e}. Using simulated data.")
# Simulated data based on recent trends (e.g., from your provided context)
avg_price = 91981 # From Web ID 5, March 10, 2025 price
trend_factor = 1.0418 # +4.18% from Web ID 7's 24h change
predicted_price = avg_price * trend_factor
# Format the output
output = (
f"Bitcoin Price Prediction for {current_date_str}:\n"
f"Predicted Price: ${predicted_price:,.2f} USD\n"
f"Reasoning: Based on a 7-day average of ${avg_price:,.2f} with a "
f"{(trend_factor-1)*100:.2f}% trend adjustment from recent data."
)
return output
# Create the tool
bitcoin_price_tool = FunctionTool.from_defaults(
fn=coin_predictor_tool,
name="bitcoin_price_predictor",
description="Predicts Bitcoin's price for today (March 10, 2025) using recent trends or API data."
)
# Step 3: Test the tool standalone
print(bitcoin_price_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)}"
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], ## 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() |