Source code for pinecone.models.assistant.options
"""Context options for assistant chat and context operations."""
from __future__ import annotations
from typing import Any
from msgspec import Struct
from pinecone.models._display import HtmlBuilder, safe_display
from pinecone.models.assistant._mixin import StructDictMixin
[docs]
class ContextOptions(StructDictMixin, Struct, kw_only=True):
"""Options controlling how context is retrieved for assistant operations.
All fields are optional and default to ``None``, letting the server
apply its own defaults.
Attributes:
top_k: Maximum number of context snippets to retrieve.
snippet_size: Target size (in tokens) for each context snippet.
multimodal: Whether to include multimodal (image) content in
retrieved context.
include_binary_content: Whether to include binary file content
in retrieved context.
"""
top_k: int | None = None
snippet_size: int | None = None
multimodal: bool | None = None
include_binary_content: bool | None = None
@safe_display
def __repr__(self) -> str:
fields: list[str] = []
if self.top_k is not None:
fields.append(f"top_k={self.top_k!r}")
if self.snippet_size is not None:
fields.append(f"snippet_size={self.snippet_size!r}")
if self.multimodal is not None:
fields.append(f"multimodal={self.multimodal!r}")
if self.include_binary_content is not None:
fields.append(f"include_binary_content={self.include_binary_content!r}")
if not fields:
return "ContextOptions(<default>)"
return f"ContextOptions({', '.join(fields)})"
@safe_display
def _repr_pretty_(self, p: Any, cycle: bool) -> None:
if cycle:
p.text("ContextOptions(...)")
return
fields: list[str] = []
if self.top_k is not None:
fields.append(f"top_k={self.top_k!r}")
if self.snippet_size is not None:
fields.append(f"snippet_size={self.snippet_size!r}")
if self.multimodal is not None:
fields.append(f"multimodal={self.multimodal!r}")
if self.include_binary_content is not None:
fields.append(f"include_binary_content={self.include_binary_content!r}")
if not fields:
p.text("ContextOptions(<default>)")
return
with p.group(2, "ContextOptions(", ")"):
for i, field in enumerate(fields):
if i > 0:
p.text(",")
p.breakable()
p.text(field)
@safe_display
def _repr_html_(self) -> str:
builder = HtmlBuilder("ContextOptions")
all_none = (
self.top_k is None
and self.snippet_size is None
and self.multimodal is None
and self.include_binary_content is None
)
if all_none:
builder.row("(server defaults)", "")
else:
if self.top_k is not None:
builder.row("Top K:", self.top_k)
if self.snippet_size is not None:
builder.row("Snippet Size:", self.snippet_size)
if self.multimodal is not None:
builder.row("Multimodal:", self.multimodal)
if self.include_binary_content is not None:
builder.row("Include Binary Content:", self.include_binary_content)
return builder.build()
[docs]
@classmethod
def from_dict(cls, d: dict[str, Any]) -> ContextOptions:
"""Construct a ``ContextOptions`` from a plain dict representation."""
return cls(
top_k=d.get("top_k"),
snippet_size=d.get("snippet_size"),
multimodal=d.get("multimodal"),
include_binary_content=d.get("include_binary_content"),
)