o
    ưip                  %   @   s  U d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ er3d dlmZ d dl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 d d	l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% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z, e' Z-e'e.d< d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZD d dl*mEZEmFZFmGZGmHZH daIed e.d< dJddZJedeEfddZKe								 				dKd!eLd"eeL d#eeM d$eeeLe>f  d%eeL d&eeL d'eeL d(eeL d)eeL d*eeL d+eeL d,ed- deeeeEf fd.d/ZNe								 				dKd0d1d!eLd"eeL d#eeM d$eeeLe>f  d%eeL d&eeL d'eeL d(eeL d)eeL d*eeL d+eeL d,ed0 deEfd2d/ZNe								 				dKd!eLd"eeL d#eeM d$eeeLe>f  d%eeL d&eeL d'eeL d(eeL d)eeL d*eeL d+eeL deeEeeeeEf f fd3d/ZNedeEfd4d5ZOe	6	7	8		dLd9e0d"eLd#eMd%ed: d&eeL d(eeL deEfd;d<ZPe														dMd9eee0e
e0 f  d!eeL d"eeL d=eeL d#eeM d$eeeLe>f  d%eeL d&eeL d(eeL d>ee	eLef  d?ee	eLef  d@ee	eLef  dAeeeQejRf  dBeeL deeEeeeeEf f fdCdDZSe											dNd9ee0e
e0 f d"eLd!eLd=eeL d#eeM d$eeeLe>f  d%eeL d&eeL d(eeL d>ee	eLef  d?ee	eLef  d@ee	eLef  dAeeeQejRf  dBeeL deEfdEdFZTdGeLdefdHdIZUdS )O    N)partial)
TYPE_CHECKINGAny	CoroutineDictListLiteralOptionalUnioncastoverloadImageEditRequestUtils)client)DEFAULT_IMAGE_ENDPOINT_MODEL)request_timeout)LiteLLMUnknownProvider)Logging)mock_image_generation)BaseImageEditConfigBaseImageGenerationConfig)AsyncHTTPHandlerHTTPHandler)BaseLLMHTTPHandler)	CustomLLM)exception_typeget_litellm_paramsllm_http_handler)	FileTypes)azure_chat_completionsbase_llm_aiohttp_handlerbase_llm_http_handlerbedrock_image_editbedrock_image_generationopenai_chat_completionsopenai_image_variations)get_secret_str)ImageEditOptionalRequestParams)ImageGenerationRequestQuality)GenericLiteLLMParams)!LITELLM_IMAGE_VARIATION_PROVIDERSLlmProvidersall_litellm_params)ImageResponseProviderConfigManagerget_llm_providerget_optional_params_image_genr   _ImageEditRequestUtils_cachereturnc                  C   s(   t du rtt} | ja t dusJ t S )z7Get ImageEditRequestUtils, loading it lazily if needed.N)r1   	importlibimport_module__name__r   )module r7   J/home/app/Keep/.python/lib/python3.10/site-packages/litellm/images/main.py_get_ImageEditRequestUtilsJ   s
   
r9   c               
      s  t  }t| dkr| d n|d }d|d< d}zXttg| R i |}t }t|j|}t||	ddd\}}}}|
d|I dH }	d}
t|	trUtdi |	}
nt|	tr]|	}
n
t |	rg|	I dH }
|
du rotd|
W S  ty } z|p|d	}t|||| |d
d}~ww )a  
    Asynchronously calls the `image_generation` function with the given arguments and keyword arguments.

    Parameters:
    - `args` (tuple): Positional arguments to be passed to the `image_generation` function.
    - `kwargs` (dict): Keyword arguments to be passed to the `image_generation` function.

    Returns:
    - `response` (Any): The response returned by the `image_generation` function.
    r   modelTaimg_generationNapi_baser:   r<   z?Unable to get Image Response. Please pass a valid llm_provider.openair:   custom_llm_providerZoriginal_exceptionZcompletion_kwargsextra_kwargsr7   )asyncioget_event_looplenr   image_generationcontextvarscopy_contextrunr/   getrun_in_executor
isinstancedictr-   iscoroutine
ValueError	Exceptionr   argskwargsloopr:   r@   funcctxfunc_with_context_init_responseresponseer7   r7   r8   aimage_generationW   sH   



r[   X  promptr:   nqualityresponse_formatsizestyleuserapi_keyr<   api_versionr;   Tc                K      d S Nr7   r]   r:   r^   r_   r`   ra   rb   rc   timeoutrd   r<   re   r@   r;   rR   r7   r7   r8   rE         rE   F)r;   c                K   rf   rg   r7   rh   r7   r7   r8   rE      rj   c           7         s  zt  }|dd}|dd}|dd}|dd}|dd}|dd}|d	d}|d
i }|d}|dd}|dd}|ddpMi }|dd}|dur]|| tj }d}|dusl|durxt|||
d\}}}}
nd}d}||jd< g d}t}||   fdd|	 D } d}!|dur|t
j v rtj|p|t
|d}!tdA|p|||||||||!d	| }"tdAi |}#|}$|$j|||"|d|||||di d	|d d|$jvr||$jd< |durt||dW S |dkrtdpd}%|
ptjptd}
|ptjptd }|	p'tjp'tjp'td!p'td"}	|"d#dp2td$}&|du rfd%d&lm}' |#d'}(|#d(})|#d)}*|#d*pTd+}+|(rf|)rf|*rf|'|(|)|*|+d,}d-d.i},|	durs|	|,d/< |,	 D ]\}-}.|-|vr|.||-< qwtj|| ||	|
|&|||"||||||#d0}|W S |tj
jtj
jtj
j tj
j!tj
j"tj
j#tj
j$tj
j%fv r|!du rt&d1| |
ptj}/|/|#d2< t'j(|	|| |!|"||#|||d3
W S |d4kr5d%d5l)m*}0 |0+|
}
|0,|	}	|dur||"d< d-d.i},|	dur|	|,d/< |,	 D ]\}-}.|-|vr|.||-< qtj|| ||	|
d|||"||||||#d0}|W S |dksG|t
j-j.ksG|tj/v rm|durP||"d< |d6d}1t0j|| ||	p_||
||"||1|||d7}|W S |d8kr|du r{t1d9t2j|| |||"||||
|	d:
}|W S |tj3v rd}2tj4D ]}3|3d; |kr|3d< }2q|2du rt5||d=|d>u rd}4|durt6|t7r|}4|2j8|| |	|
||"|||4d?	}|W S d}5|durt6|t9r|}5|2j|| |	|
||"|||5d?	}|W S  t1y }6 z
t:|||6t  |d@d}6~6ww )Bzv
    Maps the https://api.openai.com/v1/images/generations endpoint.

    Currently supports just Azure + OpenAI.
    r;   Flitellm_call_idN	logger_fnmock_responseproxy_server_requestazure_ad_token_provider
model_infometadatalitellm_logging_objr   extra_headersheaders
base_model)r:   r@   r<   dall-e-2r>   r:   )rc   r   r<   re   rd   deployment_idorganizationbase_urldefault_headersri   max_retriesr^   r_   ra   rb   c                       i | ]\}}| vr||qS r7   r7   .0kvZdefault_paramsr7   r8   
<dictcomp>      z$image_generation.<locals>.<dictcomp>r:   provider)	r:   r^   r_   r`   ra   rb   rc   r@   provider_config)	ri   azurerk   rl   rn   rp   rq   Zpreset_cache_keyZstream_responser:   rc   optional_paramslitellm_paramsr@   r@   )r:   rm   r   ZAZURE_API_TYPEZAZURE_API_BASEZAZURE_API_VERSIONZAZURE_OPENAI_API_KEYZAZURE_API_KEYazure_ad_tokenZAZURE_AD_TOKENr   ) get_azure_ad_token_from_entra_id	tenant_id	client_idclient_secretazure_scopez,https://cognitiveservices.azure.com/.default)r   r   r   scopezContent-Typezapplication/jsonzapi-key)r:   r]   ri   rd   r<   r   ro   logging_objr   model_responsere   r;   r   rt   r   z-image generation config is not supported for r<   )
rd   r:   r]   Z image_generation_provider_configZ(image_generation_optional_request_paramsr@   r   r   ri   r   Zazure_ai)AzureFoundryModelInforx   )r:   r]   ri   rd   r<   r   r   r   rx   r;   r   rt   bedrock!Model needs to be set for bedrock)
r:   r]   ri   r   r   r   r;   r   r<   rd   r   custom_handlerr:   r@   T)	r:   r]   rd   r<   r   r   r   ri   r   r?   r7   );localsrI   updatelitellmutilsr-   r/   Z_hidden_paramsr,   itemsr+   _member_map_valuesr.   Z$get_provider_image_generation_configr0   r   update_environment_variablesZmodel_call_detailsr   r&   r<   re   rd   Z	azure_keypopZlitellm.llms.azure.common_utilsr   r   rE   ZRECRAFTZAIMLZGEMINIZFAL_AIZ	STABILITYZRUNWAYMLZ	VERTEX_AIZ
OPENROUTERrN   r   Zimage_generation_handlerZ"litellm.llms.azure_ai.common_utilsr   get_api_baseget_api_keyZLITELLM_PROXYvalueZopenai_compatible_providersr$   rO   r#   _custom_providerscustom_provider_mapr   rK   r   r[   r   r   )7r]   r:   r^   r_   r`   ra   rb   rc   ri   rd   r<   re   r@   rR   rQ   r;   rk   rl   rm   rn   ro   rp   rq   rr   r   rs   rt   ru   r   dynamic_api_keyopenai_paramsr   non_default_paramsZimage_generation_configr   Zlitellm_params_dictloggingZapi_typer   r   r   r   r   r   rz   r   r   Z	_api_baser   rx   r   itemasync_custom_clientcustom_clientrZ   r7   r   r8   rE      s@  














 1 







i

O

>


c               
      s.  t  }|dd}|dd}d|d< zhttg| R i |}t }t|j|}|du rA|durAt||ddd\}}}}|	d|I dH }	t
|	tsTt
|	tret
|	tr`td
i |	}	|	}
|
W S t |	rr|	I dH }
|
W S |	d|I dH }
|
W S  ty } z|pd}t|||| |d	d}~ww )a  
    Asynchronously calls the `image_variation` function with the given arguments and keyword arguments.

    Parameters:
    - `args` (tuple): Positional arguments to be passed to the `image_variation` function.
    - `kwargs` (dict): Keyword arguments to be passed to the `image_variation` function.

    Returns:
    - `response` (Any): The response returned by the `image_variation` function.
    r:   Nr@   T
async_callr<   r=   r>   r?   r7   )rB   rC   rI   r   image_variationrF   rG   rH   r/   rJ   rK   rL   r-   rM   rO   r   rP   r7   r7   r8   aimage_variation7  sJ   


r   rv      urlimage)r   Zb64_jsonc                 K   s  | dd }tt| d}tdi |}	t||	 dd |	 dd |	 dd d\}}
}}z
t|
}t|}W n tyH   td|
 dt w t }d }t	j
|pSd	|d
}|d u retd|
 dt ||	 dd }||	 dd }|tjkr|d u rtd|d u rtdtj||||| |	 dd |
|i |	d
}n+|tjkr|d u rtd|d u rtdtj||||| |	 dd pt|
|i |	|d}|d u rtd|
 dt |S )Nr   rr   r@   r<   rd   )r:   r@   r<   rd   z"Invalid image variation provider: z. Supported providers are:  r   z_image variation provider has no known model info config - required for getting api keys, etc.: z/API key is required for OpenAI image variationsz0API base is required for OpenAI image variationsri   )
r   rd   r<   r:   r   ri   r@   r   r   r   z.API key is required for Topaz image variationsz/API base is required for Topaz image variations)r   rd   r<   r:   r   ri   r@   r   r   r   r   r7   )rI   r   LiteLLMLoggingObjr   r/   r+   r*   rN   r-   r.   Zget_provider_model_infor   r   ZOPENAIr%   Zimage_variationsZTOPAZr    DEFAULT_REQUEST_TIMEOUT)r   r:   r^   r`   ra   rc   rR   r   rr   r   r@   r   r<   Zllm_providerZimage_variation_providerr   rY   r   rd   r7   r7   r8   r   n  s   





r   maskrs   extra_query
extra_bodyri   r@   c           &         s  t  }zg d}t}||   fdd| D }|d}|dd}|dd}|di }|d	d
du }t| tr@| n| durG| gng }|d}i }t|trZ|| t|	trd||	 |rjt|}	t	d!i |}t
|put|d\}}}}|tjv rd}tjD ]}|d |kr|d }q|du rt||dt }|rd} |ddurt|dtr|d} |j|||||d|d|||| d
W S d}!|ddurt|dtr|d}!|j|||||d|d||||!d
W S tj|t|d}"|"du rtd| || t |}#t j||"|#|d|dd}$|j||t|$i |$|||d|d |dkrp|du rOtd|$| tj||||||$t ||d|d|	|ddW S |dkr|$| tj ||||"|$||||	||pt!||ddW S tj ||||"|$||||	||pt!||ddW S  ty }% z
tj"|||%||d d}%~%ww )"zW
    Maps the image edit functionality, similar to OpenAI's images/edits endpoint.
    )rc   r   r<   re   rd   rw   rx   ry   rz   ri   r{   r^   r_   ra   rb   r   c                    r|   r7   r7   r}   r   r7   r8   r     r   zimage_edit.<locals>.<dictcomp>rr   rk   Nrp   rq   r   FTrt   r   r   r   r   rd   r<   )
r:   r   r]   r   rd   r<   r   r   ri   r   r   z image edit is not supported for drop_paramsadditional_drop_params)r:   image_edit_provider_configimage_edit_optional_paramsr   r   )rk   rp   rq   r   r   r   )r:   r   r]   ri   r   r   r   aimage_editr   r<   rs   rd   Z	stability)r:   r   r]   r   Z"image_edit_optional_request_paramsr@   r   r   rs   r   ri   	_is_asyncr   r?   r7   )#r   r,   r   rI   r   rK   listrL   r   r)   r/   r   r   r   r   r   r-   r   r   r   
image_editr.   Zget_provider_image_edit_configr+   rN   r9   Z'get_requested_image_edit_optional_paramZget_optional_params_image_editr   rO   r"   r!   Zimage_edit_handlerr   r   )&r   r]   r:   r   r^   r_   r`   ra   rc   rs   r   r   ri   r@   rR   
local_varsr   Zlitellm_params_listr   rr   rk   rp   rq   r   imagesZheaders_from_kwargsZmerged_extra_headersr   rW   r   r   r   r   r   r   r   Zimage_edit_request_paramsrZ   r7   r   r8   r     sH  

 


















r   c                    s   t  }z^t }d|d< |du r tj||ddd\}}}}t| tr'| n| g}tt	f|||||||||||d|}t
 }t|j|}|d|I dH }t|r^|I dH }|W S |}|W S  tyx } z
tj|||||dd}~ww )a}  
    Asynchronously calls the `image_edit` function with the given arguments and keyword arguments.

    Parameters:
    - `args` (tuple): Positional arguments to be passed to the `image_edit` function.
    - `kwargs` (dict): Keyword arguments to be passed to the `image_edit` function.

    Returns:
    - `response` (Any): The response returned by the `image_edit` function.
    Tr   Nry   r=   )r   r]   r   r:   r^   r_   r`   ra   rc   ri   r@   r?   )r   rB   rC   r   r/   rI   rK   r   r   r   rF   rG   rH   rJ   rM   rO   r   )r   r:   r]   r   r^   r_   r`   ra   rc   rs   r   r   ri   r@   rR   r   rS   rW   r   rT   rU   rV   rX   rY   rZ   r7   r7   r8   r     sZ   

r   namec                 C   s@   | dkrddl m} tt}||jd< |S tdtd| )z*Lazy import handler for images.main moduler   r   r   zmodule z has no attribute )r   r   r3   r4   r5   __dict__AttributeError)r   Z_ImageEditRequestUtilsr6   r7   r7   r8   __getattr__  s   

r   )r2   r   )NNNNNNNr\   NNNN)rv   r   r   NN)NNNNNNNNNNNNNN)NNNNNNNNNNN)VrB   rF   r3   	functoolsr   typingr   r   r   r   r   r   r	   r
   r   r   Zlitellm.images.utilsr   Zhttpxr   r   Zlitellm.constantsr   r   r   Zlitellm.exceptionsr   Z*litellm.litellm_core_utils.litellm_loggingr   r   Z)litellm.litellm_core_utils.mock_functionsr   Zlitellm.llms.base_llmr   r   Z&litellm.llms.custom_httpx.http_handlerr   r   Z*litellm.llms.custom_httpx.llm_http_handlerr   Zlitellm.llms.custom_llmr   Zlitellm.utilsr   r   r   __annotations__Z.openai.types.audio.transcription_create_paramsr   Zlitellm.mainr   r    r!   r"   r#   r$   r%   Zlitellm.secret_managers.mainr&   Zlitellm.types.images.mainr'   Zlitellm.types.llms.openair(   Zlitellm.types.routerr)   Zlitellm.types.utilsr*   r+   r,   r-   r.   r/   r0   r1   r9   r[   strintrE   r   r   floatTimeoutr   r   r   r7   r7   r7   r8   <module>   s$  
 0$
;


  u6_	 h	O