U
    ~fhq                     @  sH  d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
Z
ddlmZ ddlmZmZmZ ddlmZmZmZmZmZmZ dd	lmZmZmZmZ dd
lmZ ddlm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddgZ+G dd de Z,G dd de!Z-G dd dZ.G dd dZ/G dd dZ0G dd dZ1dS )    )annotations)ListUnionMappingOptionalcast)LiteralN   )_legacy_response)image_edit_paramsimage_generate_paramsimage_create_variation_params)	NOT_GIVENBodyQueryHeadersNotGiven	FileTypes)extract_filesmaybe_transformdeepcopy_minimalasync_maybe_transform)cached_property)SyncAPIResourceAsyncAPIResource)to_streamed_response_wrapper"async_to_streamed_response_wrapper)make_request_options)
ImageModel)ImagesResponseImagesAsyncImagesc                   @  s  e Zd ZeddddZeddddZeeeeeddded		d
dddddddddddddZeeeeeeeeeedddeddddddddddddddddddd d!d"Zeeeeeeeeeeeddded#dddd$dddd%dd&d'ddddddd(d)d*Z	dS )+r    ImagesWithRawResponsereturnc                 C  s   t | S a  
        This property can be used as a prefix for any HTTP method call to return
        the raw response object instead of the parsed content.

        For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers
        )r"   self r(   ;/tmp/pip-unpacked-wheel-rjiviquo/openai/resources/images.pywith_raw_response   s    zImages.with_raw_responseImagesWithStreamingResponsec                 C  s   t | S z
        An alternative to `.with_raw_response` that doesn't eagerly read the response body.

        For more information, see https://www.github.com/openai/openai-python#with_streaming_response
        )r+   r&   r(   r(   r)   with_streaming_response#   s    zImages.with_streaming_responseN	modelnresponse_formatsizeuserextra_headersextra_query
extra_bodytimeoutr   'Union[str, ImageModel, None] | NotGivenOptional[int] | NotGiven1Optional[Literal[('url', 'b64_json')]] | NotGivenAOptional[Literal[('256x256', '512x512', '1024x1024')]] | NotGivenstr | NotGivenHeaders | NoneQuery | NoneBody | None'float | httpx.Timeout | None | NotGivenr   imager/   r0   r1   r2   r3   r4   r5   r6   r7   r$   c       
      
   C  sl   t ||||||d}tttttf |dggd}ddi|p@i }| jdt|tj	|t
|||	|
dtdS )	   Creates a variation of a given image.

        This endpoint only supports `dall-e-2`.

        Args:
          image: The image to use as the basis for the variation(s). Must be a valid PNG file,
              less than 4MB, and square.

          model: The model to use for image generation. Only `dall-e-2` is supported at this
              time.

          n: The number of images to generate. Must be between 1 and 10.

          response_format: The format in which the generated images are returned. Must be one of `url` or
              `b64_json`. URLs are only valid for 60 minutes after the image has been
              generated.

          size: The size of the generated images. Must be one of `256x256`, `512x512`, or
              `1024x1024`.

          user: A unique identifier representing your end-user, which can help OpenAI to monitor
              and detect abuse.
              [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        rB   r/   r0   r1   r2   r3   rB   pathsContent-Typemultipart/form-data/images/variationsr4   r5   r6   r7   bodyfilesoptionscast_to)r   r   r   r   strobject_postr   r   ImageCreateVariationParamsr   r   r'   rB   r/   r0   r1   r2   r3   r4   r5   r6   r7   rL   rM   r(   r(   r)   create_variation,   s.    0

   zImages.create_variation
backgroundmaskr/   r0   output_compressionoutput_formatqualityr1   r2   r3   r4   r5   r6   r7   !Union[FileTypes, List[FileTypes]]rP   ?Optional[Literal[('transparent', 'opaque', 'auto')]] | NotGivenFileTypes | NotGiven5Optional[Literal[('png', 'jpeg', 'webp')]] | NotGivenKOptional[Literal[('standard', 'low', 'medium', 'high', 'auto')]] | NotGivencOptional[Literal[('256x256', '512x512', '1024x1024', '1536x1024', '1024x1536', 'auto')]] | NotGivenrB   promptrW   rX   r/   r0   rY   rZ   r[   r1   r2   r3   r4   r5   r6   r7   r$   c                C  s   t |||||||||	|
||d}tttttf |dgddgdggd}ddi|pVi }| jdt|tj	|t
||||d	td
S )N  Creates an edited or extended image given one or more source images and a
        prompt.

        This endpoint only supports `gpt-image-1` and `dall-e-2`.

        Args:
          image: The image(s) to edit. Must be a supported image file or an array of images.

              For `gpt-image-1`, each image should be a `png`, `webp`, or `jpg` file less than
              50MB. You can provide up to 16 images.

              For `dall-e-2`, you can only provide one image, and it should be a square `png`
              file less than 4MB.

          prompt: A text description of the desired image(s). The maximum length is 1000
              characters for `dall-e-2`, and 32000 characters for `gpt-image-1`.

          background: Allows to set transparency for the background of the generated image(s). This
              parameter is only supported for `gpt-image-1`. Must be one of `transparent`,
              `opaque` or `auto` (default value). When `auto` is used, the model will
              automatically determine the best background for the image.

              If `transparent`, the output format needs to support transparency, so it should
              be set to either `png` (default value) or `webp`.

          mask: An additional image whose fully transparent areas (e.g. where alpha is zero)
              indicate where `image` should be edited. If there are multiple images provided,
              the mask will be applied on the first image. Must be a valid PNG file, less than
              4MB, and have the same dimensions as `image`.

          model: The model to use for image generation. Only `dall-e-2` and `gpt-image-1` are
              supported. Defaults to `dall-e-2` unless a parameter specific to `gpt-image-1`
              is used.

          n: The number of images to generate. Must be between 1 and 10.

          output_compression: The compression level (0-100%) for the generated images. This parameter is only
              supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and
              defaults to 100.

          output_format: The format in which the generated images are returned. This parameter is only
              supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. The
              default value is `png`.

          quality: The quality of the image that will be generated. `high`, `medium` and `low` are
              only supported for `gpt-image-1`. `dall-e-2` only supports `standard` quality.
              Defaults to `auto`.

          response_format: The format in which the generated images are returned. Must be one of `url` or
              `b64_json`. URLs are only valid for 60 minutes after the image has been
              generated. This parameter is only supported for `dall-e-2`, as `gpt-image-1`
              will always return base64-encoded images.

          size: The size of the generated images. Must be one of `1024x1024`, `1536x1024`
              (landscape), `1024x1536` (portrait), or `auto` (default value) for
              `gpt-image-1`, and one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`.

          user: A unique identifier representing your end-user, which can help OpenAI to monitor
              and detect abuse.
              [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        rB   rc   rW   rX   r/   r0   rY   rZ   r[   r1   r2   r3   rB   <array>rX   rE   rG   rH   /images/editsrJ   rK   )r   r   r   r   rP   rQ   rR   r   r   ImageEditParamsr   r   r'   rB   rc   rW   rX   r/   r0   rY   rZ   r[   r1   r2   r3   r4   r5   r6   r7   rL   rM   r(   r(   r)   editu   s:    \(
   zImages.editrW   r/   
moderationr0   rY   rZ   r[   r1   r2   styler3   r4   r5   r6   r7   -Optional[Literal[('low', 'auto')]] | NotGivenQOptional[Literal[('standard', 'hd', 'low', 'medium', 'high', 'auto')]] | NotGiven}Optional[Literal[('auto', '1024x1024', '1536x1024', '1024x1536', '256x256', '512x512', '1792x1024', '1024x1792')]] | NotGiven2Optional[Literal[('vivid', 'natural')]] | NotGivenrc   rW   r/   rl   r0   rY   rZ   r[   r1   r2   rm   r3   r4   r5   r6   r7   r$   c                C  s@   | j dt|||||||||	|
||dtjt||||dtdS )  
        Creates an image given a prompt.
        [Learn more](https://platform.openai.com/docs/guides/images).

        Args:
          prompt: A text description of the desired image(s). The maximum length is 32000
              characters for `gpt-image-1`, 1000 characters for `dall-e-2` and 4000 characters
              for `dall-e-3`.

          background: Allows to set transparency for the background of the generated image(s). This
              parameter is only supported for `gpt-image-1`. Must be one of `transparent`,
              `opaque` or `auto` (default value). When `auto` is used, the model will
              automatically determine the best background for the image.

              If `transparent`, the output format needs to support transparency, so it should
              be set to either `png` (default value) or `webp`.

          model: The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or
              `gpt-image-1`. Defaults to `dall-e-2` unless a parameter specific to
              `gpt-image-1` is used.

          moderation: Control the content-moderation level for images generated by `gpt-image-1`. Must
              be either `low` for less restrictive filtering or `auto` (default value).

          n: The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only
              `n=1` is supported.

          output_compression: The compression level (0-100%) for the generated images. This parameter is only
              supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and
              defaults to 100.

          output_format: The format in which the generated images are returned. This parameter is only
              supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`.

          quality: The quality of the image that will be generated.

              - `auto` (default value) will automatically select the best quality for the
                given model.
              - `high`, `medium` and `low` are supported for `gpt-image-1`.
              - `hd` and `standard` are supported for `dall-e-3`.
              - `standard` is the only option for `dall-e-2`.

          response_format: The format in which generated images with `dall-e-2` and `dall-e-3` are
              returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes
              after the image has been generated. This parameter isn't supported for
              `gpt-image-1` which will always return base64-encoded images.

          size: The size of the generated images. Must be one of `1024x1024`, `1536x1024`
              (landscape), `1024x1536` (portrait), or `auto` (default value) for
              `gpt-image-1`, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and
              one of `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`.

          style: The style of the generated images. This parameter is only supported for
              `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean
              towards generating hyper-real and dramatic images. Natural causes the model to
              produce more natural, less hyper-real looking images.

          user: A unique identifier representing your end-user, which can help OpenAI to monitor
              and detect abuse.
              [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        /images/generationsrc   rW   r/   rl   r0   rY   rZ   r[   r1   r2   rm   r3   rJ   rL   rN   rO   )rR   r   r   ImageGenerateParamsr   r   r'   rc   rW   r/   rl   r0   rY   rZ   r[   r1   r2   rm   r3   r4   r5   r6   r7   r(   r(   r)   generate   s4    ^   zImages.generate
__name__
__module____qualname__r   r*   r-   r   rU   rj   ry   r(   r(   r(   r)   r       sZ   	&N2c                   @  s  e Zd ZeddddZeddddZeeeeeddded		d
dddddddddddddZeeeeeeeeeedddeddddddddddddddddddd d!d"Zeeeeeeeeeeeddded#dddd$dddd%dd&d'ddddddd(d)d*Z	dS )+r!   AsyncImagesWithRawResponser#   c                 C  s   t | S r%   )r~   r&   r(   r(   r)   r*   i  s    zAsyncImages.with_raw_response AsyncImagesWithStreamingResponsec                 C  s   t | S r,   )r   r&   r(   r(   r)   r-   s  s    z#AsyncImages.with_streaming_responseNr.   r   r8   r9   r:   r;   r<   r=   r>   r?   r@   r   rA   c       
      
     sx   t ||||||d}tttttf |dggd}ddi|p@i }| jdt|tj	I dH |t
|||	|
dtd	I dH S )
rC   rD   rB   rE   rG   rH   rI   NrJ   rK   )r   r   r   r   rP   rQ   rR   r   r   rS   r   r   rT   r(   r(   r)   rU   |  s.    0
   zAsyncImages.create_variationrV   r\   rP   r]   r^   r_   r`   ra   rb   c                  s   t |||||||||	|
||d}tttttf |dgddgdggd}ddi|pVi }| jdt|tj	I d	H |t
||||d
tdI d	H S )rd   re   rB   rf   rX   rE   rG   rH   rg   NrJ   rK   )r   r   r   r   rP   rQ   rR   r   r   rh   r   r   ri   r(   r(   r)   rj     s:    \(   zAsyncImages.editrk   rn   ro   rp   rq   rr   c                  sL   | j dt|||||||||	|
||dtjI dH t||||dtdI dH S )rs   rt   ru   NrJ   rv   )rR   r   r   rw   r   r   rx   r(   r(   r)   ry   @  s4    ^   zAsyncImages.generaterz   r(   r(   r(   r)   r!   h  sZ   	&N2c                   @  s   e Zd ZdddddZdS )r"   r    Noneimagesr$   c                 C  s4   || _ t|j| _t|j| _t|j| _d S N)_imagesr
   Zto_raw_response_wrapperrU   rj   ry   r'   r   r(   r(   r)   __init__  s    zImagesWithRawResponse.__init__Nr{   r|   r}   r   r(   r(   r(   r)   r"     s   r"   c                   @  s   e Zd ZdddddZdS )r~   r!   r   r   c                 C  s4   || _ t|j| _t|j| _t|j| _d S r   )r   r
   Zasync_to_raw_response_wrapperrU   rj   ry   r   r(   r(   r)   r     s    z#AsyncImagesWithRawResponse.__init__Nr   r(   r(   r(   r)   r~     s   r~   c                   @  s   e Zd ZdddddZdS )r+   r    r   r   c                 C  s.   || _ t|j| _t|j| _t|j| _d S r   )r   r   rU   rj   ry   r   r(   r(   r)   r     s    z$ImagesWithStreamingResponse.__init__Nr   r(   r(   r(   r)   r+     s   r+   c                   @  s   e Zd ZdddddZdS )r   r!   r   r   c                 C  s.   || _ t|j| _t|j| _t|j| _d S r   )r   r   rU   rj   ry   r   r(   r(   r)   r     s    z)AsyncImagesWithStreamingResponse.__init__Nr   r(   r(   r(   r)   r     s   r   )2
__future__r   typingr   r   r   r   r   Ztyping_extensionsr   Zhttpx r
   typesr   r   r   _typesr   r   r   r   r   r   _utilsr   r   r   r   _compatr   Z	_resourcer   r   	_responser   r   Z_base_clientr   Ztypes.image_modelr   Ztypes.images_responser   __all__r    r!   r"   r~   r+   r   r(   r(   r(   r)   <module>   s0      R  R