Skip to main content

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

ez_openai-0.0.6.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

ez_openai-0.0.6-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

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

Hashes for ez_openai-0.0.6.tar.gz
Algorithm Hash digest
SHA256 b931b5c69d2fbbc71265e2610c8e3e635c6301506597348cc2a66aae19471254
MD5 fe8d9ad3e364a86cf9f94d449c7b63b7
BLAKE2b-256 fedb03af6907db3a2c3eea48c5f8f8dd5b5d07509f13cb0c8c47dbfe238a5f1c

See more details on using hashes here.

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

Hashes for ez_openai-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 490c4a49293ddd27d7ad2419f2d2fd86f1c6f257e00baea11264d8ac618fe712
MD5 15755888eab52e76e4c2bae13a28d9ec
BLAKE2b-256 07c570b58be07b40ab2d3cfea64a91b21393e894ed9dab8de9e301a5b3f035be

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page