o
    ưi2                     @   s   d dl Z d dlmZmZmZmZmZ d dlZd dl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lmZmZ d dlmZ d	d
lmZ G dd deZdS )    N)Any	CoroutineDictOptionalUnion)_get_httpx_clientget_async_httpx_clientget_vertex_base_url)	VertexLLM)CreateBatchRequest)VERTEX_CREDENTIALS_TYPESVertexAIBatchPredictionJob)LiteLLMBatch   )VertexAIBatchTransformationc                       s  e Zd Zdef fddZdededee dee dee d	ee d
e	e
ejf dee de	eeeeef f fddZdededeeef defddZd	ededefddZ	d#dededee dee dee d	ee d
e	e
ejf dee dee de	eeeeef f fddZ	d#dedeeef dee defddZdedee dee dee dee dee d	ee d
e	e
ejf dee fddZdedeeef d eeef fd!d"Z  ZS )$VertexAIBatchPredictiongcs_bucket_namec                    s   t  j|i | || _d S N)super__init__r   )selfr   argskwargs	__class__ ]/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/vertex_ai/batches/handler.pyr      s   
z VertexAIBatchPrediction.__init__	_is_asynccreate_batch_dataapi_basevertex_credentialsvertex_projectvertex_locationtimeoutmax_retriesreturnc	                 C   s  t  }	| j||dd\}
}| j|pd|p|d}t|ddkr)|dd }nd}| j|dd |d d |d |p8||p;dd	d
\}}dd|
 d}tj|d}|du r[| j|||dS |	j	||t
|d}|jdkrwtd|j d|j |
 }tj|d}|S )N	vertex_aicredentials
project_idcustom_llm_providerus-central1r#   r"   :r    v1r    r+   gemini_api_keyendpointstreamauth_headerurlmodelr"   r#   Zvertex_api_versionapplication/json; charset=utf-8Bearer zContent-TypeAuthorization)requestT)vertex_batch_requestr    headersr7   r?   data   Error:  response)r   _ensure_access_tokencreate_vertex_batch_urllensplit_check_custom_proxyr   Z9transform_openai_batch_request_to_vertex_ai_batch_request_async_create_batchpostjsondumpsstatus_code	Exceptiontext;transform_vertex_ai_batch_response_to_openai_batch_response)r   r   r   r    r!   r"   r#   r$   r%   sync_handleraccess_tokenr*   default_api_baser4   _r?   r>   rF   _json_responsevertex_batch_responser   r   r   create_batch   sd   


z$VertexAIBatchPrediction.create_batchr>   r?   c           
   
      s   t tjjd}z|j||t|dI d H }W n  tjy8 } z|j	j
}tjd|j	j|d d   d }~ww |jdkrJtd|j d|j
 | }tj|d}	|	S )	NZllm_providerr@   z1Vertex AI batch create failed: status=%s, body=%si  rB   rC   rD   rE   )r   litellmLlmProviders	VERTEX_AIrM   rN   rO   httpxZHTTPStatusErrorrF   rR   Zverbose_loggererrorrP   rQ   r   rS   )
r   r>   r    r?   clientrF   eZ
error_bodyrX   rY   r   r   r   rL   f   s4   
z+VertexAIBatchPrediction._async_create_batchc                 C   s   t |}| d| d| dS )z0Return the base url for the vertex garden modelsz/v1/projects/z/locations/z/batchPredictionJobsr	   )r   r#   r"   base_urlr   r   r   rH      s   z/VertexAIBatchPrediction.create_vertex_batch_urlNbatch_idlogging_objc
                 C   s@  t  }
| j||dd\}}| j|pd|p|d}| d| }t|ddkr0|dd }nd	}| j|dd |d d |d |p?||pBdd
d\}}dd| d}|du r\| j|||	dS |	d ur|ddlm} t	|	|r||	j
d	d	i ||d| ddd |
j||d}|jdkrtd|j d|j | }tj|d}|S )Nr'   r(   r,   r-   /r.   r   r/   r0   r1   r2   r9   r:   r;   T)r    r?   re   r   Logging.
GET Request Sent from LiteLLM:
curl -X GET \
b \
-H 'Authorization: Bearer ***REDACTED***' \
-H 'Content-Type: application/json; charset=utf-8'
Zcomplete_input_dictr    r?   Zrequest_strinputZapi_keyZadditional_argsr7   r?   rB   rC   rD   rE   )r   rG   rH   rI   rJ   rK   _async_retrieve_batch*litellm.litellm_core_utils.litellm_loggingrh   
isinstancepre_callgetrP   rQ   rR   rN   r   rS   )r   r   rd   r    r!   r"   r#   r$   r%   re   rT   rU   r*   rV   r4   rW   r?   rh   rF   rX   rY   r   r   r   retrieve_batch   sz   



z&VertexAIBatchPrediction.retrieve_batchc           	   	      s   t tjjd}|d ur(ddlm} t||r(|jddi ||d| ddd |j||d	I d H }|j	d
krCt
d|j	 d|j | }tj|d}|S )Nr[   r   rg   r0   ri   rj   rk   rl   rn   rB   rC   rD   rE   )r   r\   r]   r^   rp   rh   rq   rr   rs   rP   rQ   rR   rN   r   rS   )	r   r    r?   re   ra   rh   rF   rX   rY   r   r   r   ro      s:   

z-VertexAIBatchPrediction._async_retrieve_batchafterlimitc
              	   C   s  t  }
| j||dd\}}| j|pd|p|d}t|ddkr)|dd }nd}| j|dd |d d |d	\}}d
d| d}i }|d urMt||d< |d urU||d< |du ra| j|||dS |
j|||d}|j	dkrzt
d|j	 d|j | }tj|d}|S )Nr'   r(   r,   r-   r.   r   r/   r0   )r    r+   r3   r4   r5   r6   r7   r9   r:   r;   ZpageSizeZ	pageTokenT)r    r?   paramsr7   r?   rw   rB   rC   rD   rE   )r   rG   rH   rI   rJ   rK   str_async_list_batchesrs   rP   rQ   rR   rN   r   ?transform_vertex_ai_batch_list_response_to_openai_list_response)r   r   ru   rv   r    r!   r"   r#   r$   r%   rT   rU   r*   rV   r4   rW   r?   rw   rF   rX   rY   r   r   r   list_batches  s`   


z$VertexAIBatchPrediction.list_batchesrw   c                    s`   t tjjd}|j|||dI d H }|jdkr$td|j d|j | }t	j
|d}|S )Nr[   rx   rB   rC   rD   rE   )r   r\   r]   r^   rs   rP   rQ   rR   rN   r   r{   )r   r    r?   rw   ra   rF   rX   rY   r   r   r   rz   b  s    
z+VertexAIBatchPrediction._async_list_batchesr   )__name__
__module____qualname__ry   r   boolr   r   r   r   floatr_   Timeoutintr   r   r   rZ   r   r   rL   rH   rt   ro   r|   rz   __classcell__r   r   r   r   r      s    	

J


	

b

,	

I

r   )rN   typingr   r   r   r   r   r_   r\   Z&litellm.llms.custom_httpx.http_handlerr   r   Z#litellm.llms.vertex_ai.common_utilsr
   Z@litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_geminir   Zlitellm.types.llms.openair   Zlitellm.types.llms.vertex_air   r   Zlitellm.types.utilsr   Ztransformationr   r   r   r   r   r   <module>   s    