import builtins
import typing

class FieldIndex: ...

class FieldSpec:
    def required(self) -> FieldSpec: ...
    def optional(self) -> FieldSpec: ...
    def index(self, index: FieldIndex) -> FieldSpec: ...

# data types
def text() -> FieldSpec: ...
def int() -> FieldSpec: ...
def float() -> FieldSpec: ...
def bool() -> FieldSpec: ...
def f32_vector(dimension: builtins.int) -> FieldSpec: ...
def u8_vector(dimension: builtins.int) -> FieldSpec: ...
def binary_vector(dimension: builtins.int) -> FieldSpec: ...
def f32_sparse_vector() -> FieldSpec: ...
def u8_sparse_vector() -> FieldSpec: ...
def bytes() -> FieldSpec: ...

# indexes
def vector_index(
    metric: typing.Literal["cosine", "euclidean", "dot_product", "hamming"],
) -> FieldIndex: ...
def keyword_index() -> FieldIndex: ...
def semantic_index(model: str) -> FieldIndex: ...
