mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-07 22:09:57 +00:00
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { describe, it, expect, vi } from "vitest";
|
|
import type { OpenClawConfig } from "../config/config.js";
|
|
import { createOllamaEmbeddingProvider } from "./embeddings-ollama.js";
|
|
|
|
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;
|
|
|
|
const { provider } = await createOllamaEmbeddingProvider({
|
|
config: {} as OpenClawConfig,
|
|
provider: "ollama",
|
|
model: "nomic-embed-text",
|
|
fallback: "none",
|
|
remote: { baseUrl: "http://127.0.0.1:11434" },
|
|
});
|
|
|
|
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;
|
|
|
|
const { provider } = await createOllamaEmbeddingProvider({
|
|
config: {
|
|
models: {
|
|
providers: {
|
|
ollama: {
|
|
baseUrl: "http://127.0.0.1:11434/v1",
|
|
apiKey: "ollama-local",
|
|
headers: {
|
|
"X-Provider-Header": "provider",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
} 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",
|
|
}),
|
|
}),
|
|
);
|
|
});
|
|
});
|