97cc4ed5fe
- Bundle chromadb into main.js via esbuild instead of externalizing it.
Obsidian's renderer cannot resolve bare require('chromadb') against a
plugin-local node_modules. By bundling, the client library is inlined and
works out of the box with just manifest.json + main.js.
- Remove eager cache initialization from OllamaClient constructor to avoid
unhandled promise rejections when chromadb/ChromaDB is unavailable.
- Fix 'Failed to execute fetch on Window: Illegal invocation' by wrapping
the default fetch fallback in an arrow function:
this.fetchFn = fetchFn ?? ((url, init) => fetch(url, init));
This preserves the window binding when fetch is called later.
- Update install.sh and README to remove the obsolete node_modules/chromadb
copy step.
- Update ollama-client-cache tests to reflect that cache initialization is
no longer eager.
102 lines
3.2 KiB
TypeScript
102 lines
3.2 KiB
TypeScript
// tests/ollama-client-cache.test.ts
|
|
|
|
import { OllamaMessage, OllamaTool, CacheConfig } from '../src/types';
|
|
|
|
// Create mock functions for the cache service
|
|
const mockInitialize = jest.fn().mockResolvedValue(undefined);
|
|
const mockGetCache = jest.fn().mockResolvedValue(null);
|
|
const mockSetCache = jest.fn().mockResolvedValue(undefined);
|
|
const mockClearCache = jest.fn().mockResolvedValue(undefined);
|
|
|
|
// Mock the semantic cache service BEFORE importing OllamaClient
|
|
jest.mock('../src/semantic-cache', () => ({
|
|
SemanticCacheService: jest.fn().mockImplementation(() => ({
|
|
initialize: mockInitialize,
|
|
getCache: mockGetCache,
|
|
setCache: mockSetCache,
|
|
clearCache: mockClearCache,
|
|
})),
|
|
}));
|
|
|
|
import { OllamaClient } from '../src/ollama-client';
|
|
|
|
describe('OllamaClient', () => {
|
|
const mockBaseUrl = 'http://localhost:11434';
|
|
const mockModel = 'llama3';
|
|
|
|
beforeEach(() => {
|
|
mockInitialize.mockClear();
|
|
mockGetCache.mockClear();
|
|
mockSetCache.mockClear();
|
|
mockClearCache.mockClear();
|
|
});
|
|
|
|
describe('constructor', () => {
|
|
it('should create cache service when enabled but not initialize it eagerly', () => {
|
|
const cacheConfig: CacheConfig = {
|
|
enabled: true,
|
|
similarityThreshold: 0.85,
|
|
collectionName: 'test_cache',
|
|
embeddingModel: 'nomic-embed-text',
|
|
chromaURL: 'http://localhost:8000',
|
|
};
|
|
|
|
const client = new OllamaClient(mockBaseUrl, mockModel, undefined, cacheConfig);
|
|
|
|
expect(client).toBeInstanceOf(OllamaClient);
|
|
// Eager initialization was removed to avoid unhandled rejections;
|
|
// initialization now happens via initializeCache() only.
|
|
expect(mockInitialize).toHaveBeenCalledTimes(0);
|
|
});
|
|
|
|
it('should not create cache service when disabled', () => {
|
|
const cacheConfig: CacheConfig = {
|
|
enabled: false,
|
|
similarityThreshold: 0.85,
|
|
collectionName: 'test_cache',
|
|
embeddingModel: 'nomic-embed-text',
|
|
chromaURL: 'http://localhost:8000',
|
|
};
|
|
|
|
const client = new OllamaClient(mockBaseUrl, mockModel, undefined, cacheConfig);
|
|
|
|
expect(client).toBeInstanceOf(OllamaClient);
|
|
expect(mockInitialize).toHaveBeenCalledTimes(0);
|
|
});
|
|
});
|
|
|
|
describe('clearCache', () => {
|
|
it('should clear the cache when enabled', async () => {
|
|
const cacheConfig: CacheConfig = {
|
|
enabled: true,
|
|
similarityThreshold: 0.85,
|
|
collectionName: 'test_cache',
|
|
embeddingModel: 'nomic-embed-text',
|
|
chromaURL: 'http://localhost:8000',
|
|
};
|
|
|
|
const client = new OllamaClient(mockBaseUrl, mockModel, undefined, cacheConfig);
|
|
|
|
await client.clearCache();
|
|
|
|
expect(mockClearCache).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('should not clear cache when disabled', async () => {
|
|
const cacheConfig: CacheConfig = {
|
|
enabled: false,
|
|
similarityThreshold: 0.85,
|
|
collectionName: 'test_cache',
|
|
embeddingModel: 'nomic-embed-text',
|
|
chromaURL: 'http://localhost:8000',
|
|
};
|
|
|
|
const client = new OllamaClient(mockBaseUrl, mockModel, undefined, cacheConfig);
|
|
|
|
await client.clearCache();
|
|
|
|
expect(mockClearCache).toHaveBeenCalledTimes(0);
|
|
});
|
|
});
|
|
});
|