Files
OmniRoute/tests/unit/mixedbread-embedding-provider-6660.test.ts
Diego Rodrigues de Sa e Souza 50c2d632eb feat: add Mixedbread AI as embeddings provider (#6660) (#7595)
* feat(providers): add Mixedbread AI as embeddings provider (#6660)

Registers Mixedbread AI (https://api.mixedbread.com) in the
EMBEDDING_PROVIDERS registry alongside the other bearer-auth embedding
providers (Voyage AI, Jina AI, Nomic, ...): OpenAI-compatible
/v1/embeddings endpoint, exposing mxbai-embed-large-v1 and
mxbai-embed-2d-large-v1 (both 1024d, Matryoshka). Adds a matching
provider metadata entry (icon/color/authHint/free-tier note) modeled
on the nomic block, regenerates docs/reference/PROVIDER_REFERENCE.md,
and syncs the 250->251 provider-count mentions in README/AGENTS/CLAUDE
required by the strict docs-counts gate.

No executor/translator changes needed — the embeddings handler is a
generic pass-through with no provider-specific branching.

* test(providers): align APIKEY_PROVIDERS count 167→168 for the new 6660 provider (#6660)

Adding the mixedbread embeddings provider to specialty-media.ts grows APIKEY_PROVIDERS
by one; providers-constants-split.test.ts hardcodes the family-partition
total. Legitimate count alignment (the code genuinely added a provider),
not a weakened assertion — all 4 partition/dedup checks still enforced.
2026-07-17 10:43:25 -03:00

55 lines
2.0 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import {
getAllEmbeddingModels,
getEmbeddingProvider,
parseEmbeddingModel,
getEmbeddingDimension,
} from "../../open-sse/config/embeddingRegistry.ts";
// Issue #6660: Mixedbread AI embeddings provider.
test("mixedbread embedding registry exposes mxbai-embed models", () => {
const provider = getEmbeddingProvider("mixedbread");
assert.ok(provider);
assert.equal(provider.baseUrl, "https://api.mixedbread.com/v1/embeddings");
assert.equal(provider.authType, "apikey");
assert.equal(provider.authHeader, "bearer");
assert.ok(provider.models.some((model) => model.id === "mixedbread-ai/mxbai-embed-large-v1"));
assert.ok(provider.models.some((model) => model.id === "mixedbread-ai/mxbai-embed-2d-large-v1"));
});
test("mixedbread model strings resolve via parseEmbeddingModel", () => {
const parsed = parseEmbeddingModel("mixedbread/mixedbread-ai/mxbai-embed-large-v1");
assert.equal(parsed.provider, "mixedbread");
assert.equal(parsed.model, "mixedbread-ai/mxbai-embed-large-v1");
const parsed2d = parseEmbeddingModel("mixedbread/mixedbread-ai/mxbai-embed-2d-large-v1");
assert.equal(parsed2d.provider, "mixedbread");
assert.equal(parsed2d.model, "mixedbread-ai/mxbai-embed-2d-large-v1");
});
test("mixedbread models report the correct known dimensionality (1024d)", () => {
assert.equal(
getEmbeddingDimension("mixedbread/mixedbread-ai/mxbai-embed-large-v1"),
1024
);
assert.equal(
getEmbeddingDimension("mixedbread/mixedbread-ai/mxbai-embed-2d-large-v1"),
1024
);
});
test("getAllEmbeddingModels includes both mixedbread models with provider-scoped ids", () => {
const all = getAllEmbeddingModels().filter((model) => model.provider === "mixedbread");
assert.deepEqual(
all.map((model) => model.id).sort(),
[
"mixedbread/mixedbread-ai/mxbai-embed-2d-large-v1",
"mixedbread/mixedbread-ai/mxbai-embed-large-v1",
]
);
assert.ok(all.every((model) => model.dimensions === 1024));
});