mirror of
https://github.com/open-webui/open-webui.git
synced 2026-09-06 08:18:53 +00:00
fix: apply the shared metadata size cap to the last four vector DB backends (#29502)
Chunk metadata inserted into the vector DB carries arbitrary client- supplied fields (e.g. custom metadata from file uploads), so it needs the same size cap, type coercion and null-byte sanitization every other backend already applies through process_metadata(). Four backends never called it: Qdrant, Qdrant multitenancy, Milvus multitenancy and Oracle23ai, so an oversized or malformed metadata blob went into those unfiltered. Wire process_metadata() in at each backend's single insert/upsert chokepoint, matching the pattern already used by the other eleven backends.
This commit is contained in:
parent
82f11b14c9
commit
ea1b58eb6a
4 changed files with 8 additions and 7 deletions
|
|
@ -24,6 +24,7 @@ from open_webui.retrieval.vector.main import (
|
|||
VectorDBBase,
|
||||
VectorItem,
|
||||
)
|
||||
from open_webui.retrieval.vector.utils import process_metadata
|
||||
from pymilvus import DataType
|
||||
from pymilvus import MilvusClient as Client
|
||||
from pymilvus.exceptions import MilvusException
|
||||
|
|
@ -191,7 +192,7 @@ class MilvusClient(VectorDBBase):
|
|||
'id': item['id'],
|
||||
'vector': item['vector'],
|
||||
'text': text,
|
||||
'metadata': item['metadata'],
|
||||
'metadata': process_metadata(item['metadata']),
|
||||
RESOURCE_ID_FIELD: resource_id,
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ from open_webui.retrieval.vector.main import (
|
|||
VectorDBBase,
|
||||
VectorItem,
|
||||
)
|
||||
from open_webui.retrieval.vector.utils import iter_filter_conditions
|
||||
from open_webui.retrieval.vector.utils import iter_filter_conditions, process_metadata
|
||||
from open_webui.utils.json_codec import JSONCodec
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
|
@ -400,7 +400,7 @@ class Oracle23aiClient(VectorDBBase):
|
|||
Returns:
|
||||
str: JSON representation of metadata
|
||||
"""
|
||||
return json.dumps(metadata, default=self._decimal_handler) if metadata else '{}'
|
||||
return json.dumps(process_metadata(metadata), default=self._decimal_handler) if metadata else '{}'
|
||||
|
||||
def _json_to_metadata(self, json_str: str) -> Dict:
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ from open_webui.retrieval.vector.main import (
|
|||
VectorDBBase,
|
||||
VectorItem,
|
||||
)
|
||||
from open_webui.retrieval.vector.utils import iter_filter_conditions
|
||||
from open_webui.retrieval.vector.utils import iter_filter_conditions, process_metadata
|
||||
from qdrant_client import QdrantClient as Qclient
|
||||
from qdrant_client.http.models import PointStruct
|
||||
from qdrant_client.models import models
|
||||
|
|
@ -136,7 +136,7 @@ class QdrantClient(VectorDBBase):
|
|||
PointStruct(
|
||||
id=item['id'],
|
||||
vector=item['vector'],
|
||||
payload={'text': item['text'], 'metadata': item['metadata']},
|
||||
payload={'text': item['text'], 'metadata': process_metadata(item['metadata'])},
|
||||
)
|
||||
for item in items
|
||||
]
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ from open_webui.retrieval.vector.main import (
|
|||
VectorDBBase,
|
||||
VectorItem,
|
||||
)
|
||||
from open_webui.retrieval.vector.utils import iter_filter_conditions
|
||||
from open_webui.retrieval.vector.utils import iter_filter_conditions, process_metadata
|
||||
from qdrant_client import QdrantClient as Qclient
|
||||
from qdrant_client.http.exceptions import UnexpectedResponse
|
||||
from qdrant_client.http.models import PointStruct
|
||||
|
|
@ -182,7 +182,7 @@ class QdrantClient(VectorDBBase):
|
|||
vector=item['vector'],
|
||||
payload={
|
||||
'text': item['text'],
|
||||
'metadata': item['metadata'],
|
||||
'metadata': process_metadata(item['metadata']),
|
||||
TENANT_ID_FIELD: tenant_id,
|
||||
},
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue