Skip to content

Commit a3337d1

Browse files
committed
feat: add reasoning output support for OpenAI Responses API
Enable reasoning models (e.g. gpt-oss via Ollama/vLLM) to propagate reasoning content through the Responses API pipeline: - Accumulate reasoning text from streaming chat completion chunks into ChatCompletionResult.reasoning field (types.py) - Construct OpenAIResponseOutputMessageReasoningItem from accumulated reasoning, using the content field, independent of response type (streaming.py) - Propagate reasoning on assistant messages in multi-turn server-side tool loops via _separate_tool_calls (streaming.py) - Consume reasoning items from input via look-back: skip reasoning items during CC conversion, attach text to the next assistant message for FunctionToolCall, McpCall, and ResponseMessage (utils.py) - Add ReasoningItem to OpenAIResponseOutput union (openai_responses.py) - Add tests for reasoning look-back in input conversion
1 parent 20bd067 commit a3337d1

12 files changed

Lines changed: 871 additions & 60 deletions

File tree

client-sdks/stainless/openapi.yml

Lines changed: 95 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7080,6 +7080,7 @@ components:
70807080
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
70817081
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
70827082
message: '#/components/schemas/OpenAIResponseMessage'
7083+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
70837084
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
70847085
propertyName: type
70857086
oneOf:
@@ -7097,7 +7098,9 @@ components:
70977098
title: OpenAIResponseOutputMessageMCPListTools
70987099
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
70997100
title: OpenAIResponseMCPApprovalRequest
7100-
title: OpenAIResponseMessage | ... (7 variants)
7101+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
7102+
title: OpenAIResponseOutputMessageReasoningItem
7103+
title: OpenAIResponseMessage | ... (8 variants)
71017104
- $ref: '#/components/schemas/OpenAIResponseInputFunctionToolCallOutput'
71027105
title: OpenAIResponseInputFunctionToolCallOutput
71037106
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalResponse'
@@ -7242,6 +7245,8 @@ components:
72427245
title: OpenAIResponseOutputMessageMCPListTools
72437246
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
72447247
title: OpenAIResponseMCPApprovalRequest
7248+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
7249+
title: OpenAIResponseOutputMessageReasoningItem
72457250
discriminator:
72467251
propertyName: type
72477252
mapping:
@@ -7251,8 +7256,9 @@ components:
72517256
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
72527257
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
72537258
message: '#/components/schemas/OpenAIResponseMessage-Output'
7259+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
72547260
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
7255-
title: OpenAIResponseMessage-Output | ... (7 variants)
7261+
title: OpenAIResponseMessage-Output | ... (8 variants)
72567262
type: array
72577263
title: Output
72587264
parallel_tool_calls:
@@ -7418,6 +7424,8 @@ components:
74187424
title: OpenAIResponseOutputMessageMCPListTools
74197425
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
74207426
title: OpenAIResponseMCPApprovalRequest
7427+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
7428+
title: OpenAIResponseOutputMessageReasoningItem
74217429
discriminator:
74227430
propertyName: type
74237431
mapping:
@@ -7427,8 +7435,9 @@ components:
74277435
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
74287436
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
74297437
message: '#/components/schemas/OpenAIResponseMessage-Output'
7438+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
74307439
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
7431-
title: OpenAIResponseMessage-Output | ... (7 variants)
7440+
title: OpenAIResponseMessage-Output | ... (8 variants)
74327441
- $ref: '#/components/schemas/OpenAIResponseInputFunctionToolCallOutput'
74337442
title: OpenAIResponseInputFunctionToolCallOutput
74347443
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalResponse'
@@ -7457,6 +7466,7 @@ components:
74577466
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
74587467
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
74597468
message: '#/components/schemas/OpenAIResponseMessage'
7469+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
74607470
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
74617471
propertyName: type
74627472
oneOf:
@@ -7474,7 +7484,9 @@ components:
74747484
title: OpenAIResponseOutputMessageMCPListTools
74757485
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
74767486
title: OpenAIResponseMCPApprovalRequest
7477-
title: OpenAIResponseMessage | ... (7 variants)
7487+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
7488+
title: OpenAIResponseOutputMessageReasoningItem
7489+
title: OpenAIResponseMessage | ... (8 variants)
74787490
OpenAIResponsePrompt:
74797491
properties:
74807492
id:
@@ -7723,6 +7735,8 @@ components:
77237735
title: OpenAIResponseOutputMessageMCPListTools
77247736
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
77257737
title: OpenAIResponseMCPApprovalRequest
7738+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
7739+
title: OpenAIResponseOutputMessageReasoningItem
77267740
discriminator:
77277741
propertyName: type
77287742
mapping:
@@ -7732,8 +7746,9 @@ components:
77327746
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
77337747
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
77347748
message: '#/components/schemas/OpenAIResponseMessage-Output'
7749+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
77357750
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
7736-
title: OpenAIResponseMessage-Output | ... (7 variants)
7751+
title: OpenAIResponseMessage-Output | ... (8 variants)
77377752
type: array
77387753
title: Output
77397754
parallel_tool_calls:
@@ -8523,6 +8538,7 @@ components:
85238538
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
85248539
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
85258540
message: '#/components/schemas/OpenAIResponseMessage'
8541+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
85268542
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
85278543
propertyName: type
85288544
oneOf:
@@ -8540,7 +8556,9 @@ components:
85408556
title: OpenAIResponseOutputMessageMCPListTools
85418557
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
85428558
title: OpenAIResponseMCPApprovalRequest
8543-
title: OpenAIResponseMessage | ... (7 variants)
8559+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
8560+
title: OpenAIResponseOutputMessageReasoningItem
8561+
title: OpenAIResponseMessage | ... (8 variants)
85448562
output_index:
85458563
title: Output Index
85468564
type: integer
@@ -8573,6 +8591,7 @@ components:
85738591
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
85748592
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
85758593
message: '#/components/schemas/OpenAIResponseMessage'
8594+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
85768595
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
85778596
propertyName: type
85788597
oneOf:
@@ -8590,7 +8609,9 @@ components:
85908609
title: OpenAIResponseOutputMessageMCPListTools
85918610
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
85928611
title: OpenAIResponseMCPApprovalRequest
8593-
title: OpenAIResponseMessage | ... (7 variants)
8612+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
8613+
title: OpenAIResponseOutputMessageReasoningItem
8614+
title: OpenAIResponseMessage | ... (8 variants)
85948615
output_index:
85958616
title: Output Index
85968617
type: integer
@@ -9065,6 +9086,8 @@ components:
90659086
title: OpenAIResponseOutputMessageMCPListTools
90669087
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
90679088
title: OpenAIResponseMCPApprovalRequest
9089+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
9090+
title: OpenAIResponseOutputMessageReasoningItem
90689091
discriminator:
90699092
propertyName: type
90709093
mapping:
@@ -9074,8 +9097,9 @@ components:
90749097
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
90759098
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
90769099
message: '#/components/schemas/OpenAIResponseMessage-Output'
9100+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
90779101
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
9078-
title: OpenAIResponseMessage-Output | ... (7 variants)
9102+
title: OpenAIResponseMessage-Output | ... (8 variants)
90799103
- $ref: '#/components/schemas/OpenAIResponseInputFunctionToolCallOutput'
90809104
title: OpenAIResponseInputFunctionToolCallOutput
90819105
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalResponse'
@@ -11618,6 +11642,8 @@ components:
1161811642
title: OpenAIResponseOutputMessageMCPListTools
1161911643
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalRequest'
1162011644
title: OpenAIResponseMCPApprovalRequest
11645+
- $ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
11646+
title: OpenAIResponseOutputMessageReasoningItem
1162111647
discriminator:
1162211648
propertyName: type
1162311649
mapping:
@@ -11627,8 +11653,9 @@ components:
1162711653
mcp_call: '#/components/schemas/OpenAIResponseOutputMessageMCPCall'
1162811654
mcp_list_tools: '#/components/schemas/OpenAIResponseOutputMessageMCPListTools'
1162911655
message: '#/components/schemas/OpenAIResponseMessage-Input'
11656+
reasoning: '#/components/schemas/OpenAIResponseOutputMessageReasoningItem'
1163011657
web_search_call: '#/components/schemas/OpenAIResponseOutputMessageWebSearchToolCall'
11631-
title: OpenAIResponseMessage-Input | ... (7 variants)
11658+
title: OpenAIResponseMessage-Input | ... (8 variants)
1163211659
- $ref: '#/components/schemas/OpenAIResponseInputFunctionToolCallOutput'
1163311660
title: OpenAIResponseInputFunctionToolCallOutput
1163411661
- $ref: '#/components/schemas/OpenAIResponseMCPApprovalResponse'
@@ -12281,6 +12308,7 @@ components:
1228112308
type: object
1228212309
- type: 'null'
1228312310
description: Audio response data when using audio output modality.
12311+
additionalProperties: true
1228412312
title: OpenAIChatCompletionResponseMessage
1228512313
description: An assistant message returned in a chat completion response.
1228612314
OpenAIChatCompletionUsageCompletionTokensDetails:
@@ -12654,6 +12682,64 @@ components:
1265412682
- text
1265512683
title: OpenAIResponseOutputMessageFileSearchToolCallResults
1265612684
description: Search results returned by the file search operation.
12685+
OpenAIResponseOutputMessageReasoningContent:
12686+
properties:
12687+
text:
12688+
type: string
12689+
title: Text
12690+
type:
12691+
type: string
12692+
const: reasoning_text
12693+
title: Type
12694+
default: reasoning_text
12695+
required:
12696+
- text
12697+
title: OpenAIResponseOutputMessageReasoningContent
12698+
description: Reasoning text from the model.
12699+
OpenAIResponseOutputMessageReasoningItem:
12700+
properties:
12701+
id:
12702+
type: string
12703+
title: Id
12704+
summary:
12705+
items:
12706+
$ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningSummary'
12707+
type: array
12708+
title: Summary
12709+
type:
12710+
type: string
12711+
const: reasoning
12712+
title: Type
12713+
default: reasoning
12714+
content:
12715+
anyOf:
12716+
- items:
12717+
$ref: '#/components/schemas/OpenAIResponseOutputMessageReasoningContent'
12718+
type: array
12719+
- type: 'null'
12720+
status:
12721+
anyOf:
12722+
- type: string
12723+
- type: 'null'
12724+
required:
12725+
- id
12726+
- summary
12727+
title: OpenAIResponseOutputMessageReasoningItem
12728+
description: Reasoning output from the model, representing the model's thinking process.
12729+
OpenAIResponseOutputMessageReasoningSummary:
12730+
properties:
12731+
text:
12732+
type: string
12733+
title: Text
12734+
type:
12735+
type: string
12736+
const: summary_text
12737+
title: Type
12738+
default: summary_text
12739+
required:
12740+
- text
12741+
title: OpenAIResponseOutputMessageReasoningSummary
12742+
description: A summary of reasoning output from the model.
1265712743
OpenAIResponseReasoning:
1265812744
properties:
1265912745
effort:

0 commit comments

Comments
 (0)