
    iiG                         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e      Zy)    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                       e Zd Zdef f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Zdededeeef   defdZdededef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Z	 ddedeeef   dee   def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Zdedeeef   deeef   f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Z	 ddededeeef   d	e	e
ej                  f   def
dZ xZS )VertexAIBatchPredictiongcs_bucket_namec                 2    t        |   |i | || _        y N)super__init__r   )selfr   argskwargs	__class__s       w/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/vertex_ai/batches/handler.pyr   z VertexAIBatchPrediction.__init__   s    $)&).    	_is_asynccreate_batch_dataapi_basevertex_credentialsvertex_projectvertex_locationtimeoutmax_retriesreturnc	                    t               }	| j                  ||d      \  }
}| j                  |xs d|xs |      }t        |j	                  d            dkD  r|j	                  d      d   }nd}| j                  |dd |d d |d |xs ||xs dd	
      \  }}dd|
 d}t        j                  |      }|du r| j                  |||      S |	j                  ||t        j                  |            }|j                  dk7  r%t        d|j                   d|j                         |j                         }t        j                  |      }|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%   vertex_api_versionapplication/json; charset=utf-8Bearer zContent-TypeAuthorization)requestT)vertex_batch_requestr"   headersr:   rC   data   Error:  response)r   _ensure_access_tokencreate_vertex_batch_urllensplit_check_custom_proxyr   9transform_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_baser7   _rC   rB   rJ   _json_responsevertex_batch_responses                       r   create_batchz$VertexAIBatchPrediction.create_batch   s    )*#'#<#<*% + $= $
 j  77+<})7Z 8 

 %%c*+a/'--c226HH.. + )7Z+<}# / 
8 >&|n5

 <W  <Q  <Q%<
 ++%9! ,    $$01 % 
 3&gh&:&:%;1X]]OLMM! ; w w#!
 %$r   rB   rC   c                 B  K   t        t        j                  j                        }	 |j	                  ||t        j                  |             d {   }|j                  dk7  r%t        d|j                   d|j                         |j                         }t        j                   |      }	|	S 7 `# t        j                  $ rT}|j                  j                  }t        j                  j                  d|j                  j                  |d d         d }~ww xY ww)	Nllm_providerrD   z1Vertex AI batch create failed: status=%s, body=%s  rF   rG   rH   rI   )r	   litellmLlmProviders	VERTEX_AIrR   rS   rT   httpxHTTPStatusErrorrJ   rW   verbose_loggererrorrU   rV   r   rX   )
r   rB   r"   rC   clientrJ   e
error_bodyr]   r^   s
             r   rQ   z+VertexAIBatchPrediction._async_create_batchf   s     ( --77
	#[[ZZ 45 )  H 3&gh&:&:%;1X]]OLMM! ; w w#!
 %$)
 $$ 	J""((C

&&5D!
 	s<   %D*B5 B3B5 AD3B5 5DADDDc                 .    t        |      }| d| d| dS )z0Return the base url for the vertex garden modelsz/v1/projects/z/locations/z/batchPredictionJobsr
   )r   r%   r$   base_urls       r   rL   z/VertexAIBatchPrediction.create_vertex_batch_url   s*     '7=(8OCTThiir   batch_idlogging_objc
                    t               }
| j                  ||d      \  }}| j                  |xs d|xs |      }| d| }t        |j	                  d            dkD  r|j	                  d      d   }nd	}| j                  |dd |d d |d |xs ||xs dd
      \  }}dd| d}|du r| j                  |||	      S |	/ddlm} t        |	|      r|	j                  d	d	i ||d| dd       |
j                  ||      }|j                  dk7  r%t        d|j                   d|j                         |j                         }t!        j"                  |      }|S )Nr*   r+   r/   r0   /r1   r   r2   r3   r4   r5   r=   r>   r?   T)r"   rC   rq   r   Logging.
GET Request Sent from LiteLLM:
curl -X GET \
b \
-H 'Authorization: Bearer ***REDACTED***' \
-H 'Content-Type: application/json; charset=utf-8'
complete_input_dictr"   rC   request_strinputapi_keyadditional_argsr:   rC   rF   rG   rH   rI   )r   rK   rL   rM   rN   rO   _async_retrieve_batch*litellm.litellm_core_utils.litellm_loggingru   
isinstancepre_callgetrU   rV   rW   rS   r   rX   )r   r    rp   r"   r#   r$   r%   r&   r'   rq   rY   rZ   r-   r[   r7   r\   rC   ru   rJ   r]   r^   s                        r   retrieve_batchz&VertexAIBatchPrediction.retrieve_batch   s    )*#'#<#<*% + $= $
 j  77+<})7Z 8 
 //q
;%%c*+a/'--c226HH.. + )7Z+<}# / 
8 >&|n5

 --!' .   "J+w/$$/1$,#*/'j )ST% % "  ## $ 

 3&gh&:&:%;1X]]OLMM! ; w w#!
 %$r   c           
        K   t        t        j                  j                        }|/ddlm} t        ||      r|j                  ddi ||d| dd       |j                  ||	       d {   }|j                  d
k7  r%t        d|j                   d|j                         |j                         }t        j                  |      }|S 7 `w)Nra   r   rt   r3   rv   rw   rx   r{   r   rF   rG   rH   rI   )r	   rd   re   rf   r   ru   r   r   r   rU   rV   rW   rS   r   rX   )	r   r"   rC   rq   rk   ru   rJ   r]   r^   s	            r   r   z-VertexAIBatchPrediction._async_retrieve_batch   s      ( --77

 "J+w/$$/1$,#*/'j )ST% % "   $ 
 
 3&gh&:&:%;1X]]OLMM! ; w w#!
 %$
s   A,C.C/A!Cafterlimitc
           	      j   t               }
| j                  ||d      \  }}| j                  |xs d|xs |      }t        |j	                  d            dkD  r|j	                  d      d   }nd}| j                  |dd |d d |	      \  }}d
d| d}i }|t        |      |d<   |||d<   |du r| j                  |||      S |
j                  |||      }|j                  dk7  r%t        d|j                   d|j                         |j                         }t        j                  |      }|S )Nr*   r+   r/   r0   r1   r   r2   r3   )r"   r.   r6   r7   r8   r9   r:   r=   r>   r?   pageSize	pageTokenT)r"   rC   paramsr:   rC   r   rF   rG   rH   rI   )r   rK   rL   rM   rN   rO   str_async_list_batchesr   rU   rV   rW   rS   r   ?transform_vertex_ai_batch_list_response_to_openai_list_response)r   r    r   r   r"   r#   r$   r%   r&   r'   rY   rZ   r-   r[   r7   r\   rC   r   rJ   r]   r^   s                        r   list_batchesz$VertexAIBatchPrediction.list_batches  s    )*#'#<#<*% + $= $
 j  77+<})7Z 8 

 %%c*+a/'--c226HH.. +  / 
8 >&|n5

 "$!$UF:"'F;++! ,    ## $ 
 3&gh&:&:%;1X]]OLMM! ; { {#!
 %$r   r   c                 F  K   t        t        j                  j                        }|j	                  |||       d {   }|j
                  dk7  r%t        d|j
                   d|j                         |j                         }t        j                  |      }|S 7 `w)Nra   r   rF   rG   rH   rI   )r	   rd   re   rf   r   rU   rV   rW   rS   r   r   )r   r"   rC   r   rk   rJ   r]   r^   s           r   r   z+VertexAIBatchPrediction._async_list_batchese  s      ( --77
   $ 
 

 3&gh&:&:%;1X]]OLMM! ; { {#!
 %$
s   <B!BA!B!c	                    | j                  ||d      \  }	}
| j                  |xs d|xs |
      }| d| }| d}| j                  |dd dd d |d |xs |
|xs dd	      \  }}|j                  d      r|j	                  d      }n$|j                  dd
      d   j                  d      }dd|	 d}|du r| j                  ||||      S t               }	 |j                  ||t        j                  i       |      }|j$                  dk7  r%t)        d|j$                   d|j&                         |j+                  ||      }|j$                  dk7  r]t        j                  j!                  d|j$                  |j&                  d d        t)        d|j$                   d|j&                         |j                         }t-        j.                  |      }|S # t        j                  $ rR}t        j                  j!                  d|j"                  j$                  |j"                  j&                  d d         d }~ww xY w)Nr*   r+   r/   r0   rs   z:cancelcancelr4   r5   r   r   r=   r>   r?   T)r"   retrieve_api_baserC   r&   r:   rC   rE   r&   1Vertex AI batch cancel failed: status=%s, body=%src   rF   rG   rH   r   @Vertex AI batch retrieve-after-cancel failed: status=%s, body=%srI   )rK   rL   rO   endswithremovesuffixrsplitrstrip_async_cancel_batchr   rR   rS   rT   rg   rh   rd   ri   rj   rJ   rU   rW   rV   r   r   rX   )r   r    rp   r"   r#   r$   r%   r&   r'   rZ   r-   r[   retrieve_api_base_defaultcancel_api_base_defaultr\   r   rC   rY   rJ   rl   retrieve_responser]   r^   s                          r   cancel_batchz$VertexAIBatchPrediction.cancel_batch|  s    $(#<#<*% + $= $
 j  77+<})7Z 8 

 (8&8($D!%>$?w"G.. +')7Z+<}# / 
8 Y' ( 5 5i @ (	1 =a @ G G L >&|n5

 ++!"3	 ,   )*	#((ZZ^	 ) H 3&gh&:&:%;1X]]OLMM ),,! - 
 ((C/""((R!--!&&u-
 +778:K:P:P9QR  +//1 ; w w#!
 %$= $$ 	""((C

&&

&
 	s   (G I/AH<<Ir   c                 T  K   t        t        j                  j                        }	 |j	                  ||t        j                  i       |       d {   }|j                  dk7  r%t        d|j                   d|j                         |j                  ||       d {   }|j                  dk7  r]t        j                  j                  d	|j                  |j                  d d        t        d|j                   d|j                         |j                         }	t!        j"                  |	
      }
|
S 7 # t        j                  $ rR}t        j                  j                  d|j                  j                  |j                  j                  d d         d }~ww xY w7 w)Nra   r   r   rc   rF   rG   rH   r   r   rI   )r	   rd   re   rf   rR   rS   rT   rg   rh   ri   rj   rJ   rU   rW   rV   r   r   rX   )r   r"   r   rC   r&   rk   rJ   rl   r   r]   r^   s              r   r   z+VertexAIBatchPrediction._async_cancel_batch  s     ( --77
	#[[ZZ^	 )  H 3&gh&:&:%;1X]]OLMM #)**! #- #
 
 ((C/""((R!--!&&u-
 +778:K:P:P9QR  +//1 ; w w#!
 %$G $$ 	""((C

&&

&
 	
sI   %F(+D= D;D= A
F("F%#BF(;D= =F"AFF""F(r   )g     @)__name__
__module____qualname__r   r   boolr   r   r   r   floatrg   Timeoutintr   r   r   r_   r   r   rQ   rL   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s   / /H%H% .H% 3-	H%
 %%=>H% !H% "#H% uemm+,H% c]H% 
|YsC'=>>	?H%T%8% % c3h	%
 
%@jj j 
	j( &*]%]% ]% 3-	]%
 %%=>]% !]% "#]% uemm+,]% c]]% c]]% 
|YsC'=>>	?]%F &*	+%+% c3h+% c]	+%
 
+%ZG%G% }G% }	G%
 3-G% %%=>G% !G% "#G% uemm+,G% c]G%R%% c3h% S#X	%._%_% _% 3-	_%
 %%=>_% !_% "#_% uemm+,_% c]_% 
|YsC'=>>	?_%L 05.%.% .% c3h	.%
 uemm+,.% 
.%r   r   )rS   typingr   r   r   r   r   rg   rd   &litellm.llms.custom_httpx.http_handlerr   r	   #litellm.llms.vertex_ai.common_utilsr   @litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_geminir   litellm.types.llms.openair   litellm.types.llms.vertex_air   r   litellm.types.utilsr   transformationr   r    r   r   <module>r      s@     8 8   D V 8 - 7t%i t%r   