""" 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.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, **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, ) ) if _is_async: return self.async_response_api_handler( litellm_completion_request=litellm_completion_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, ) ) return responses_api_response raise ValueError("litellm_completion_response is not a ModelResponse") async def async_response_api_handler( self, litellm_completion_request: dict, **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, ) ) return responses_api_response raise ValueError("litellm_completion_response is not a ModelResponse")