增加环绕侦察场景适配
This commit is contained in:
@@ -55,49 +55,51 @@ class Stream(Generic[_T]):
|
||||
process_data = self._client._process_response_data
|
||||
iterator = self._iter_events()
|
||||
|
||||
for sse in iterator:
|
||||
if sse.data.startswith("[DONE]"):
|
||||
break
|
||||
try:
|
||||
for sse in iterator:
|
||||
if sse.data.startswith("[DONE]"):
|
||||
break
|
||||
|
||||
# we have to special case the Assistants `thread.` events since we won't have an "event" key in the data
|
||||
if sse.event and sse.event.startswith("thread."):
|
||||
data = sse.json()
|
||||
# we have to special case the Assistants `thread.` events since we won't have an "event" key in the data
|
||||
if sse.event and sse.event.startswith("thread."):
|
||||
data = sse.json()
|
||||
|
||||
if sse.event == "error" and is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
if sse.event == "error" and is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
|
||||
yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response)
|
||||
else:
|
||||
data = sse.json()
|
||||
if is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response)
|
||||
else:
|
||||
data = sse.json()
|
||||
if is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
|
||||
yield process_data(data=data, cast_to=cast_to, response=response)
|
||||
yield process_data(data=data, cast_to=cast_to, response=response)
|
||||
|
||||
# As we might not fully consume the response stream, we need to close it explicitly
|
||||
response.close()
|
||||
finally:
|
||||
# Ensure the response is closed even if the consumer doesn't read all data
|
||||
response.close()
|
||||
|
||||
def __enter__(self) -> Self:
|
||||
return self
|
||||
@@ -156,49 +158,51 @@ class AsyncStream(Generic[_T]):
|
||||
process_data = self._client._process_response_data
|
||||
iterator = self._iter_events()
|
||||
|
||||
async for sse in iterator:
|
||||
if sse.data.startswith("[DONE]"):
|
||||
break
|
||||
try:
|
||||
async for sse in iterator:
|
||||
if sse.data.startswith("[DONE]"):
|
||||
break
|
||||
|
||||
# we have to special case the Assistants `thread.` events since we won't have an "event" key in the data
|
||||
if sse.event and sse.event.startswith("thread."):
|
||||
data = sse.json()
|
||||
# we have to special case the Assistants `thread.` events since we won't have an "event" key in the data
|
||||
if sse.event and sse.event.startswith("thread."):
|
||||
data = sse.json()
|
||||
|
||||
if sse.event == "error" and is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
if sse.event == "error" and is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
|
||||
yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response)
|
||||
else:
|
||||
data = sse.json()
|
||||
if is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response)
|
||||
else:
|
||||
data = sse.json()
|
||||
if is_mapping(data) and data.get("error"):
|
||||
message = None
|
||||
error = data.get("error")
|
||||
if is_mapping(error):
|
||||
message = error.get("message")
|
||||
if not message or not isinstance(message, str):
|
||||
message = "An error occurred during streaming"
|
||||
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
raise APIError(
|
||||
message=message,
|
||||
request=self.response.request,
|
||||
body=data["error"],
|
||||
)
|
||||
|
||||
yield process_data(data=data, cast_to=cast_to, response=response)
|
||||
yield process_data(data=data, cast_to=cast_to, response=response)
|
||||
|
||||
# As we might not fully consume the response stream, we need to close it explicitly
|
||||
await response.aclose()
|
||||
finally:
|
||||
# Ensure the response is closed even if the consumer doesn't read all data
|
||||
await response.aclose()
|
||||
|
||||
async def __aenter__(self) -> Self:
|
||||
return self
|
||||
|
||||
Reference in New Issue
Block a user