Skip to main content
Glama
SensoryProcessor.integration.test.ts9.31 kB
/** * Integration tests for SensoryProcessor * Tests integration with the broader cognitive architecture */ import { beforeEach, describe, expect, it } from "vitest"; import { SensoryProcessor } from "../../cognitive/SensoryProcessor.js"; import { ISensoryProcessor } from "../../interfaces/cognitive.js"; describe("SensoryProcessor Integration", () => { let processor: ISensoryProcessor; beforeEach(async () => { processor = new SensoryProcessor(); await processor.initialize({ attention_threshold: 0.3, buffer_size: 10, }); }); describe("Interface Compliance", () => { it("should implement ISensoryProcessor interface correctly", () => { expect(processor).toBeDefined(); expect(typeof processor.initialize).toBe("function"); expect(typeof processor.process).toBe("function"); expect(typeof processor.tokenize).toBe("function"); expect(typeof processor.filterAttention).toBe("function"); expect(typeof processor.detectPatterns).toBe("function"); expect(typeof processor.computeSalience).toBe("function"); expect(typeof processor.reset).toBe("function"); expect(typeof processor.getStatus).toBe("function"); }); it("should return correct component status", () => { const status = processor.getStatus(); expect(status.name).toBe("SensoryProcessor"); expect(status.initialized).toBe(true); expect(status.active).toBe(true); expect(typeof status.last_activity).toBe("number"); }); }); describe("Cognitive Architecture Integration", () => { it("should process cognitive input for downstream components", async () => { const cognitiveInput = "The human brain processes information through multiple layers of neural networks, integrating sensory data with memory and emotional context to generate intelligent responses."; const result = await processor.process(cognitiveInput); // Should produce structured output suitable for working memory expect((result as any).tokens.length).toBeGreaterThan(0); expect((result as any).patterns.length).toBeGreaterThan(0); expect((result as any).semantic_chunks.length).toBeGreaterThan(0); // Should identify cognitive/neural patterns const cognitivePatterns = (result as any).patterns.filter((p: any) => p.content.some((word: any) => ["brain", "neural", "cognitive", "memory"].includes(word) ) ); expect(cognitivePatterns.length).toBeGreaterThan(0); // Should have high-salience tokens for important concepts const highSalienceTokens = (result as any).salience_map.attention_focus; expect( highSalienceTokens.some((token: any) => ["brain", "neural", "information", "memory"].includes(token) ) ).toBe(true); }); it("should handle technical AI/ML content appropriately", async () => { const technicalInput = "Machine learning algorithms use artificial neural networks to process data, implementing backpropagation for training deep learning models with gradient descent optimization."; const result = await processor.process(technicalInput); // Should detect technical patterns const technicalPatterns = (result as any).patterns.filter((p: any) => p.content.some((word: any) => ["machine", "learning", "neural", "algorithms"].includes(word) ) ); expect(technicalPatterns.length).toBeGreaterThan(0); // Should create semantic chunks for related concepts const mlChunk = (result as any).semantic_chunks.find((chunk: any) => chunk.tokens.some((t: any) => ["machine", "learning"].includes(t.text)) ); expect(mlChunk).toBeDefined(); expect(mlChunk?.importance).toBeGreaterThan(0.5); }); it("should provide consistent output format for memory systems", async () => { const inputs = [ "Simple test input.", "Complex cognitive processing involves multiple interconnected systems working together.", "The quick brown fox jumps over the lazy dog.", ]; for (const input of inputs) { const result = await processor.process(input); // Consistent structure for memory integration expect(result).toHaveProperty("tokens"); expect(result).toHaveProperty("patterns"); expect(result).toHaveProperty("salience_map"); expect(result).toHaveProperty("semantic_chunks"); expect(result).toHaveProperty("attention_filtered"); // All tokens should have required properties (result as any).tokens.forEach((token: any) => { expect(token).toHaveProperty("text"); expect(token).toHaveProperty("position"); expect(token).toHaveProperty("semantic_weight"); expect(token).toHaveProperty("attention_score"); expect(token).toHaveProperty("context_tags"); }); // All patterns should have required properties (result as any).patterns.forEach((pattern: any) => { expect(pattern).toHaveProperty("type"); expect(pattern).toHaveProperty("content"); expect(pattern).toHaveProperty("confidence"); expect(pattern).toHaveProperty("salience"); }); } }); it("should handle emotional content for emotional processor integration", async () => { const emotionalInput = "I feel excited and happy about this amazing breakthrough in artificial intelligence research!"; const result = await processor.process(emotionalInput); // Should detect emotional tokens const emotionalTokens = (result as any).tokens.filter((t: any) => ["excited", "happy", "amazing"].includes(t.text) ); expect(emotionalTokens.length).toBeGreaterThan(0); // Emotional tokens should have high attention scores emotionalTokens.forEach((token: any) => { expect(token.attention_score).toBeGreaterThan(0.5); }); // Should appear in attention focus expect( (result as any).salience_map.attention_focus.some((token: any) => ["excited", "happy", "amazing"].includes(token) ) ).toBe(true); }); }); describe("Performance and Scalability", () => { it("should handle concurrent processing requests", async () => { const inputs = [ "First concurrent input for processing.", "Second concurrent input with different content.", "Third concurrent input testing parallel processing.", ]; const promises = inputs.map((input) => processor.process(input)); const results = await Promise.all(promises); expect(results).toHaveLength(3); results.forEach((result, index) => { expect((result as any).tokens.length).toBeGreaterThan(0); expect( (result as any).tokens.some((t: any) => t.text.includes( index === 0 ? "first" : index === 1 ? "second" : "third" ) ) ).toBe(true); }); }); it("should maintain performance with repeated processing", async () => { const input = "Repeated processing test for performance measurement."; const iterations = 10; const times: number[] = []; for (let i = 0; i < iterations; i++) { const start = Date.now(); await processor.process(input); const end = Date.now(); times.push(end - start); } // Performance should be consistent (no significant degradation) const avgTime = times.reduce((sum, time) => sum + time, 0) / times.length; const maxTime = Math.max(...times); expect(avgTime).toBeLessThan(100); // Should be fast expect(maxTime).toBeLessThan(200); // No outliers }); }); describe("Error Handling and Recovery", () => { it("should recover from processing errors", async () => { // Test with potentially problematic input const problematicInputs = [ "", // Empty " ", // Whitespace only "!@#$%^&*()", // Special characters only "a".repeat(10000), // Very long single word ]; for (const input of problematicInputs) { const result = await processor.process(input); expect(result).toBeDefined(); expect((result as any).tokens).toBeDefined(); expect((result as any).patterns).toBeDefined(); expect((result as any).salience_map).toBeDefined(); expect((result as any).semantic_chunks).toBeDefined(); } }); it("should maintain state consistency after errors", async () => { const validInput = "Valid input for testing state consistency."; // Process valid input const result1 = await processor.process(validInput); expect((result1 as any).tokens.length).toBeGreaterThan(0); // Process empty input (edge case) const result2 = await processor.process(""); expect((result2 as any).tokens.length).toBe(0); // Process valid input again - should work normally const result3 = await processor.process(validInput); expect((result3 as any).tokens.length).toBeGreaterThan(0); expect((result3 as any).tokens.length).toBe( (result1 as any).tokens.length ); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/keyurgolani/ThoughtMcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server