mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-26 03:04:13 +00:00
basic handler for LiteLLMCompletionTransformationHandler
This commit is contained in:
parent
48e073e720
commit
f6080fcc0b
2 changed files with 127 additions and 23 deletions
|
@ -0,0 +1,91 @@
|
||||||
|
"""
|
||||||
|
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")
|
|
@ -2,25 +2,8 @@
|
||||||
Handles transforming from Responses API -> LiteLLM completion (Chat Completion API)
|
Handles transforming from Responses API -> LiteLLM completion (Chat Completion API)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import asyncio
|
from typing import Any, Dict, List, Optional, Union
|
||||||
import contextvars
|
|
||||||
from functools import partial
|
|
||||||
from typing import Any, Coroutine, Dict, Iterable, List, Literal, Optional, Union
|
|
||||||
|
|
||||||
import httpx
|
|
||||||
from openai.types.chat.completion_create_params import CompletionCreateParamsBase
|
|
||||||
|
|
||||||
import litellm
|
|
||||||
from litellm.constants import request_timeout
|
|
||||||
from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj
|
|
||||||
from litellm.llms.base_llm.responses.transformation import BaseResponsesAPIConfig
|
|
||||||
from litellm.llms.custom_httpx.llm_http_handler import BaseLLMHTTPHandler
|
|
||||||
from litellm.responses.streaming_iterator import (
|
|
||||||
BaseResponsesAPIStreamingIterator,
|
|
||||||
ResponsesAPIStreamingIterator,
|
|
||||||
SyncResponsesAPIStreamingIterator,
|
|
||||||
)
|
|
||||||
from litellm.responses.utils import ResponsesAPIRequestUtils
|
|
||||||
from litellm.types.llms.openai import (
|
from litellm.types.llms.openai import (
|
||||||
AllMessageValues,
|
AllMessageValues,
|
||||||
ChatCompletionSystemMessage,
|
ChatCompletionSystemMessage,
|
||||||
|
@ -30,8 +13,7 @@ from litellm.types.llms.openai import (
|
||||||
ResponsesAPIOptionalRequestParams,
|
ResponsesAPIOptionalRequestParams,
|
||||||
ResponsesAPIResponse,
|
ResponsesAPIResponse,
|
||||||
)
|
)
|
||||||
from litellm.types.router import GenericLiteLLMParams
|
from litellm.types.utils import ModelResponse
|
||||||
from litellm.utils import ProviderConfigManager, client
|
|
||||||
|
|
||||||
|
|
||||||
class LiteLLMCompletionResponsesConfig:
|
class LiteLLMCompletionResponsesConfig:
|
||||||
|
@ -149,9 +131,40 @@ class LiteLLMCompletionResponsesConfig:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def transform_chat_completion_response_to_responses_api_response(
|
def transform_chat_completion_response_to_responses_api_response(
|
||||||
chat_completion_response: dict,
|
chat_completion_response: ModelResponse,
|
||||||
) -> dict:
|
) -> ResponsesAPIResponse:
|
||||||
"""
|
"""
|
||||||
Transform a Chat Completion response into a Responses API response
|
Transform a Chat Completion response into a Responses API response
|
||||||
"""
|
"""
|
||||||
return {}
|
return ResponsesAPIResponse(
|
||||||
|
id=chat_completion_response.id,
|
||||||
|
created_at=chat_completion_response.created,
|
||||||
|
model=chat_completion_response.model,
|
||||||
|
object=chat_completion_response.object,
|
||||||
|
error=getattr(chat_completion_response, "error", None),
|
||||||
|
incomplete_details=getattr(
|
||||||
|
chat_completion_response, "incomplete_details", None
|
||||||
|
),
|
||||||
|
instructions=getattr(chat_completion_response, "instructions", None),
|
||||||
|
metadata=getattr(chat_completion_response, "metadata", None),
|
||||||
|
output=getattr(chat_completion_response, "output", []),
|
||||||
|
parallel_tool_calls=getattr(
|
||||||
|
chat_completion_response, "parallel_tool_calls", False
|
||||||
|
),
|
||||||
|
temperature=getattr(chat_completion_response, "temperature", None),
|
||||||
|
tool_choice=getattr(chat_completion_response, "tool_choice", "auto"),
|
||||||
|
tools=getattr(chat_completion_response, "tools", []),
|
||||||
|
top_p=getattr(chat_completion_response, "top_p", None),
|
||||||
|
max_output_tokens=getattr(
|
||||||
|
chat_completion_response, "max_output_tokens", None
|
||||||
|
),
|
||||||
|
previous_response_id=getattr(
|
||||||
|
chat_completion_response, "previous_response_id", None
|
||||||
|
),
|
||||||
|
reasoning=getattr(chat_completion_response, "reasoning", None),
|
||||||
|
status=getattr(chat_completion_response, "status", None),
|
||||||
|
text=getattr(chat_completion_response, "text", None),
|
||||||
|
truncation=getattr(chat_completion_response, "truncation", None),
|
||||||
|
usage=getattr(chat_completion_response, "usage", None),
|
||||||
|
user=getattr(chat_completion_response, "user", None),
|
||||||
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue