|
from typing import Any, Coroutine, Optional, Union |
|
|
|
import httpx |
|
|
|
from litellm import LlmProviders |
|
from litellm.integrations.gcs_bucket.gcs_bucket_base import ( |
|
GCSBucketBase, |
|
GCSLoggingConfig, |
|
) |
|
from litellm.llms.custom_httpx.http_handler import get_async_httpx_client |
|
from litellm.types.llms.openai import CreateFileRequest, FileObject |
|
|
|
from .transformation import VertexAIFilesTransformation |
|
|
|
vertex_ai_files_transformation = VertexAIFilesTransformation() |
|
|
|
|
|
class VertexAIFilesHandler(GCSBucketBase): |
|
""" |
|
Handles Calling VertexAI in OpenAI Files API format v1/files/* |
|
|
|
This implementation uploads files on GCS Buckets |
|
""" |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.async_httpx_client = get_async_httpx_client( |
|
llm_provider=LlmProviders.VERTEX_AI, |
|
) |
|
|
|
pass |
|
|
|
async def async_create_file( |
|
self, |
|
create_file_data: CreateFileRequest, |
|
api_base: Optional[str], |
|
vertex_credentials: Optional[str], |
|
vertex_project: Optional[str], |
|
vertex_location: Optional[str], |
|
timeout: Union[float, httpx.Timeout], |
|
max_retries: Optional[int], |
|
): |
|
gcs_logging_config: GCSLoggingConfig = await self.get_gcs_logging_config( |
|
kwargs={} |
|
) |
|
headers = await self.construct_request_headers( |
|
vertex_instance=gcs_logging_config["vertex_instance"], |
|
service_account_json=gcs_logging_config["path_service_account"], |
|
) |
|
bucket_name = gcs_logging_config["bucket_name"] |
|
logging_payload, object_name = ( |
|
vertex_ai_files_transformation.transform_openai_file_content_to_vertex_ai_file_content( |
|
openai_file_content=create_file_data.get("file") |
|
) |
|
) |
|
gcs_upload_response = await self._log_json_data_on_gcs( |
|
headers=headers, |
|
bucket_name=bucket_name, |
|
object_name=object_name, |
|
logging_payload=logging_payload, |
|
) |
|
|
|
return vertex_ai_files_transformation.transform_gcs_bucket_response_to_openai_file_object( |
|
create_file_data=create_file_data, |
|
gcs_upload_response=gcs_upload_response, |
|
) |
|
|
|
def create_file( |
|
self, |
|
_is_async: bool, |
|
create_file_data: CreateFileRequest, |
|
api_base: Optional[str], |
|
vertex_credentials: Optional[str], |
|
vertex_project: Optional[str], |
|
vertex_location: Optional[str], |
|
timeout: Union[float, httpx.Timeout], |
|
max_retries: Optional[int], |
|
) -> Union[FileObject, Coroutine[Any, Any, FileObject]]: |
|
""" |
|
Creates a file on VertexAI GCS Bucket |
|
|
|
Only supported for Async litellm.acreate_file |
|
""" |
|
|
|
if _is_async: |
|
return self.async_create_file( |
|
create_file_data=create_file_data, |
|
api_base=api_base, |
|
vertex_credentials=vertex_credentials, |
|
vertex_project=vertex_project, |
|
vertex_location=vertex_location, |
|
timeout=timeout, |
|
max_retries=max_retries, |
|
) |
|
|
|
return None |
|
|