mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-24 18:24:20 +00:00
streaming fixes
This commit is contained in:
parent
1de68e1d88
commit
b88487e106
2 changed files with 53 additions and 1 deletions
|
@ -1,11 +1,14 @@
|
||||||
from typing import TYPE_CHECKING, Any, Optional, cast
|
from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple, cast
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
import litellm
|
import litellm
|
||||||
|
from litellm._logging import verbose_logger
|
||||||
from litellm.llms.openai.responses.transformation import OpenAIResponsesAPIConfig
|
from litellm.llms.openai.responses.transformation import OpenAIResponsesAPIConfig
|
||||||
from litellm.secret_managers.main import get_secret_str
|
from litellm.secret_managers.main import get_secret_str
|
||||||
from litellm.types.llms.openai import *
|
from litellm.types.llms.openai import *
|
||||||
|
from litellm.types.responses.main import *
|
||||||
|
from litellm.types.router import GenericLiteLLMParams
|
||||||
from litellm.utils import _add_path_to_api_base
|
from litellm.utils import _add_path_to_api_base
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
@ -88,3 +91,48 @@ class AzureOpenAIResponsesAPIConfig(OpenAIResponsesAPIConfig):
|
||||||
final_url = httpx.URL(new_url).copy_with(params=query_params)
|
final_url = httpx.URL(new_url).copy_with(params=query_params)
|
||||||
|
|
||||||
return str(final_url)
|
return str(final_url)
|
||||||
|
|
||||||
|
#########################################################
|
||||||
|
########## DELETE RESPONSE API TRANSFORMATION ##############
|
||||||
|
#########################################################
|
||||||
|
def transform_delete_response_api_request(
|
||||||
|
self,
|
||||||
|
response_id: str,
|
||||||
|
api_base: str,
|
||||||
|
litellm_params: GenericLiteLLMParams,
|
||||||
|
headers: dict,
|
||||||
|
) -> Tuple[str, Dict]:
|
||||||
|
"""
|
||||||
|
Transform the delete response API request into a URL and data
|
||||||
|
|
||||||
|
Azure OpenAI API expects the following request:
|
||||||
|
- DELETE /openai/responses/{response_id}?api-version=xxx
|
||||||
|
|
||||||
|
This function handles URLs with query parameters by inserting the response_id
|
||||||
|
at the correct location (before any query parameters).
|
||||||
|
"""
|
||||||
|
from urllib.parse import urlparse, urlunparse
|
||||||
|
|
||||||
|
# Parse the URL to separate its components
|
||||||
|
parsed_url = urlparse(api_base)
|
||||||
|
|
||||||
|
# Insert the response_id at the end of the path component
|
||||||
|
# Remove trailing slash if present to avoid double slashes
|
||||||
|
path = parsed_url.path.rstrip("/")
|
||||||
|
new_path = f"{path}/{response_id}"
|
||||||
|
|
||||||
|
# Reconstruct the URL with all original components but with the modified path
|
||||||
|
delete_url = urlunparse(
|
||||||
|
(
|
||||||
|
parsed_url.scheme, # http, https
|
||||||
|
parsed_url.netloc, # domain name, port
|
||||||
|
new_path, # path with response_id added
|
||||||
|
parsed_url.params, # parameters
|
||||||
|
parsed_url.query, # query string
|
||||||
|
parsed_url.fragment, # fragment
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
data: Dict = {}
|
||||||
|
verbose_logger.debug(f"delete response url={delete_url}")
|
||||||
|
return delete_url, data
|
||||||
|
|
|
@ -205,6 +205,7 @@ class BaseResponsesAPITest(ABC):
|
||||||
if isinstance(response, ResponsesAPIResponse):
|
if isinstance(response, ResponsesAPIResponse):
|
||||||
litellm.delete_responses(
|
litellm.delete_responses(
|
||||||
response_id=response.id,
|
response_id=response.id,
|
||||||
|
**base_completion_call_args
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
raise ValueError("response is not a ResponsesAPIResponse")
|
raise ValueError("response is not a ResponsesAPIResponse")
|
||||||
|
@ -218,6 +219,7 @@ class BaseResponsesAPITest(ABC):
|
||||||
if isinstance(response, ResponsesAPIResponse):
|
if isinstance(response, ResponsesAPIResponse):
|
||||||
await litellm.adelete_responses(
|
await litellm.adelete_responses(
|
||||||
response_id=response.id,
|
response_id=response.id,
|
||||||
|
**base_completion_call_args
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
raise ValueError("response is not a ResponsesAPIResponse")
|
raise ValueError("response is not a ResponsesAPIResponse")
|
||||||
|
@ -249,6 +251,7 @@ class BaseResponsesAPITest(ABC):
|
||||||
assert response_id is not None
|
assert response_id is not None
|
||||||
litellm.delete_responses(
|
litellm.delete_responses(
|
||||||
response_id=response_id,
|
response_id=response_id,
|
||||||
|
**base_completion_call_args
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
response = await litellm.aresponses(
|
response = await litellm.aresponses(
|
||||||
|
@ -268,6 +271,7 @@ class BaseResponsesAPITest(ABC):
|
||||||
assert response_id is not None
|
assert response_id is not None
|
||||||
await litellm.adelete_responses(
|
await litellm.adelete_responses(
|
||||||
response_id=response_id,
|
response_id=response_id,
|
||||||
|
**base_completion_call_args
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue