Source code for pinecone.models.vectors.vector
"""Vector and ScoredVector response models."""
from __future__ import annotations
from typing import Any
from msgspec import Struct
from pinecone.models._mixin import DictLikeStruct
from pinecone.models.vectors.sparse import SparseValues
[docs]
class Vector(DictLikeStruct, Struct, rename="camel", gc=False):
"""A stored vector with optional sparse values and metadata.
Attributes:
id (str): Unique identifier for the vector.
values (list[float]): Dense vector values as a list of floats.
sparse_values (SparseValues | None): Sparse vector component, or ``None`` if the vector
has no sparse values.
metadata (dict[str, Any] | None): User-defined metadata key-value pairs, or ``None`` if
no metadata is attached.
"""
id: str
values: list[float] = []
sparse_values: SparseValues | None = None
metadata: dict[str, Any] | None = None
def __post_init__(self) -> None:
"""Require at least one of ``values`` or ``sparse_values`` to be populated."""
if not self.values and self.sparse_values is None:
raise ValueError("Vector must have either values or sparse_values")
[docs]
@staticmethod
def from_dict(vector_dict: dict[str, Any]) -> Vector:
"""Construct a ``Vector`` from a plain dict representation."""
sparse: SparseValues | None = None
if vector_dict.get("sparse_values") is not None:
sparse = SparseValues.from_dict(vector_dict["sparse_values"])
return Vector(
id=vector_dict["id"],
values=vector_dict.get("values", []),
sparse_values=sparse,
metadata=vector_dict.get("metadata"),
)
def __repr__(self) -> str:
if len(self.values) > 5:
preview = ", ".join(repr(v) for v in self.values[:3])
values_str = f"[{preview}, ...{len(self.values) - 3} more]"
else:
values_str = repr(self.values)
parts = [
f"id={self.id!r}",
f"values={values_str}",
f"sparse_values={self.sparse_values!r}",
]
if self.metadata is not None:
parts.append(f"metadata={self.metadata!r}")
return f"Vector({', '.join(parts)})"
class ScoredVector(DictLikeStruct, Struct, rename="camel", kw_only=True, gc=False):
"""A vector match with similarity score from a query operation.
Attributes:
id (str): Unique identifier of the matched vector.
score (float): Similarity score for this match.
values (list[float]): Dense vector values, or an empty list if values were not
requested.
sparse_values (SparseValues | None): Sparse vector component, or ``None`` if the vector
has no sparse values.
metadata (dict[str, Any] | None): User-defined metadata key-value pairs, or ``None`` if
metadata was not requested or not attached.
"""
id: str
score: float
values: list[float] = []
sparse_values: SparseValues | None = None
metadata: dict[str, Any] | None = None
def __repr__(self) -> str:
if len(self.values) > 5:
preview = ", ".join(repr(v) for v in self.values[:3])
values_str = f"[{preview}, ...{len(self.values) - 3} more]"
else:
values_str = repr(self.values)
parts = [
f"id={self.id!r}",
f"score={self.score!r}",
f"values={values_str}",
]
if self.sparse_values is not None:
parts.append(f"sparse_values={self.sparse_values!r}")
if self.metadata is not None:
parts.append(f"metadata={self.metadata!r}")
return f"ScoredVector({', '.join(parts)})"