Skip to main content
Glama
test-fixtures.ts8.47 kB
/** * Test Fixtures and Data Factories * * Provides factory functions for creating test data: * - Memory objects * - Embeddings * - Reasoning contexts * - User data * - Relationships */ /** * Memory Sector Types */ export type MemorySector = "episodic" | "semantic" | "procedural" | "emotional" | "reflective"; /** * Memory fixture interface */ export interface TestMemory { id: string; content: string; createdAt: Date; lastAccessed: Date; accessCount: number; salience: number; decayRate: number; strength: number; userId: string; sessionId: string; primarySector: MemorySector; metadata: TestMemoryMetadata; } export interface TestMemoryMetadata { keywords: string[]; tags: string[]; category: string; context: string; importance: number; isAtomic: boolean; parentId?: string; } /** * Create a test memory with default or custom values * * @param overrides - Custom values to override defaults * @returns Test memory object */ export function createTestMemory(overrides: Partial<TestMemory> = {}): TestMemory { const id = overrides.id ?? generateId(); const now = new Date(); return { id, content: overrides.content ?? "Test memory content", createdAt: overrides.createdAt ?? now, lastAccessed: overrides.lastAccessed ?? now, accessCount: overrides.accessCount ?? 0, salience: overrides.salience ?? 0.5, decayRate: overrides.decayRate ?? 0.02, strength: overrides.strength ?? 1.0, userId: overrides.userId ?? "test-user", sessionId: overrides.sessionId ?? "test-session", primarySector: overrides.primarySector ?? "semantic", metadata: overrides.metadata ?? createTestMemoryMetadata(), }; } /** * Create test memory metadata * * @param overrides - Custom values to override defaults * @returns Test memory metadata */ export function createTestMemoryMetadata( overrides: Partial<TestMemoryMetadata> = {} ): TestMemoryMetadata { return { keywords: overrides.keywords ?? ["test", "memory"], tags: overrides.tags ?? ["test"], category: overrides.category ?? "general", context: overrides.context ?? "test context", importance: overrides.importance ?? 0.5, isAtomic: overrides.isAtomic ?? true, parentId: overrides.parentId, }; } /** * Create multiple test memories * * @param count - Number of memories to create * @param overrides - Custom values to override defaults * @returns Array of test memories */ export function createTestMemories( count: number, overrides: Partial<TestMemory> = {} ): TestMemory[] { return Array.from({ length: count }, (_, i) => createTestMemory({ ...overrides, content: `${overrides.content ?? "Test memory"} ${i + 1}`, }) ); } /** * Create test embeddings * * @param dimension - Embedding dimension * @returns Test embedding vector */ export function createTestEmbedding(dimension: number = 1536): number[] { return Array.from({ length: dimension }, () => Math.random()); } /** * Create test sector embeddings * * @param dimension - Embedding dimension * @returns Test sector embeddings */ export function createTestSectorEmbeddings( dimension: number = 1536 ): Record<MemorySector, number[]> { return { episodic: createTestEmbedding(dimension), semantic: createTestEmbedding(dimension), procedural: createTestEmbedding(dimension), emotional: createTestEmbedding(dimension), reflective: createTestEmbedding(dimension), }; } /** * Create test emotion state */ export interface TestEmotionState { valence: number; arousal: number; dominance: number; discreteEmotions: Map<string, number>; primaryEmotion: string; confidence: number; } export function createTestEmotionState( overrides: Partial<TestEmotionState> = {} ): TestEmotionState { return { valence: overrides.valence ?? 0.5, arousal: overrides.arousal ?? 0.5, dominance: overrides.dominance ?? 0.0, discreteEmotions: overrides.discreteEmotions ?? new Map([["joy", 0.7]]), primaryEmotion: overrides.primaryEmotion ?? "joy", confidence: overrides.confidence ?? 0.8, }; } /** * Create test reasoning context */ export interface TestReasoningContext { problem: string; evidence: string[]; constraints: string[]; goals: string[]; } export function createTestReasoningContext( overrides: Partial<TestReasoningContext> = {} ): TestReasoningContext { return { problem: overrides.problem ?? "Test problem", evidence: overrides.evidence ?? ["evidence 1", "evidence 2"], constraints: overrides.constraints ?? ["constraint 1"], goals: overrides.goals ?? ["goal 1"], }; } /** * Create test link between memories */ export interface TestLink { sourceId: string; targetId: string; linkType: "semantic" | "temporal" | "causal" | "analogical"; weight: number; createdAt: Date; traversalCount: number; } export function createTestLink(overrides: Partial<TestLink> = {}): TestLink { return { sourceId: overrides.sourceId ?? generateId(), targetId: overrides.targetId ?? generateId(), linkType: overrides.linkType ?? "semantic", weight: overrides.weight ?? 0.7, createdAt: overrides.createdAt ?? new Date(), traversalCount: overrides.traversalCount ?? 0, }; } /** * Create test search query */ export interface TestSearchQuery { text?: string; embedding?: number[]; sectors?: MemorySector[]; metadata?: { keywords?: string[]; tags?: string[]; category?: string; }; minStrength?: number; limit?: number; } export function createTestSearchQuery(overrides: Partial<TestSearchQuery> = {}): TestSearchQuery { return { text: overrides.text, embedding: overrides.embedding, sectors: overrides.sectors ?? ["semantic"], metadata: overrides.metadata, minStrength: overrides.minStrength ?? 0.1, limit: overrides.limit ?? 10, }; } // Helper functions function generateId(): string { return `test-${Date.now()}-${Math.random().toString(36).substring(7)}`; } /** * Create realistic test data for specific scenarios */ export const testScenarios = { /** * Create memories for testing temporal decay */ temporalDecay: () => { const now = new Date(); return [ createTestMemory({ content: "Recent memory", createdAt: now, lastAccessed: now, strength: 1.0, }), createTestMemory({ content: "Week old memory", createdAt: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000), lastAccessed: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000), strength: 0.8, }), createTestMemory({ content: "Month old memory", createdAt: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000), lastAccessed: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000), strength: 0.3, }), ]; }, /** * Create memories for testing waypoint graph */ waypointGraph: () => { const memories = createTestMemories(5); const links = [ createTestLink({ sourceId: memories[0].id, targetId: memories[1].id, weight: 0.9, }), createTestLink({ sourceId: memories[0].id, targetId: memories[2].id, weight: 0.8, }), createTestLink({ sourceId: memories[1].id, targetId: memories[3].id, weight: 0.7, }), createTestLink({ sourceId: memories[2].id, targetId: memories[4].id, weight: 0.75, }), ]; return { memories, links }; }, /** * Create memories for testing search */ search: () => { return [ createTestMemory({ content: "Machine learning algorithms", metadata: createTestMemoryMetadata({ keywords: ["machine", "learning", "algorithms"], tags: ["ai", "ml"], category: "technology", }), }), createTestMemory({ content: "Deep learning neural networks", metadata: createTestMemoryMetadata({ keywords: ["deep", "learning", "neural", "networks"], tags: ["ai", "deep-learning"], category: "technology", }), }), createTestMemory({ content: "Natural language processing", metadata: createTestMemoryMetadata({ keywords: ["natural", "language", "processing"], tags: ["ai", "nlp"], category: "technology", }), }), ]; }, };

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