A lightweight Python library that streamlines creating and invoking “tools” (functions) in your OpenAI ChatCompletion-based projects. It lets you register and call both synchronous and asynchronous functions via decorators.
pip install openai_tools_decoratorfrom openai_tools_decorator import OpenAIT
client = OpenAIT()@client.add_tool(
{
"description": "Get current weather for a city",
}
)
def get_weather(city: str):
return f"Weather in {city}: 25°C"user_input = "How cold is it in Moscow right now?"
response = await client.run_with_tool(
user_input,
messages=[],
model="gpt-4o"
)
print(response) # The assistant’s response, possibly including a tool callTo remove a tool, use remove_tool with function's name as an argument:
client.remove_tool("get_weather")If the tool is not found, remove_tool will raise ValueError.
import asyncio
import aiohttp
from openai_tools_decorator import OpenAIT
client = OpenAIT()
api_key = "<YOUR_API_KEY>"
async def fetch_url(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.text()
@client.add_tool(
{
"description": "Fetch weather from an API",
}
)
async def get_weather(city: str):
url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
return await fetch_url(url)
async def main():
question = "What's the temperature in London?"
result = await client.run_with_tool(question, messages=[])
print("Assistant says:", result)
asyncio.run(main())- You can register **sync and async ** functions.
- Tools are automatically registered and described for the OpenAI model.
- The model decides whether to call a tool during the dialogue.
- You can quickly remove unnecessary tools using
remove_tool.
Distributed under MIT or any other license of your choice. Contributions and feedback are always welcome!