Skip to content

refactor(providers): share embedding transport#2157

Merged
gold-silver-copper merged 3 commits into
mainfrom
agent/generic-provider-embeddings
Jul 16, 2026
Merged

refactor(providers): share embedding transport#2157
gold-silver-copper merged 3 commits into
mainfrom
agent/generic-provider-embeddings

Conversation

@gold-silver-copper

@gold-silver-copper gold-silver-copper commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add an explicit OpenAIEmbeddingsCompatible capability with typed provider policy for endpoint selection, supported fields, usage requirements, and dimension spelling
  • move Together, OpenRouter, and Mistral embeddings onto the shared generic transport while preserving OpenAI and Llamafile behavior
  • preserve raw provider errors, validate response lengths, and handle provider-specific usage requirements
  • serialize one typed compatible request instead of mutating serde_json::Value, while keeping each provider's policy beside its embedding model
  • reject Base64 before HTTP for every provider using the shared numeric-vector response parser

Fixes #2078

Provider/API notes

  • Together uses /v1/embeddings, omits unset dimensions, and rejects inherited encoding_format/user fields.
  • OpenRouter uses /api/v1/embeddings and accepts optional usage, dimensions, encoding format, and user fields.
  • Mistral uses /v1/embeddings; output_dimension is emitted only for codestral-embed/codestral-embed-2505 and is capped at the documented maximum of 3072. Fixed-size models reject configured dimensions, and user is rejected before HTTP.
  • Base64 response encoding is rejected consistently before HTTP by the shared transport because its response parser accepts numeric vectors; this covers OpenAI, OpenRouter, Together, Mistral, and Llamafile.
  • OpenAI's public EmbeddingResponse still requires usage, while the private compatible response shape permits providers that omit it.

Verification

  • cargo fmt --all -- --check
  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo test -p rig-core --lib embedding (54 passed, 2 ignored)
  • cargo check -p rig-core --target wasm32-unknown-unknown --features wasm
  • cargo test
  • cargo doc --workspace --no-deps (passes with one pre-existing rig-neo4j private intra-doc-link warning)
  • cargo test -p rig --all-features --test openai openai::cassette -- --nocapture --test-threads=1 (86 passed; replayed, no cassette changes)

Three independent full-diff reviews were performed. Earlier reviews identified incorrect Mistral dimension shaping and Base64 exposure; both were fixed with regression tests. The final typed-request review found no P0/P1/P2 issues.

AI assistance

This implementation was developed with AI assistance. Every changed line and the complete merge-base diff were reviewed, provider fields were checked against official schemas/documentation, and the verification above was run locally.

@gold-silver-copper gold-silver-copper marked this pull request as ready for review July 15, 2026 23:54
@gold-silver-copper gold-silver-copper added this pull request to the merge queue Jul 16, 2026
Merged via the queue into main with commit f39099e Jul 16, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(providers): adopt GenericEmbeddingModel for together/openrouter/mistral (then azure) embeddings

1 participant