Happy New Year, 2024 from DALL-E

generated by DALL-E
generated by DALL-E

Wishing everyone a happy new year. Year 2023 is great for me because I learned much about OpenAI. I am involved in a live deployment with it, and involved in a handful of interesting user scenarios around it. On top of this, a copilot hackathon.

The image above is generated by DALL-E and following is the code.

1. Dependencies

python = "^3.10"
pydantic-settings = "^2.1.0"
openai = "^1.3.8"

2. Environment Parameters

OPENAI_AZURE_ENDPOINT="<your azure openai endpoint>"
AZURE_OPENAI_API_KEY="<your azure openai secret>"
OPENAI_API_VERSION="2023-12-01-preview"
OPENAI_DALLE_MODEL="dalle"

Note:

  • OPENAI_API_VERSION has to be 2023-12-01-preview otherwise you will get an exception openai.NotFoundError: Error code: 404 - {'error': {'code': '404', 'message': 'Resource not found'}}
  • dalle is the name of my dall-e-3 deployment model. You need to change it to yours accordingly.

3. Pydantic Settings

from pydantic_settings import BaseSettings

class AzureOpenAISettings(BaseSettings):
    openai_azure_endpoint: str
    azure_openai_api_key: str
    openai_api_version: str
    openai_dalle_model: str

4. Code

from openai import AzureOpenAI
from openai.types import ImagesResponse

from common.settings import AzureOpenAISettings


def create_image(settings: AzureOpenAISettings, text: str) -> ImagesResponse:
    client = AzureOpenAI(
        api_key=settings.azure_openai_api_key,
        azure_endpoint=settings.openai_azure_endpoint,
        api_version=settings.openai_api_version,
    )

    return client.images.generate(model=settings.openai_dalle_model, prompt=text, n=1)



def generate_image(settings: AzureOpenAISettings, text: str):
    import os

    import requests

    response = create_image(settings=settings, text=text)
    image_dir = os.path.join(os.curdir, ".images")

    # If the directory doesn't exist, create it
    if not os.path.isdir(image_dir):
        os.mkdir(image_dir)

    # Initialize the image path (note the filetype should be png)
    image_path = os.path.join(image_dir, "generated_image.png")

    # Retrieve the generated image
    image_url = response.data[0].url
    generated_image = requests.get(image_url).content  # type: ignore
    with open(image_path, "wb") as image_file:
        image_file.write(generated_image)


if __name__ == "__main__":
    settings = AzureOpenAISettings.model_validate({})
    generate_image(
        settings=settings,
        text="Happy New Year, 2024, Wishing you all the best! From Dennis",
    )


the generated image is stored in a .images sub folder.

As you can see that it is very simple. Once we get the AzureOpenAI client initiated, we just need to function call to generate images.



Comments

Popular posts from this blog

OpenAI: Functions Feature in 2023-07-01-preview API version

Storing embedding in Azure Database for PostgreSQL