mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-27 03:34:10 +00:00
* test(azure_openai_o1.py): initial commit with testing for azure openai o1 preview model * fix(base_llm_unit_tests.py): handle azure o1 preview response format tests skip as o1 on azure doesn't support tool calling yet * fix: initial commit of azure o1 handler using openai caller simplifies calling + allows fake streaming logic alr. implemented for openai to just work * feat(azure/o1_handler.py): fake o1 streaming for azure o1 models azure does not currently support streaming for o1 * feat(o1_transformation.py): support overriding 'should_fake_stream' on azure/o1 via 'supports_native_streaming' param on model info enables user to toggle on when azure allows o1 streaming without needing to bump versions * style(router.py): remove 'give feedback/get help' messaging when router is used Prevents noisy messaging Closes https://github.com/BerriAI/litellm/issues/5942 * fix(types/utils.py): handle none logprobs Fixes https://github.com/BerriAI/litellm/issues/328 * fix(exception_mapping_utils.py): fix error str unbound error * refactor(azure_ai/): move to openai_like chat completion handler allows for easy swapping of api base url's (e.g. ai.services.com) Fixes https://github.com/BerriAI/litellm/issues/7275 * refactor(azure_ai/): move to base llm http handler * fix(azure_ai/): handle differing api endpoints * fix(azure_ai/): make sure all unit tests are passing * fix: fix linting errors * fix: fix linting errors * fix: fix linting error * fix: fix linting errors * fix(azure_ai/transformation.py): handle extra body param * fix(azure_ai/transformation.py): fix max retries param handling * fix: fix test * test(test_azure_o1.py): fix test * fix(llm_http_handler.py): support handling azure ai unprocessable entity error * fix(llm_http_handler.py): handle sync invalid param error for azure ai * fix(azure_ai/): streaming support with base_llm_http_handler * fix(llm_http_handler.py): working sync stream calls with unprocessable entity handling for azure ai * fix: fix linting errors * fix(llm_http_handler.py): fix linting error * fix(azure_ai/): handle cohere tool call invalid index param error
123 lines
3.5 KiB
Python
123 lines
3.5 KiB
Python
from typing import List, Optional, Union
|
|
|
|
import httpx
|
|
|
|
from litellm.llms.base_llm.chat.transformation import AllMessageValues, BaseLLMException
|
|
from litellm.llms.base_llm.embedding.transformation import (
|
|
BaseEmbeddingConfig,
|
|
LiteLLMLoggingObj,
|
|
)
|
|
from litellm.types.llms.openai import AllEmbeddingInputValues
|
|
from litellm.types.utils import EmbeddingResponse
|
|
|
|
from ..common_utils import TritonError
|
|
|
|
|
|
class TritonEmbeddingConfig(BaseEmbeddingConfig):
|
|
"""
|
|
Transformations for triton /embeddings endpoint (This is a trtllm model)
|
|
"""
|
|
|
|
def __init__(self) -> None:
|
|
pass
|
|
|
|
def get_supported_openai_params(self, model: str) -> list:
|
|
return []
|
|
|
|
def map_openai_params(
|
|
self,
|
|
non_default_params: dict,
|
|
optional_params: dict,
|
|
model: str,
|
|
drop_params: bool,
|
|
) -> dict:
|
|
"""
|
|
Map OpenAI params to Triton Embedding params
|
|
"""
|
|
return optional_params
|
|
|
|
def validate_environment(
|
|
self,
|
|
headers: dict,
|
|
model: str,
|
|
messages: List[AllMessageValues],
|
|
optional_params: dict,
|
|
api_key: Optional[str] = None,
|
|
api_base: Optional[str] = None,
|
|
) -> dict:
|
|
return {}
|
|
|
|
def transform_embedding_request(
|
|
self,
|
|
model: str,
|
|
input: AllEmbeddingInputValues,
|
|
optional_params: dict,
|
|
headers: dict,
|
|
) -> dict:
|
|
return {
|
|
"inputs": [
|
|
{
|
|
"name": "input_text",
|
|
"shape": [len(input)],
|
|
"datatype": "BYTES",
|
|
"data": input,
|
|
}
|
|
]
|
|
}
|
|
|
|
def transform_embedding_response(
|
|
self,
|
|
model: str,
|
|
raw_response: httpx.Response,
|
|
model_response: EmbeddingResponse,
|
|
logging_obj: LiteLLMLoggingObj,
|
|
api_key: Optional[str] = None,
|
|
request_data: dict = {},
|
|
optional_params: dict = {},
|
|
litellm_params: dict = {},
|
|
) -> EmbeddingResponse:
|
|
try:
|
|
raw_response_json = raw_response.json()
|
|
except Exception:
|
|
raise TritonError(
|
|
message=raw_response.text, status_code=raw_response.status_code
|
|
)
|
|
|
|
_embedding_output = []
|
|
|
|
_outputs = raw_response_json["outputs"]
|
|
for output in _outputs:
|
|
_shape = output["shape"]
|
|
_data = output["data"]
|
|
_split_output_data = self.split_embedding_by_shape(_data, _shape)
|
|
|
|
for idx, embedding in enumerate(_split_output_data):
|
|
_embedding_output.append(
|
|
{
|
|
"object": "embedding",
|
|
"index": idx,
|
|
"embedding": embedding,
|
|
}
|
|
)
|
|
|
|
model_response.model = raw_response_json.get("model_name", "None")
|
|
model_response.data = _embedding_output
|
|
return model_response
|
|
|
|
def get_error_class(
|
|
self, error_message: str, status_code: int, headers: Union[dict, httpx.Headers]
|
|
) -> BaseLLMException:
|
|
return TritonError(
|
|
message=error_message, status_code=status_code, headers=headers
|
|
)
|
|
|
|
@staticmethod
|
|
def split_embedding_by_shape(
|
|
data: List[float], shape: List[int]
|
|
) -> List[List[float]]:
|
|
if len(shape) != 2:
|
|
raise ValueError("Shape must be of length 2.")
|
|
embedding_size = shape[1]
|
|
return [
|
|
data[i * embedding_size : (i + 1) * embedding_size] for i in range(shape[0])
|
|
]
|