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