feat: add support for tool_choice to repsponses api

Signed-off-by: Jaideep Rao <jrao@redhat.com>
This commit is contained in:
Jaideep Rao 2025-11-07 23:42:28 +05:30
parent ee107aadd6
commit d2d2c88921
17 changed files with 49613 additions and 1 deletions

View file

@ -6784,6 +6784,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -7171,6 +7203,38 @@ components:
title: OpenAIResponseText title: OpenAIResponseText
- type: 'null' - type: 'null'
title: OpenAIResponseText title: OpenAIResponseText
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
tools: tools:
anyOf: anyOf:
- items: - items:
@ -7330,6 +7394,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -11803,6 +11899,121 @@ components:
type: object type: object
title: OpenAIChatCompletionUsagePromptTokensDetails title: OpenAIChatCompletionUsagePromptTokensDetails
description: Token details for prompt tokens in OpenAI chat completion usage. description: Token details for prompt tokens in OpenAI chat completion usage.
OpenAIResponseInputToolChoiceAllowedTools:
properties:
mode:
type: string
enum:
- auto
- required
title: Mode
default: auto
tools:
items:
additionalProperties:
type: string
type: object
type: array
title: Tools
type:
type: string
const: allowed_tools
title: Type
default: allowed_tools
type: object
required:
- tools
title: OpenAIResponseInputToolChoiceAllowedTools
description: Constrains the tools available to the model to a pre-defined set.
OpenAIResponseInputToolChoiceCustomTool:
properties:
type:
type: string
const: custom
title: Type
default: custom
name:
type: string
title: Name
type: object
required:
- name
title: OpenAIResponseInputToolChoiceCustomTool
description: Forces the model to call a custom tool.
OpenAIResponseInputToolChoiceFileSearch:
properties:
type:
type: string
const: file_search
title: Type
default: file_search
type: object
title: OpenAIResponseInputToolChoiceFileSearch
description: Indicates that the model should use file search to generate a response.
OpenAIResponseInputToolChoiceFunctionTool:
properties:
name:
type: string
title: Name
type:
type: string
const: function
title: Type
default: function
type: object
required:
- name
title: OpenAIResponseInputToolChoiceFunctionTool
description: Forces the model to call a specific function.
OpenAIResponseInputToolChoiceMCPTool:
properties:
server_label:
type: string
title: Server Label
type:
type: string
const: mcp
title: Type
default: mcp
name:
anyOf:
- type: string
- type: 'null'
type: object
required:
- server_label
title: OpenAIResponseInputToolChoiceMCPTool
description: Forces the model to call a specific tool on a remote MCP server
OpenAIResponseInputToolChoiceMode:
type: string
enum:
- auto
- required
- none
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseInputToolChoiceWebSearch:
properties:
type:
title: Type
default: web_search
type: string
enum:
- web_search
- web_search_preview
- web_search_preview_2025_03_11
- web_search_2025_08_26
search_context_size:
anyOf:
- type: string
pattern: ^low|medium|high$
- type: 'null'
default: medium
type: object
title: OpenAIResponseInputToolChoiceWebSearch
description: |-
Indicates that the model should use web search to generate a response.
This is an alias for OpenAIResponseInputToolWebSearch used in tool_choice context.
OpenAIResponseMessage-Input: OpenAIResponseMessage-Input:
properties: properties:
content: content:
@ -12189,6 +12400,131 @@ components:
- $ref: '#/components/schemas/GrammarResponseFormat' - $ref: '#/components/schemas/GrammarResponseFormat'
title: GrammarResponseFormat title: GrammarResponseFormat
title: JsonSchemaResponseFormat | GrammarResponseFormat title: JsonSchemaResponseFormat | GrammarResponseFormat
AllowedToolsConfig:
properties:
tools:
items:
additionalProperties: true
type: object
title: Tools
type: array
mode:
enum:
- auto
- required
title: Mode
type: string
required:
- tools
- mode
title: AllowedToolsConfig
type: object
CustomToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: CustomToolConfig
type: object
FunctionToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: FunctionToolConfig
type: object
OpenAIChatCompletionToolChoiceAllowedTools:
description: Allowed tools response format for OpenAI-compatible chat completion requests.
properties:
type:
const: allowed_tools
default: allowed_tools
title: Type
type: string
allowed_tools:
$ref: '#/components/schemas/AllowedToolsConfig'
required:
- allowed_tools
title: OpenAIChatCompletionToolChoiceAllowedTools
type: object
OpenAIChatCompletionToolChoiceCustomTool:
description: Custom tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: custom
default: custom
title: Type
type: string
custom:
$ref: '#/components/schemas/CustomToolConfig'
required:
- custom
title: OpenAIChatCompletionToolChoiceCustomTool
type: object
OpenAIChatCompletionToolChoiceFunctionTool:
description: Function tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: function
default: function
title: Type
type: string
function:
$ref: '#/components/schemas/FunctionToolConfig'
required:
- function
title: OpenAIChatCompletionToolChoiceFunctionTool
type: object
OpenAIChatCompletionToolChoice:
discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
function: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
title: OpenAIChatCompletionToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
title: OpenAIChatCompletionToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
title: OpenAIChatCompletionToolChoiceCustomTool
title: OpenAIChatCompletionToolChoiceAllowedTools | OpenAIChatCompletionToolChoiceFunctionTool | OpenAIChatCompletionToolChoiceCustomTool
OpenAIResponseInputToolChoice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseContentPart: OpenAIResponseContentPart:
discriminator: discriminator:
mapping: mapping:

File diff suppressed because it is too large Load diff

View file

@ -3778,6 +3778,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -4165,6 +4197,38 @@ components:
title: OpenAIResponseText title: OpenAIResponseText
- type: 'null' - type: 'null'
title: OpenAIResponseText title: OpenAIResponseText
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
tools: tools:
anyOf: anyOf:
- items: - items:
@ -4324,6 +4388,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -8797,6 +8893,121 @@ components:
type: object type: object
title: OpenAIChatCompletionUsagePromptTokensDetails title: OpenAIChatCompletionUsagePromptTokensDetails
description: Token details for prompt tokens in OpenAI chat completion usage. description: Token details for prompt tokens in OpenAI chat completion usage.
OpenAIResponseInputToolChoiceAllowedTools:
properties:
mode:
type: string
enum:
- auto
- required
title: Mode
default: auto
tools:
items:
additionalProperties:
type: string
type: object
type: array
title: Tools
type:
type: string
const: allowed_tools
title: Type
default: allowed_tools
type: object
required:
- tools
title: OpenAIResponseInputToolChoiceAllowedTools
description: Constrains the tools available to the model to a pre-defined set.
OpenAIResponseInputToolChoiceCustomTool:
properties:
type:
type: string
const: custom
title: Type
default: custom
name:
type: string
title: Name
type: object
required:
- name
title: OpenAIResponseInputToolChoiceCustomTool
description: Forces the model to call a custom tool.
OpenAIResponseInputToolChoiceFileSearch:
properties:
type:
type: string
const: file_search
title: Type
default: file_search
type: object
title: OpenAIResponseInputToolChoiceFileSearch
description: Indicates that the model should use file search to generate a response.
OpenAIResponseInputToolChoiceFunctionTool:
properties:
name:
type: string
title: Name
type:
type: string
const: function
title: Type
default: function
type: object
required:
- name
title: OpenAIResponseInputToolChoiceFunctionTool
description: Forces the model to call a specific function.
OpenAIResponseInputToolChoiceMCPTool:
properties:
server_label:
type: string
title: Server Label
type:
type: string
const: mcp
title: Type
default: mcp
name:
anyOf:
- type: string
- type: 'null'
type: object
required:
- server_label
title: OpenAIResponseInputToolChoiceMCPTool
description: Forces the model to call a specific tool on a remote MCP server
OpenAIResponseInputToolChoiceMode:
type: string
enum:
- auto
- required
- none
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseInputToolChoiceWebSearch:
properties:
type:
title: Type
default: web_search
type: string
enum:
- web_search
- web_search_preview
- web_search_preview_2025_03_11
- web_search_2025_08_26
search_context_size:
anyOf:
- type: string
pattern: ^low|medium|high$
- type: 'null'
default: medium
type: object
title: OpenAIResponseInputToolChoiceWebSearch
description: |-
Indicates that the model should use web search to generate a response.
This is an alias for OpenAIResponseInputToolWebSearch used in tool_choice context.
OpenAIResponseMessage-Input: OpenAIResponseMessage-Input:
properties: properties:
content: content:
@ -9183,6 +9394,131 @@ components:
- $ref: '#/components/schemas/GrammarResponseFormat' - $ref: '#/components/schemas/GrammarResponseFormat'
title: GrammarResponseFormat title: GrammarResponseFormat
title: JsonSchemaResponseFormat | GrammarResponseFormat title: JsonSchemaResponseFormat | GrammarResponseFormat
AllowedToolsConfig:
properties:
tools:
items:
additionalProperties: true
type: object
title: Tools
type: array
mode:
enum:
- auto
- required
title: Mode
type: string
required:
- tools
- mode
title: AllowedToolsConfig
type: object
CustomToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: CustomToolConfig
type: object
FunctionToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: FunctionToolConfig
type: object
OpenAIChatCompletionToolChoiceAllowedTools:
description: Allowed tools response format for OpenAI-compatible chat completion requests.
properties:
type:
const: allowed_tools
default: allowed_tools
title: Type
type: string
allowed_tools:
$ref: '#/components/schemas/AllowedToolsConfig'
required:
- allowed_tools
title: OpenAIChatCompletionToolChoiceAllowedTools
type: object
OpenAIChatCompletionToolChoiceCustomTool:
description: Custom tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: custom
default: custom
title: Type
type: string
custom:
$ref: '#/components/schemas/CustomToolConfig'
required:
- custom
title: OpenAIChatCompletionToolChoiceCustomTool
type: object
OpenAIChatCompletionToolChoiceFunctionTool:
description: Function tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: function
default: function
title: Type
type: string
function:
$ref: '#/components/schemas/FunctionToolConfig'
required:
- function
title: OpenAIChatCompletionToolChoiceFunctionTool
type: object
OpenAIChatCompletionToolChoice:
discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
function: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
title: OpenAIChatCompletionToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
title: OpenAIChatCompletionToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
title: OpenAIChatCompletionToolChoiceCustomTool
title: OpenAIChatCompletionToolChoiceAllowedTools | OpenAIChatCompletionToolChoiceFunctionTool | OpenAIChatCompletionToolChoiceCustomTool
OpenAIResponseInputToolChoice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseContentPart: OpenAIResponseContentPart:
discriminator: discriminator:
mapping: mapping:

View file

@ -3318,6 +3318,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -3724,6 +3756,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -7632,6 +7696,121 @@ components:
type: object type: object
title: OpenAIChatCompletionUsagePromptTokensDetails title: OpenAIChatCompletionUsagePromptTokensDetails
description: Token details for prompt tokens in OpenAI chat completion usage. description: Token details for prompt tokens in OpenAI chat completion usage.
OpenAIResponseInputToolChoiceAllowedTools:
properties:
mode:
type: string
enum:
- auto
- required
title: Mode
default: auto
tools:
items:
additionalProperties:
type: string
type: object
type: array
title: Tools
type:
type: string
const: allowed_tools
title: Type
default: allowed_tools
type: object
required:
- tools
title: OpenAIResponseInputToolChoiceAllowedTools
description: Constrains the tools available to the model to a pre-defined set.
OpenAIResponseInputToolChoiceCustomTool:
properties:
type:
type: string
const: custom
title: Type
default: custom
name:
type: string
title: Name
type: object
required:
- name
title: OpenAIResponseInputToolChoiceCustomTool
description: Forces the model to call a custom tool.
OpenAIResponseInputToolChoiceFileSearch:
properties:
type:
type: string
const: file_search
title: Type
default: file_search
type: object
title: OpenAIResponseInputToolChoiceFileSearch
description: Indicates that the model should use file search to generate a response.
OpenAIResponseInputToolChoiceFunctionTool:
properties:
name:
type: string
title: Name
type:
type: string
const: function
title: Type
default: function
type: object
required:
- name
title: OpenAIResponseInputToolChoiceFunctionTool
description: Forces the model to call a specific function.
OpenAIResponseInputToolChoiceMCPTool:
properties:
server_label:
type: string
title: Server Label
type:
type: string
const: mcp
title: Type
default: mcp
name:
anyOf:
- type: string
- type: 'null'
type: object
required:
- server_label
title: OpenAIResponseInputToolChoiceMCPTool
description: Forces the model to call a specific tool on a remote MCP server
OpenAIResponseInputToolChoiceMode:
type: string
enum:
- auto
- required
- none
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseInputToolChoiceWebSearch:
properties:
type:
title: Type
default: web_search
type: string
enum:
- web_search
- web_search_preview
- web_search_preview_2025_03_11
- web_search_2025_08_26
search_context_size:
anyOf:
- type: string
pattern: ^low|medium|high$
- type: 'null'
default: medium
type: object
title: OpenAIResponseInputToolChoiceWebSearch
description: |-
Indicates that the model should use web search to generate a response.
This is an alias for OpenAIResponseInputToolWebSearch used in tool_choice context.
OpenAIResponseMessage-Output: OpenAIResponseMessage-Output:
properties: properties:
content: content:
@ -7949,6 +8128,131 @@ components:
- $ref: '#/components/schemas/GrammarResponseFormat' - $ref: '#/components/schemas/GrammarResponseFormat'
title: GrammarResponseFormat title: GrammarResponseFormat
title: JsonSchemaResponseFormat | GrammarResponseFormat title: JsonSchemaResponseFormat | GrammarResponseFormat
AllowedToolsConfig:
properties:
tools:
items:
additionalProperties: true
type: object
title: Tools
type: array
mode:
enum:
- auto
- required
title: Mode
type: string
required:
- tools
- mode
title: AllowedToolsConfig
type: object
CustomToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: CustomToolConfig
type: object
FunctionToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: FunctionToolConfig
type: object
OpenAIChatCompletionToolChoiceAllowedTools:
description: Allowed tools response format for OpenAI-compatible chat completion requests.
properties:
type:
const: allowed_tools
default: allowed_tools
title: Type
type: string
allowed_tools:
$ref: '#/components/schemas/AllowedToolsConfig'
required:
- allowed_tools
title: OpenAIChatCompletionToolChoiceAllowedTools
type: object
OpenAIChatCompletionToolChoiceCustomTool:
description: Custom tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: custom
default: custom
title: Type
type: string
custom:
$ref: '#/components/schemas/CustomToolConfig'
required:
- custom
title: OpenAIChatCompletionToolChoiceCustomTool
type: object
OpenAIChatCompletionToolChoiceFunctionTool:
description: Function tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: function
default: function
title: Type
type: string
function:
$ref: '#/components/schemas/FunctionToolConfig'
required:
- function
title: OpenAIChatCompletionToolChoiceFunctionTool
type: object
OpenAIChatCompletionToolChoice:
discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
function: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
title: OpenAIChatCompletionToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
title: OpenAIChatCompletionToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
title: OpenAIChatCompletionToolChoiceCustomTool
title: OpenAIChatCompletionToolChoiceAllowedTools | OpenAIChatCompletionToolChoiceFunctionTool | OpenAIChatCompletionToolChoiceCustomTool
OpenAIResponseInputToolChoice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseContentPart: OpenAIResponseContentPart:
discriminator: discriminator:
mapping: mapping:

14231
docs/static/llama-stack-spec.html vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -5589,6 +5589,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -5976,6 +6008,38 @@ components:
title: OpenAIResponseText title: OpenAIResponseText
- type: 'null' - type: 'null'
title: OpenAIResponseText title: OpenAIResponseText
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
tools: tools:
anyOf: anyOf:
- items: - items:
@ -6135,6 +6199,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -10239,6 +10335,121 @@ components:
type: object type: object
title: OpenAIChatCompletionUsagePromptTokensDetails title: OpenAIChatCompletionUsagePromptTokensDetails
description: Token details for prompt tokens in OpenAI chat completion usage. description: Token details for prompt tokens in OpenAI chat completion usage.
OpenAIResponseInputToolChoiceAllowedTools:
properties:
mode:
type: string
enum:
- auto
- required
title: Mode
default: auto
tools:
items:
additionalProperties:
type: string
type: object
type: array
title: Tools
type:
type: string
const: allowed_tools
title: Type
default: allowed_tools
type: object
required:
- tools
title: OpenAIResponseInputToolChoiceAllowedTools
description: Constrains the tools available to the model to a pre-defined set.
OpenAIResponseInputToolChoiceCustomTool:
properties:
type:
type: string
const: custom
title: Type
default: custom
name:
type: string
title: Name
type: object
required:
- name
title: OpenAIResponseInputToolChoiceCustomTool
description: Forces the model to call a custom tool.
OpenAIResponseInputToolChoiceFileSearch:
properties:
type:
type: string
const: file_search
title: Type
default: file_search
type: object
title: OpenAIResponseInputToolChoiceFileSearch
description: Indicates that the model should use file search to generate a response.
OpenAIResponseInputToolChoiceFunctionTool:
properties:
name:
type: string
title: Name
type:
type: string
const: function
title: Type
default: function
type: object
required:
- name
title: OpenAIResponseInputToolChoiceFunctionTool
description: Forces the model to call a specific function.
OpenAIResponseInputToolChoiceMCPTool:
properties:
server_label:
type: string
title: Server Label
type:
type: string
const: mcp
title: Type
default: mcp
name:
anyOf:
- type: string
- type: 'null'
type: object
required:
- server_label
title: OpenAIResponseInputToolChoiceMCPTool
description: Forces the model to call a specific tool on a remote MCP server
OpenAIResponseInputToolChoiceMode:
type: string
enum:
- auto
- required
- none
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseInputToolChoiceWebSearch:
properties:
type:
title: Type
default: web_search
type: string
enum:
- web_search
- web_search_preview
- web_search_preview_2025_03_11
- web_search_2025_08_26
search_context_size:
anyOf:
- type: string
pattern: ^low|medium|high$
- type: 'null'
default: medium
type: object
title: OpenAIResponseInputToolChoiceWebSearch
description: |-
Indicates that the model should use web search to generate a response.
This is an alias for OpenAIResponseInputToolWebSearch used in tool_choice context.
OpenAIResponseMessage-Input: OpenAIResponseMessage-Input:
properties: properties:
content: content:
@ -10625,6 +10836,131 @@ components:
- $ref: '#/components/schemas/GrammarResponseFormat' - $ref: '#/components/schemas/GrammarResponseFormat'
title: GrammarResponseFormat title: GrammarResponseFormat
title: JsonSchemaResponseFormat | GrammarResponseFormat title: JsonSchemaResponseFormat | GrammarResponseFormat
AllowedToolsConfig:
properties:
tools:
items:
additionalProperties: true
type: object
title: Tools
type: array
mode:
enum:
- auto
- required
title: Mode
type: string
required:
- tools
- mode
title: AllowedToolsConfig
type: object
CustomToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: CustomToolConfig
type: object
FunctionToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: FunctionToolConfig
type: object
OpenAIChatCompletionToolChoiceAllowedTools:
description: Allowed tools response format for OpenAI-compatible chat completion requests.
properties:
type:
const: allowed_tools
default: allowed_tools
title: Type
type: string
allowed_tools:
$ref: '#/components/schemas/AllowedToolsConfig'
required:
- allowed_tools
title: OpenAIChatCompletionToolChoiceAllowedTools
type: object
OpenAIChatCompletionToolChoiceCustomTool:
description: Custom tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: custom
default: custom
title: Type
type: string
custom:
$ref: '#/components/schemas/CustomToolConfig'
required:
- custom
title: OpenAIChatCompletionToolChoiceCustomTool
type: object
OpenAIChatCompletionToolChoiceFunctionTool:
description: Function tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: function
default: function
title: Type
type: string
function:
$ref: '#/components/schemas/FunctionToolConfig'
required:
- function
title: OpenAIChatCompletionToolChoiceFunctionTool
type: object
OpenAIChatCompletionToolChoice:
discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
function: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
title: OpenAIChatCompletionToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
title: OpenAIChatCompletionToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
title: OpenAIChatCompletionToolChoiceCustomTool
title: OpenAIChatCompletionToolChoiceAllowedTools | OpenAIChatCompletionToolChoiceFunctionTool | OpenAIChatCompletionToolChoiceCustomTool
OpenAIResponseInputToolChoice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseContentPart: OpenAIResponseContentPart:
discriminator: discriminator:
mapping: mapping:

18929
docs/static/stainless-llama-stack-spec.html vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -6784,6 +6784,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -7171,6 +7203,38 @@ components:
title: OpenAIResponseText title: OpenAIResponseText
- type: 'null' - type: 'null'
title: OpenAIResponseText title: OpenAIResponseText
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
tools: tools:
anyOf: anyOf:
- items: - items:
@ -7330,6 +7394,38 @@ components:
title: OpenAIResponseInputToolWebSearch | ... (4 variants) title: OpenAIResponseInputToolWebSearch | ... (4 variants)
type: array type: array
- type: 'null' - type: 'null'
tool_choice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
discriminator:
propertyName: type
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
- type: 'null'
title: OpenAIResponseInputToolChoiceMode
truncation: truncation:
anyOf: anyOf:
- type: string - type: string
@ -11803,6 +11899,121 @@ components:
type: object type: object
title: OpenAIChatCompletionUsagePromptTokensDetails title: OpenAIChatCompletionUsagePromptTokensDetails
description: Token details for prompt tokens in OpenAI chat completion usage. description: Token details for prompt tokens in OpenAI chat completion usage.
OpenAIResponseInputToolChoiceAllowedTools:
properties:
mode:
type: string
enum:
- auto
- required
title: Mode
default: auto
tools:
items:
additionalProperties:
type: string
type: object
type: array
title: Tools
type:
type: string
const: allowed_tools
title: Type
default: allowed_tools
type: object
required:
- tools
title: OpenAIResponseInputToolChoiceAllowedTools
description: Constrains the tools available to the model to a pre-defined set.
OpenAIResponseInputToolChoiceCustomTool:
properties:
type:
type: string
const: custom
title: Type
default: custom
name:
type: string
title: Name
type: object
required:
- name
title: OpenAIResponseInputToolChoiceCustomTool
description: Forces the model to call a custom tool.
OpenAIResponseInputToolChoiceFileSearch:
properties:
type:
type: string
const: file_search
title: Type
default: file_search
type: object
title: OpenAIResponseInputToolChoiceFileSearch
description: Indicates that the model should use file search to generate a response.
OpenAIResponseInputToolChoiceFunctionTool:
properties:
name:
type: string
title: Name
type:
type: string
const: function
title: Type
default: function
type: object
required:
- name
title: OpenAIResponseInputToolChoiceFunctionTool
description: Forces the model to call a specific function.
OpenAIResponseInputToolChoiceMCPTool:
properties:
server_label:
type: string
title: Server Label
type:
type: string
const: mcp
title: Type
default: mcp
name:
anyOf:
- type: string
- type: 'null'
type: object
required:
- server_label
title: OpenAIResponseInputToolChoiceMCPTool
description: Forces the model to call a specific tool on a remote MCP server
OpenAIResponseInputToolChoiceMode:
type: string
enum:
- auto
- required
- none
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseInputToolChoiceWebSearch:
properties:
type:
title: Type
default: web_search
type: string
enum:
- web_search
- web_search_preview
- web_search_preview_2025_03_11
- web_search_2025_08_26
search_context_size:
anyOf:
- type: string
pattern: ^low|medium|high$
- type: 'null'
default: medium
type: object
title: OpenAIResponseInputToolChoiceWebSearch
description: |-
Indicates that the model should use web search to generate a response.
This is an alias for OpenAIResponseInputToolWebSearch used in tool_choice context.
OpenAIResponseMessage-Input: OpenAIResponseMessage-Input:
properties: properties:
content: content:
@ -12189,6 +12400,131 @@ components:
- $ref: '#/components/schemas/GrammarResponseFormat' - $ref: '#/components/schemas/GrammarResponseFormat'
title: GrammarResponseFormat title: GrammarResponseFormat
title: JsonSchemaResponseFormat | GrammarResponseFormat title: JsonSchemaResponseFormat | GrammarResponseFormat
AllowedToolsConfig:
properties:
tools:
items:
additionalProperties: true
type: object
title: Tools
type: array
mode:
enum:
- auto
- required
title: Mode
type: string
required:
- tools
- mode
title: AllowedToolsConfig
type: object
CustomToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: CustomToolConfig
type: object
FunctionToolConfig:
properties:
name:
title: Name
type: string
required:
- name
title: FunctionToolConfig
type: object
OpenAIChatCompletionToolChoiceAllowedTools:
description: Allowed tools response format for OpenAI-compatible chat completion requests.
properties:
type:
const: allowed_tools
default: allowed_tools
title: Type
type: string
allowed_tools:
$ref: '#/components/schemas/AllowedToolsConfig'
required:
- allowed_tools
title: OpenAIChatCompletionToolChoiceAllowedTools
type: object
OpenAIChatCompletionToolChoiceCustomTool:
description: Custom tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: custom
default: custom
title: Type
type: string
custom:
$ref: '#/components/schemas/CustomToolConfig'
required:
- custom
title: OpenAIChatCompletionToolChoiceCustomTool
type: object
OpenAIChatCompletionToolChoiceFunctionTool:
description: Function tool choice for OpenAI-compatible chat completion requests.
properties:
type:
const: function
default: function
title: Type
type: string
function:
$ref: '#/components/schemas/FunctionToolConfig'
required:
- function
title: OpenAIChatCompletionToolChoiceFunctionTool
type: object
OpenAIChatCompletionToolChoice:
discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
function: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceAllowedTools'
title: OpenAIChatCompletionToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceFunctionTool'
title: OpenAIChatCompletionToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIChatCompletionToolChoiceCustomTool'
title: OpenAIChatCompletionToolChoiceCustomTool
title: OpenAIChatCompletionToolChoiceAllowedTools | OpenAIChatCompletionToolChoiceFunctionTool | OpenAIChatCompletionToolChoiceCustomTool
OpenAIResponseInputToolChoice:
anyOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMode'
title: OpenAIResponseInputToolChoiceMode
- discriminator:
mapping:
allowed_tools: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
custom: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
file_search: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
function: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
mcp: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
web_search: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_2025_08_26: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
web_search_preview_2025_03_11: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
propertyName: type
oneOf:
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceAllowedTools'
title: OpenAIResponseInputToolChoiceAllowedTools
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFileSearch'
title: OpenAIResponseInputToolChoiceFileSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceWebSearch'
title: OpenAIResponseInputToolChoiceWebSearch
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceFunctionTool'
title: OpenAIResponseInputToolChoiceFunctionTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceMCPTool'
title: OpenAIResponseInputToolChoiceMCPTool
- $ref: '#/components/schemas/OpenAIResponseInputToolChoiceCustomTool'
title: OpenAIResponseInputToolChoiceCustomTool
title: OpenAIResponseInputToolChoiceAllowedTools | ... (6 variants)
title: OpenAIResponseInputToolChoiceMode
OpenAIResponseContentPart: OpenAIResponseContentPart:
discriminator: discriminator:
mapping: mapping:

View file

@ -19,6 +19,7 @@ from llama_stack_api import (
OpenAIDeleteResponseObject, OpenAIDeleteResponseObject,
OpenAIResponseInput, OpenAIResponseInput,
OpenAIResponseInputTool, OpenAIResponseInputTool,
OpenAIResponseInputToolChoice,
OpenAIResponseObject, OpenAIResponseObject,
OpenAIResponsePrompt, OpenAIResponsePrompt,
OpenAIResponseText, OpenAIResponseText,
@ -104,6 +105,7 @@ class MetaReferenceAgentsImpl(Agents):
stream: bool | None = False, stream: bool | None = False,
temperature: float | None = None, temperature: float | None = None,
text: OpenAIResponseText | None = None, text: OpenAIResponseText | None = None,
tool_choice: OpenAIResponseInputToolChoice | None = None,
tools: list[OpenAIResponseInputTool] | None = None, tools: list[OpenAIResponseInputTool] | None = None,
include: list[str] | None = None, include: list[str] | None = None,
max_infer_iters: int | None = 10, max_infer_iters: int | None = 10,
@ -123,6 +125,7 @@ class MetaReferenceAgentsImpl(Agents):
stream, stream,
temperature, temperature,
text, text,
tool_choice,
tools, tools,
include, include,
max_infer_iters, max_infer_iters,

View file

@ -32,6 +32,7 @@ from llama_stack_api import (
OpenAIResponseInputMessageContentImage, OpenAIResponseInputMessageContentImage,
OpenAIResponseInputMessageContentText, OpenAIResponseInputMessageContentText,
OpenAIResponseInputTool, OpenAIResponseInputTool,
OpenAIResponseInputToolChoice,
OpenAIResponseMessage, OpenAIResponseMessage,
OpenAIResponseObject, OpenAIResponseObject,
OpenAIResponseObjectStream, OpenAIResponseObjectStream,
@ -330,6 +331,7 @@ class OpenAIResponsesImpl:
stream: bool | None = False, stream: bool | None = False,
temperature: float | None = None, temperature: float | None = None,
text: OpenAIResponseText | None = None, text: OpenAIResponseText | None = None,
tool_choice: OpenAIResponseInputToolChoice | None = None,
tools: list[OpenAIResponseInputTool] | None = None, tools: list[OpenAIResponseInputTool] | None = None,
include: list[str] | None = None, include: list[str] | None = None,
max_infer_iters: int | None = 10, max_infer_iters: int | None = 10,
@ -387,6 +389,7 @@ class OpenAIResponsesImpl:
temperature=temperature, temperature=temperature,
text=text, text=text,
tools=tools, tools=tools,
tool_choice=tool_choice,
max_infer_iters=max_infer_iters, max_infer_iters=max_infer_iters,
guardrail_ids=guardrail_ids, guardrail_ids=guardrail_ids,
parallel_tool_calls=parallel_tool_calls, parallel_tool_calls=parallel_tool_calls,
@ -440,6 +443,7 @@ class OpenAIResponsesImpl:
temperature: float | None = None, temperature: float | None = None,
text: OpenAIResponseText | None = None, text: OpenAIResponseText | None = None,
tools: list[OpenAIResponseInputTool] | None = None, tools: list[OpenAIResponseInputTool] | None = None,
tool_choice: OpenAIResponseInputToolChoice | None = None,
max_infer_iters: int | None = 10, max_infer_iters: int | None = 10,
guardrail_ids: list[str] | None = None, guardrail_ids: list[str] | None = None,
parallel_tool_calls: bool | None = True, parallel_tool_calls: bool | None = True,
@ -469,6 +473,7 @@ class OpenAIResponsesImpl:
model=model, model=model,
messages=messages, messages=messages,
response_tools=tools, response_tools=tools,
responses_tool_choice=tool_choice,
temperature=temperature, temperature=temperature,
response_format=response_format, response_format=response_format,
tool_context=tool_context, tool_context=tool_context,

View file

@ -9,6 +9,7 @@ from collections.abc import AsyncIterator
from typing import Any from typing import Any
from opentelemetry import trace from opentelemetry import trace
from openai.types.chat import ChatCompletionToolParam
from llama_stack.log import get_logger from llama_stack.log import get_logger
from llama_stack.providers.utils.inference.prompt_adapter import interleaved_content_as_str from llama_stack.providers.utils.inference.prompt_adapter import interleaved_content_as_str
@ -23,6 +24,10 @@ from llama_stack_api import (
OpenAIChatCompletionChunk, OpenAIChatCompletionChunk,
OpenAIChatCompletionRequestWithExtraBody, OpenAIChatCompletionRequestWithExtraBody,
OpenAIChatCompletionToolCall, OpenAIChatCompletionToolCall,
OpenAIChatCompletionToolChoice,
OpenAIChatCompletionToolChoiceAllowedTools,
OpenAIChatCompletionToolChoiceCustomTool,
OpenAIChatCompletionToolChoiceFunctionTool,
OpenAIChoice, OpenAIChoice,
OpenAIMessageParam, OpenAIMessageParam,
OpenAIResponseContentPartOutputText, OpenAIResponseContentPartOutputText,
@ -30,6 +35,14 @@ from llama_stack_api import (
OpenAIResponseContentPartRefusal, OpenAIResponseContentPartRefusal,
OpenAIResponseError, OpenAIResponseError,
OpenAIResponseInputTool, OpenAIResponseInputTool,
OpenAIResponseInputToolChoice,
OpenAIResponseInputToolChoiceAllowedTools,
OpenAIResponseInputToolChoiceCustomTool,
OpenAIResponseInputToolChoiceFileSearch,
OpenAIResponseInputToolChoiceFunctionTool,
OpenAIResponseInputToolChoiceMCPTool,
OpenAIResponseInputToolChoiceMode,
OpenAIResponseInputToolChoiceWebSearch,
OpenAIResponseInputToolMCP, OpenAIResponseInputToolMCP,
OpenAIResponseMCPApprovalRequest, OpenAIResponseMCPApprovalRequest,
OpenAIResponseMessage, OpenAIResponseMessage,
@ -75,6 +88,7 @@ from llama_stack_api import (
from .types import ChatCompletionContext, ChatCompletionResult from .types import ChatCompletionContext, ChatCompletionResult
from .utils import ( from .utils import (
convert_chat_choice_to_response_message, convert_chat_choice_to_response_message,
convert_mcp_tool_choice,
is_function_tool_call, is_function_tool_call,
run_guardrails, run_guardrails,
) )
@ -144,6 +158,13 @@ class StreamingResponseOrchestrator:
self.mcp_tool_to_server: dict[str, OpenAIResponseInputToolMCP] = ( self.mcp_tool_to_server: dict[str, OpenAIResponseInputToolMCP] = (
ctx.tool_context.previous_tools if ctx.tool_context else {} ctx.tool_context.previous_tools if ctx.tool_context else {}
) )
# Reverse mapping: server_label -> list of tool names for efficient lookup
self.server_label_to_tools: dict[str, list[str]] = {}
# Build initial reverse mapping from previous_tools
for tool_name, mcp_server in self.mcp_tool_to_server.items():
if mcp_server.server_label not in self.server_label_to_tools:
self.server_label_to_tools[mcp_server.server_label] = []
self.server_label_to_tools[mcp_server.server_label].append(tool_name)
# Track final messages after all tool executions # Track final messages after all tool executions
self.final_messages: list[OpenAIMessageParam] = [] self.final_messages: list[OpenAIMessageParam] = []
# mapping for annotations # mapping for annotations
@ -196,6 +217,7 @@ class StreamingResponseOrchestrator:
output=self._clone_outputs(outputs), output=self._clone_outputs(outputs),
text=self.text, text=self.text,
tools=self.ctx.available_tools(), tools=self.ctx.available_tools(),
tool_choice=self.ctx.responses_tool_choice,
error=error, error=error,
usage=self.accumulated_usage, usage=self.accumulated_usage,
instructions=self.instructions, instructions=self.instructions,
@ -231,6 +253,18 @@ class StreamingResponseOrchestrator:
async for stream_event in self._process_tools(output_messages): async for stream_event in self._process_tools(output_messages):
yield stream_event yield stream_event
if self.ctx.responses_tool_choice and len(self.ctx.chat_tools) > 0:
chat_tool_choice = await _process_tool_choice(
self.ctx.chat_tools,
self.ctx.responses_tool_choice,
self.server_label_to_tools,
)
# chat_tool_choice can be str, dict-like object, or None
if isinstance(chat_tool_choice, str):
self.ctx.chat_tool_choice = chat_tool_choice
else:
self.ctx.chat_tool_choice = chat_tool_choice.model_dump()
n_iter = 0 n_iter = 0
messages = self.ctx.messages.copy() messages = self.ctx.messages.copy()
final_status = "completed" final_status = "completed"
@ -250,6 +284,7 @@ class StreamingResponseOrchestrator:
messages=messages, messages=messages,
# Pydantic models are dict-compatible but mypy treats them as distinct types # Pydantic models are dict-compatible but mypy treats them as distinct types
tools=self.ctx.chat_tools, # type: ignore[arg-type] tools=self.ctx.chat_tools, # type: ignore[arg-type]
tool_choice=self.ctx.chat_tool_choice,
stream=True, stream=True,
temperature=self.ctx.temperature, temperature=self.ctx.temperature,
response_format=response_format, response_format=response_format,
@ -326,6 +361,10 @@ class StreamingResponseOrchestrator:
break break
n_iter += 1 n_iter += 1
# After first iteration, reset tool_choice to "auto" to let model decide freely
# based on tool results (prevents infinite loops when forcing specific tools)
if n_iter == 1 and self.ctx.chat_tool_choice:
self.ctx.chat_tool_choice = "auto"
if n_iter >= self.max_infer_iters: if n_iter >= self.max_infer_iters:
logger.info( logger.info(
f"Exiting inference loop since iteration count({n_iter}) exceeds {self.max_infer_iters=}" f"Exiting inference loop since iteration count({n_iter}) exceeds {self.max_infer_iters=}"
@ -1145,6 +1184,11 @@ class StreamingResponseOrchestrator:
raise ValueError(f"Duplicate tool name {t.name} found for server {mcp_tool.server_label}") raise ValueError(f"Duplicate tool name {t.name} found for server {mcp_tool.server_label}")
self.mcp_tool_to_server[t.name] = mcp_tool self.mcp_tool_to_server[t.name] = mcp_tool
# Add to reverse mapping for efficient server_label lookup
if mcp_tool.server_label not in self.server_label_to_tools:
self.server_label_to_tools[mcp_tool.server_label] = []
self.server_label_to_tools[mcp_tool.server_label].append(t.name)
# Add to MCP list message # Add to MCP list message
mcp_list_message.tools.append( mcp_list_message.tools.append(
MCPListToolsTool( MCPListToolsTool(
@ -1284,3 +1328,113 @@ class StreamingResponseOrchestrator:
async for stream_event in self._add_mcp_list_tools(mcp_list_message, output_messages): async for stream_event in self._add_mcp_list_tools(mcp_list_message, output_messages):
yield stream_event yield stream_event
async def _process_tool_choice(
chat_tools: list[ChatCompletionToolParam],
responses_tool_choice: OpenAIResponseInputToolChoice,
server_label_to_tools: dict[str, list[str]],
) -> str | OpenAIChatCompletionToolChoice | None:
"""Process and validate the OpenAI Responses tool choice and return the appropriate chat completion tool choice object.
:param chat_tools: The list of chat tools to enforce tool choice against.
:param responses_tool_choice: The OpenAI Responses tool choice to process.
:param server_label_to_tools: A dictionary mapping server labels to the list of tools available on that server.
:return: The appropriate chat completion tool choice object.
"""
# retrieve all function tool names from the chat tools
# Note: chat_tools contains dicts, not objects
chat_tool_names = [tool["function"]["name"] for tool in chat_tools if tool["type"] == "function"]
if isinstance(responses_tool_choice, OpenAIResponseInputToolChoiceMode):
if responses_tool_choice.value == "required":
if len(chat_tool_names) == 0:
return None
# add all function tools to the allowed tools list and set mode to required
return OpenAIChatCompletionToolChoiceAllowedTools(
tools=[{"type": "function", "function": {"name": tool}} for tool in chat_tool_names],
mode="required",
)
# return other modes as is
return responses_tool_choice.value
elif isinstance(responses_tool_choice, OpenAIResponseInputToolChoiceAllowedTools):
# ensure that specified tool choices are available in the chat tools, if not, remove them from the list
final_tools = []
for tool in responses_tool_choice.tools:
tool_name = tool.get("name")
match tool.get("type"):
case "function":
final_tools.append({"type": "function", "function": {"name": tool_name}})
case "custom":
final_tools.append({"type": "custom", "custom": {"name": tool_name}})
case "mcp":
mcp_tools = convert_mcp_tool_choice(
chat_tool_names, tool.get("server_label"), server_label_to_tools, None
)
# convert_mcp_tool_choice can return a dict, list, or None
if isinstance(mcp_tools, list):
final_tools.extend(mcp_tools)
elif isinstance(mcp_tools, dict):
final_tools.append(mcp_tools)
# Skip if None or empty
case "file_search":
final_tools.append({"type": "function", "function": {"name": "file_search"}})
case _ if tool["type"] in WebSearchToolTypes:
final_tools.append({"type": "function", "function": {"name": "web_search"}})
case _:
logger.warning(f"Unsupported tool type: {tool['type']}, skipping tool choice enforcement for it")
continue
return OpenAIChatCompletionToolChoiceAllowedTools(
tools=final_tools,
mode=responses_tool_choice.mode,
)
else:
# Handle specific tool choice by type
# Each case validates the tool exists in chat_tools before returning
tool_name = responses_tool_choice.name if responses_tool_choice.name else None
match responses_tool_choice:
case OpenAIResponseInputToolChoiceCustomTool():
if tool_name and tool_name not in chat_tool_names:
logger.warning(f"Tool {tool_name} not found in chat tools")
return None
return OpenAIChatCompletionToolChoiceCustomTool(name=tool_name)
case OpenAIResponseInputToolChoiceFunctionTool():
if tool_name and tool_name not in chat_tool_names:
logger.warning(f"Tool {tool_name} not found in chat tools")
return None
return OpenAIChatCompletionToolChoiceFunctionTool(name=tool_name)
case OpenAIResponseInputToolChoiceFileSearch():
if "file_search" not in chat_tool_names:
logger.warning("Tool file_search not found in chat tools")
return None
return OpenAIChatCompletionToolChoiceFunctionTool(name="file_search")
case OpenAIResponseInputToolChoiceWebSearch():
if "web_search" not in chat_tool_names:
logger.warning("Tool web_search not found in chat tools")
return None
return OpenAIChatCompletionToolChoiceFunctionTool(name="web_search")
case OpenAIResponseInputToolChoiceMCPTool():
tool_choice = convert_mcp_tool_choice(
chat_tool_names,
responses_tool_choice.server_label,
server_label_to_tools,
tool_name,
)
if isinstance(tool_choice, dict):
# for single tool choice, return as function tool choice
return OpenAIChatCompletionToolChoiceFunctionTool(name=tool_choice["function"]["name"])
elif isinstance(tool_choice, list):
# for multiple tool choices, return as allowed tools
return OpenAIChatCompletionToolChoiceAllowedTools(
tools=tool_choice,
mode="required",
)

View file

@ -5,7 +5,7 @@
# the root directory of this source tree. # the root directory of this source tree.
from dataclasses import dataclass from dataclasses import dataclass
from typing import cast from typing import Any, cast
from openai.types.chat import ChatCompletionToolParam from openai.types.chat import ChatCompletionToolParam
from pydantic import BaseModel from pydantic import BaseModel
@ -16,6 +16,7 @@ from llama_stack_api import (
OpenAIResponseFormatParam, OpenAIResponseFormatParam,
OpenAIResponseInput, OpenAIResponseInput,
OpenAIResponseInputTool, OpenAIResponseInputTool,
OpenAIResponseInputToolChoice,
OpenAIResponseInputToolFileSearch, OpenAIResponseInputToolFileSearch,
OpenAIResponseInputToolFunction, OpenAIResponseInputToolFunction,
OpenAIResponseInputToolMCP, OpenAIResponseInputToolMCP,
@ -160,6 +161,8 @@ class ChatCompletionContext(BaseModel):
temperature: float | None temperature: float | None
response_format: OpenAIResponseFormatParam response_format: OpenAIResponseFormatParam
tool_context: ToolContext | None tool_context: ToolContext | None
responses_tool_choice: OpenAIResponseInputToolChoice | None = None
chat_tool_choice: str | dict[str, Any] | None = None
approval_requests: list[OpenAIResponseMCPApprovalRequest] = [] approval_requests: list[OpenAIResponseMCPApprovalRequest] = []
approval_responses: dict[str, OpenAIResponseMCPApprovalResponse] = {} approval_responses: dict[str, OpenAIResponseMCPApprovalResponse] = {}
@ -172,6 +175,7 @@ class ChatCompletionContext(BaseModel):
response_format: OpenAIResponseFormatParam, response_format: OpenAIResponseFormatParam,
tool_context: ToolContext, tool_context: ToolContext,
inputs: list[OpenAIResponseInput] | str, inputs: list[OpenAIResponseInput] | str,
responses_tool_choice: OpenAIResponseInputToolChoice | None = None,
): ):
super().__init__( super().__init__(
model=model, model=model,
@ -180,6 +184,7 @@ class ChatCompletionContext(BaseModel):
temperature=temperature, temperature=temperature,
response_format=response_format, response_format=response_format,
tool_context=tool_context, tool_context=tool_context,
responses_tool_choice=responses_tool_choice,
) )
if not isinstance(inputs, str): if not isinstance(inputs, str):
self.approval_requests = [input for input in inputs if input.type == "mcp_approval_request"] self.approval_requests = [input for input in inputs if input.type == "mcp_approval_request"]

View file

@ -499,3 +499,28 @@ def extract_guardrail_ids(guardrails: list | None) -> list[str]:
raise ValueError(f"Unknown guardrail format: {guardrail}, expected str or ResponseGuardrailSpec") raise ValueError(f"Unknown guardrail format: {guardrail}, expected str or ResponseGuardrailSpec")
return guardrail_ids return guardrail_ids
def convert_mcp_tool_choice(
chat_tool_names: list[str],
server_label: str | None = None,
server_label_to_tools: dict[str, list[str]] | None = None,
tool_name: str | None = None,
) -> dict[str, str] | list[dict[str, str]]:
"""Convert a responses tool choice of type mcp to a chat completions compatible function tool choice."""
if tool_name:
if tool_name not in chat_tool_names:
return None
return {"type": "function", "function": {"name": tool_name}}
elif server_label and server_label_to_tools:
# no tool name specified, so we need to enforce an allowed_tools with the function tools derived only from the given server label
# Use reverse mapping for lookup by server_label
# This already accounts for allowed_tools restrictions applied during _process_mcp_tool
tool_names = server_label_to_tools.get(server_label, [])
if not tool_names:
return None
matching_tools = [{"type": "function", "function": {"name": tool_name}} for tool_name in tool_names]
return matching_tools
return []

View file

@ -147,6 +147,10 @@ from .inference import (
OpenAIChatCompletionTextOnlyMessageContent, OpenAIChatCompletionTextOnlyMessageContent,
OpenAIChatCompletionToolCall, OpenAIChatCompletionToolCall,
OpenAIChatCompletionToolCallFunction, OpenAIChatCompletionToolCallFunction,
OpenAIChatCompletionToolChoice,
OpenAIChatCompletionToolChoiceAllowedTools,
OpenAIChatCompletionToolChoiceCustomTool,
OpenAIChatCompletionToolChoiceFunctionTool,
OpenAIChatCompletionUsage, OpenAIChatCompletionUsage,
OpenAIChatCompletionUsageCompletionTokensDetails, OpenAIChatCompletionUsageCompletionTokensDetails,
OpenAIChatCompletionUsagePromptTokensDetails, OpenAIChatCompletionUsagePromptTokensDetails,
@ -239,6 +243,15 @@ from .openai_responses import (
OpenAIResponseInputMessageContentImage, OpenAIResponseInputMessageContentImage,
OpenAIResponseInputMessageContentText, OpenAIResponseInputMessageContentText,
OpenAIResponseInputTool, OpenAIResponseInputTool,
OpenAIResponseInputToolChoice,
OpenAIResponseInputToolChoiceAllowedTools,
OpenAIResponseInputToolChoiceCustomTool,
OpenAIResponseInputToolChoiceFileSearch,
OpenAIResponseInputToolChoiceFunctionTool,
OpenAIResponseInputToolChoiceMCPTool,
OpenAIResponseInputToolChoiceMode,
OpenAIResponseInputToolChoiceObject,
OpenAIResponseInputToolChoiceWebSearch,
OpenAIResponseInputToolFileSearch, OpenAIResponseInputToolFileSearch,
OpenAIResponseInputToolFunction, OpenAIResponseInputToolFunction,
OpenAIResponseInputToolMCP, OpenAIResponseInputToolMCP,
@ -601,6 +614,10 @@ __all__ = [
"OpenAIChatCompletionUsage", "OpenAIChatCompletionUsage",
"OpenAIChatCompletionUsageCompletionTokensDetails", "OpenAIChatCompletionUsageCompletionTokensDetails",
"OpenAIChatCompletionUsagePromptTokensDetails", "OpenAIChatCompletionUsagePromptTokensDetails",
"OpenAIChatCompletionToolChoiceAllowedTools",
"OpenAIChatCompletionToolChoiceFunctionTool",
"OpenAIChatCompletionToolChoiceCustomTool",
"OpenAIChatCompletionToolChoice",
"OpenAIChoice", "OpenAIChoice",
"OpenAIChoiceDelta", "OpenAIChoiceDelta",
"OpenAIChoiceLogprobs", "OpenAIChoiceLogprobs",
@ -655,6 +672,15 @@ __all__ = [
"OpenAIResponseInputToolFunction", "OpenAIResponseInputToolFunction",
"OpenAIResponseInputToolMCP", "OpenAIResponseInputToolMCP",
"OpenAIResponseInputToolWebSearch", "OpenAIResponseInputToolWebSearch",
"OpenAIResponseInputToolChoice",
"OpenAIResponseInputToolChoiceAllowedTools",
"OpenAIResponseInputToolChoiceFileSearch",
"OpenAIResponseInputToolChoiceWebSearch",
"OpenAIResponseInputToolChoiceFunctionTool",
"OpenAIResponseInputToolChoiceMCPTool",
"OpenAIResponseInputToolChoiceCustomTool",
"OpenAIResponseInputToolChoiceMode",
"OpenAIResponseInputToolChoiceObject",
"OpenAIResponseMCPApprovalRequest", "OpenAIResponseMCPApprovalRequest",
"OpenAIResponseMCPApprovalResponse", "OpenAIResponseMCPApprovalResponse",
"OpenAIResponseMessage", "OpenAIResponseMessage",

View file

@ -19,6 +19,7 @@ from .openai_responses import (
OpenAIDeleteResponseObject, OpenAIDeleteResponseObject,
OpenAIResponseInput, OpenAIResponseInput,
OpenAIResponseInputTool, OpenAIResponseInputTool,
OpenAIResponseInputToolChoice,
OpenAIResponseObject, OpenAIResponseObject,
OpenAIResponseObjectStream, OpenAIResponseObjectStream,
OpenAIResponsePrompt, OpenAIResponsePrompt,
@ -79,6 +80,7 @@ class Agents(Protocol):
stream: bool | None = False, stream: bool | None = False,
temperature: float | None = None, temperature: float | None = None,
text: OpenAIResponseText | None = None, text: OpenAIResponseText | None = None,
tool_choice: OpenAIResponseInputToolChoice | None = None,
tools: list[OpenAIResponseInputTool] | None = None, tools: list[OpenAIResponseInputTool] | None = None,
include: list[str] | None = None, include: list[str] | None = None,
max_infer_iters: int | None = 10, # this is an extension to the OpenAI API max_infer_iters: int | None = 10, # this is an extension to the OpenAI API

View file

@ -555,6 +555,76 @@ OpenAIResponseFormatParam = Annotated[
register_schema(OpenAIResponseFormatParam, name="OpenAIResponseFormatParam") register_schema(OpenAIResponseFormatParam, name="OpenAIResponseFormatParam")
@json_schema_type
class FunctionToolConfig(BaseModel):
name: str
@json_schema_type
class OpenAIChatCompletionToolChoiceFunctionTool(BaseModel):
"""Function tool choice for OpenAI-compatible chat completion requests.
:param type: Must be "function" to indicate function tool choice
:param function: The function tool configuration
"""
type: Literal["function"] = "function"
function: FunctionToolConfig
def __init__(self, name: str):
super().__init__(type="function", function=FunctionToolConfig(name=name))
@json_schema_type
class CustomToolConfig(BaseModel):
name: str
@json_schema_type
class OpenAIChatCompletionToolChoiceCustomTool(BaseModel):
"""Custom tool choice for OpenAI-compatible chat completion requests.
:param type: Must be "custom" to indicate custom tool choice
"""
type: Literal["custom"] = "custom"
custom: CustomToolConfig
def __init__(self, name: str):
super().__init__(type="custom", custom=CustomToolConfig(name=name))
@json_schema_type
class AllowedToolsConfig(BaseModel):
tools: list[dict[str, Any]]
mode: Literal["auto", "required"]
@json_schema_type
class OpenAIChatCompletionToolChoiceAllowedTools(BaseModel):
"""Allowed tools response format for OpenAI-compatible chat completion requests.
:param type: Must be "allowed_tools" to indicate allowed tools response format
"""
type: Literal["allowed_tools"] = "allowed_tools"
allowed_tools: AllowedToolsConfig
def __init__(self, tools: list[dict[str, Any]], mode: Literal["auto", "required"]):
super().__init__(type="allowed_tools", allowed_tools=AllowedToolsConfig(tools=tools, mode=mode))
# Define the object-level union with discriminator
OpenAIChatCompletionToolChoice = Annotated[
OpenAIChatCompletionToolChoiceAllowedTools
| OpenAIChatCompletionToolChoiceFunctionTool
| OpenAIChatCompletionToolChoiceCustomTool,
Field(discriminator="type"),
]
register_schema(OpenAIChatCompletionToolChoice, name="OpenAIChatCompletionToolChoice")
@json_schema_type @json_schema_type
class OpenAITopLogProb(BaseModel): class OpenAITopLogProb(BaseModel):
"""The top log probability for a token from an OpenAI-compatible chat completion response. """The top log probability for a token from an OpenAI-compatible chat completion response.

View file

@ -5,6 +5,7 @@
# the root directory of this source tree. # the root directory of this source tree.
from collections.abc import Sequence from collections.abc import Sequence
from enum import Enum
from typing import Annotated, Any, Literal from typing import Annotated, Any, Literal
from pydantic import BaseModel, Field, model_validator from pydantic import BaseModel, Field, model_validator
@ -539,6 +540,98 @@ OpenAIResponseTool = Annotated[
register_schema(OpenAIResponseTool, name="OpenAIResponseTool") register_schema(OpenAIResponseTool, name="OpenAIResponseTool")
@json_schema_type
class OpenAIResponseInputToolChoiceAllowedTools(BaseModel):
"""Constrains the tools available to the model to a pre-defined set.
:param mode: Constrains the tools available to the model to a pre-defined set
:param tools: A list of tool definitions that the model should be allowed to call
:param type: Tool choice type identifier, always "allowed_tools"
"""
mode: Literal["auto", "required"] = "auto"
tools: list[dict[str, str]]
type: Literal["allowed_tools"] = "allowed_tools"
@json_schema_type
class OpenAIResponseInputToolChoiceFileSearch(BaseModel):
"""Indicates that the model should use file search to generate a response.
:param type: Tool choice type identifier, always "file_search"
"""
type: Literal["file_search"] = "file_search"
@json_schema_type
class OpenAIResponseInputToolChoiceWebSearch(OpenAIResponseInputToolWebSearch):
"""Indicates that the model should use web search to generate a response.
This is an alias for OpenAIResponseInputToolWebSearch used in tool_choice context.
"""
@json_schema_type
class OpenAIResponseInputToolChoiceFunctionTool(BaseModel):
"""Forces the model to call a specific function.
:param name: The name of the function to call
:param type: Tool choice type identifier, always "function"
"""
name: str
type: Literal["function"] = "function"
@json_schema_type
class OpenAIResponseInputToolChoiceMCPTool(BaseModel):
"""Forces the model to call a specific tool on a remote MCP server
:param server_label: The label of the MCP server to use.
:param type: Tool choice type identifier, always "mcp"
:param name: (Optional) The name of the tool to call on the server.
"""
server_label: str
type: Literal["mcp"] = "mcp"
name: str | None = None
@json_schema_type
class OpenAIResponseInputToolChoiceCustomTool(BaseModel):
"""Forces the model to call a custom tool.
:param type: Tool choice type identifier, always "custom"
:param name: The name of the custom tool to call.
"""
type: Literal["custom"] = "custom"
name: str
class OpenAIResponseInputToolChoiceMode(str, Enum):
auto = "auto"
required = "required"
none = "none"
OpenAIResponseInputToolChoiceObject = Annotated[
OpenAIResponseInputToolChoiceAllowedTools
| OpenAIResponseInputToolChoiceFileSearch
| OpenAIResponseInputToolChoiceWebSearch
| OpenAIResponseInputToolChoiceFunctionTool
| OpenAIResponseInputToolChoiceMCPTool
| OpenAIResponseInputToolChoiceCustomTool,
Field(discriminator="type"),
]
# 3. Final Union without registration or None (Keep it clean)
OpenAIResponseInputToolChoice = OpenAIResponseInputToolChoiceMode | OpenAIResponseInputToolChoiceObject
register_schema(OpenAIResponseInputToolChoice, name="OpenAIResponseInputToolChoice")
class OpenAIResponseUsageOutputTokensDetails(BaseModel): class OpenAIResponseUsageOutputTokensDetails(BaseModel):
"""Token details for output tokens in OpenAI response usage. """Token details for output tokens in OpenAI response usage.
@ -593,6 +686,7 @@ class OpenAIResponseObject(BaseModel):
:param text: Text formatting configuration for the response :param text: Text formatting configuration for the response
:param top_p: (Optional) Nucleus sampling parameter used for generation :param top_p: (Optional) Nucleus sampling parameter used for generation
:param tools: (Optional) An array of tools the model may call while generating a response. :param tools: (Optional) An array of tools the model may call while generating a response.
:param tool_choice: (Optional) Tool choice configuration for the response.
:param truncation: (Optional) Truncation strategy applied to the response :param truncation: (Optional) Truncation strategy applied to the response
:param usage: (Optional) Token usage information for the response :param usage: (Optional) Token usage information for the response
:param instructions: (Optional) System message inserted into the model's context :param instructions: (Optional) System message inserted into the model's context
@ -616,6 +710,7 @@ class OpenAIResponseObject(BaseModel):
text: OpenAIResponseText = OpenAIResponseText(format=OpenAIResponseTextFormat(type="text")) text: OpenAIResponseText = OpenAIResponseText(format=OpenAIResponseTextFormat(type="text"))
top_p: float | None = None top_p: float | None = None
tools: Sequence[OpenAIResponseTool] | None = None tools: Sequence[OpenAIResponseTool] | None = None
tool_choice: OpenAIResponseInputToolChoice | None = None
truncation: str | None = None truncation: str | None = None
usage: OpenAIResponseUsage | None = None usage: OpenAIResponseUsage | None = None
instructions: str | None = None instructions: str | None = None