UNPKG

seraph-agent

Version:

An extremely lightweight, SRE autonomous AI agent for seamless integration with common observability tasks.

118 lines (117 loc) 5.13 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const knowledge_manager_1 = require("../knowledge-manager"); const cron = __importStar(require("node-cron")); const faiss_1 = require("@langchain/community/vectorstores/faiss"); const knowledge = __importStar(require("../knowledge")); const fs = __importStar(require("fs/promises")); const embedding_provider_1 = require("../llm/embedding-provider"); jest.mock('node-cron'); jest.mock('@langchain/community/vectorstores/faiss'); jest.mock('../knowledge'); jest.mock('fs/promises'); jest.mock('../llm/embedding-provider'); const mockedCron = cron; const mockedFaissStore = faiss_1.FaissStore; const mockedKnowledge = knowledge; const mockedFs = fs; const mockedCreateEmbeddingProvider = embedding_provider_1.createEmbeddingProvider; describe('KnowledgeManager', () => { let config; beforeEach(() => { config = { port: 8080, workers: 1, apiKey: 'test-key', serverApiKey: null, knowledge: { enabled: true, schedule: '0 0 * * *', vectorStore: './db/seraph.faiss', embeddings: { provider: 'huggingface' }, sources: [], }, }; jest.clearAllMocks(); }); it('should not do anything if knowledge base is disabled', async () => { config.knowledge.enabled = false; const manager = new knowledge_manager_1.KnowledgeManager(config); await manager.start(); expect(mockedCron.schedule).not.toHaveBeenCalled(); expect(mockedFaissStore.load).not.toHaveBeenCalled(); }); it('should schedule a build on start', async () => { mockedFs.access.mockResolvedValue(); const manager = new knowledge_manager_1.KnowledgeManager(config); await manager.start(); expect(mockedCron.schedule).toHaveBeenCalledWith('0 0 * * *', expect.any(Function)); }); it('should load existing vector store on start', async () => { mockedFs.access.mockResolvedValue(); const manager = new knowledge_manager_1.KnowledgeManager(config); await manager.start(); expect(mockedFaissStore.load).toHaveBeenCalledWith('./db/seraph.faiss', undefined); }); it('should build a new vector store if one does not exist', async () => { mockedFs.access.mockRejectedValue(new Error('ENOENT')); const manager = new knowledge_manager_1.KnowledgeManager(config); await manager.start(); expect(mockedKnowledge.buildKnowledgeBase).toHaveBeenCalledWith(config, undefined); }); it('should call buildKnowledgeBase when build is called', async () => { const manager = new knowledge_manager_1.KnowledgeManager(config); await manager.build('test-source'); expect(mockedKnowledge.buildKnowledgeBase).toHaveBeenCalledWith(config, 'test-source'); }); it('should perform a similarity search', async () => { const similaritySearchMock = jest.fn().mockResolvedValue([]); mockedFaissStore.load.mockResolvedValue({ similaritySearch: similaritySearchMock, }); mockedFs.access.mockResolvedValue(); const manager = new knowledge_manager_1.KnowledgeManager(config); await manager.start(); await manager.search('test query', 5); expect(similaritySearchMock).toHaveBeenCalledWith('test query', 5); }); it('should return null from search if vector store is not loaded', async () => { config.knowledge.enabled = false; const manager = new knowledge_manager_1.KnowledgeManager(config); const result = await manager.search('test query'); expect(result).toBeNull(); }); });