
    qi                         d Z ddlZddlZdej                  d<   ddlmZmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZ dd	lmZmZ dd
lmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ 	 ddlm Z  ddl!m"Z" e G d de             Z' G d de      Z(y# e#$ r7Z$ ejJ                  de$         ejJ                  d        e&de$       dZ$[$ww xY w)zGoogle AI image generation service implementation.

This module provides integration with Google's Imagen model for generating
images from text prompts using the Google AI API.
    NfalseGRPC_ENABLE_FORK_SUPPORT)	dataclassfield)AnyAsyncGeneratorOptional)logger)Image)	BaseModelField)
ErrorFrameFrameURLImageRawFrame)!update_google_client_http_options)ImageGenService)	NOT_GIVENImageGenSettings	_NotGiven_warn_deprecated_param)genai)typeszException: zHIn order to use Google AI, you need to `pip install pipecat-ai[google]`.zMissing module: c                   `    e Zd ZU dZ ed       Zeez  ed<    ed       Z	e
dz  ez  ed<   y)GoogleImageGenSettingsa  Settings for the Google image generation service.

    Parameters:
        model: Google Imagen model identifier.
        number_of_images: Number of images to generate per request.
        negative_prompt: Text describing what not to include in generated images.
    c                      t         S Nr        O/opt/pipecat/venv/lib/python3.12/site-packages/pipecat/services/google/image.py<lambda>zGoogleImageGenSettings.<lambda>2   s    i r   )default_factorynumber_of_imagesc                      t         S r   r   r   r   r    r!   zGoogleImageGenSettings.<lambda>3   s    I r   Nnegative_prompt)__name__
__module____qualname____doc__r   r#   intr   __annotations__r%   strr   r   r    r   r   (   s7     ).>O(PcIoP.3DU.VOS4Z)+Vr   r   c            
            e Zd ZU dZeZeed<    G d de      Zddddde	de
e   d	e
e   d
e
e   f fdZdefdZde	deedf   fdZ xZS )GoogleImageGenServicea  Google AI image generation service using Imagen models.

    Provides text-to-image generation capabilities using Google's Imagen models
    through the Google AI API. Supports multiple image generation and negative
    prompting for enhanced control over generated content.
    	_settingsc                   p    e Zd ZU dZ eddd      Zeed<    ed      Ze	ed<    ed	      Z
ee	   ed
<   y	)!GoogleImageGenService.InputParamsa  Configuration parameters for Google image generation.

        .. deprecated:: 0.0.105
            Use ``settings=GoogleImageGenSettings(...)`` instead.

        Parameters:
            number_of_images: Number of images to generate (1-8). Defaults to 1.
            model: Google Imagen model to use. Defaults to "imagen-3.0-generate-002".
            negative_prompt: Optional negative prompt to guide what not to include.
              )defaultgeler#   imagen-3.0-generate-002)r4   modelNr%   )r&   r'   r(   r)   r   r#   r*   r+   r8   r,   r%   r	   r   r   r    InputParamsr1   A   s@    		 !&aA! <#<#<=s=).t)<#<r   r9   N)paramshttp_optionssettingsapi_keyr:   r;   r<   c                F   t        ddd      }|Et        dt                |s3|j                  |_        |j                  |_        |j                  |_        ||j                  |       t        |   dd|i| t        |      }t        j                  ||      | _        y)	ai  Initialize the GoogleImageGenService with API key and parameters.

        Args:
            api_key: Google AI API key for authentication.
            params: Configuration parameters for image generation.

                .. deprecated:: 0.0.105
                    Use ``settings=GoogleImageGenSettings(...)`` instead.

            http_options: HTTP options for the client.
            settings: Runtime-updatable settings. When provided alongside deprecated
                parameters, ``settings`` values take precedence.
            **kwargs: Additional arguments passed to the parent ImageGenService.
        r7   r2   N)r8   r#   r%   r:   r<   )r=   r;   r   )r   r   r8   r#   r%   apply_updatesuper__init__r   r   Client_client)selfr=   r:   r;   r<   kwargsdefault_settings	__class__s          r    rA   zGoogleImageGenService.__init__Q   s    0 2+ 
 "8-CD)/ &4:4K4K 1393I3I 0 ))(3="2=f= 9F||G,Or   returnc                      y)zCheck if this service can generate processing metrics.

        Returns:
            True, as Google image generation service supports metrics.
        Tr   )rD   s    r    can_generate_metricsz*GoogleImageGenService.can_generate_metrics   s     r   promptc                f  K   t        j                  d|        | j                          d{    	 | j                  j                  j
                  j                  | j                  j                  |t        j                  | j                  j                  | j                  j                               d{   }| j                          d{    |r|j                  st        d       y|j                  D ]v  }|j                   j"                  }t%        j&                  t)        j*                  |            }t-        d|j/                         |j0                  |j2                        }| x y7 L7 7 # t4        $ r$}t        dt7        |              Y d}~yd}~ww xY ww)a  Generate images from a text prompt using Google's Imagen model.

        Args:
            prompt: The text description to generate images from.

        Yields:
            Frame: Generated URLImageRawFrame objects containing the generated
                images, or ErrorFrame objects if generation fails.

        Raises:
            Exception: If there are issues with the Google AI API or image processing.
        zGenerating image from prompt: N)r#   r%   )r8   rK   configzImage generation failed)urlimagesizeformatzImage generation error: )r
   debugstart_ttfb_metricsrC   aiomodelsgenerate_imagesr/   r8   r   GenerateImagesConfigr#   r%   stop_ttfb_metricsgenerated_imagesr   rO   image_bytesr   openioBytesIOr   tobytesrP   rQ   	Exceptionr,   )rD   rK   responseimg_responserZ   rO   framees           r    run_image_genz#GoogleImageGenService.run_image_gen   sk     	5fX>?%%'''	B!\\--44DDnn**11%)^^%D%D$(NN$B$B E  H ((***8#<#< !:;; ( 9 9 *00<<

2::k#:;(--/ <<	 # 	( +&  	B7Ax@AAA	Bsj   ,F1E:F1BF :E=;F E? F 3F14BF 9F1=F ?F 	F.
F)$F1)F..F1)r&   r'   r(   r)   r   Settingsr+   r   r9   r,   r	   r   rA   boolrJ   r   r   rd   __classcell__)rG   s   @r    r.   r.   6   s     &H%%=i =( )-&*59/P /P %	/P
 sm/P 12/Pbd -B# -B.2M -Br   r.   ))r)   r\   osenvirondataclassesr   r   typingr   r   r	   logurur
   PILr   pydanticr   r   pipecat.frames.framesr   r   r   pipecat.services.google.utilsr   pipecat.services.image_servicer   pipecat.services.settingsr   r   r   r   googler   google.genair   ModuleNotFoundErrorrc   errorr_   r   r.   r   r   r    <module>rw      s    
 	 *1

% & ( 0 0   % E E K : d d," 
W- 
W 
WABO AB)  ,FLL;qc"#FLL[\
&qc*
++,s   #B C2CC