from __future__ import annotations
from enum import Enum
from typing import Any, Dict, Iterator, List, Optional
from camel_converter.pydantic_base import CamelBase
from pydantic import ConfigDict, field_validator
[docs]
class FieldDistribution:
__dict: Dict
def __init__(self, dist: Dict[str, int]) -> None:
self.__dict = dist
for key in dist:
setattr(self, key, dist[key])
def __getattr__(self, attr: str) -> str:
if attr in self.__dict.keys():
return attr
raise AttributeError(f"{self.__class__.__name__} object has no attribute {attr}")
def __iter__(self) -> Iterator:
return iter(self.__dict__.items())
[docs]
class IndexStats(CamelBase):
model_config = ConfigDict(arbitrary_types_allowed=True)
number_of_documents: int
is_indexing: bool
field_distribution: FieldDistribution
[docs]
@field_validator("field_distribution", mode="before")
@classmethod
def build_field_distribution(cls, v: Any) -> FieldDistribution:
if not isinstance(v, dict):
raise TypeError('"field_distribution" in IndexStats must be a dict')
return FieldDistribution(v)
[docs]
class Faceting(CamelBase):
max_values_per_facet: int
sort_facet_values_by: Optional[Dict[str, str]] = None
[docs]
class MinWordSizeForTypos(CamelBase):
one_typo: Optional[int] = None
two_typos: Optional[int] = None
[docs]
class TypoTolerance(CamelBase):
enabled: bool = True
disable_on_numbers: bool = False
disable_on_attributes: Optional[List[str]] = None
disable_on_words: Optional[List[str]] = None
min_word_size_for_typos: Optional[MinWordSizeForTypos] = None
[docs]
class PrefixSearch(str, Enum):
INDEXING_TIME = "indexingTime"
"""
Calculate prefix search during indexing. This is the default behavior.
"""
DISABLED = "disabled"
"""
Do not calculate prefix search. May speed up indexing, but will severely impact search result relevancy.
"""
[docs]
class ProximityPrecision(str, Enum):
BY_WORD = "byWord"
BY_ATTRIBUTE = "byAttribute"
[docs]
class EmbedderDistribution(CamelBase):
mean: float
sigma: float
[docs]
class LocalizedAttributes(CamelBase):
attribute_patterns: List[str]
locales: List[str]