selfevolveagent / examples /tools /tools_converters.py
iLOVE2D's picture
Upload 2846 files
5374a2d verified
#!/usr/bin/env python3
"""
Condensed API Converter Examples (Safe, No API Keys)
This module provides:
- A quick, low-cost smoke test that builds and inspects a toolkit (no network calls)
- A single real call extracted from real_world_api_example.py (executes only if OPENWEATHER_API_KEY is set)
It mirrors the structure and style of other example modules in examples/tools.
"""
from typing import Dict, Any
import os
from dotenv import load_dotenv
from evoagentx.tools.api_converter import (
create_rapidapi_toolkit,
)
load_dotenv()
weather_api_spec = {
"openapi": "3.0.0",
"info": {
"title": "Open Weather13 API",
"version": "2.0",
"description": "Complete weather data API via RapidAPI with 3 endpoints"
},
"servers": [
{"url": "https://open-weather13.p.rapidapi.com"}
],
"paths": {
"/city": {
"get": {
"operationId": "getCityWeather",
"summary": "Get weather by city name",
"description": "Get current weather data by city name",
"parameters": [
{
"name": "city",
"in": "query",
"required": True,
"schema": {"type": "string"},
"description": "City name, e.g.: new york, beijing, tokyo"
},
{
"name": "lang",
"in": "query",
"required": False,
"schema": {
"type": "string",
"enum": ["AF", "AL", "AR", "AZ", "BG", "CA", "CZ", "DA", "DE", "EL", "EN", "EU", "FA", "FI", "FR", "GL", "HE", "HI", "HR", "HU", "ID", "IT", "JA", "KR", "LA", "LT", "MK", "NO", "NL", "PL", "PT", "PT_BR", "RO", "RU", "SE", "SK", "SL", "SP", "ES", "SR", "TH", "TR", "UK", "VI", "ZH_CN", "ZH_TW", "ZU"],
"default": "EN"
},
"description": "Language code, supports Simplified Chinese (ZH_CN), Traditional Chinese (ZH_TW), and many other languages"
}
],
"responses": {
"200": {
"description": "City weather data response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"coord": {
"type": "object",
"properties": {
"lon": {"type": "number"},
"lat": {"type": "number"}
}
},
"weather": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"main": {"type": "string"},
"description": {"type": "string"},
"icon": {"type": "string"}
}
}
},
"main": {
"type": "object",
"properties": {
"temp": {"type": "number"},
"feels_like": {"type": "number"},
"temp_min": {"type": "number"},
"temp_max": {"type": "number"},
"pressure": {"type": "number"},
"humidity": {"type": "number"},
"sea_level": {"type": "number"},
"grnd_level": {"type": "number"}
}
},
"visibility": {"type": "number"},
"wind": {
"type": "object",
"properties": {
"speed": {"type": "number"},
"deg": {"type": "number"}
}
},
"clouds": {
"type": "object",
"properties": {
"all": {"type": "number"}
}
},
"name": {"type": "string"},
"sys": {
"type": "object",
"properties": {
"type": {"type": "integer"},
"id": {"type": "integer"},
"country": {"type": "string"},
"sunrise": {"type": "integer"},
"sunset": {"type": "integer"}
}
},
"timezone": {"type": "integer"},
"id": {"type": "integer"},
"cod": {"type": "integer"},
"dt": {"type": "integer"},
"base": {"type": "string"}
}
}
}
}
}
}
}
},
"/latlon": {
"get": {
"operationId": "getWeatherByCoordinates",
"summary": "Get weather by coordinates",
"description": "Get current weather data using latitude and longitude",
"parameters": [
{
"name": "latitude",
"in": "query",
"required": True,
"schema": {"type": "string"},
"description": "Latitude, e.g.: 40.730610"
},
{
"name": "longitude",
"in": "query",
"required": True,
"schema": {"type": "string"},
"description": "Longitude, e.g.: -73.935242"
},
{
"name": "lang",
"in": "query",
"required": False,
"schema": {
"type": "string",
"enum": ["AF", "AL", "AR", "AZ", "BG", "CA", "CZ", "DA", "DE", "EL", "EN", "EU", "FA", "FI", "FR", "GL", "HE", "HI", "HR", "HU", "ID", "IT", "JA", "KR", "LA", "LT", "MK", "NO", "NL", "PL", "PT", "PT_BR", "RO", "RU", "SE", "SK", "SL", "SP", "ES", "SR", "TH", "TR", "UK", "VI", "ZH_CN", "ZH_TW", "ZU"],
"default": "EN"
},
"description": "Language code"
}
],
"responses": {
"200": {
"description": "Coordinate weather data response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"coord": {
"type": "object",
"properties": {
"lon": {"type": "number"},
"lat": {"type": "number"}
}
},
"weather": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"main": {"type": "string"},
"description": {"type": "string"},
"icon": {"type": "string"}
}
}
},
"main": {
"type": "object",
"properties": {
"temp": {"type": "number"},
"feels_like": {"type": "number"},
"temp_min": {"type": "number"},
"temp_max": {"type": "number"},
"pressure": {"type": "number"},
"humidity": {"type": "number"},
"sea_level": {"type": "number"},
"grnd_level": {"type": "number"}
}
},
"visibility": {"type": "number"},
"wind": {
"type": "object",
"properties": {
"speed": {"type": "number"},
"deg": {"type": "number"}
}
},
"clouds": {
"type": "object",
"properties": {
"all": {"type": "number"}
}
},
"name": {"type": "string"},
"sys": {
"type": "object",
"properties": {
"type": {"type": "integer"},
"id": {"type": "integer"},
"country": {"type": "string"},
"sunrise": {"type": "integer"},
"sunset": {"type": "integer"}
}
},
"timezone": {"type": "integer"},
"id": {"type": "integer"},
"cod": {"type": "integer"},
"dt": {"type": "integer"},
"base": {"type": "string"}
}
}
}
}
}
}
}
},
"/fivedaysforcast": {
"get": {
"operationId": "getFiveDayForecast",
"summary": "Get 5-day weather forecast",
"description": "Get 5-day weather forecast using latitude and longitude",
"parameters": [
{
"name": "latitude",
"in": "query",
"required": True,
"schema": {"type": "string"},
"description": "Latitude, e.g.: 40.730610"
},
{
"name": "longitude",
"in": "query",
"required": True,
"schema": {"type": "string"},
"description": "Longitude, e.g.: -73.935242"
},
{
"name": "lang",
"in": "query",
"required": False,
"schema": {
"type": "string",
"enum": ["AF", "AL", "AR", "AZ", "BG", "CA", "CZ", "DA", "DE", "EL", "EN", "EU", "FA", "FI", "FR", "GL", "HE", "HI", "HR", "HU", "ID", "IT", "JA", "KR", "LA", "LT", "MK", "NO", "NL", "PL", "PT", "PT_BR", "RO", "RU", "SE", "SK", "SL", "SP", "ES", "SR", "TH", "TR", "UK", "VI", "ZH_CN", "ZH_TW", "ZU"],
"default": "EN"
},
"description": "Language code"
}
],
"responses": {
"200": {
"description": "5-day forecast data response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"cod": {"type": "string"},
"message": {"type": "number"},
"cnt": {"type": "integer"},
"list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"dt": {"type": "integer"},
"main": {
"type": "object",
"properties": {
"temp": {"type": "number"},
"feels_like": {"type": "number"},
"temp_min": {"type": "number"},
"temp_max": {"type": "number"},
"pressure": {"type": "number"},
"sea_level": {"type": "number"},
"grnd_level": {"type": "number"},
"humidity": {"type": "number"},
"temp_kf": {"type": "number"}
}
},
"weather": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"main": {"type": "string"},
"description": {"type": "string"},
"icon": {"type": "string"}
}
}
},
"clouds": {
"type": "object",
"properties": {
"all": {"type": "number"}
}
},
"wind": {
"type": "object",
"properties": {
"speed": {"type": "number"},
"deg": {"type": "number"},
"gust": {"type": "number"}
}
},
"visibility": {"type": "number"},
"pop": {"type": "number"},
"rain": {
"type": "object",
"properties": {
"3h": {"type": "number"}
}
},
"sys": {
"type": "object",
"properties": {
"pod": {"type": "string"}
}
},
"dt_txt": {"type": "string"}
}
}
},
"city": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"coord": {
"type": "object",
"properties": {
"lat": {"type": "number"},
"lon": {"type": "number"}
}
},
"country": {"type": "string"},
"population": {"type": "integer"},
"timezone": {"type": "integer"},
"sunrise": {"type": "integer"},
"sunset": {"type": "integer"}
}
}
}
}
}
}
}
}
}
}
}
}
def rapidapi_test() -> None:
print("\n===== SINGLE REAL CALL: OpenWeatherMap (extracted) =====\n")
api_key = os.getenv("RAPIDAPI_KEY")
if not api_key or api_key.strip().lower() in {"", "your-api-key"}:
print("Skipping real call: set RAPIDAPI_KEY to run this test.")
return
# Extracted (trimmed) OpenWeatherMap spec from real_world_api_example.py
rapidapi_host = "open-weather13.p.rapidapi.com"
toolkit = create_rapidapi_toolkit(
schema_path_or_dict=weather_api_spec,
rapidapi_key=api_key,
rapidapi_host=rapidapi_host,
service_name="Open Weather13"
)
# Inject default appid for all tools (pattern extracted from real_world_api_example.py)
print("____________ Executing city weather querying ____________")
city_weather_tool = toolkit.get_tools()[0]
example_query = {"city": "new york"}
print("Qeury inputs: \n", example_query)
result = city_weather_tool(**example_query)
print("Query result: \n", result)
def main() -> None:
"""Main function to run condensed converter examples"""
print("===== API CONVERTER EXAMPLES (CONDENSED) =====")
# Single extracted real-world call (requires OPENWEATHER_API_KEY)
rapidapi_test()
print("\n===== ALL CONDENSED CONVERTER TESTS COMPLETED =====")
if __name__ == "__main__":
main()