Spaces:
Sleeping
Sleeping
| from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel, load_tool, tool | |
| import datetime | |
| import requests | |
| import pytz | |
| import yaml | |
| from tools.final_answer import FinalAnswerTool | |
| import os | |
| from huggingface_hub import list_models | |
| from Gradio_UI import GradioUI | |
| import baostock as bs | |
| import pandas as pd | |
| import re | |
| # Below is an example of a tool that does nothing. Amaze us with your creativity ! | |
| def my_cutom_tool(arg1:str, arg2:int)-> 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 | |
| """A tool that does nothing yet | |
| Args: | |
| arg1: the first argument | |
| arg2: the second argument | |
| """ | |
| return "What magic will you build ?" | |
| # Weather Data Tool using weatherapi.com API | |
| def weather_data_tool(location: str, api_key: str) -> str: | |
| """ | |
| A tool that fetches the current weather data for a given location using the weatherapi.com API. | |
| Args: | |
| location: The location for which to retrieve weather data (e.g., "London", "Paris", or "New York"). | |
| api_key: d3d95d8e1ada4f48a83112710251202 | |
| Returns: | |
| A string with the current weather details (temperature, condition, etc.) or an error message. | |
| """ | |
| try: | |
| # Construct the API URL for current weather data | |
| url = f"http://api.weatherapi.com/v1/current.json?key={api_key}&q={location}&aqi=no" | |
| response = requests.get(url) | |
| if response.status_code != 200: | |
| return f"Error: Unable to retrieve data. HTTP Status Code: {response.status_code}" | |
| data = response.json() | |
| # If the response includes an error, return its message | |
| if "error" in data: | |
| return f"Error: {data['error'].get('message', 'Unknown error')}" | |
| # Extract location and current weather details | |
| location_info = data.get("location", {}) | |
| current = data.get("current", {}) | |
| location_name = location_info.get("name", location) | |
| region = location_info.get("region", "") | |
| country = location_info.get("country", "") | |
| temp_c = current.get("temp_c", "N/A") | |
| condition = current.get("condition", {}).get("text", "N/A") | |
| # Build a result string | |
| result = f"Weather in {location_name}" | |
| if region: | |
| result += f", {region}" | |
| if country: | |
| result += f", {country}" | |
| result += f": {temp_c}°C, {condition}." | |
| return result | |
| except Exception as e: | |
| return f"An exception occurred: {str(e)}" | |
| def model_download_tool(task: str) -> str: | |
| """ | |
| This is a tool that returns the most downloaded model of a given task on the Hugging Face Hub. | |
| It returns the name of the checkpoint. | |
| Args: | |
| task: The task for which to get the download count. | |
| """ | |
| most_downloaded_model = next(iter(list_models(filter=task, sort="downloads", direction=-1))) | |
| return most_downloaded_model.id | |
| 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)}" | |
| def get_stock_data_baostock(stock_code: str) -> str: | |
| """Fetch the latest stock data for a given stock code using Baostock. | |
| Args: | |
| stock_code: A string representing the stock code (e.g., 'sh.600941' for China Mobile). | |
| """ | |
| try: | |
| # Log in to the Baostock system | |
| lg = bs.login() | |
| if lg.error_code != '0': | |
| return f"Failed to log in to Baostock: {lg.error_msg}" | |
| # Fetch daily K-line data for the stock (defaults to the most recent trading day) | |
| rs = bs.query_history_k_data_plus( | |
| code=stock_code, | |
| fields="date,code,open,high,low,close,volume", # Fields to retrieve | |
| frequency="d", # Daily K-line | |
| adjustflag="2" # Adjustment type: 2 for forward adjustment | |
| ) | |
| if rs.error_code != '0': | |
| return f"Failed to fetch stock data: {rs.error_msg}" | |
| # Convert the data to a DataFrame | |
| data_list = [] | |
| while (rs.error_code == '0') & rs.next(): | |
| data_list.append(rs.get_row_data()) | |
| df = pd.DataFrame(data_list, columns=rs.fields) | |
| # Log out of the Baostock system | |
| bs.logout() | |
| # Check if the data is empty | |
| if df.empty: | |
| return f"No data found for stock code '{stock_code}'." | |
| # Extract the latest trading day's data | |
| latest_data = df.iloc[-1] # Get the last row of data (most recent trading day) | |
| date = latest_data['date'] # Date | |
| stock_name = latest_data['code'] # Stock code | |
| close_price = latest_data['close'] # Closing price | |
| volume = latest_data['volume'] # Trading volume | |
| # Construct the result string | |
| result = f"Stock Code: {stock_name}\nDate: {date}\nClosing Price: {close_price}\nVolume: {volume}" | |
| return result | |
| except Exception as e: | |
| return f"An error occurred while fetching stock data: {str(e)}" | |
| # Example call | |
| print(get_stock_data_baostock('sh.600941')) | |
| final_answer = FinalAnswerTool() | |
| # Import tool from Hub | |
| image_generation_tool = load_tool("m-ric/text-to-image", trust_remote_code=True, token=os.getenv('hf_token')) | |
| with open("prompts.yaml", 'r') as stream: | |
| prompt_templates = yaml.safe_load(stream) | |
| model = HfApiModel( | |
| max_tokens=3000, | |
| temperature=0.5, | |
| model_id='Qwen/Qwen2.5-Coder-32B-Instruct', | |
| #model_id='deepseek-ai/DeepSeek-R1-Distill-Qwen-32B', | |
| #model_id='mistralai/Mistral-7B-Instruct-v0.3', | |
| #model_id='https://wxknx1kg971u7k1n.us-east-1.aws.endpoints.huggingface.cloud', | |
| #model_id="google/gemma-2-9b-it", | |
| custom_role_conversions=None, | |
| token=os.getenv('hf_token'), | |
| ) | |
| agent = CodeAgent( | |
| model=model, | |
| tools=[final_answer, image_generation_tool, get_stock_data_baostock, weather_data_tool], ## add your tools here (don't remove final answer) | |
| max_steps=4, | |
| verbosity_level=1, | |
| grammar=None, | |
| planning_interval=3, | |
| name=None, | |
| description=None, | |
| prompt_templates=prompt_templates, | |
| add_base_tools=True, | |
| additional_authorized_imports=["time", "numpy", "pandas","datetime"], | |
| ) | |
| GradioUI(agent).launch() |