fix!: BREAKING CHANGE: vector_store: search API response fix (#4080)

# What does this PR do?
- search_query in the vector store search API should be a list,
according to https://github.com/openai/openai-openapi


## Test Plan
modified tests


---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with
[ReviewStack](https://reviewstack.dev/llamastack/llama-stack/pull/4080).
* #4086
* __->__ #4080
This commit is contained in:
ehhuang 2025-11-05 15:01:48 -08:00 committed by GitHub
parent 84a84ee85c
commit 9d5c34af27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 209 additions and 227 deletions

View file

@ -9976,6 +9976,70 @@ components:
- metadata - metadata
title: VectorStoreObject title: VectorStoreObject
description: OpenAI Vector Store object. description: OpenAI Vector Store object.
VectorStoreChunkingStrategy:
oneOf:
- $ref: '#/components/schemas/VectorStoreChunkingStrategyAuto'
- $ref: '#/components/schemas/VectorStoreChunkingStrategyStatic'
discriminator:
propertyName: type
mapping:
auto: '#/components/schemas/VectorStoreChunkingStrategyAuto'
static: '#/components/schemas/VectorStoreChunkingStrategyStatic'
VectorStoreChunkingStrategyAuto:
type: object
properties:
type:
type: string
const: auto
default: auto
description: >-
Strategy type, always "auto" for automatic chunking
additionalProperties: false
required:
- type
title: VectorStoreChunkingStrategyAuto
description: >-
Automatic chunking strategy for vector store files.
VectorStoreChunkingStrategyStatic:
type: object
properties:
type:
type: string
const: static
default: static
description: >-
Strategy type, always "static" for static chunking
static:
$ref: '#/components/schemas/VectorStoreChunkingStrategyStaticConfig'
description: >-
Configuration parameters for the static chunking strategy
additionalProperties: false
required:
- type
- static
title: VectorStoreChunkingStrategyStatic
description: >-
Static chunking strategy with configurable parameters.
VectorStoreChunkingStrategyStaticConfig:
type: object
properties:
chunk_overlap_tokens:
type: integer
default: 400
description: >-
Number of tokens to overlap between adjacent chunks
max_chunk_size_tokens:
type: integer
default: 800
description: >-
Maximum number of tokens per chunk, must be between 100 and 4096
additionalProperties: false
required:
- chunk_overlap_tokens
- max_chunk_size_tokens
title: VectorStoreChunkingStrategyStaticConfig
description: >-
Configuration for static chunking strategy.
"OpenAICreateVectorStoreRequestWithExtraBody": "OpenAICreateVectorStoreRequestWithExtraBody":
type: object type: object
properties: properties:
@ -10001,15 +10065,7 @@ components:
description: >- description: >-
(Optional) Expiration policy for the vector store (Optional) Expiration policy for the vector store
chunking_strategy: chunking_strategy:
type: object $ref: '#/components/schemas/VectorStoreChunkingStrategy'
additionalProperties:
oneOf:
- type: 'null'
- type: boolean
- type: number
- type: string
- type: array
- type: object
description: >- description: >-
(Optional) Strategy for splitting files into chunks (Optional) Strategy for splitting files into chunks
metadata: metadata:
@ -10085,70 +10141,6 @@ components:
- deleted - deleted
title: VectorStoreDeleteResponse title: VectorStoreDeleteResponse
description: Response from deleting a vector store. description: Response from deleting a vector store.
VectorStoreChunkingStrategy:
oneOf:
- $ref: '#/components/schemas/VectorStoreChunkingStrategyAuto'
- $ref: '#/components/schemas/VectorStoreChunkingStrategyStatic'
discriminator:
propertyName: type
mapping:
auto: '#/components/schemas/VectorStoreChunkingStrategyAuto'
static: '#/components/schemas/VectorStoreChunkingStrategyStatic'
VectorStoreChunkingStrategyAuto:
type: object
properties:
type:
type: string
const: auto
default: auto
description: >-
Strategy type, always "auto" for automatic chunking
additionalProperties: false
required:
- type
title: VectorStoreChunkingStrategyAuto
description: >-
Automatic chunking strategy for vector store files.
VectorStoreChunkingStrategyStatic:
type: object
properties:
type:
type: string
const: static
default: static
description: >-
Strategy type, always "static" for static chunking
static:
$ref: '#/components/schemas/VectorStoreChunkingStrategyStaticConfig'
description: >-
Configuration parameters for the static chunking strategy
additionalProperties: false
required:
- type
- static
title: VectorStoreChunkingStrategyStatic
description: >-
Static chunking strategy with configurable parameters.
VectorStoreChunkingStrategyStaticConfig:
type: object
properties:
chunk_overlap_tokens:
type: integer
default: 400
description: >-
Number of tokens to overlap between adjacent chunks
max_chunk_size_tokens:
type: integer
default: 800
description: >-
Maximum number of tokens per chunk, must be between 100 and 4096
additionalProperties: false
required:
- chunk_overlap_tokens
- max_chunk_size_tokens
title: VectorStoreChunkingStrategyStaticConfig
description: >-
Configuration for static chunking strategy.
"OpenAICreateVectorStoreFileBatchRequestWithExtraBody": "OpenAICreateVectorStoreFileBatchRequestWithExtraBody":
type: object type: object
properties: properties:
@ -10606,7 +10598,9 @@ components:
description: >- description: >-
Object type identifier for the search results page Object type identifier for the search results page
search_query: search_query:
type: string type: array
items:
type: string
description: >- description: >-
The original search query that was executed The original search query that was executed
data: data:

View file

@ -9260,6 +9260,70 @@ components:
- metadata - metadata
title: VectorStoreObject title: VectorStoreObject
description: OpenAI Vector Store object. description: OpenAI Vector Store object.
VectorStoreChunkingStrategy:
oneOf:
- $ref: '#/components/schemas/VectorStoreChunkingStrategyAuto'
- $ref: '#/components/schemas/VectorStoreChunkingStrategyStatic'
discriminator:
propertyName: type
mapping:
auto: '#/components/schemas/VectorStoreChunkingStrategyAuto'
static: '#/components/schemas/VectorStoreChunkingStrategyStatic'
VectorStoreChunkingStrategyAuto:
type: object
properties:
type:
type: string
const: auto
default: auto
description: >-
Strategy type, always "auto" for automatic chunking
additionalProperties: false
required:
- type
title: VectorStoreChunkingStrategyAuto
description: >-
Automatic chunking strategy for vector store files.
VectorStoreChunkingStrategyStatic:
type: object
properties:
type:
type: string
const: static
default: static
description: >-
Strategy type, always "static" for static chunking
static:
$ref: '#/components/schemas/VectorStoreChunkingStrategyStaticConfig'
description: >-
Configuration parameters for the static chunking strategy
additionalProperties: false
required:
- type
- static
title: VectorStoreChunkingStrategyStatic
description: >-
Static chunking strategy with configurable parameters.
VectorStoreChunkingStrategyStaticConfig:
type: object
properties:
chunk_overlap_tokens:
type: integer
default: 400
description: >-
Number of tokens to overlap between adjacent chunks
max_chunk_size_tokens:
type: integer
default: 800
description: >-
Maximum number of tokens per chunk, must be between 100 and 4096
additionalProperties: false
required:
- chunk_overlap_tokens
- max_chunk_size_tokens
title: VectorStoreChunkingStrategyStaticConfig
description: >-
Configuration for static chunking strategy.
"OpenAICreateVectorStoreRequestWithExtraBody": "OpenAICreateVectorStoreRequestWithExtraBody":
type: object type: object
properties: properties:
@ -9285,15 +9349,7 @@ components:
description: >- description: >-
(Optional) Expiration policy for the vector store (Optional) Expiration policy for the vector store
chunking_strategy: chunking_strategy:
type: object $ref: '#/components/schemas/VectorStoreChunkingStrategy'
additionalProperties:
oneOf:
- type: 'null'
- type: boolean
- type: number
- type: string
- type: array
- type: object
description: >- description: >-
(Optional) Strategy for splitting files into chunks (Optional) Strategy for splitting files into chunks
metadata: metadata:
@ -9369,70 +9425,6 @@ components:
- deleted - deleted
title: VectorStoreDeleteResponse title: VectorStoreDeleteResponse
description: Response from deleting a vector store. description: Response from deleting a vector store.
VectorStoreChunkingStrategy:
oneOf:
- $ref: '#/components/schemas/VectorStoreChunkingStrategyAuto'
- $ref: '#/components/schemas/VectorStoreChunkingStrategyStatic'
discriminator:
propertyName: type
mapping:
auto: '#/components/schemas/VectorStoreChunkingStrategyAuto'
static: '#/components/schemas/VectorStoreChunkingStrategyStatic'
VectorStoreChunkingStrategyAuto:
type: object
properties:
type:
type: string
const: auto
default: auto
description: >-
Strategy type, always "auto" for automatic chunking
additionalProperties: false
required:
- type
title: VectorStoreChunkingStrategyAuto
description: >-
Automatic chunking strategy for vector store files.
VectorStoreChunkingStrategyStatic:
type: object
properties:
type:
type: string
const: static
default: static
description: >-
Strategy type, always "static" for static chunking
static:
$ref: '#/components/schemas/VectorStoreChunkingStrategyStaticConfig'
description: >-
Configuration parameters for the static chunking strategy
additionalProperties: false
required:
- type
- static
title: VectorStoreChunkingStrategyStatic
description: >-
Static chunking strategy with configurable parameters.
VectorStoreChunkingStrategyStaticConfig:
type: object
properties:
chunk_overlap_tokens:
type: integer
default: 400
description: >-
Number of tokens to overlap between adjacent chunks
max_chunk_size_tokens:
type: integer
default: 800
description: >-
Maximum number of tokens per chunk, must be between 100 and 4096
additionalProperties: false
required:
- chunk_overlap_tokens
- max_chunk_size_tokens
title: VectorStoreChunkingStrategyStaticConfig
description: >-
Configuration for static chunking strategy.
"OpenAICreateVectorStoreFileBatchRequestWithExtraBody": "OpenAICreateVectorStoreFileBatchRequestWithExtraBody":
type: object type: object
properties: properties:
@ -9890,7 +9882,9 @@ components:
description: >- description: >-
Object type identifier for the search results page Object type identifier for the search results page
search_query: search_query:
type: string type: array
items:
type: string
description: >- description: >-
The original search query that was executed The original search query that was executed
data: data:

View file

@ -9976,6 +9976,70 @@ components:
- metadata - metadata
title: VectorStoreObject title: VectorStoreObject
description: OpenAI Vector Store object. description: OpenAI Vector Store object.
VectorStoreChunkingStrategy:
oneOf:
- $ref: '#/components/schemas/VectorStoreChunkingStrategyAuto'
- $ref: '#/components/schemas/VectorStoreChunkingStrategyStatic'
discriminator:
propertyName: type
mapping:
auto: '#/components/schemas/VectorStoreChunkingStrategyAuto'
static: '#/components/schemas/VectorStoreChunkingStrategyStatic'
VectorStoreChunkingStrategyAuto:
type: object
properties:
type:
type: string
const: auto
default: auto
description: >-
Strategy type, always "auto" for automatic chunking
additionalProperties: false
required:
- type
title: VectorStoreChunkingStrategyAuto
description: >-
Automatic chunking strategy for vector store files.
VectorStoreChunkingStrategyStatic:
type: object
properties:
type:
type: string
const: static
default: static
description: >-
Strategy type, always "static" for static chunking
static:
$ref: '#/components/schemas/VectorStoreChunkingStrategyStaticConfig'
description: >-
Configuration parameters for the static chunking strategy
additionalProperties: false
required:
- type
- static
title: VectorStoreChunkingStrategyStatic
description: >-
Static chunking strategy with configurable parameters.
VectorStoreChunkingStrategyStaticConfig:
type: object
properties:
chunk_overlap_tokens:
type: integer
default: 400
description: >-
Number of tokens to overlap between adjacent chunks
max_chunk_size_tokens:
type: integer
default: 800
description: >-
Maximum number of tokens per chunk, must be between 100 and 4096
additionalProperties: false
required:
- chunk_overlap_tokens
- max_chunk_size_tokens
title: VectorStoreChunkingStrategyStaticConfig
description: >-
Configuration for static chunking strategy.
"OpenAICreateVectorStoreRequestWithExtraBody": "OpenAICreateVectorStoreRequestWithExtraBody":
type: object type: object
properties: properties:
@ -10001,15 +10065,7 @@ components:
description: >- description: >-
(Optional) Expiration policy for the vector store (Optional) Expiration policy for the vector store
chunking_strategy: chunking_strategy:
type: object $ref: '#/components/schemas/VectorStoreChunkingStrategy'
additionalProperties:
oneOf:
- type: 'null'
- type: boolean
- type: number
- type: string
- type: array
- type: object
description: >- description: >-
(Optional) Strategy for splitting files into chunks (Optional) Strategy for splitting files into chunks
metadata: metadata:
@ -10085,70 +10141,6 @@ components:
- deleted - deleted
title: VectorStoreDeleteResponse title: VectorStoreDeleteResponse
description: Response from deleting a vector store. description: Response from deleting a vector store.
VectorStoreChunkingStrategy:
oneOf:
- $ref: '#/components/schemas/VectorStoreChunkingStrategyAuto'
- $ref: '#/components/schemas/VectorStoreChunkingStrategyStatic'
discriminator:
propertyName: type
mapping:
auto: '#/components/schemas/VectorStoreChunkingStrategyAuto'
static: '#/components/schemas/VectorStoreChunkingStrategyStatic'
VectorStoreChunkingStrategyAuto:
type: object
properties:
type:
type: string
const: auto
default: auto
description: >-
Strategy type, always "auto" for automatic chunking
additionalProperties: false
required:
- type
title: VectorStoreChunkingStrategyAuto
description: >-
Automatic chunking strategy for vector store files.
VectorStoreChunkingStrategyStatic:
type: object
properties:
type:
type: string
const: static
default: static
description: >-
Strategy type, always "static" for static chunking
static:
$ref: '#/components/schemas/VectorStoreChunkingStrategyStaticConfig'
description: >-
Configuration parameters for the static chunking strategy
additionalProperties: false
required:
- type
- static
title: VectorStoreChunkingStrategyStatic
description: >-
Static chunking strategy with configurable parameters.
VectorStoreChunkingStrategyStaticConfig:
type: object
properties:
chunk_overlap_tokens:
type: integer
default: 400
description: >-
Number of tokens to overlap between adjacent chunks
max_chunk_size_tokens:
type: integer
default: 800
description: >-
Maximum number of tokens per chunk, must be between 100 and 4096
additionalProperties: false
required:
- chunk_overlap_tokens
- max_chunk_size_tokens
title: VectorStoreChunkingStrategyStaticConfig
description: >-
Configuration for static chunking strategy.
"OpenAICreateVectorStoreFileBatchRequestWithExtraBody": "OpenAICreateVectorStoreFileBatchRequestWithExtraBody":
type: object type: object
properties: properties:
@ -10606,7 +10598,9 @@ components:
description: >- description: >-
Object type identifier for the search results page Object type identifier for the search results page
search_query: search_query:
type: string type: array
items:
type: string
description: >- description: >-
The original search query that was executed The original search query that was executed
data: data:

View file

@ -260,7 +260,7 @@ class VectorStoreSearchResponsePage(BaseModel):
""" """
object: str = "vector_store.search_results.page" object: str = "vector_store.search_results.page"
search_query: str search_query: list[str]
data: list[VectorStoreSearchResponse] data: list[VectorStoreSearchResponse]
has_more: bool = False has_more: bool = False
next_page: str | None = None next_page: str | None = None
@ -478,7 +478,7 @@ class OpenAICreateVectorStoreRequestWithExtraBody(BaseModel, extra="allow"):
name: str | None = None name: str | None = None
file_ids: list[str] | None = None file_ids: list[str] | None = None
expires_after: dict[str, Any] | None = None expires_after: dict[str, Any] | None = None
chunking_strategy: dict[str, Any] | None = None chunking_strategy: VectorStoreChunkingStrategy | None = None
metadata: dict[str, Any] | None = None metadata: dict[str, Any] | None = None

View file

@ -637,7 +637,7 @@ class OpenAIVectorStoreMixin(ABC):
break break
return VectorStoreSearchResponsePage( return VectorStoreSearchResponsePage(
search_query=search_query, search_query=query if isinstance(query, list) else [query],
data=data, data=data,
has_more=False, # For simplicity, we don't implement pagination here has_more=False, # For simplicity, we don't implement pagination here
next_page=None, next_page=None,
@ -647,7 +647,7 @@ class OpenAIVectorStoreMixin(ABC):
logger.error(f"Error searching vector store {vector_store_id}: {e}") logger.error(f"Error searching vector store {vector_store_id}: {e}")
# Return empty results on error # Return empty results on error
return VectorStoreSearchResponsePage( return VectorStoreSearchResponsePage(
search_query=search_query, search_query=query if isinstance(query, list) else [query],
data=[], data=[],
has_more=False, has_more=False,
next_page=None, next_page=None,

View file

@ -350,7 +350,7 @@ def test_openai_vector_store_search_empty(
assert search_response is not None assert search_response is not None
assert hasattr(search_response, "data") assert hasattr(search_response, "data")
assert len(search_response.data) == 0 # Empty store should return no results assert len(search_response.data) == 0 # Empty store should return no results
assert search_response.search_query == "test query" assert search_response.search_query == ["test query"]
assert search_response.has_more is False assert search_response.has_more is False