- Created: 2026-02-27
- Author(s): @edddoubled
- Status: Draft
- Component: Proxy | QueryNode | DataNode | Function
- Related Issues: TBD
- Released: [TBD]
This proposal introduces a new text embedding provider yc for Milvus TextEmbedding function.
The provider integrates with Yandex Cloud AI Studio text embedding API and enables users to generate embeddings during insert/search pipelines in the same way as existing providers (openai, cohere, tei, etc.).
The feature includes:
- New provider implementation in
internal/util/function/embedding. - Provider selection integration in
TextEmbeddingFunction. - Provider config and credentials support in
paramtable/milvus.yaml. - Unit and integration tests with existing function test patterns.
Milvus currently supports multiple external embedding providers but does not provide a built-in Yandex Cloud provider. Users on Yandex Cloud currently need custom middleware or external embedding jobs, which creates:
- additional latency and operational complexity,
- duplicated auth/retry/error handling logic,
- weaker parity with first-class Milvus function providers.
Adding yc keeps user experience consistent across cloud providers and reduces integration friction.
No new function type is introduced. Existing FunctionType_TextEmbedding is reused with:
provider=ycmodel_name=<yandex modelUri>dim=<optional, must match output field dim>credential=<optional, preferred>
New config group keys under:
function.textEmbedding.providers.yc.enablefunction.textEmbedding.providers.yc.credentialfunction.textEmbedding.providers.yc.url
New environment variable:
MILVUS_YC_API_KEY
The provider follows existing textEmbeddingProvider interface:
MaxBatch() intFieldDim() int64CallEmbedding(ctx, texts, mode) (any, error)
The yc provider is selected in NewTextEmbeddingFunction(...) switch by provider=yc.
Milvus provider parameters map to Yandex API fields:
model_name->modelUri- input text(s) -> request text payload
- API key ->
Authorizationheader
Provider output type:
[][]float32only
Validation rules:
- Returned embedding count must equal input text count.
- Returned embedding dimension must equal output field dimension.
- If
dimparam is provided, it must match output field dimension (existing Milvus rule).
Batch behavior follows existing providers:
- internal chunking by
maxBatch - external cap by
extraInfo.BatchFactor
Default values:
maxBatch = 128timeoutSec = 30
These defaults align with existing provider implementations and can be tuned later by follow-up changes if needed.
Credential parsing uses existing utility models.ParseAKAndURL(...) with standard precedence:
- Function param (
credential) milvus.yamlprovider config- Environment variable (
MILVUS_YC_API_KEY)
This keeps behavior consistent with other providers and avoids introducing a provider-specific credential flow.
Provider reuses existing HTTP utility models.PostRequest(...) for:
- HTTP error propagation (status/body),
- timeout handling,
- retry with exponential backoff and jitter.
Provider-level errors are normalized to existing embedding provider style:
- missing credential,
- embedding count mismatch,
- embedding dim mismatch.
Yandex documentation may evolve request/response schema over time. To reduce tight coupling risk, the provider supports response adaptation for both:
- single-embedding response shape,
- batched embeddings response shape.
If API contract changes in future, the adaptation layer can be extended without changing function runtime interfaces.
- Fully backward compatible for existing users.
- No behavior change for existing providers.
- No schema migration required.
- No deprecations in this MEP.
- Existing function definitions continue to work unchanged.
- API keys must be configured via credential config/env; avoid hard-coding in function params.
- Credentials should be redacted in logs (existing Milvus credential handling path).
- Requests must use HTTPS endpoints.
- Future IAM-token support should follow same secure storage guidance.
Initial version relies on existing error surfaces from function execution path. Follow-up (optional) improvements:
- provider-specific request latency metrics,
- response code counters by provider.
- Happy path with 1 text.
- Batch path with multiple texts, order preserved.
- Embedding count mismatch should return error.
- Embedding dim mismatch should return error.
- Missing credential should return error.
- Custom URL and default URL behavior.
provider=ycfunction creation and insert path.- Provider disabled path (
yc.enable=false). - Unsupported provider behavior remains unchanged.
Run existing embedding package test suites with required Milvus flags:
go test -tags dynamic,test -gcflags="all=-N -l" -count=1 ./internal/util/function/embedding/...
go test -tags dynamic,test -gcflags="all=-N -l" -count=1 ./pkg/util/paramtable/...Rejected because it duplicates runtime logic and creates inconsistent UX.
Rejected because provider extension is sufficient and aligns with existing architecture.
Rejected because existing models.PostRequest already provides retries, timeout, and standardized behavior.
- Should first release support IAM token in addition to API key, or API key-only with IAM in follow-up?
- What is the final supported request schema for batch mode in Yandex endpoint used by Milvus deployment target?
- Are there provider-specific token/input limits that should be surfaced in user-facing docs?
This section is a draft outline for the user-facing documentation page (similar in structure to existing provider pages such as OpenAI).
- Page title:
Yandex Cloud - Feature scope:
TextEmbeddingprovideryc - Audience: users configuring function-based embedding in Milvus
- Milvus instance with function feature enabled.
- Yandex Cloud account and AI Studio embeddings access.
- Valid credential (API key in phase 1).
- A valid
modelUricompatible with Yandex text embedding API.
function:
textEmbedding:
providers:
yc:
credential: yandex_cred
enable: true
url: https://llm.api.cloud.yandex.net/foundationModels/v1/textEmbeddingcredential:
yandex_cred:
apikey: <YOUR_YC_API_KEY>provider(required): must beycmodel_name(required): mapped to YandexmodelUridim(optional): must match output field dimension if specifiedcredential(recommended): credential name from Milvus credential config
- Create collection with source text field and float vector output field.
- Add
TextEmbeddingfunction withprovider=yc. - Insert plain text data and verify vector output generated automatically.
- Run text query path and verify embedding + search pipeline.
- 401/403: invalid or missing API key, insufficient Yandex IAM permission.
- 429: request rate exceeded; reduce batch size and retry with backoff.
- Dim mismatch: output field dim is not equal to model output dim.
- Provider disabled:
function.textEmbedding.providers.yc.enableis false.
- Initial release supports float embeddings only.
- Batch mode request/response shape must be confirmed against final API contract.
- IAM token auth is planned as a follow-up if not included in phase 1.
- Milvus embedding provider architecture:
internal/util/function/embedding - Milvus provider config path:
pkg/util/paramtable/function_param.go - Yandex text embedding API docs: https://yandex.cloud/ru/docs/ai-studio/embeddings/api-ref/Embeddings/textEmbedding