From 309f6c6849cb61a9d5a396867972d0421336c323 Mon Sep 17 00:00:00 2001 From: pong Date: Mon, 24 Feb 2025 22:14:53 +0800 Subject: [PATCH] add the tutorial 2 --- T2_tools_define/tools.py | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 T2_tools_define/tools.py diff --git a/T2_tools_define/tools.py b/T2_tools_define/tools.py new file mode 100644 index 0000000..509d54c --- /dev/null +++ b/T2_tools_define/tools.py @@ -0,0 +1,71 @@ +from typing import Optional +import requests + +from smolagents.agents import ToolCallingAgent +from smolagents import CodeAgent, HfApiModel, tool +from huggingface_hub import login +from smolagents import LiteLLMModel + +from dotenv import load_dotenv +import os + +# load .env file +load_dotenv() + +api_key = os.environ.get('API_KEY') +weather_api = os.environ.get('WEATHER_API') + +#print(api_key) +login(api_key) + + +# Select LLM engine to use! +model = HfApiModel() +# model = LiteLLMModel( +# model_id="ollama_chat/llama3.1", +# api_base="http://localhost:11434", # replace with remote open-ai compatible server if necessary +# #api_key="your-api-key", # replace with API key if necessary +# #num_ctx=8192, # ollama default is 2048 which will often fail horribly. 8192 works for easy tasks, more is better. Check https://huggingface.co/spaces/NyxKrage/LLM-Model-VRAM-Calculator to calculate how much VRAM this will need for the selected model. +# ) + + +@tool +def get_weather(location: str, celsius: Optional[bool] = False) -> str: + """ + Get the current weather at the given location using the WeatherStack API. + + Args: + location: The location (city name). + celsius: Whether to return the temperature in Celsius (default is False, which returns Fahrenheit). + + Returns: + A string describing the current weather at the location. + """ + api_key = weather_api # Replace with your API key from https://weatherstack.com/ + units = "m" if celsius else "f" # 'm' for Celsius, 'f' for Fahrenheit + + url = f"http://api.weatherstack.com/current?access_key={api_key}&query={location}&units={units}" + + try: + response = requests.get(url) + response.raise_for_status() # Raise an exception for HTTP errors + + data = response.json() + + if data.get("error"): # Check if there's an error in the response + return f"Error: {data['error'].get('info', 'Unable to fetch weather data.')}" + + weather = data["current"]["weather_descriptions"][0] + temp = data["current"]["temperature"] + temp_unit = "°C" if celsius else "°F" + + return f"The current weather in {location} is {weather} with a temperature of {temp} {temp_unit}." + + except requests.exceptions.RequestException as e: + return f"Error fetching weather data: {str(e)}" + + +agent = ToolCallingAgent(tools=[get_weather], model=model) +# agent = CodeAgent(tools=[get_weather], model=model) + +agent.run("What is the weather in New York?") \ No newline at end of file