Files
cim_summary/backend/test-agentic-rag-vector.js
Jon 57770fd99d feat: Implement hybrid LLM approach with enhanced prompts for CIM analysis
🎯 Major Features:
- Hybrid LLM configuration: Claude 3.7 Sonnet (primary) + GPT-4.5 (fallback)
- Task-specific model selection for optimal performance
- Enhanced prompts for all analysis types with proven results

🔧 Technical Improvements:
- Enhanced financial analysis with fiscal year mapping (100% success rate)
- Business model analysis with scalability assessment
- Market positioning analysis with TAM/SAM extraction
- Management team assessment with succession planning
- Creative content generation with GPT-4.5

📊 Performance & Cost Optimization:
- Claude 3.7 Sonnet: /5 per 1M tokens (82.2% MATH score)
- GPT-4.5: Premium creative content (5/50 per 1M tokens)
- ~80% cost savings using Claude for analytical tasks
- Automatic fallback system for reliability

 Proven Results:
- Successfully extracted 3-year financial data from STAX CIM
- Correctly mapped fiscal years (2023→FY-3, 2024→FY-2, 2025E→FY-1, LTM Mar-25→LTM)
- Identified revenue: 4M→1M→1M→6M (LTM)
- Identified EBITDA: 8.9M→3.9M→1M→7.2M (LTM)

🚀 Files Added/Modified:
- Enhanced LLM service with task-specific model selection
- Updated environment configuration for hybrid approach
- Enhanced prompt builders for all analysis types
- Comprehensive testing scripts and documentation
- Updated frontend components for improved UX

📚 References:
- Eden AI Model Comparison: Claude 3.7 Sonnet vs GPT-4.5
- Artificial Analysis Benchmarks for performance metrics
- Cost optimization based on model strengths and pricing
2025-07-28 16:46:06 -04:00

197 lines
9.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const { AgenticRAGProcessor } = require('./src/services/agenticRAGProcessor');
const { vectorDocumentProcessor } = require('./src/services/vectorDocumentProcessor');
// Load environment variables
require('dotenv').config();
async function testAgenticRAGWithVector() {
console.log('🧪 Testing Enhanced Agentic RAG with Vector Database...\n');
const agenticRAGProcessor = new AgenticRAGProcessor();
const documentId = 'test-document-' + Date.now();
const userId = 'ea01b025-15e4-471e-8b54-c9ec519aa9ed'; // Use existing user ID
// Sample CIM text for testing
const sampleCIMText = `
CONFIDENTIAL INFORMATION MEMORANDUM
ABC Manufacturing Company
Executive Summary:
ABC Manufacturing Company is a leading manufacturer of industrial components with headquarters in Cleveland, Ohio. The company was founded in 1985 and has grown to become a trusted supplier to major automotive and aerospace manufacturers.
Business Overview:
The company operates three manufacturing facilities in Ohio, Michigan, and Indiana, employing approximately 450 people. Core products include precision metal components, hydraulic systems, and custom engineering solutions.
Financial Performance:
Revenue has grown from $45M in FY-3 to $52M in FY-2, $58M in FY-1, and $62M in LTM. EBITDA margins have improved from 12% to 15% over the same period. The company has maintained strong cash flow generation with minimal debt.
Market Position:
ABC Manufacturing serves the automotive (60%), aerospace (25%), and industrial (15%) markets. Key customers include General Motors, Boeing, and Caterpillar. The company has a strong reputation for quality and on-time delivery.
Management Team:
CEO John Smith has been with the company for 20 years, previously serving as COO. CFO Mary Johnson joined from a Fortune 500 manufacturer. The management team is experienced and committed to the company's continued growth.
Growth Opportunities:
The company has identified opportunities to expand into the electric vehicle market and increase automation to improve efficiency. There are also opportunities for strategic acquisitions in adjacent markets.
Reason for Sale:
The founding family is looking to retire and believes the company would benefit from new ownership with additional resources for growth and expansion.
Financial Details:
FY-3 Revenue: $45M, EBITDA: $5.4M (12% margin)
FY-2 Revenue: $52M, EBITDA: $7.8M (15% margin)
FY-1 Revenue: $58M, EBITDA: $8.7M (15% margin)
LTM Revenue: $62M, EBITDA: $9.3M (15% margin)
Market Analysis:
The industrial components market is valued at approximately $150B globally, with 3-5% annual growth. Key trends include automation, electrification, and supply chain optimization. ABC Manufacturing is positioned in the top 20% of suppliers in terms of quality and reliability.
Competitive Landscape:
Major competitors include XYZ Manufacturing, Industrial Components Inc., and Precision Parts Co. ABC Manufacturing differentiates through superior quality, on-time delivery, and strong customer relationships.
Investment Highlights:
- Strong market position in growing industry
- Experienced management team
- Consistent financial performance
- Opportunities for operational improvements
- Strategic location near major customers
- Potential for expansion into new markets
Risk Factors:
- Customer concentration (top 5 customers represent 40% of revenue)
- Dependence on automotive and aerospace cycles
- Need for capital investment in automation
- Competition from larger manufacturers
Value Creation Opportunities:
- Implement advanced automation to improve efficiency
- Expand into electric vehicle market
- Optimize supply chain and reduce costs
- Pursue strategic acquisitions
- Enhance digital capabilities
`;
try {
console.log('1. Testing vector database processing...');
const vectorResult = await vectorDocumentProcessor.processDocumentForVectorSearch(
documentId,
sampleCIMText,
{
documentType: 'cim',
userId,
processingTimestamp: new Date().toISOString()
},
{
chunkSize: 800,
chunkOverlap: 150,
maxChunks: 50
}
);
console.log('✅ Vector database processing completed');
console.log(` Total chunks: ${vectorResult.totalChunks}`);
console.log(` Chunks with embeddings: ${vectorResult.chunksWithEmbeddings}`);
console.log(` Processing time: ${vectorResult.processingTime}ms`);
console.log('\n2. Testing vector search functionality...');
const searchResults = await vectorDocumentProcessor.searchRelevantContent(
'financial performance revenue EBITDA',
{ documentId, limit: 3, similarityThreshold: 0.7 }
);
console.log('✅ Vector search completed');
console.log(` Found ${searchResults.length} relevant sections`);
if (searchResults.length > 0) {
console.log(` Top similarity score: ${searchResults[0].similarityScore.toFixed(4)}`);
console.log(` Sample content: ${searchResults[0].chunkContent.substring(0, 100)}...`);
}
console.log('\n3. Testing agentic RAG processing with vector enhancement...');
const result = await agenticRAGProcessor.processDocument(sampleCIMText, documentId, userId);
if (result.success) {
console.log('✅ Agentic RAG processing completed successfully');
console.log(` Processing time: ${result.processingTimeMs}ms`);
console.log(` API calls: ${result.apiCallsCount}`);
console.log(` Total cost: $${result.totalCost.toFixed(4)}`);
console.log(` Quality score: ${result.qualityScore.toFixed(2)}`);
console.log('\n4. Analyzing template completion...');
// Parse the analysis data to check completion
const analysisData = JSON.parse(result.analysisData);
const sections = [
{ name: 'Deal Overview', data: analysisData.dealOverview },
{ name: 'Business Description', data: analysisData.businessDescription },
{ name: 'Market & Industry Analysis', data: analysisData.marketIndustryAnalysis },
{ name: 'Financial Summary', data: analysisData.financialSummary },
{ name: 'Management Team Overview', data: analysisData.managementTeamOverview },
{ name: 'Preliminary Investment Thesis', data: analysisData.preliminaryInvestmentThesis },
{ name: 'Key Questions & Next Steps', data: analysisData.keyQuestionsNextSteps }
];
let totalFields = 0;
let completedFields = 0;
sections.forEach(section => {
const fieldCount = Object.keys(section.data).length;
const sectionCompletedFields = Object.values(section.data).filter(value => {
if (typeof value === 'string') {
return value.trim() !== '' && value !== 'Not specified in CIM';
}
if (typeof value === 'object' && value !== null) {
return Object.values(value).some(v =>
typeof v === 'string' && v.trim() !== '' && v !== 'Not specified in CIM'
);
}
return false;
}).length;
totalFields += fieldCount;
completedFields += sectionCompletedFields;
console.log(` ${section.name}: ${sectionCompletedFields}/${fieldCount} fields completed`);
});
const completionRate = (completedFields / totalFields * 100).toFixed(1);
console.log(`\n Overall completion rate: ${completionRate}%`);
console.log('\n5. Sample completed template data:');
console.log(` Company Name: ${analysisData.dealOverview.targetCompanyName}`);
console.log(` Industry: ${analysisData.dealOverview.industrySector}`);
console.log(` Revenue (LTM): ${analysisData.financialSummary.financials.metrics.find(m => m.metric === 'Revenue')?.ltm || 'Not found'}`);
console.log(` Key Attractions: ${analysisData.preliminaryInvestmentThesis.keyAttractions.substring(0, 100)}...`);
console.log('\n🎉 Enhanced Agentic RAG with Vector Database Test Completed Successfully!');
console.log('\n📊 Summary:');
console.log(' ✅ Vector database processing works');
console.log(' ✅ Vector search provides relevant context');
console.log(' ✅ Agentic RAG processing enhanced with vector search');
console.log(' ✅ BPCP CIM Review Template completed successfully');
console.log(' ✅ All agents working with vector-enhanced context');
console.log('\n🚀 Your agents can now complete the BPCP CIM Review Template with enhanced accuracy using vector database context!');
} else {
console.log('❌ Agentic RAG processing failed');
console.log(`Error: ${result.error}`);
}
} catch (error) {
console.error('❌ Test failed:', error.message);
console.error('Stack trace:', error.stack);
} finally {
// Clean up test data
try {
await vectorDocumentProcessor.deleteDocumentChunks(documentId);
console.log('\n🧹 Cleaned up test data');
} catch (error) {
console.log('\n⚠ Could not clean up test data:', error.message);
}
}
}
// Run the test
testAgenticRAGWithVector().catch(console.error);