Files
openclaw/src/plugins/embedding-providers.test.ts
Bob 4d89e00c50 feat(embeddings): add OpenAI-compatible core provider (#85269)
Merged via squash.

Prepared head SHA: dc9a5d5397
Co-authored-by: dutifulbob <261991368+dutifulbob@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-05-27 14:37:17 +02:00

90 lines
2.6 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it } from "vitest";
import {
clearEmbeddingProviders,
getEmbeddingProvider,
getRegisteredEmbeddingProvider,
listEmbeddingProviders,
listRegisteredEmbeddingProviders,
registerEmbeddingProvider,
restoreEmbeddingProviders,
restoreRegisteredEmbeddingProviders,
type EmbeddingProviderAdapter,
} from "./embedding-providers.js";
const EMBEDDING_PROVIDERS_KEY = Symbol.for("openclaw.embeddingProviders");
const INITIAL_REGISTERED_EMBEDDING_PROVIDERS = listRegisteredEmbeddingProviders();
function createAdapter(id: string): EmbeddingProviderAdapter {
return {
id,
create: async () => ({ provider: null }),
};
}
beforeEach(() => {
clearEmbeddingProviders();
});
afterEach(() => {
restoreRegisteredEmbeddingProviders(INITIAL_REGISTERED_EMBEDDING_PROVIDERS);
});
describe("embedding provider registry", () => {
it("registers and lists adapters in insertion order", () => {
const alpha = createAdapter("alpha");
const beta = createAdapter("beta");
registerEmbeddingProvider(alpha);
registerEmbeddingProvider(beta);
expect(listEmbeddingProviders().map((adapter) => adapter.id)).toEqual([
"openai-compatible",
"alpha",
"beta",
]);
expect(getEmbeddingProvider("alpha")).toBe(alpha);
});
it("restores adapter snapshots", () => {
const alpha = createAdapter("alpha");
const beta = createAdapter("beta");
registerEmbeddingProvider(alpha);
restoreEmbeddingProviders([beta]);
expect(getEmbeddingProvider("alpha")).toBeUndefined();
expect(getEmbeddingProvider("beta")).toBe(beta);
expect(listEmbeddingProviders().map((adapter) => adapter.id)).toEqual([
"openai-compatible",
"beta",
]);
});
it("preserves owner metadata in registered snapshots", () => {
const adapter = createAdapter("openai-compatible");
const entry = {
adapter,
ownerPluginId: "openai-compatible",
};
restoreRegisteredEmbeddingProviders([entry]);
expect(getRegisteredEmbeddingProvider("openai-compatible")).toEqual(entry);
expect(listRegisteredEmbeddingProviders()).toEqual([entry]);
});
it("stores adapters in a process-global singleton map", () => {
const adapter = createAdapter("local-protocol");
registerEmbeddingProvider(adapter, { ownerPluginId: "local-protocol" });
const globalRegistry = (globalThis as Record<PropertyKey, unknown>)[
EMBEDDING_PROVIDERS_KEY
] as Map<string, { adapter: EmbeddingProviderAdapter; ownerPluginId?: string }>;
expect(globalRegistry.get("local-protocol")).toEqual({
adapter,
ownerPluginId: "local-protocol",
});
});
});