fix: convert anyOf with const values to enum types in OpenAPI schema

Add a post-processing step that converts anyOf schemas containing
multiple const string values into proper enum types. This fixes the
Schema/EnumDescriptionNotValid error from Stainless by ensuring enum
schemas are properly formatted instead of using anyOf with const values.

Signed-off-by: Sébastien Han <seb@redhat.com>
This commit is contained in:
Sébastien Han 2025-11-13 13:31:55 +01:00
parent 769cfe4654
commit 912ee24bdf
No known key found for this signature in database
6 changed files with 434 additions and 480 deletions

View file

@ -844,17 +844,15 @@ paths:
in: query
required: false
schema:
anyOf:
- const: completed
type: string
- const: in_progress
type: string
- const: cancelled
type: string
- const: failed
type: string
- type: 'null'
title: Filter
type: string
enum:
- completed
- in_progress
- cancelled
- failed
default: completed
nullable: true
- name: limit
in: query
required: false
@ -5626,15 +5624,13 @@ components:
OpenAIResponseInputMessageContentImage:
properties:
detail:
anyOf:
- type: string
const: low
- type: string
const: high
- type: string
const: auto
title: string
title: Detail
default: auto
type: string
enum:
- low
- high
- auto
type:
type: string
const: input_image
@ -5777,17 +5773,14 @@ components:
OpenAIResponseInputToolWebSearch:
properties:
type:
anyOf:
- type: string
const: web_search
- type: string
const: web_search_preview
- type: string
const: web_search_preview_2025_03_11
- type: string
const: web_search_2025_08_26
title: string
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
@ -5889,16 +5882,14 @@ components:
title: list[OpenAIResponseOutputMessageContentOutputText | OpenAIResponseContentPartRefusal]
title: string | list[OpenAIResponseInputMessageContentText | OpenAIResponseInputMessageContentImage | OpenAIResponseInputMessageContentFile] | list[OpenAIResponseOutputMessageContentOutputText | OpenAIResponseContentPartRefusal]
role:
anyOf:
- type: string
const: system
- type: string
const: developer
- type: string
const: user
- type: string
const: assistant
title: string
title: Role
type: string
enum:
- system
- developer
- user
- assistant
default: system
type:
type: string
const: message
@ -5960,16 +5951,14 @@ components:
title: list[OpenAIResponseOutputMessageContentOutputText | OpenAIResponseContentPartRefusal]
title: string | list[OpenAIResponseInputMessageContentText | OpenAIResponseInputMessageContentImage | OpenAIResponseInputMessageContentFile] | list[OpenAIResponseOutputMessageContentOutputText | OpenAIResponseContentPartRefusal]
role:
anyOf:
- type: string
const: system
- type: string
const: developer
- type: string
const: user
- type: string
const: assistant
title: string
title: Role
type: string
enum:
- system
- developer
- user
- assistant
default: system
type:
type: string
const: message
@ -6517,14 +6506,13 @@ components:
OpenAIResponseTextFormat:
properties:
type:
anyOf:
- type: string
const: text
- type: string
const: json_schema
- type: string
const: json_object
title: string
title: Type
type: string
enum:
- text
- json_schema
- json_object
default: text
name:
anyOf:
- type: string
@ -7774,16 +7762,14 @@ components:
type: string
title: Vector Store Id
status:
anyOf:
- type: string
const: completed
- type: string
const: in_progress
- type: string
const: cancelled
- type: string
const: failed
title: string
title: Status
type: string
enum:
- completed
- in_progress
- cancelled
- failed
default: completed
file_counts:
$ref: '#/components/schemas/VectorStoreFileCounts'
type: object
@ -7867,12 +7853,12 @@ components:
VectorStoreFileLastError:
properties:
code:
anyOf:
- type: string
const: server_error
- type: string
const: rate_limit_exceeded
title: string
title: Code
type: string
enum:
- server_error
- rate_limit_exceeded
default: server_error
message:
type: string
title: Message
@ -7917,16 +7903,14 @@ components:
- type: 'null'
title: VectorStoreFileLastError
status:
anyOf:
- type: string
const: completed
- type: string
const: in_progress
- type: string
const: cancelled
- type: string
const: failed
title: string
title: Status
type: string
enum:
- completed
- in_progress
- cancelled
- failed
default: completed
usage_bytes:
type: integer
title: Usage Bytes
@ -9063,16 +9047,13 @@ components:
title: VectorStoreChunkingStrategyStatic
title: VectorStoreChunkingStrategyAuto | VectorStoreChunkingStrategyStatic
VectorStoreFileStatus:
anyOf:
- const: completed
type: string
- const: in_progress
type: string
- const: cancelled
type: string
- const: failed
type: string
title: string
type: string
enum:
- completed
- in_progress
- cancelled
- failed
default: completed
OpenAIResponseInputMessageContent:
discriminator:
mapping:
@ -9161,16 +9142,14 @@ components:
title: list[OpenAIResponseOutputMessageContentOutputText | OpenAIResponseContentPartRefusal]
title: string | list[OpenAIResponseInputMessageContentText | OpenAIResponseInputMessageContentImage | OpenAIResponseInputMessageContentFile] | list[OpenAIResponseOutputMessageContentOutputText | OpenAIResponseContentPartRefusal]
role:
anyOf:
- const: system
type: string
- const: developer
type: string
- const: user
type: string
- const: assistant
type: string
title: string
title: Role
type: string
enum:
- system
- developer
- user
- assistant
default: system
type:
const: message
default: message