""" Handler for transforming responses api requests to litellm.completion requests """ from typing import Any, Coroutine, Optional, Union import litellm from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj 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]: 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, )