6b7e6b44f1
Python Build and Type Check / python-ci (ubuntu-latest, 3.11) (push) Has been cancelled
Python Build and Type Check / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Build and Type Check / python-ci (windows-latest, 3.11) (push) Has been cancelled
Python Build and Type Check / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Integration Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Integration Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Notebook Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Notebook Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Smoke Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Smoke Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Unit Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Unit Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
gh-pages / build (push) Has been cancelled
Python Publish (pypi) / Upload release to PyPI (push) Has been cancelled
Spellcheck / spellcheck (push) Has been cancelled
62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
# Copyright (c) 2024 Microsoft Corporation.
|
|
# Licensed under the MIT License
|
|
|
|
"""Parameterization settings for the default configuration."""
|
|
|
|
import re
|
|
|
|
from pydantic import BaseModel, Field, model_validator
|
|
|
|
DEFAULT_VECTOR_SIZE: int = 3072
|
|
|
|
VALID_IDENTIFIER_REGEX = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
|
|
|
|
|
|
def is_valid_field_name(field: str) -> bool:
|
|
"""Check if a field name is valid for CosmosDB."""
|
|
return bool(VALID_IDENTIFIER_REGEX.match(field))
|
|
|
|
|
|
class IndexSchema(BaseModel):
|
|
"""The default configuration section for Vector Store Schema."""
|
|
|
|
index_name: str = Field(
|
|
description="The index name to use.", default="vector_index"
|
|
)
|
|
|
|
id_field: str = Field(
|
|
description="The ID field to use.",
|
|
default="id",
|
|
)
|
|
|
|
vector_field: str = Field(
|
|
description="The vector field to use.",
|
|
default="vector",
|
|
)
|
|
|
|
vector_size: int = Field(
|
|
description="The vector size to use.",
|
|
default=DEFAULT_VECTOR_SIZE,
|
|
)
|
|
|
|
fields: dict[str, str] = Field(
|
|
description="Map of field name to type string (str, int, float, bool, date).",
|
|
default_factory=dict,
|
|
)
|
|
|
|
def _validate_schema(self) -> None:
|
|
"""Validate the schema."""
|
|
for field in [
|
|
self.id_field,
|
|
self.vector_field,
|
|
]:
|
|
if not is_valid_field_name(field):
|
|
msg = f"Unsafe or invalid field name: {field}"
|
|
raise ValueError(msg)
|
|
|
|
@model_validator(mode="after")
|
|
def _validate_model(self):
|
|
"""Validate the model."""
|
|
self._validate_schema()
|
|
return self
|