62 lines
2.6 KiB
TypeScript
62 lines
2.6 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|
import { Settings } from "@oh-my-pi/pi-coding-agent/config/settings";
|
|
import { loadMnemopiConfig } from "@oh-my-pi/pi-coding-agent/mnemopi/config";
|
|
|
|
// `mnemopi.embeddingVariant` selects the concrete local embedding model, while an
|
|
// explicit `mnemopi.embeddingModel` is an advanced override that wins. Scoping is
|
|
// pinned to "global" so the resolver stays pure (no legacy-bank disk probing).
|
|
function embeddingModelFor(overrides: Record<string, unknown>): string | undefined {
|
|
const settings = Settings.isolated({ "mnemopi.scoping": "global", ...overrides });
|
|
return loadMnemopiConfig(settings, "/tmp/mnemopi-embedding-variant-test").providerOptions.embeddingModel;
|
|
}
|
|
|
|
describe("loadMnemopiConfig embedding variant resolution", () => {
|
|
it("maps the en variant to BAAI/bge-base-en-v1.5", () => {
|
|
expect(embeddingModelFor({ "mnemopi.embeddingVariant": "en" })).toBe("BAAI/bge-base-en-v1.5");
|
|
});
|
|
|
|
it("maps the multilingual variant to intfloat/multilingual-e5-large", () => {
|
|
expect(embeddingModelFor({ "mnemopi.embeddingVariant": "multilingual" })).toBe("intfloat/multilingual-e5-large");
|
|
});
|
|
|
|
it("lets an explicit embeddingModel override win over the variant", () => {
|
|
expect(
|
|
embeddingModelFor({
|
|
"mnemopi.embeddingVariant": "multilingual",
|
|
"mnemopi.embeddingModel": "openai/text-embedding-3-small",
|
|
}),
|
|
).toBe("openai/text-embedding-3-small");
|
|
});
|
|
|
|
it("ignores a blank override and falls back to the variant", () => {
|
|
expect(embeddingModelFor({ "mnemopi.embeddingVariant": "en", "mnemopi.embeddingModel": " " })).toBe(
|
|
"BAAI/bge-base-en-v1.5",
|
|
);
|
|
});
|
|
|
|
it("honors MNEMOPI_EMBEDDING_MODEL when no explicit model setting is present", () => {
|
|
const previous = Bun.env.MNEMOPI_EMBEDDING_MODEL;
|
|
Bun.env.MNEMOPI_EMBEDDING_MODEL = "BAAI/bge-large-en-v1.5";
|
|
try {
|
|
// The documented env override must not be shadowed by the variant default.
|
|
expect(embeddingModelFor({ "mnemopi.embeddingVariant": "en" })).toBe("BAAI/bge-large-en-v1.5");
|
|
} finally {
|
|
if (previous === undefined) delete Bun.env.MNEMOPI_EMBEDDING_MODEL;
|
|
else Bun.env.MNEMOPI_EMBEDDING_MODEL = previous;
|
|
}
|
|
});
|
|
|
|
it("lets an explicit embeddingModel setting win over the env var", () => {
|
|
const previous = Bun.env.MNEMOPI_EMBEDDING_MODEL;
|
|
Bun.env.MNEMOPI_EMBEDDING_MODEL = "BAAI/bge-large-en-v1.5";
|
|
try {
|
|
expect(embeddingModelFor({ "mnemopi.embeddingModel": "openai/text-embedding-3-small" })).toBe(
|
|
"openai/text-embedding-3-small",
|
|
);
|
|
} finally {
|
|
if (previous === undefined) delete Bun.env.MNEMOPI_EMBEDDING_MODEL;
|
|
else Bun.env.MNEMOPI_EMBEDDING_MODEL = previous;
|
|
}
|
|
});
|
|
});
|