aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py')
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py292
1 files changed, 292 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py b/.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py
new file mode 100644
index 00000000..f33c979c
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/embed/handler.py
@@ -0,0 +1,292 @@
+from typing import List, Optional, Union
+
+from openai import OpenAI
+
+import litellm
+from litellm.llms.custom_httpx.http_handler import (
+ AsyncHTTPHandler,
+ HTTPHandler,
+ get_async_httpx_client,
+)
+from litellm.llms.openai.openai import OpenAIChatCompletion
+from litellm.types.llms.azure_ai import ImageEmbeddingRequest
+from litellm.types.utils import EmbeddingResponse
+from litellm.utils import convert_to_model_response_object
+
+from .cohere_transformation import AzureAICohereConfig
+
+
+class AzureAIEmbedding(OpenAIChatCompletion):
+
+ def _process_response(
+ self,
+ image_embedding_responses: Optional[List],
+ text_embedding_responses: Optional[List],
+ image_embeddings_idx: List[int],
+ model_response: EmbeddingResponse,
+ input: List,
+ ):
+ combined_responses = []
+ if (
+ image_embedding_responses is not None
+ and text_embedding_responses is not None
+ ):
+ # Combine and order the results
+ text_idx = 0
+ image_idx = 0
+
+ for idx in range(len(input)):
+ if idx in image_embeddings_idx:
+ combined_responses.append(image_embedding_responses[image_idx])
+ image_idx += 1
+ else:
+ combined_responses.append(text_embedding_responses[text_idx])
+ text_idx += 1
+
+ model_response.data = combined_responses
+ elif image_embedding_responses is not None:
+ model_response.data = image_embedding_responses
+ elif text_embedding_responses is not None:
+ model_response.data = text_embedding_responses
+
+ response = AzureAICohereConfig()._transform_response(response=model_response) # type: ignore
+
+ return response
+
+ async def async_image_embedding(
+ self,
+ model: str,
+ data: ImageEmbeddingRequest,
+ timeout: float,
+ logging_obj,
+ model_response: litellm.EmbeddingResponse,
+ optional_params: dict,
+ api_key: Optional[str],
+ api_base: Optional[str],
+ client: Optional[Union[HTTPHandler, AsyncHTTPHandler]] = None,
+ ) -> EmbeddingResponse:
+ if client is None or not isinstance(client, AsyncHTTPHandler):
+ client = get_async_httpx_client(
+ llm_provider=litellm.LlmProviders.AZURE_AI,
+ params={"timeout": timeout},
+ )
+
+ url = "{}/images/embeddings".format(api_base)
+
+ response = await client.post(
+ url=url,
+ json=data, # type: ignore
+ headers={"Authorization": "Bearer {}".format(api_key)},
+ )
+
+ embedding_response = response.json()
+ embedding_headers = dict(response.headers)
+ returned_response: EmbeddingResponse = convert_to_model_response_object( # type: ignore
+ response_object=embedding_response,
+ model_response_object=model_response,
+ response_type="embedding",
+ stream=False,
+ _response_headers=embedding_headers,
+ )
+ return returned_response
+
+ def image_embedding(
+ self,
+ model: str,
+ data: ImageEmbeddingRequest,
+ timeout: float,
+ logging_obj,
+ model_response: EmbeddingResponse,
+ optional_params: dict,
+ api_key: Optional[str],
+ api_base: Optional[str],
+ client: Optional[Union[HTTPHandler, AsyncHTTPHandler]] = None,
+ ):
+ if api_base is None:
+ raise ValueError(
+ "api_base is None. Please set AZURE_AI_API_BASE or dynamically via `api_base` param, to make the request."
+ )
+ if api_key is None:
+ raise ValueError(
+ "api_key is None. Please set AZURE_AI_API_KEY or dynamically via `api_key` param, to make the request."
+ )
+
+ if client is None or not isinstance(client, HTTPHandler):
+ client = HTTPHandler(timeout=timeout, concurrent_limit=1)
+
+ url = "{}/images/embeddings".format(api_base)
+
+ response = client.post(
+ url=url,
+ json=data, # type: ignore
+ headers={"Authorization": "Bearer {}".format(api_key)},
+ )
+
+ embedding_response = response.json()
+ embedding_headers = dict(response.headers)
+ returned_response: EmbeddingResponse = convert_to_model_response_object( # type: ignore
+ response_object=embedding_response,
+ model_response_object=model_response,
+ response_type="embedding",
+ stream=False,
+ _response_headers=embedding_headers,
+ )
+ return returned_response
+
+ async def async_embedding(
+ self,
+ model: str,
+ input: List,
+ timeout: float,
+ logging_obj,
+ model_response: litellm.EmbeddingResponse,
+ optional_params: dict,
+ api_key: Optional[str] = None,
+ api_base: Optional[str] = None,
+ client=None,
+ ) -> EmbeddingResponse:
+
+ (
+ image_embeddings_request,
+ v1_embeddings_request,
+ image_embeddings_idx,
+ ) = AzureAICohereConfig()._transform_request(
+ input=input, optional_params=optional_params, model=model
+ )
+
+ image_embedding_responses: Optional[List] = None
+ text_embedding_responses: Optional[List] = None
+
+ if image_embeddings_request["input"]:
+ image_response = await self.async_image_embedding(
+ model=model,
+ data=image_embeddings_request,
+ timeout=timeout,
+ logging_obj=logging_obj,
+ model_response=model_response,
+ optional_params=optional_params,
+ api_key=api_key,
+ api_base=api_base,
+ client=client,
+ )
+
+ image_embedding_responses = image_response.data
+ if image_embedding_responses is None:
+ raise Exception("/image/embeddings route returned None Embeddings.")
+
+ if v1_embeddings_request["input"]:
+ response: EmbeddingResponse = await super().embedding( # type: ignore
+ model=model,
+ input=input,
+ timeout=timeout,
+ logging_obj=logging_obj,
+ model_response=model_response,
+ optional_params=optional_params,
+ api_key=api_key,
+ api_base=api_base,
+ client=client,
+ aembedding=True,
+ )
+ text_embedding_responses = response.data
+ if text_embedding_responses is None:
+ raise Exception("/v1/embeddings route returned None Embeddings.")
+
+ return self._process_response(
+ image_embedding_responses=image_embedding_responses,
+ text_embedding_responses=text_embedding_responses,
+ image_embeddings_idx=image_embeddings_idx,
+ model_response=model_response,
+ input=input,
+ )
+
+ def embedding(
+ self,
+ model: str,
+ input: List,
+ timeout: float,
+ logging_obj,
+ model_response: EmbeddingResponse,
+ optional_params: dict,
+ api_key: Optional[str] = None,
+ api_base: Optional[str] = None,
+ client=None,
+ aembedding=None,
+ max_retries: Optional[int] = None,
+ ) -> EmbeddingResponse:
+ """
+ - Separate image url from text
+ -> route image url call to `/image/embeddings`
+ -> route text call to `/v1/embeddings` (OpenAI route)
+
+ assemble result in-order, and return
+ """
+ if aembedding is True:
+ return self.async_embedding( # type: ignore
+ model,
+ input,
+ timeout,
+ logging_obj,
+ model_response,
+ optional_params,
+ api_key,
+ api_base,
+ client,
+ )
+
+ (
+ image_embeddings_request,
+ v1_embeddings_request,
+ image_embeddings_idx,
+ ) = AzureAICohereConfig()._transform_request(
+ input=input, optional_params=optional_params, model=model
+ )
+
+ image_embedding_responses: Optional[List] = None
+ text_embedding_responses: Optional[List] = None
+
+ if image_embeddings_request["input"]:
+ image_response = self.image_embedding(
+ model=model,
+ data=image_embeddings_request,
+ timeout=timeout,
+ logging_obj=logging_obj,
+ model_response=model_response,
+ optional_params=optional_params,
+ api_key=api_key,
+ api_base=api_base,
+ client=client,
+ )
+
+ image_embedding_responses = image_response.data
+ if image_embedding_responses is None:
+ raise Exception("/image/embeddings route returned None Embeddings.")
+
+ if v1_embeddings_request["input"]:
+ response: EmbeddingResponse = super().embedding( # type: ignore
+ model,
+ input,
+ timeout,
+ logging_obj,
+ model_response,
+ optional_params,
+ api_key,
+ api_base,
+ client=(
+ client
+ if client is not None and isinstance(client, OpenAI)
+ else None
+ ),
+ aembedding=aembedding,
+ )
+
+ text_embedding_responses = response.data
+ if text_embedding_responses is None:
+ raise Exception("/v1/embeddings route returned None Embeddings.")
+
+ return self._process_response(
+ image_embedding_responses=image_embedding_responses,
+ text_embedding_responses=text_embedding_responses,
+ image_embeddings_idx=image_embeddings_idx,
+ model_response=model_response,
+ input=input,
+ )