
    qi<                         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mZ e G d de             Z G d de      Zy)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	_NotGiven_warn_deprecated_paramc                   <    e Zd ZU dZ ed       Zedz  ez  ed<   y)OpenAIImageGenSettingszSettings for the OpenAI image generation service.

    Parameters:
        model: DALL-E model identifier.
        image_size: Target size for generated images.
    c                      t         S )N)r        O/opt/pipecat/venv/lib/python3.12/site-packages/pipecat/services/openai/image.py<lambda>zOpenAIImageGenSettings.<lambda>(   s    y r   )default_factoryN
image_size)	__name__
__module____qualname____doc__r   r   strr   __annotations__r   r   r   r   r      s"     */?P)QJd
Y&Qr   r   c                        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Zdedeedf   fdZ x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                    t        dd      }|t        dt         d       ||_        |t        dt         d       ||_        ||j	                  |       t
        |   |       t        ||      | _        || _	        y)aI  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=OpenAIImageGenSettings(image_size=...)`` instead.

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

                .. deprecated:: 0.0.105
                    Use ``settings=OpenAIImageGenSettings(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%   )
r   r   r&   r   apply_updatesuper__init__r	   _client_aiohttp_session)	selfr(   r%   r)   r   r&   r'   default_settings	__class__s	           r   r2   zOpenAIImageGenService.__init__6   s    @ 2
 "7,BGL%*"!"<1GV*4' ))(3"23"7XF /r   promptreturnc                  K   t        j                  d|        | j                  j                  j	                  || j
                  j                  d| j
                  j                         d{   }|j                  d   j                  }|st        d       y| j                  j                  |      4 d{   }t        j                  |j                  j!                          d{         }t#        j$                  |      }t'        |j)                         |j*                  |j,                  |      }| ddd      d{    y7 7 7 h7 # 1 d{  7  sw Y   yxY ww)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:    )r8   r&   nsizeNr   zImage generation failed)imager=   formaturl)r   debugr3   imagesgenerater$   r&   r   datar@   r   r4   getioBytesIOcontentreadr
   openr   tobytesr=   r?   )r5   r8   r>   	image_urlresponseimage_streamframes          r   run_image_genz#OpenAIImageGenService.run_image_genl   s3     	5fX>?ll))22!5!5AZAZ 3 
 
 JJqM%%	677 ((,,Y7 		 		8::H,<,<,A,A,C&CDLJJ|,E$mmoZZ||	E K		 		 		
		&C		 		 		 		sn   A-E0/E0AE0=E>E0-E.E
/AEE0EE0E0EE0E-!E$"E-)E0)r   r   r   r   r   Settingsr!   r    r   aiohttpClientSessionr   r2   r   r   rP   __classcell__)r7   s   @r   r#   r#   +   s     &H%% #' #5940 40 3-	40
 !..40 OP
40 }40 1240l# .2M r   r#   )r   rF   dataclassesr   r   typingr   r   r   rR   logurur   openair	   PILr
   pipecat.frames.framesr   r   r   pipecat.services.image_servicer   pipecat.services.settingsr   r   r   r   r   r#   r   r   r   <module>r]      sf    
 ( 4 4     
 ; d d R- R R`O `r   