Spaces:
Paused
Paused
| """ | |
| Handler for transforming /chat/completions api requests to litellm.responses requests | |
| """ | |
| from typing import TYPE_CHECKING, Any, Coroutine, TypedDict, Union | |
| if TYPE_CHECKING: | |
| from litellm import CustomStreamWrapper, LiteLLMLoggingObj, ModelResponse | |
| class ResponsesToCompletionBridgeHandlerInputKwargs(TypedDict): | |
| model: str | |
| messages: list | |
| optional_params: dict | |
| litellm_params: dict | |
| headers: dict | |
| model_response: "ModelResponse" | |
| logging_obj: "LiteLLMLoggingObj" | |
| custom_llm_provider: str | |
| class ResponsesToCompletionBridgeHandler: | |
| def __init__(self): | |
| from .transformation import LiteLLMResponsesTransformationHandler | |
| super().__init__() | |
| self.transformation_handler = LiteLLMResponsesTransformationHandler() | |
| def validate_input_kwargs( | |
| self, kwargs: dict | |
| ) -> ResponsesToCompletionBridgeHandlerInputKwargs: | |
| from litellm import LiteLLMLoggingObj | |
| from litellm.types.utils import ModelResponse | |
| model = kwargs.get("model") | |
| if model is None or not isinstance(model, str): | |
| raise ValueError("model is required") | |
| custom_llm_provider = kwargs.get("custom_llm_provider") | |
| if custom_llm_provider is None or not isinstance(custom_llm_provider, str): | |
| raise ValueError("custom_llm_provider is required") | |
| messages = kwargs.get("messages") | |
| if messages is None or not isinstance(messages, list): | |
| raise ValueError("messages is required") | |
| optional_params = kwargs.get("optional_params") | |
| if optional_params is None or not isinstance(optional_params, dict): | |
| raise ValueError("optional_params is required") | |
| litellm_params = kwargs.get("litellm_params") | |
| if litellm_params is None or not isinstance(litellm_params, dict): | |
| raise ValueError("litellm_params is required") | |
| headers = kwargs.get("headers") | |
| if headers is None or not isinstance(headers, dict): | |
| raise ValueError("headers is required") | |
| model_response = kwargs.get("model_response") | |
| if model_response is None or not isinstance(model_response, ModelResponse): | |
| raise ValueError("model_response is required") | |
| logging_obj = kwargs.get("logging_obj") | |
| if logging_obj is None or not isinstance(logging_obj, LiteLLMLoggingObj): | |
| raise ValueError("logging_obj is required") | |
| return ResponsesToCompletionBridgeHandlerInputKwargs( | |
| model=model, | |
| messages=messages, | |
| optional_params=optional_params, | |
| litellm_params=litellm_params, | |
| headers=headers, | |
| model_response=model_response, | |
| logging_obj=logging_obj, | |
| custom_llm_provider=custom_llm_provider, | |
| ) | |
| def completion( | |
| self, *args, **kwargs | |
| ) -> Union[ | |
| Coroutine[Any, Any, Union["ModelResponse", "CustomStreamWrapper"]], | |
| "ModelResponse", | |
| "CustomStreamWrapper", | |
| ]: | |
| if kwargs.get("acompletion") is True: | |
| return self.acompletion(**kwargs) | |
| from litellm import responses | |
| from litellm.litellm_core_utils.streaming_handler import CustomStreamWrapper | |
| from litellm.types.llms.openai import ResponsesAPIResponse | |
| validated_kwargs = self.validate_input_kwargs(kwargs) | |
| model = validated_kwargs["model"] | |
| messages = validated_kwargs["messages"] | |
| optional_params = validated_kwargs["optional_params"] | |
| litellm_params = validated_kwargs["litellm_params"] | |
| headers = validated_kwargs["headers"] | |
| model_response = validated_kwargs["model_response"] | |
| logging_obj = validated_kwargs["logging_obj"] | |
| custom_llm_provider = validated_kwargs["custom_llm_provider"] | |
| request_data = self.transformation_handler.transform_request( | |
| model=model, | |
| messages=messages, | |
| optional_params=optional_params, | |
| litellm_params=litellm_params, | |
| headers=headers, | |
| ) | |
| result = responses( | |
| **request_data, | |
| ) | |
| if isinstance(result, ResponsesAPIResponse): | |
| return self.transformation_handler.transform_response( | |
| model=model, | |
| raw_response=result, | |
| model_response=model_response, | |
| logging_obj=logging_obj, | |
| request_data=request_data, | |
| messages=messages, | |
| optional_params=optional_params, | |
| litellm_params=litellm_params, | |
| encoding=kwargs.get("encoding"), | |
| api_key=kwargs.get("api_key"), | |
| json_mode=kwargs.get("json_mode"), | |
| ) | |
| else: | |
| completion_stream = self.transformation_handler.get_model_response_iterator( | |
| streaming_response=result, # type: ignore | |
| sync_stream=True, | |
| json_mode=kwargs.get("json_mode"), | |
| ) | |
| streamwrapper = CustomStreamWrapper( | |
| completion_stream=completion_stream, | |
| model=model, | |
| custom_llm_provider=custom_llm_provider, | |
| logging_obj=logging_obj, | |
| ) | |
| return streamwrapper | |
| async def acompletion( | |
| self, *args, **kwargs | |
| ) -> Union["ModelResponse", "CustomStreamWrapper"]: | |
| from litellm import aresponses | |
| from litellm.litellm_core_utils.streaming_handler import CustomStreamWrapper | |
| from litellm.types.llms.openai import ResponsesAPIResponse | |
| validated_kwargs = self.validate_input_kwargs(kwargs) | |
| model = validated_kwargs["model"] | |
| messages = validated_kwargs["messages"] | |
| optional_params = validated_kwargs["optional_params"] | |
| litellm_params = validated_kwargs["litellm_params"] | |
| headers = validated_kwargs["headers"] | |
| model_response = validated_kwargs["model_response"] | |
| logging_obj = validated_kwargs["logging_obj"] | |
| custom_llm_provider = validated_kwargs["custom_llm_provider"] | |
| request_data = self.transformation_handler.transform_request( | |
| model=model, | |
| messages=messages, | |
| optional_params=optional_params, | |
| litellm_params=litellm_params, | |
| headers=headers, | |
| ) | |
| result = await aresponses( | |
| **request_data, | |
| aresponses=True, | |
| ) | |
| if isinstance(result, ResponsesAPIResponse): | |
| return self.transformation_handler.transform_response( | |
| model=model, | |
| raw_response=result, | |
| model_response=model_response, | |
| logging_obj=logging_obj, | |
| request_data=request_data, | |
| messages=messages, | |
| optional_params=optional_params, | |
| litellm_params=litellm_params, | |
| encoding=kwargs.get("encoding"), | |
| api_key=kwargs.get("api_key"), | |
| json_mode=kwargs.get("json_mode"), | |
| ) | |
| else: | |
| completion_stream = self.transformation_handler.get_model_response_iterator( | |
| streaming_response=result, # type: ignore | |
| sync_stream=False, | |
| json_mode=kwargs.get("json_mode"), | |
| ) | |
| streamwrapper = CustomStreamWrapper( | |
| completion_stream=completion_stream, | |
| model=model, | |
| custom_llm_provider=custom_llm_provider, | |
| logging_obj=logging_obj, | |
| ) | |
| return streamwrapper | |
| responses_api_bridge = ResponsesToCompletionBridgeHandler() | |