mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-01 21:02:12 +03:00
* 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.
55 lines
2.0 KiB
TypeScript
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));
|
|
});
|