37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
import { embedText, padTo, OllamaError } from '../../lib/ai/ollama.js';
|
|
|
|
beforeEach(() => {
|
|
global.fetch = vi.fn(async () => new Response(
|
|
JSON.stringify({ embedding: new Array(768).fill(0.1) }),
|
|
{ status: 200, headers: { 'content-type': 'application/json' }}
|
|
));
|
|
});
|
|
afterEach(() => vi.restoreAllMocks());
|
|
|
|
describe('ollama.embedText', () => {
|
|
it('returns 768-dim vector', async () => {
|
|
const v = await embedText('hello');
|
|
expect(v).toHaveLength(768);
|
|
expect(v[0]).toBeCloseTo(0.1, 5);
|
|
});
|
|
|
|
it('throws OllamaError on non-200', async () => {
|
|
global.fetch = vi.fn(async () => new Response('boom', { status: 502 }));
|
|
await expect(embedText('x')).rejects.toThrow(OllamaError);
|
|
});
|
|
});
|
|
|
|
describe('padTo', () => {
|
|
it('pads short vectors with zeros', () => {
|
|
const v = padTo([1, 2, 3], 5);
|
|
expect(v).toEqual([1, 2, 3, 0, 0]);
|
|
});
|
|
it('truncates long vectors', () => {
|
|
expect(padTo([1, 2, 3, 4, 5], 3)).toEqual([1, 2, 3]);
|
|
});
|
|
it('returns same on exact length', () => {
|
|
expect(padTo([1, 2], 2)).toEqual([1, 2]);
|
|
});
|
|
});
|