ó
    ±"³jl4  ã                   óv  • S SK JrJrJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJrJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJrJr  SSKJrJr  SSKJrJr  SSKJ r J!r!  SSK"J#r#J$r$J%r%J&r&  SSK'J(r(  SSK)J*r*  / SQr+\" S\S   5      r, \S.S\\,-  \--  S\\-/\\   4   S\4S jjr.\	" SSS9 " S S5      5       r/g)é    )ÚCallableÚ	GeneratorÚSequence)Úcontextmanager)Ú
ContextVar)Ú	dataclass)ÚAnyÚClassVarÚLiteral)ÚTypeAliasType)Ú_utils)Ú	UserError)ÚInstrumentationSettings)ÚProviderÚinfer_provideré   )ÚImageGenerationInputÚImageGenerationModel)Ú InstrumentedImageGenerationModelÚ!instrument_image_generation_model)ÚGeneratedImageÚImageGenerationResult)ÚImageDimensionsÚImageGenerationAspectRatioÚImageGenerationSettingsÚmerge_image_generation_settings)ÚTestImageGenerationModel)ÚWrapperImageGenerationModel)r   r   r   r   r   r   r   ÚImageGeneratorr   ÚKnownImageGenerationModelNamer   r   Úinfer_image_generation_modelr   r   r    )z#google-cloud:gemini-2.5-flash-imagezgoogle-cloud:gemini-3-pro-imagez#google-cloud:gemini-3.1-flash-imagez(google-cloud:gemini-3.1-flash-lite-imagezgoogle:gemini-2.5-flash-imagezgoogle:gemini-3-pro-imagezgoogle:gemini-3.1-flash-imagez"google:gemini-3.1-flash-lite-imagezopenai:gpt-image-1zopenai:gpt-image-1-minizopenai:gpt-image-1.5zopenai:gpt-image-2zxai:grok-imagine-imagezxai:grok-imagine-image-2.0zxai:grok-imagine-image-quality)Úprovider_factoryÚmodelr"   Úreturnc                ó¦  • [        U [        5      (       a  U $  U R                  SSS9u  p#UnUR	                  S5      (       a$  SSKJn  U" U5      nUS	:w  a  [        S
U< S35      eU" U5      nUS:X  a  SSKJ	n  U" X7S9$ US;   a  SSK
Jn	  U	" X7S9$ US:X  a  SSKJn
  U
" X7S9$ [        SU< S35      e! [         a  n[        S5      UeSnAff = f)z/Infer the image generation model from the name.Ú:r   )ÚmaxsplitzQYou must provide a provider prefix when specifying an image generation model nameNzgateway/é   )Únormalize_gateway_providerúgoogle-cloudzImage generation provider zc cannot be routed through the Pydantic AI Gateway. The supported gateway route is `gateway/google`.Úopenai)ÚOpenAIImageGenerationModel)Úprovider)Úgoogler*   )ÚGoogleImageGenerationModelÚxai)ÚXaiImageGenerationModelz	Provider z* does not support direct image generation.)Ú
isinstancer   ÚsplitÚ
ValueErrorÚ
startswithÚproviders.gatewayr)   r   r+   r,   r.   r/   r0   r1   )r#   r"   Úprovider_nameÚ
model_nameÚeÚ
model_kindr)   r-   r,   r/   r1   s              ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pydantic_ai/images/__init__.pyr!   r!   H   s  € ô �%Ô-×.Ñ.ØˆðuØ$)§K¡K°¸a KÐ$@Ñ!ˆð €JØ×Ñ˜Z×(Ñ(ÝBñ 0°
Ó;ˆ
Ø˜Ó'ÜØ,¨]Ñ,=ð >Cð Cóð ñ
   Ó.€Hà�XÓÝ6á)¨*ÑHÐHà	Ð1Ó	1Ý6á)¨*ÑHÐHØ	�uÓ	Ý0á& zÑEÐEä˜) MÑ#4Ð4^Ð_Ó`Ð`øôE ó uÜÐlÓmÐstÐtûðuús   ™B5 Â5
CÂ?CÃCF)ÚinitÚeqc                   ó¼  • \ rS rSr% Sr\\-  S-  \S'    Sr\	\\-     \S'   SSSS.S	\
\-  \-  S
\S-  S\S\\-  S-  SS4
S jjr\SS\\-  SS4S jj5       r\S\
\-  \-  4S j5       r\\R*                  S.S	\
\-  \-  \R,                  -  S\S   4S jj5       rSSS.S\S\\   S-  S
\S-  S\4S jjrSSS.S\S\\   S-  S
\S-  S\4S jjrS\
4S jrSrg)r   é{   a1  High-level interface for generating images.

The `ImageGenerator` class provides a convenient way to generate images from a prompt, and to edit
or transform reference images, using dedicated image models. It handles model inference, settings
management, and optional OpenTelemetry instrumentation.

Example:
```python
from pydantic_ai import ImageGenerator

generator = ImageGenerator('openai:gpt-image-2')


async def main():
    result = await generator.generate('A watercolor map of a floating city.')
    print(result.image.media_type)
    #> image/png
```
NÚ
instrumentFÚ_instrument_defaultT)ÚsettingsÚdefer_model_checkr@   r#   rB   rC   r$   c                ól   • U(       a  UO
[        U5      U l        X l        X@l        [	        SSS9U l        g)a$  Initialize an ImageGenerator.

Args:
    model: The image generation model to use. Can be specified as:

        - A model name string in the format `'provider:model-name'`
          (e.g., `'openai:gpt-image-2'`)
        - An [`ImageGenerationModel`][pydantic_ai.images.ImageGenerationModel] instance
    settings: Optional [`ImageGenerationSettings`][pydantic_ai.images.ImageGenerationSettings]
        to use as defaults for all generate calls.
    defer_model_check: Whether to defer resolving the model name to a model instance, and the
        provider authentication that resolution requires, until the first generate call.
        Set to `False` to resolve the model immediately on construction.
    instrument: OpenTelemetry instrumentation settings. Set to `True` to enable with defaults,
        or pass an [`InstrumentationSettings`][pydantic_ai.models.instrumented.InstrumentationSettings]
        instance to customize. If `None`, uses the value from
        [`ImageGenerator.instrument_all()`][pydantic_ai.images.ImageGenerator.instrument_all].
Ú_override_modelN)Údefault)r!   Ú_modelÚ	_settingsr@   r   rE   )Úselfr#   rB   rC   r@   s        r;   Ú__init__ÚImageGenerator.__init__�   s1   € ö4  1‘eÔ6RÐSXÓ6YˆŒØ!ŒØ$ŒäHRÐSdÐnrÑHsˆÕó    c                 ó   • U [         l        g)aÞ  Set the default instrumentation options for all image generators where `instrument` is not explicitly set.

This is useful for enabling instrumentation globally without modifying each generator individually.

Args:
    instrument: Instrumentation settings to use as the default. Set to `True` for default settings,
        `False` to disable, or pass an
        [`InstrumentationSettings`][pydantic_ai.models.instrumented.InstrumentationSettings]
        instance to customize.
N)r   rA   )r@   s    r;   Úinstrument_allÚImageGenerator.instrument_all½   s   € ð .8ŒÕ*rL   c                 ó   • U R                   $ )z2The image generation model used by this generator.)rG   )rI   s    r;   r#   ÚImageGenerator.modelË   s   € ð �{‰{ÐrL   )r#   c             #   ó   #   • [         R                  " U5      (       a%  U R                  R                  [	        U5      5      nOSn Sv •  Ub  U R                  R                  U5        gg! Ub  U R                  R                  U5        f f = f7f)aH  Context manager to temporarily override the image generation model.

Useful for testing or dynamically switching models.

Args:
    model: The image generation model to use within this context.

Example:
```python
from pydantic_ai import ImageGenerator

generator = ImageGenerator('openai:gpt-image-2')


async def main():
    # Temporarily use a different model
    with generator.override(model='google:gemini-3.1-flash-image'):
        result = await generator.generate('A watercolor map of a floating city.')
        print(result.model_name)
        #> gemini-3.1-flash-image
```
N)r   Úis_setrE   Úsetr!   Úreset)rI   r#   Úmodel_tokens      r;   ÚoverrideÚImageGenerator.overrideÐ   s~   é € ô8 �=Š=˜×ÑØ×.Ñ.×2Ñ2Ô3OÐPUÓ3VÓW‰KàˆKð	8ÛàÑ&Ø×$Ñ$×*Ñ*¨;Õ7ð 'øˆ{Ñ&Ø×$Ñ$×*Ñ*¨;Õ7ð 'üs   ‚ABÁA* Á
 BÁ*!BÂB©ÚimagesrB   ÚpromptrZ   c             ƒ   óŠ   #   • U R                  5       n[        U R                  U5      nUR                  XUS9I Sh  v•N $  N7f)a}  Generate images from a prompt and optional reference images.

Args:
    prompt: The text prompt describing the image to generate.
    images: Optional reference images to edit or transform. Passing reference images sends the
        request to the provider's image-editing path, preserving the order of the images. Each
        item can be a [`BinaryImage`][pydantic_ai.messages.BinaryImage],
        [`ImageUrl`][pydantic_ai.messages.ImageUrl], or
        [`UploadedFile`][pydantic_ai.messages.UploadedFile]; see the
        [Image Generation guide](../image-generation.md#editing-images) for the reference-input
        types each provider accepts.
    settings: Optional settings to override the generator's default settings for this call.

Returns:
    An [`ImageGenerationResult`][pydantic_ai.images.ImageGenerationResult] containing the
    generated images and metadata about the operation.

Raises:
    ContentFilterError: If the provider blocked the request, or every generated image, for
        content moderation.
    UserError: If the prompt is empty, a setting is invalid, or the model cannot produce the
        requested dimensions.
rY   N)Ú
_get_modelr   rH   Úgenerate)rI   r[   rZ   rB   r#   s        r;   r^   ÚImageGenerator.generate÷   s<   é € ð< —‘Ó!ˆÜ2°4·>±>À8ÓLˆØ—^‘^ FÀH�^ÐM×MÐMÑMùs   ‚:A¼A½Ac                óJ   • [         R                  " U R                  XUS95      $ )aÆ  Synchronous version of [`generate()`][pydantic_ai.images.ImageGenerator.generate].

Args:
    prompt: The text prompt describing the image to generate.
    images: Optional reference images to edit or transform.
    settings: Optional settings to override the generator's default settings for this call.

Returns:
    An [`ImageGenerationResult`][pydantic_ai.images.ImageGenerationResult] containing the
    generated images and metadata about the operation.

Raises:
    ContentFilterError: If the provider blocked the request, or every generated image, for
        content moderation.
    UserError: If the prompt is empty, a setting is invalid, or the model cannot produce the
        requested dimensions.
rY   )r   Úrun_until_completer^   )rI   r[   rZ   rB   s       r;   Úgenerate_syncÚImageGenerator.generate_sync  s#   € ô0 ×(Ò(¨¯©°vÐW_¨Ð)`ÓaÐarL   c                 óÌ   • U R                   R                  5       =n(       a  UnO[        U R                  5      =o l        U R
                  nUc  U R                  n[        X#5      $ )z-Create a model configured for this generator.)rE   Úgetr!   r#   rG   r@   rA   r   )rI   Ú
some_modelÚmodel_r@   s       r;   r]   ÚImageGenerator._get_model3  s[   € ð ×-Ñ-×1Ñ1Ó3Ð3ˆ:Õ3Ø‰Fä#?ÀÇ
Á
Ó#KÐKˆF”[à—_‘_ˆ
ØÑØ×1Ñ1ˆJä0°ÓDÐDrL   )rG   rE   rH   r@   )T) Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚboolÚ__annotations__rA   r
   r   r    Ústrr   rJ   ÚstaticmethodrN   Úpropertyr#   r   r   ÚUNSETÚUnsetr   rW   r   r   r   r^   rb   r]   Ú__static_attributes__© rL   r;   r   r   {   sÖ  ‡ ñð( (¨$Ñ.°Ñ5Ó5ðð EJÐ˜Ð"9¸DÑ"@ÑAÓIð 48Ø"&Ø<@òtà#Ð&CÑCÀcÑIðtð *¨DÑ0ð	tð
  ðtð ,¨dÑ2°TÑ9ðtð 
õtð@ ñ8Ð#:¸TÑ#Að 8ÈTô 8ó ð8ð ðÐ+Ð.KÑKÈcÑQó ó ðð ð \b×[gÑ[gò$8ð $Ð&CÑCÀcÑIÈFÏLÉLÑXð$8ð 
�4‰ô	$8ó ð$8ðT 9=Ø37ò Nàð Nð Ð-Ñ.°Ñ5ð	 Nð
 *¨DÑ0ð Nð 
õ NðL 9=Ø37òbàðbð Ð-Ñ.°Ñ5ð	bð
 *¨DÑ0ðbð 
õbð4EÐ0÷ ErL   r   N)0Úcollections.abcr   r   r   Ú
contextlibr   Úcontextvarsr   Údataclassesr   Útypingr	   r
   r   Útyping_extensionsr   Úpydantic_air   Úpydantic_ai.exceptionsr   Úpydantic_ai.models.instrumentedr   Úpydantic_ai.providersr   r   Úbaser   r   Úinstrumentedr   r   Úresultr   r   rB   r   r   r   r   Útestr   Úwrapperr   Ú__all__r    rp   r!   r   rv   rL   r;   Ú<module>r‡      sÚ   ðß 9Ñ 9Ý %Ý "Ý !ß )Ñ )å +å Ý ,Ý Cß :ç <ß ]ß 9÷ó õ +Ý 0ò€ñ$ !.Ø#Øð	*ñó!Ð ð(ð 8Fò-aØÐ"?Ñ?À#ÑEð-að  ˜u h¨s¡mÐ3Ñ4ð-að õ	-añf �˜%Ñ ÷CEð CEó !ñCErL   