57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
from openai import OpenAI
|
|
from loguru import logger
|
|
import sys
|
|
|
|
from .save_image import save_generated_image
|
|
|
|
from tenacity import (
|
|
retry,
|
|
stop_after_attempt,
|
|
wait_random_exponential,
|
|
) # for exponential backoff
|
|
|
|
|
|
@retry(wait=wait_random_exponential(min=1, max=120), stop=stop_after_attempt(6))
|
|
def generate_dalle3_images(img_prompt, image_dir, size="1024x1024", quality="hd", n=1):
|
|
"""
|
|
Generates images using the DALL-E 3 model based on a given text prompt.
|
|
|
|
Args:
|
|
img_prompt (str): Text prompt to generate the image.
|
|
image_dir (str): Directory where the generated image will be saved.
|
|
size (str, optional): Size of the generated images. Defaults to "1024x1024".
|
|
quality (str, optional): Quality of the generated images. Defaults to "hd".
|
|
n (int, optional): Number of images to generate. Defaults to 1.
|
|
|
|
Returns:
|
|
str: Path to the saved image.
|
|
|
|
Raises:
|
|
SystemExit: If an error occurs in image generation or saving.
|
|
"""
|
|
try:
|
|
logger.info("Generating Dall-e-3 image for the blog.")
|
|
client = OpenAI()
|
|
|
|
img_generation_response = client.images.generate(
|
|
model="dall-e-3",
|
|
prompt=img_prompt,
|
|
size=size,
|
|
quality=quality,
|
|
n=n
|
|
)
|
|
# Save the generated image locally.
|
|
try:
|
|
img_path = save_generated_image(img_generation_response, image_dir)
|
|
return img_path
|
|
except Exception as err:
|
|
logger.error(f"Failed to Save generated image: {err}")
|
|
|
|
except openai.OpenAIError as e:
|
|
logger.error(f"Dalle-3 image generation error: HTTP Status {e.http_status}, Error: {e.error}")
|
|
sys.exit("Exiting due to Dalle-3 image generation error.")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Failed to generate images with Dalle3: {e}")
|
|
sys.exit("Exiting due to a general error in image generation.")
|