Spaces:
Sleeping
Sleeping
""" | |
Handler for transforming responses api requests to litellm.completion requests | |
""" | |
from typing import Any, Coroutine, Optional, Union | |
import litellm | |
from litellm.responses.litellm_completion_transformation.streaming_iterator import ( | |
LiteLLMCompletionStreamingIterator, | |
) | |
from litellm.responses.litellm_completion_transformation.transformation import ( | |
LiteLLMCompletionResponsesConfig, | |
) | |
from litellm.responses.streaming_iterator import BaseResponsesAPIStreamingIterator | |
from litellm.types.llms.openai import ( | |
ResponseInputParam, | |
ResponsesAPIOptionalRequestParams, | |
ResponsesAPIResponse, | |
) | |
from litellm.types.utils import ModelResponse | |
class LiteLLMCompletionTransformationHandler: | |
def response_api_handler( | |
self, | |
model: str, | |
input: Union[str, ResponseInputParam], | |
responses_api_request: ResponsesAPIOptionalRequestParams, | |
custom_llm_provider: Optional[str] = None, | |
_is_async: bool = False, | |
stream: Optional[bool] = None, | |
**kwargs, | |
) -> Union[ | |
ResponsesAPIResponse, | |
BaseResponsesAPIStreamingIterator, | |
Coroutine[ | |
Any, Any, Union[ResponsesAPIResponse, BaseResponsesAPIStreamingIterator] | |
], | |
]: | |
litellm_completion_request: dict = ( | |
LiteLLMCompletionResponsesConfig.transform_responses_api_request_to_chat_completion_request( | |
model=model, | |
input=input, | |
responses_api_request=responses_api_request, | |
custom_llm_provider=custom_llm_provider, | |
stream=stream, | |
**kwargs, | |
) | |
) | |
if _is_async: | |
return self.async_response_api_handler( | |
litellm_completion_request=litellm_completion_request, | |
request_input=input, | |
responses_api_request=responses_api_request, | |
**kwargs, | |
) | |
litellm_completion_response: Union[ | |
ModelResponse, litellm.CustomStreamWrapper | |
] = litellm.completion( | |
**litellm_completion_request, | |
**kwargs, | |
) | |
if isinstance(litellm_completion_response, ModelResponse): | |
responses_api_response: ResponsesAPIResponse = ( | |
LiteLLMCompletionResponsesConfig.transform_chat_completion_response_to_responses_api_response( | |
chat_completion_response=litellm_completion_response, | |
request_input=input, | |
responses_api_request=responses_api_request, | |
) | |
) | |
return responses_api_response | |
elif isinstance(litellm_completion_response, litellm.CustomStreamWrapper): | |
return LiteLLMCompletionStreamingIterator( | |
litellm_custom_stream_wrapper=litellm_completion_response, | |
request_input=input, | |
responses_api_request=responses_api_request, | |
) | |
async def async_response_api_handler( | |
self, | |
litellm_completion_request: dict, | |
request_input: Union[str, ResponseInputParam], | |
responses_api_request: ResponsesAPIOptionalRequestParams, | |
**kwargs, | |
) -> Union[ResponsesAPIResponse, BaseResponsesAPIStreamingIterator]: | |
previous_response_id: Optional[str] = responses_api_request.get( | |
"previous_response_id" | |
) | |
if previous_response_id: | |
litellm_completion_request = await LiteLLMCompletionResponsesConfig.async_responses_api_session_handler( | |
previous_response_id=previous_response_id, | |
litellm_completion_request=litellm_completion_request, | |
) | |
litellm_completion_response: Union[ | |
ModelResponse, litellm.CustomStreamWrapper | |
] = await litellm.acompletion( | |
**litellm_completion_request, | |
**kwargs, | |
) | |
if isinstance(litellm_completion_response, ModelResponse): | |
responses_api_response: ResponsesAPIResponse = ( | |
LiteLLMCompletionResponsesConfig.transform_chat_completion_response_to_responses_api_response( | |
chat_completion_response=litellm_completion_response, | |
request_input=request_input, | |
responses_api_request=responses_api_request, | |
) | |
) | |
return responses_api_response | |
elif isinstance(litellm_completion_response, litellm.CustomStreamWrapper): | |
return LiteLLMCompletionStreamingIterator( | |
litellm_custom_stream_wrapper=litellm_completion_response, | |
request_input=request_input, | |
responses_api_request=responses_api_request, | |
) | |