Fix streaming in chat completions
This commit is contained in:
parent
5626cb1951
commit
2302b478af
2 changed files with 24 additions and 1 deletions
|
|
@ -51,8 +51,10 @@ from openai.types.responses import (
|
||||||
ResponseOutputText,
|
ResponseOutputText,
|
||||||
ResponseRefusalDeltaEvent,
|
ResponseRefusalDeltaEvent,
|
||||||
ResponseTextDeltaEvent,
|
ResponseTextDeltaEvent,
|
||||||
|
ResponseUsage,
|
||||||
)
|
)
|
||||||
from openai.types.responses.response_input_param import FunctionCallOutput, ItemReference, Message
|
from openai.types.responses.response_input_param import FunctionCallOutput, ItemReference, Message
|
||||||
|
from openai.types.responses.response_usage import OutputTokensDetails
|
||||||
|
|
||||||
from .. import _debug
|
from .. import _debug
|
||||||
from ..agent_output import AgentOutputSchema
|
from ..agent_output import AgentOutputSchema
|
||||||
|
|
@ -405,7 +407,23 @@ class OpenAIChatCompletionsModel(Model):
|
||||||
for function_call in state.function_calls.values():
|
for function_call in state.function_calls.values():
|
||||||
outputs.append(function_call)
|
outputs.append(function_call)
|
||||||
|
|
||||||
final_response = response.model_copy(update={"output": outputs, "usage": usage})
|
final_response = response.model_copy()
|
||||||
|
final_response.output = outputs
|
||||||
|
final_response.usage = (
|
||||||
|
ResponseUsage(
|
||||||
|
input_tokens=usage.prompt_tokens,
|
||||||
|
output_tokens=usage.completion_tokens,
|
||||||
|
total_tokens=usage.total_tokens,
|
||||||
|
output_tokens_details=OutputTokensDetails(
|
||||||
|
reasoning_tokens=usage.completion_tokens_details.reasoning_tokens
|
||||||
|
if usage.completion_tokens_details
|
||||||
|
and usage.completion_tokens_details.reasoning_tokens
|
||||||
|
else 0
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if usage
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
|
||||||
yield ResponseCompletedEvent(
|
yield ResponseCompletedEvent(
|
||||||
response=final_response,
|
response=final_response,
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,11 @@ async def test_stream_response_yields_events_for_text_content(monkeypatch) -> No
|
||||||
assert isinstance(completed_resp.output[0].content[0], ResponseOutputText)
|
assert isinstance(completed_resp.output[0].content[0], ResponseOutputText)
|
||||||
assert completed_resp.output[0].content[0].text == "Hello"
|
assert completed_resp.output[0].content[0].text == "Hello"
|
||||||
|
|
||||||
|
assert completed_resp.usage, "usage should not be None"
|
||||||
|
assert completed_resp.usage.input_tokens == 7
|
||||||
|
assert completed_resp.usage.output_tokens == 5
|
||||||
|
assert completed_resp.usage.total_tokens == 12
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.allow_call_model_methods
|
@pytest.mark.allow_call_model_methods
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue