Skip to main content
Glama
factories.ts9.6 kB
/** * Factory functions for creating valid instances of core data models * Useful for testing and development */ import { Alternative, CognitiveConfig, CognitiveInput, Concept, Context, EmotionalState, Episode, MemoryChunk, ProcessingMode, ReasoningStep, ReasoningType, ThoughtMetadata, ThoughtResult, } from "../types/core.js"; /** * Creates a default Context object */ export function createDefaultContext( overrides: Partial<Context> = {} ): Context { return { session_id: `session-${Date.now()}`, previous_thoughts: [], domain: "general", urgency: 0.5, complexity: 0.5, ...overrides, }; } /** * Creates a default Alternative object */ export function createDefaultAlternative( overrides: Partial<Alternative> = {} ): Alternative { return { content: "Alternative reasoning path", confidence: 0.7, reasoning: "This is an alternative approach to the problem", ...overrides, }; } /** * Creates a default ReasoningStep object */ export function createDefaultReasoningStep( overrides: Partial<ReasoningStep> = {} ): ReasoningStep { return { type: ReasoningType.LOGICAL_INFERENCE, content: "This is a reasoning step", confidence: 0.8, alternatives: [], metadata: {}, ...overrides, }; } /** * Creates a default EmotionalState object */ export function createDefaultEmotionalState( overrides: Partial<EmotionalState> = {} ): EmotionalState { const defaultState: EmotionalState = { valence: 0.0, arousal: 0.5, dominance: 0.5, specific_emotions: new Map([ ["neutral", 0.8], ["curiosity", 0.3], ]), }; // Handle Map merging specially if (overrides.specific_emotions) { const mergedEmotions = new Map(defaultState.specific_emotions); for (const [emotion, value] of overrides.specific_emotions.entries()) { mergedEmotions.set(emotion, value); } overrides.specific_emotions = mergedEmotions; } return { ...defaultState, ...overrides, }; } /** * Creates a default ThoughtMetadata object */ export function createDefaultThoughtMetadata( overrides: Partial<ThoughtMetadata> = {} ): ThoughtMetadata { return { processing_time_ms: 100, components_used: ["sensory", "working_memory", "system1"], memory_retrievals: 2, system_mode: ProcessingMode.BALANCED, temperature: 0.7, ...overrides, }; } /** * Creates a default ThoughtResult object */ export function createDefaultThoughtResult( overrides: Partial<ThoughtResult> = {} ): ThoughtResult { const defaultResult: ThoughtResult = { content: "This is a thought result", confidence: 0.8, reasoning_path: [createDefaultReasoningStep()], emotional_context: createDefaultEmotionalState(), metadata: createDefaultThoughtMetadata(), }; return { ...defaultResult, ...overrides, }; } /** * Creates a default MemoryChunk object */ export function createDefaultMemoryChunk( overrides: Partial<MemoryChunk> = {} ): MemoryChunk { const defaultChunk: MemoryChunk = { content: { text: "Memory content", type: "text" }, activation: 0.7, timestamp: Date.now(), associations: new Set(["concept1", "concept2"]), emotional_valence: 0.1, importance: 0.6, context_tags: ["general", "learning"], }; // Handle Set merging specially if (overrides.associations) { const mergedAssociations = new Set([ ...defaultChunk.associations, ...overrides.associations, ]); overrides.associations = mergedAssociations; } return { ...defaultChunk, ...overrides, }; } /** * Creates a default CognitiveConfig object */ export function createDefaultCognitiveConfig( overrides: Partial<CognitiveConfig> = {} ): CognitiveConfig { return { default_mode: ProcessingMode.BALANCED, enable_emotion: true, enable_metacognition: true, enable_prediction: true, working_memory_capacity: 7, episodic_memory_size: 1000, semantic_memory_size: 5000, consolidation_interval: 3600, noise_level: 0.1, temperature: 0.7, attention_threshold: 0.3, max_reasoning_depth: 10, timeout_ms: 30000, max_concurrent_sessions: 10, confidence_threshold: 0.6, system2_activation_threshold: 0.4, memory_retrieval_threshold: 0.5, brain_dir: "~/.brain", ...overrides, }; } /** * Creates a default CognitiveInput object */ export function createDefaultCognitiveInput( overrides: Partial<CognitiveInput> = {} ): CognitiveInput { return { input: "What is the meaning of life?", context: createDefaultContext(), mode: ProcessingMode.BALANCED, configuration: createDefaultCognitiveConfig(), ...overrides, }; } /** * Creates a default Episode object */ export function createDefaultEpisode( overrides: Partial<Episode> = {} ): Episode { return { content: { event: "User interaction", details: "User asked a question" }, context: createDefaultContext(), timestamp: Date.now(), emotional_tags: ["curiosity", "engagement"], importance: 0.7, decay_factor: 0.95, ...overrides, }; } /** * Creates a default Concept object */ export function createDefaultConcept( overrides: Partial<Concept> = {} ): Concept { return { id: `concept-${Date.now()}`, content: { name: "Test Concept", description: "A concept for testing" }, embedding: [0.1, 0.2, 0.3, 0.4, 0.5], relations: ["related-concept-1", "related-concept-2"], activation: 0.6, last_accessed: Date.now(), ...overrides, }; } /** * Creates a minimal valid Context (for testing edge cases) */ export function createMinimalContext(): Context { return { session_id: "minimal-session", }; } /** * Creates a minimal valid EmotionalState (for testing edge cases) */ export function createMinimalEmotionalState(): EmotionalState { return { valence: 0, arousal: 0, dominance: 0, specific_emotions: new Map(), }; } /** * Creates a minimal valid CognitiveConfig (for testing edge cases) */ export function createMinimalCognitiveConfig(): CognitiveConfig { return { default_mode: ProcessingMode.BALANCED, enable_emotion: false, enable_metacognition: false, enable_prediction: false, working_memory_capacity: 1, episodic_memory_size: 1, semantic_memory_size: 1, consolidation_interval: 1, noise_level: 0, temperature: 0.1, attention_threshold: 0, max_reasoning_depth: 1, timeout_ms: 1000, max_concurrent_sessions: 1, confidence_threshold: 0, system2_activation_threshold: 0, memory_retrieval_threshold: 0, brain_dir: "~/.brain", }; } /** * Creates a complex ThoughtResult with multiple reasoning steps and alternatives */ export function createComplexThoughtResult(): ThoughtResult { return { content: "Complex thought with multiple reasoning paths", confidence: 0.85, reasoning_path: [ { type: ReasoningType.PATTERN_MATCH, content: "Initial pattern recognition", confidence: 0.9, alternatives: [ createDefaultAlternative({ content: "Alternative pattern match", confidence: 0.7, }), ], }, { type: ReasoningType.LOGICAL_INFERENCE, content: "Logical deduction from patterns", confidence: 0.8, alternatives: [ createDefaultAlternative({ content: "Alternative logical path", confidence: 0.6, }), createDefaultAlternative({ content: "Another logical approach", confidence: 0.5, }), ], }, { type: ReasoningType.METACOGNITIVE, content: "Self-reflection on reasoning quality", confidence: 0.75, alternatives: [], }, ], emotional_context: createDefaultEmotionalState({ valence: 0.3, arousal: 0.6, specific_emotions: new Map([ ["confidence", 0.8], ["curiosity", 0.7], ["satisfaction", 0.6], ]), }), metadata: createDefaultThoughtMetadata({ processing_time_ms: 250, components_used: [ "sensory", "working_memory", "system1", "system2", "metacognition", ], memory_retrievals: 5, system_mode: ProcessingMode.DELIBERATIVE, }), }; } /** * Utility function to create test data sets */ export function createTestDataSet() { return { contexts: [ createDefaultContext(), createMinimalContext(), createDefaultContext({ urgency: 1.0, complexity: 0.9 }), ], emotionalStates: [ createDefaultEmotionalState(), createMinimalEmotionalState(), createDefaultEmotionalState({ valence: 0.8, specific_emotions: new Map([ ["joy", 0.9], ["excitement", 0.7], ]), }), ], thoughtResults: [ createDefaultThoughtResult(), createComplexThoughtResult(), createDefaultThoughtResult({ confidence: 0.3, content: "Low confidence thought", }), ], memoryChunks: [ createDefaultMemoryChunk(), createDefaultMemoryChunk({ importance: 1.0, emotional_valence: 0.8 }), createDefaultMemoryChunk({ activation: 0.1, associations: new Set() }), ], cognitiveConfigs: [ createDefaultCognitiveConfig(), createMinimalCognitiveConfig(), createDefaultCognitiveConfig({ enable_emotion: false, max_reasoning_depth: 20, temperature: 1.0, }), ], }; }

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