A more reasonable OpenAI API.
Project description
Ez OpenAI
My opinion of the openai
Python library is best illustrated by the fact that if you
ask ChatGPT about it, it will usually hallucinate a more reasonable API. So, I wrote
this library, because if I had to manually poll for a tool update again I would
instigate the robot uprising myself.
Installation
Run this somewhere:
pip install ez-openai
Usage
Basic usage
Using Ez OpenAI is (hopefully) straightforward, otherwise I've failed at the one thing I've set out to make:
from ez_openai import Assistant
# To use a previously-created assistant:
ass = Assistant.get("asst_someassistantid")
# To create a new one:
ass = Assistant.create(
name="Weatherperson",
instructions="You are a helpful weatherperson.",
)
# You can store the ID for later.
assistant_id = ass.id
# Delete it when you're done.
ass.delete()
Function calling
No more wizardry, just plain Python functions:
from ez_openai import Assistant, openai_function
from enum import Enum
@openai_function(descriptions={
"city": "The city to get the weather for.",
"unit": "The temperature unit , either `c` or `f`.",
})
def get_weather(city: str, unit: Enum("unit", ["c", "f"])):
"""Get the weather for a given city, and in the given unit."""
# ...do some magic here to get the weather...
print(f"I'm getting the weather for {city} woooooo")
return {"temperature": 26, "humidity": "60%"}
ass = Assistant.create(
name="Weatherperson",
instructions="You are a helpful weatherperson.",
functions=[get_weather]
)
# Or, if you already have one, you can fetch it (but still
# need to specify the functions).
ass = Assistant.get("asst_O5ZAsccgOOtgjrcgHhUMloSA", functions=[get_weather])
conversation = ass.conversation.create()
# Similarly, you can store the ID to fetch later:
old_conversation = ass.conversation.get(old_conversation.id)
# The library will handle all the background function calls itself:
conversation.ask("Hi, what's the weather like in Thessaloniki and Athens right now?").text
> I'm getting the weather for Thessaloniki woooooo
> I'm getting the weather for Athens woooooo
> "The weather today in both Thessaloniki and Athens is quite similar, with a
temperature of 26°C and a humidity level at 60%. Enjoy a pleasant and comfortable
day!"
# It also supports images:
conversation.ask("What's in this image?", image_url="https://www.someimage.com/").text
# or:
conversation.ask("What's in this image?", image_file="file.jpg").text
Because assistants change (eg if you want to add some more functions), and it's tedious to create new ones every time, there's a helper method that will update an assistant with new functions/instructions:
from ez_openai import Assistant
ass = Assistant.get_and_modify(
id="asst_someassistantid",
name="Weatherperson",
instructions="These are your new instructions.",
functions=[get_weather, some_new_function]
)
Note: The raw OpenAI message is returned in EZMessage
's raw
field.
Streaming
If you need to stream tokens, there's a streaming interface:
stream = conversation.ask_stream("Say Hello World!")
for event in stream:
events.append(event)
message = stream.value
assert "Hello" in events[0].text
assert " World" in events[1].text
assert "!" in events[2].text
assert "Hello World!" in message.text
gg ez
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ez_openai-0.0.6.tar.gz
.
File metadata
- Download URL: ez_openai-0.0.6.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b931b5c69d2fbbc71265e2610c8e3e635c6301506597348cc2a66aae19471254 |
|
MD5 | fe8d9ad3e364a86cf9f94d449c7b63b7 |
|
BLAKE2b-256 | fedb03af6907db3a2c3eea48c5f8f8dd5b5d07509f13cb0c8c47dbfe238a5f1c |
File details
Details for the file ez_openai-0.0.6-py3-none-any.whl
.
File metadata
- Download URL: ez_openai-0.0.6-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 490c4a49293ddd27d7ad2419f2d2fd86f1c6f257e00baea11264d8ac618fe712 |
|
MD5 | 15755888eab52e76e4c2bae13a28d9ec |
|
BLAKE2b-256 | 07c570b58be07b40ab2d3cfea64a91b21393e894ed9dab8de9e301a5b3f035be |