|
- import base64
- import io
- import uuid
- from pathlib import Path
- from typing import List, Literal, Optional
-
- from autogen_core.code_executor import ImportFromModule
- from autogen_core.tools import FunctionTool
- from openai import OpenAI
- from PIL import Image
-
-
- async def generate_image(
- query: str, output_dir: Optional[Path] = None, image_size: Literal["1024x1024", "512x512", "256x256"] = "1024x1024"
- ) -> List[str]:
- """
- Generate images using OpenAI's DALL-E model based on a text description.
-
- Args:
- query: Natural language description of the desired image
- output_dir: Directory to save generated images (default: current directory)
- image_size: Size of generated image (1024x1024, 512x512, or 256x256)
-
- Returns:
- List[str]: Paths to the generated image files
- """
- # Initialize the OpenAI client
- client = OpenAI()
-
- # Generate images using DALL-E 3
- response = client.images.generate(model="dall-e-3", prompt=query, n=1, response_format="b64_json", size=image_size)
-
- saved_files = []
-
- # Process the response
- if response.data:
- for image_data in response.data:
- # Generate a unique filename
- file_name: str = f"{uuid.uuid4()}.png"
-
- # Use output_dir if provided, otherwise use current directory
- file_path = Path(output_dir) / file_name if output_dir else Path(file_name)
-
- base64_str = image_data.b64_json
- if base64_str:
- img = Image.open(io.BytesIO(base64.decodebytes(bytes(base64_str, "utf-8"))))
- # Save the image to a file
- img.save(file_path)
- saved_files.append(str(file_path))
-
- return saved_files
-
-
- # Create the image generation tool
- generate_image_tool = FunctionTool(
- func=generate_image,
- description="Generate images using DALL-E based on text descriptions.",
- global_imports=[
- "io",
- "uuid",
- "base64",
- ImportFromModule("typing", ("List", "Optional", "Literal")),
- ImportFromModule("pathlib", ("Path",)),
- ImportFromModule("openai", ("OpenAI",)),
- ImportFromModule("PIL", ("Image",)),
- ],
- )
|