Public surface: EmbeddingGenerator protocols + embedding_generator keyword on query_items
Parent: 46729
Goal
Add the customer-facing API for embedding generation, with no behavioral change yet.
Scope
- New protocols (export from package root, e.g.
azure.cosmos):
from typing import Protocol, Sequence
@runtime_checkable
class EmbeddingGenerator(Protocol):
def generate_embeddings(self, texts: Sequence[str]) -> Sequence[Sequence[float]]: ...
@runtime_checkable
class AsyncEmbeddingGenerator(Protocol):
async def generate_embeddings_async(self, texts: Sequence[str]) -> Sequence[Sequence[float]]: ...
- New keyword-only argument on
query_items:
azure/cosmos/container.py :: Container.query_items – embedding_generator: Optional["EmbeddingGenerator"] = None
azure/cosmos/aio/_container.py :: ContainerProxy.query_items – embedding_generator: Optional["AsyncEmbeddingGenerator"] = None
- Stuff into
feed_options:
if embedding_generator is not None:
feed_options["embeddingGenerator"] = embedding_generator
Mirror the existing pattern at container.py:1055-1058 (full_text_score_scope).
- Type hints + docstrings (Sphinx). Add to
_overloads typing files if present.
Non-goals
- Do NOT yet read the option in any execution path (will be added in 46733).
- Do NOT yet add the
_QueryFeature token (covered by 46731).
- Do NOT add a built-in implementation. The EGS package owns that.
Files touched
sdk/cosmos/azure-cosmos/azure/cosmos/__init__.py (export new protocols)
sdk/cosmos/azure-cosmos/azure/cosmos/container.py
sdk/cosmos/azure-cosmos/azure/cosmos/aio/_container.py
- New:
sdk/cosmos/azure-cosmos/azure/cosmos/_embedding_generator.py (or in documents.py)
sdk/cosmos/azure-cosmos/CHANGELOG.md
Acceptance
from azure.cosmos import EmbeddingGenerator, AsyncEmbeddingGenerator works.
query_items(..., embedding_generator=mock) is accepted and stored without error.
- Mypy / pyright pass on the new protocols.
- Existing
query_items callers unchanged.
Public surface:
EmbeddingGeneratorprotocols +embedding_generatorkeyword onquery_itemsParent: 46729
Goal
Add the customer-facing API for embedding generation, with no behavioral change yet.
Scope
azure.cosmos):query_items:azure/cosmos/container.py :: Container.query_items–embedding_generator: Optional["EmbeddingGenerator"] = Noneazure/cosmos/aio/_container.py :: ContainerProxy.query_items–embedding_generator: Optional["AsyncEmbeddingGenerator"] = Nonefeed_options:container.py:1055-1058(full_text_score_scope)._overloadstyping files if present.Non-goals
_QueryFeaturetoken (covered by 46731).Files touched
sdk/cosmos/azure-cosmos/azure/cosmos/__init__.py(export new protocols)sdk/cosmos/azure-cosmos/azure/cosmos/container.pysdk/cosmos/azure-cosmos/azure/cosmos/aio/_container.pysdk/cosmos/azure-cosmos/azure/cosmos/_embedding_generator.py(or indocuments.py)sdk/cosmos/azure-cosmos/CHANGELOG.mdAcceptance
from azure.cosmos import EmbeddingGenerator, AsyncEmbeddingGeneratorworks.query_items(..., embedding_generator=mock)is accepted and stored without error.query_itemscallers unchanged.