Skip to main content
Glama
AnalyticalReasoningStream.ts12.4 kB
/** * Analytical Reasoning Stream * * Focuses on logical analysis, evidence evaluation, and systematic reasoning */ import { ArgumentChain, Evidence, EvidenceEvaluation, IAnalyticalReasoningStream, LogicalAnalysis, } from "../../interfaces/parallel-reasoning.js"; import { Problem } from "../../interfaces/systematic-thinking.js"; import { Context, ReasoningStep, ReasoningType } from "../../types/core.js"; import { BaseReasoningStream } from "./BaseReasoningStream.js"; export class AnalyticalReasoningStream extends BaseReasoningStream implements IAnalyticalReasoningStream { constructor(id?: string) { super( "analytical", "Analytical Reasoning Stream", "Systematic logical analysis and evidence-based reasoning", id ); } protected async doInitialize(): Promise<void> { // Initialize analytical reasoning components // This could include loading logical reasoning patterns, evidence evaluation criteria, etc. } protected async doProcess( problem: Problem, context?: Context ): Promise<{ reasoning_steps: ReasoningStep[]; conclusions: string[]; confidence: number; insights: string[]; evidence: Evidence[]; assumptions: string[]; }> { const reasoningSteps: ReasoningStep[] = []; const evidence: Evidence[] = []; const assumptions: string[] = []; // Step 1: Logical analysis of the problem const logicalAnalysis = await this.analyzeLogically(problem); reasoningSteps.push( this.createReasoningStep( ReasoningType.LOGICAL_INFERENCE, `Logical analysis: ${logicalAnalysis.soundness_assessment}`, logicalAnalysis.logical_validity, { analysis: logicalAnalysis } ) ); // Step 2: Extract and evaluate evidence const problemEvidence = this.extractEvidence(problem, context); evidence.push(...problemEvidence); const evidenceEvaluation = await this.evaluateEvidence(problemEvidence); reasoningSteps.push( this.createReasoningStep( ReasoningType.LOGICAL_INFERENCE, `Evidence evaluation: Overall strength ${evidenceEvaluation.overall_strength.toFixed( 2 )}`, evidenceEvaluation.overall_strength, { evaluation: evidenceEvaluation } ) ); // Step 3: Build argument chain const argumentChain = await this.buildArgumentChain( logicalAnalysis.premises, logicalAnalysis.conclusions[0] ?? "No clear conclusion" ); reasoningSteps.push( this.createReasoningStep( ReasoningType.DEDUCTIVE, `Argument chain: ${argumentChain.conclusion}`, argumentChain.validity, { argument_chain: argumentChain } ) ); // Step 4: Identify assumptions assumptions.push(...this.identifyAssumptions(problem, logicalAnalysis)); // Step 5: Generate analytical conclusions const conclusions = this.generateAnalyticalConclusions( logicalAnalysis, evidenceEvaluation, argumentChain ); // Calculate overall confidence const confidence = this.calculateAnalyticalConfidence( logicalAnalysis, evidenceEvaluation, argumentChain ); // Generate insights const insights = this.generateAnalyticalInsights( problem, logicalAnalysis, evidenceEvaluation ); return { reasoning_steps: reasoningSteps, conclusions, confidence, insights, evidence, assumptions, }; } protected doReset(): void { // Reset analytical reasoning state } async analyzeLogically(problem: Problem): Promise<LogicalAnalysis> { const premises: string[] = []; const inferences: string[] = []; const conclusions: string[] = []; // Extract premises from problem description premises.push(`Problem domain: ${problem.domain}`); premises.push( `Complexity level: ${(problem.complexity * 100).toFixed(0)}%` ); premises.push( `Uncertainty level: ${(problem.uncertainty * 100).toFixed(0)}%` ); if (problem.constraints.length > 0) { premises.push(`Constraints: ${problem.constraints.join(", ")}`); } // Generate logical inferences if (problem.complexity > 0.7) { inferences.push("High complexity requires systematic decomposition"); } if (problem.uncertainty > 0.6) { inferences.push("High uncertainty requires risk mitigation strategies"); } if (problem.time_sensitivity > 0.8) { inferences.push("High time sensitivity requires prioritized approach"); } // Generate conclusions based on inferences if (inferences.length > 0) { conclusions.push("Problem requires structured analytical approach"); } if (problem.constraints.includes("resource_constraint")) { conclusions.push("Resource optimization is critical for success"); } // Assess logical validity const logical_validity = this.assessLogicalValidity( premises, inferences, conclusions ); // Assess soundness const soundness_assessment = this.assessSoundness( premises, logical_validity ); return { premises, inferences, conclusions, logical_validity, soundness_assessment, }; } async evaluateEvidence(evidence: Evidence[]): Promise<EvidenceEvaluation> { const reliability_scores = evidence.map((e) => e.reliability); const relevance_scores = evidence.map((e) => e.relevance); // Calculate overall strength as weighted average const overall_strength = evidence.length > 0 ? evidence.reduce((sum, e) => sum + e.reliability * e.relevance, 0) / evidence.length : 0.5; return { evidence_items: evidence, reliability_scores, relevance_scores, overall_strength, }; } async buildArgumentChain( premises: string[], conclusion: string ): Promise<ArgumentChain> { const inference_steps: string[] = []; // Generate inference steps from premises to conclusion if (premises.length > 0) { inference_steps.push("Analyzing given premises"); inference_steps.push("Identifying logical relationships"); inference_steps.push("Drawing valid inferences"); inference_steps.push("Formulating conclusion"); } // Assess validity based on logical structure const validity = this.assessArgumentValidity( premises, inference_steps, conclusion ); // Assess strength based on premise quality and inference quality const strength = this.assessArgumentStrength(premises, inference_steps); return { premises, inference_steps, conclusion, validity, strength, }; } private extractEvidence(problem: Problem, context?: Context): Evidence[] { const evidence: Evidence[] = []; // Extract evidence from problem description evidence.push( this.createEvidence( `Problem complexity: ${problem.complexity}`, "problem_analysis", 0.9, 1.0 ) ); evidence.push( this.createEvidence( `Domain expertise: ${problem.domain}`, "domain_classification", 0.8, 0.9 ) ); // Extract evidence from constraints if (problem.constraints.length > 0) { evidence.push( this.createEvidence( `Identified constraints: ${problem.constraints.join(", ")}`, "constraint_analysis", 0.85, 0.95 ) ); } // Extract evidence from context if available if (context?.domain) { evidence.push( this.createEvidence( `Context domain: ${context.domain}`, "context_analysis", 0.7, 0.8 ) ); } return evidence; } private identifyAssumptions( problem: Problem, analysis: LogicalAnalysis ): string[] { const assumptions: string[] = []; // Identify implicit assumptions assumptions.push("Problem description is accurate and complete"); assumptions.push("Identified constraints are exhaustive"); if (problem.stakeholders.length > 0) { assumptions.push( "Stakeholder interests are aligned with problem resolution" ); } if (analysis.premises.length > 0) { assumptions.push("Premises are factually correct"); } return assumptions; } private generateAnalyticalConclusions( logicalAnalysis: LogicalAnalysis, evidenceEvaluation: EvidenceEvaluation, argumentChain: ArgumentChain ): string[] { const conclusions: string[] = []; // Primary conclusion from logical analysis if (logicalAnalysis.conclusions.length > 0) { conclusions.push(logicalAnalysis.conclusions[0]); } // Evidence-based conclusions if (evidenceEvaluation.overall_strength > 0.7) { conclusions.push( "Strong evidence supports systematic analytical approach" ); } else if (evidenceEvaluation.overall_strength > 0.4) { conclusions.push( "Moderate evidence suggests cautious analytical approach" ); } else { conclusions.push( "Limited evidence requires additional information gathering" ); } // Argument-based conclusions if (argumentChain.validity > 0.8) { conclusions.push("Logical argument structure is sound and valid"); } return conclusions; } private calculateAnalyticalConfidence( logicalAnalysis: LogicalAnalysis, evidenceEvaluation: EvidenceEvaluation, argumentChain: ArgumentChain ): number { // Weight different factors const logicalWeight = 0.4; const evidenceWeight = 0.4; const argumentWeight = 0.2; const confidence = logicalAnalysis.logical_validity * logicalWeight + evidenceEvaluation.overall_strength * evidenceWeight + argumentChain.validity * argumentWeight; return Math.max(0, Math.min(1, confidence)); } private generateAnalyticalInsights( problem: Problem, logicalAnalysis: LogicalAnalysis, evidenceEvaluation: EvidenceEvaluation ): string[] { const insights: string[] = []; // Logical insights if (logicalAnalysis.logical_validity > 0.8) { insights.push("Strong logical foundation supports systematic approach"); } // Evidence insights if (evidenceEvaluation.overall_strength > 0.7) { insights.push("High-quality evidence enables confident decision-making"); } // Problem-specific insights if (problem.complexity > 0.7 && problem.uncertainty < 0.4) { insights.push( "Complex but well-defined problem suitable for analytical methods" ); } // Add base insights insights.push(...this.generateInsights(problem, [])); return insights; } private assessLogicalValidity( premises: string[], inferences: string[], conclusions: string[] ): number { let validity = 0.7; // Base validity // Adjust based on structure quality if (premises.length > 0) validity += 0.1; if (inferences.length > 0) validity += 0.1; if (conclusions.length > 0) validity += 0.1; return Math.min(1.0, validity); } private assessSoundness(premises: string[], validity: number): string { if (validity > 0.8 && premises.length > 2) { return "Strong logical soundness with well-supported premises"; } else if (validity > 0.6) { return "Moderate logical soundness with adequate premise support"; } else { return "Limited logical soundness requiring additional premise validation"; } } private assessArgumentValidity( premises: string[], inference_steps: string[], conclusion: string ): number { let validity = 0.6; // Base validity // Adjust based on argument structure if (premises.length > 1) validity += 0.1; if (inference_steps.length > 2) validity += 0.1; if (conclusion.length > 10) validity += 0.1; // Non-trivial conclusion return Math.min(1.0, validity); } private assessArgumentStrength( premises: string[], inference_steps: string[] ): number { let strength = 0.5; // Base strength // Adjust based on argument quality if (premises.length > 2) strength += 0.2; if (inference_steps.length > 3) strength += 0.2; return Math.min(1.0, strength); } }

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