mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-08 22:21:35 +00:00
fixes non stream
This commit is contained in:
parent
dfbee20f8a
commit
8f3a009afa
3 changed files with 32 additions and 4 deletions
|
|
@ -913,6 +913,14 @@ def _get_openai_compatible_provider_info( # noqa: PLR0915
|
|||
or "http://localhost:2024"
|
||||
)
|
||||
dynamic_api_key = api_key or get_secret_str("LANGGRAPH_API_KEY")
|
||||
elif custom_llm_provider == "manus":
|
||||
# Manus is OpenAI compatible for responses API
|
||||
api_base = (
|
||||
api_base
|
||||
or get_secret_str("MANUS_API_BASE")
|
||||
or "https://api.manus.im"
|
||||
)
|
||||
dynamic_api_key = api_key or get_secret_str("MANUS_API_KEY")
|
||||
|
||||
if api_base is not None and not isinstance(api_base, str):
|
||||
raise Exception("api base needs to be a string. api_base={}".format(api_base))
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ from litellm.llms.openai.common_utils import OpenAIError
|
|||
from litellm.llms.openai.responses.transformation import OpenAIResponsesAPIConfig
|
||||
from litellm.secret_managers.main import get_secret_str
|
||||
from litellm.types.llms.openai import (
|
||||
ResponseAPIUsage,
|
||||
ResponseInputParam,
|
||||
ResponsesAPIOptionalRequestParams,
|
||||
ResponsesAPIResponse,
|
||||
|
|
@ -195,6 +196,24 @@ class ManusResponsesAPIConfig(OpenAIResponsesAPIConfig):
|
|||
raw_response_headers = dict(raw_response.headers)
|
||||
processed_headers = process_response_headers(raw_response_headers)
|
||||
|
||||
# Ensure reasoning is an empty dict if not present, OpenAI SDK does not allow None
|
||||
if "reasoning" not in raw_response_json or raw_response_json.get("reasoning") is None:
|
||||
raw_response_json["reasoning"] = {}
|
||||
|
||||
if "text" not in raw_response_json or raw_response_json.get("text") is None:
|
||||
raw_response_json["text"] = {}
|
||||
|
||||
if "output" not in raw_response_json or raw_response_json.get("output") is None:
|
||||
raw_response_json["output"] = []
|
||||
|
||||
# Ensure usage is present with default values if not provided
|
||||
if "usage" not in raw_response_json or raw_response_json.get("usage") is None:
|
||||
raw_response_json["usage"] = ResponseAPIUsage(
|
||||
input_tokens=0,
|
||||
output_tokens=0,
|
||||
total_tokens=0,
|
||||
)
|
||||
|
||||
try:
|
||||
response = ResponsesAPIResponse(**raw_response_json)
|
||||
except Exception:
|
||||
|
|
|
|||
|
|
@ -54,9 +54,10 @@ def validate_responses_api_response(response, final_chunk: bool = False):
|
|||
assert "created_at" in response and isinstance(
|
||||
response["created_at"], int
|
||||
), "Response should have an integer 'created_at' field"
|
||||
assert "output" in response and isinstance(
|
||||
response["output"], list
|
||||
), "Response should have a list 'output' field"
|
||||
if response.get("status") == "completed":
|
||||
assert "output" in response and isinstance(
|
||||
response["output"], list
|
||||
), "Response should have a list 'output' field"
|
||||
|
||||
# Optional fields with their expected types
|
||||
optional_fields = {
|
||||
|
|
@ -91,7 +92,7 @@ def validate_responses_api_response(response, final_chunk: bool = False):
|
|||
), f"Field '{field}' should be of type {expected_type}, but got {type(response[field])}"
|
||||
|
||||
# Check if output has at least one item
|
||||
if final_chunk is True:
|
||||
if final_chunk is True and response.get("status") == "completed":
|
||||
assert (
|
||||
len(response["output"]) > 0
|
||||
), "Response 'output' field should have at least one item"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue