From 04681e97704e36f8e845ee856307e9ff361da0f0 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 7 Apr 2026 08:05:05 +0100 Subject: [PATCH] perf(unit): trim media and ollama facade tests --- .../host/embeddings-ollama.test.ts | 167 ++++-------------- 1 file changed, 32 insertions(+), 135 deletions(-) diff --git a/src/memory-host-sdk/host/embeddings-ollama.test.ts b/src/memory-host-sdk/host/embeddings-ollama.test.ts index 6e425a7d1fd..3b601fba4f0 100644 --- a/src/memory-host-sdk/host/embeddings-ollama.test.ts +++ b/src/memory-host-sdk/host/embeddings-ollama.test.ts @@ -1,146 +1,43 @@ -import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; +import { beforeEach, describe, expect, it, vi } from "vitest"; -let createOllamaEmbeddingProvider: typeof import("./embeddings-ollama.js").createOllamaEmbeddingProvider; +const { createOllamaEmbeddingProviderMock } = vi.hoisted(() => ({ + createOllamaEmbeddingProviderMock: vi.fn(async (options: unknown) => ({ + provider: { source: "mock-provider", options }, + client: { source: "mock-client" }, + })), +})); -beforeAll(async () => { - ({ createOllamaEmbeddingProvider } = await import("./embeddings-ollama.js")); -}); +vi.mock("../../plugin-sdk/ollama-runtime.js", () => ({ + DEFAULT_OLLAMA_EMBEDDING_MODEL: "nomic-embed-text", + createOllamaEmbeddingProvider: createOllamaEmbeddingProviderMock, +})); -beforeEach(() => { - vi.useRealTimers(); - vi.doUnmock("undici"); -}); +describe("embeddings-ollama facade", () => { + beforeEach(() => { + createOllamaEmbeddingProviderMock.mockClear(); + }); -afterEach(() => { - vi.doUnmock("undici"); - vi.unstubAllGlobals(); - vi.unstubAllEnvs(); - vi.resetAllMocks(); -}); + it("re-exports the default Ollama embedding model", async () => { + const mod = await import("./embeddings-ollama.js"); + expect(mod.DEFAULT_OLLAMA_EMBEDDING_MODEL).toBe("nomic-embed-text"); + }); -describe("embeddings-ollama", () => { - it("calls /api/embeddings and returns normalized vectors", async () => { - const fetchMock = vi.fn( - async () => - new Response(JSON.stringify({ embedding: [3, 4] }), { - status: 200, - headers: { "content-type": "application/json" }, - }), - ); - globalThis.fetch = fetchMock as unknown as typeof fetch; - - const { provider } = await createOllamaEmbeddingProvider({ - config: {} as OpenClawConfig, + it("delegates provider creation to the plugin-sdk runtime facade", async () => { + const mod = await import("./embeddings-ollama.js"); + const options = { provider: "ollama", model: "nomic-embed-text", fallback: "none", - remote: { baseUrl: "http://127.0.0.1:11434" }, + config: {}, + }; + + const result = await mod.createOllamaEmbeddingProvider(options as never); + + expect(createOllamaEmbeddingProviderMock).toHaveBeenCalledTimes(1); + expect(createOllamaEmbeddingProviderMock).toHaveBeenCalledWith(options); + expect(result).toEqual({ + provider: { source: "mock-provider", options }, + client: { source: "mock-client" }, }); - - const v = await provider.embedQuery("hi"); - expect(fetchMock).toHaveBeenCalledTimes(1); - // normalized [3,4] => [0.6,0.8] - expect(v[0]).toBeCloseTo(0.6, 5); - expect(v[1]).toBeCloseTo(0.8, 5); - }); - - it("resolves baseUrl/apiKey/headers from models.providers.ollama and strips /v1", async () => { - const fetchMock = vi.fn( - async () => - new Response(JSON.stringify({ embedding: [1, 0] }), { - status: 200, - headers: { "content-type": "application/json" }, - }), - ); - globalThis.fetch = fetchMock as unknown as typeof fetch; - - const { provider } = await createOllamaEmbeddingProvider({ - config: { - models: { - providers: { - ollama: { - baseUrl: "http://127.0.0.1:11434/v1", - apiKey: "ollama-\nlocal\r\n", // pragma: allowlist secret - headers: { - "X-Provider-Header": "provider", - }, - }, - }, - }, - } as unknown as OpenClawConfig, - provider: "ollama", - model: "", - fallback: "none", - }); - - await provider.embedQuery("hello"); - - expect(fetchMock).toHaveBeenCalledWith( - "http://127.0.0.1:11434/api/embeddings", - expect.objectContaining({ - method: "POST", - headers: expect.objectContaining({ - "Content-Type": "application/json", - Authorization: "Bearer ollama-local", - "X-Provider-Header": "provider", - }), - }), - ); - }); - - it("fails fast when memory-search remote apiKey is an unresolved SecretRef", async () => { - await expect( - createOllamaEmbeddingProvider({ - config: {} as OpenClawConfig, - provider: "ollama", - model: "nomic-embed-text", - fallback: "none", - remote: { - baseUrl: "http://127.0.0.1:11434", - apiKey: { source: "env", provider: "default", id: "OLLAMA_API_KEY" }, - }, - }), - ).rejects.toThrow(/agents\.\*\.memorySearch\.remote\.apiKey: unresolved SecretRef/i); - }); - - it("falls back to env key when models.providers.ollama.apiKey is an unresolved SecretRef", async () => { - const fetchMock = vi.fn( - async () => - new Response(JSON.stringify({ embedding: [1, 0] }), { - status: 200, - headers: { "content-type": "application/json" }, - }), - ); - globalThis.fetch = fetchMock as unknown as typeof fetch; - vi.stubEnv("OLLAMA_API_KEY", "ollama-env"); - - const { provider } = await createOllamaEmbeddingProvider({ - config: { - models: { - providers: { - ollama: { - baseUrl: "http://127.0.0.1:11434/v1", - apiKey: { source: "env", provider: "default", id: "OLLAMA_API_KEY" }, - models: [], - }, - }, - }, - } as unknown as OpenClawConfig, - provider: "ollama", - model: "nomic-embed-text", - fallback: "none", - }); - - await provider.embedQuery("hello"); - - expect(fetchMock).toHaveBeenCalledWith( - "http://127.0.0.1:11434/api/embeddings", - expect.objectContaining({ - headers: expect.objectContaining({ - Authorization: "Bearer ollama-env", - }), - }), - ); }); });