o
    i                     @   s   d Z ddlZddlmZmZ ddlmZmZmZ ddl	Z	ddl
mZ ddlmZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZmZmZ eG dd deZG dd deZdS )zOpenAI image generation service implementation.

This module provides integration with OpenAI's DALL-E image generation API
for creating images from text prompts.
    N)	dataclassfield)AsyncGeneratorLiteralOptional)logger)AsyncOpenAI)Image)
ErrorFrameFrameURLImageRawFrame)ImageGenService)	NOT_GIVENImageGenSettings	_NotGivenc                   @   s0   e Zd ZU dZedd dZedB eB ed< dS )OpenAIImageGenSettingszSettings for the OpenAI image generation service.

    Parameters:
        model: DALL-E model identifier.
        image_size: Target size for generated images.
    c                   C   s   t S )N)r    r   r   Q/home/ubuntu/.local/lib/python3.10/site-packages/pipecat/services/openai/image.py<lambda>(   s    zOpenAIImageGenSettings.<lambda>)default_factoryN
image_size)	__name__
__module____qualname____doc__r   r   strr   __annotations__r   r   r   r   r      s   
 "r   c                       s   e Zd ZU dZeZeed< ddddddedee de	j
deed	  d
ee dee f fddZdedeedf fddZ  ZS )OpenAIImageGenServicezOpenAI DALL-E image generation service.

    Provides image generation capabilities using OpenAI's DALL-E models.
    Supports various image sizes and can generate images from text prompts
    with configurable quality and style parameters.
    	_settingsN)base_urlr   modelsettingsapi_keyr   aiohttp_sessionr   )256x256512x512	1024x1024	1792x1024	1024x1792r    r!   c                   sz   | j ddd}|dur| dd ||_|dur!| dd ||_|dur*|| t j|d t||d| _|| _	dS )aY  Initialize the OpenAI image generation service.

        Args:
            api_key: OpenAI API key for authentication.
            base_url: Custom base URL for OpenAI API. If None, uses default.
            aiohttp_session: HTTP session for downloading generated images.
            image_size: Target size for generated images. Defaults to "1024x1024".

                .. deprecated:: 0.0.105
                    Use ``settings=OpenAIImageGenService.Settings(image_size=...)`` instead.

            model: DALL-E model to use for generation. Defaults to "dall-e-3".

                .. deprecated:: 0.0.105
                    Use ``settings=OpenAIImageGenService.Settings(model=...)`` instead.

            settings: Runtime-updatable settings. When provided alongside deprecated
                parameters, ``settings`` values take precedence.
        zdall-e-3N)r    r   r    r   )r!   )r"   r   )
Settings"_warn_init_param_moved_to_settingsr    r   apply_updatesuper__init__r   _client_aiohttp_session)selfr"   r   r#   r   r    r!   default_settings	__class__r   r   r-   6   s    

zOpenAIImageGenService.__init__promptreturnc              	   C  s   t d|  | jjj|| jjd| jjdI dH }|jd j	}|s*t
dV  dS | j|4 I dH +}t|j I dH }t|}t| |j|j|d}|V  W d  I dH  dS 1 I dH sew   Y  dS )zGenerate an image from a text prompt using OpenAI's DALL-E.

        Args:
            prompt: Text description of the image to generate.

        Yields:
            Frame: URLImageRawFrame containing the generated image data.
        zGenerating image from prompt:    )r4   r    nsizeNr   zImage generation failed)imager8   formaturl)r   debugr.   imagesgenerater   r    r   datar;   r
   r/   getioBytesIOcontentreadr	   openr   tobytesr8   r:   )r0   r4   r9   	image_urlresponseimage_streamframer   r   r   run_image_genl   s(   	

.z#OpenAIImageGenService.run_image_gen)r   r   r   r   r   r)   r   r   r   aiohttpClientSessionr   r-   r   r   rK   __classcell__r   r   r2   r   r   +   s0   
 	
"6r   )r   rA   dataclassesr   r   typingr   r   r   rL   logurur   openair   PILr	   pipecat.frames.framesr
   r   r   pipecat.services.image_servicer   pipecat.services.settingsr   r   r   r   r   r   r   r   r   <module>   s   