
    g\                         d dl mZmZmZmZ d dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZ ddlmZ  e       Z G d	 d
e	      Zy)    )Any	CoroutineOptionalUnionN)LlmProviders)GCSBucketBaseGCSLoggingConfig)get_async_httpx_client)CreateFileRequest
FileObject   )VertexAIFilesTransformationc                       e Zd ZdZ fdZ	 d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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 xZS )VertexAIFilesHandlerz~
    Handles Calling VertexAI in OpenAI Files API format v1/files/*

    This implementation uploads files on GCS Buckets
    c                 `    t         |           t        t        j                        | _        y )N)llm_provider)super__init__r
   r   	VERTEX_AIasync_httpx_client)self	__class__s    Y/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/vertex_ai/files/handler.pyr   zVertexAIFilesHandler.__init__   s$    "8%//#
    create_file_dataapi_basevertex_credentialsvertex_projectvertex_locationtimeoutmax_retriesc                 N  K   | j                  i        d {   }| j                  |d   |d          d {   }	|d   }
t        j                  |j	                  d            \  }}| j                  |	|
||       d {   }t        j                  ||	      S 7 7 g7 w)
N)kwargsvertex_instancepath_service_account)r$   service_account_jsonbucket_namefile)openai_file_content)headersr'   object_namelogging_payload)r   gcs_upload_response)get_gcs_logging_configconstruct_request_headersvertex_ai_files_transformation7transform_openai_file_content_to_vertex_ai_file_contentget_log_json_data_on_gcs3transform_gcs_bucket_response_to_openai_file_object)r   r   r   r   r   r   r    r!   gcs_logging_configr*   r'   r,   r+   r-   s                 r   async_create_filez&VertexAIFilesHandler.async_create_file!   s      6:5P5P 6Q 6
 0
 66./@A!34J!K 7 
 
 )7*bb$4$8$8$@ c  	%
 %)$>$>##+	 %? %
 
 .aa- 3 b 
 	
)0


s2   B%B B%B!A	B%B#B%!B%#B%	_is_asyncreturnc	           	      8    |r| j                  |||||||      S y)zn
        Creates a file on VertexAI GCS Bucket

        Only supported for Async litellm.acreate_file
        )r   r   r   r   r   r    r!   N)r6   )	r   r7   r   r   r   r   r   r    r!   s	            r   create_filez VertexAIFilesHandler.create_fileD   s9    " ))!1!#5- /' *   r   )__name__
__module____qualname____doc__r   r   r   strr   floathttpxTimeoutintr6   boolr   r   r   r:   __classcell__)r   s   @r   r   r      s   
 	!
+!
 3-!
 %SM	!

 !!
 "#!
 uemm+,!
 c]!
F , 3-	
 %SM ! "# uemm+, c] 
z9S#z%9::	;r   r   )typingr   r   r   r   rA   litellmr   /litellm.integrations.gcs_bucket.gcs_bucket_baser   r	   &litellm.llms.custom_httpx.http_handlerr
   litellm.types.llms.openair   r   transformationr   r0   r    r   r   <module>rM      s9    2 2    J C 7!<!> N= Nr   