codenuk_backend_mine/services/template-manager/src/ai-service.js
2025-09-26 17:04:14 +05:30

292 lines
11 KiB
JavaScript

const express = require('express');
const cors = require('cors');
const axios = require('axios');
const app = express();
const PORT = process.env.PORT || 8009;
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
// Claude API configuration
const CLAUDE_API_KEY = process.env.CLAUDE_API_KEY || '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';
const CLAUDE_AVAILABLE = !!CLAUDE_API_KEY;
// Middleware
app.use(cors({
origin: "*",
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization', 'X-User-ID', 'X-User-Role']
}));
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true }));
// Health check endpoint
app.get('/health', (req, res) => {
res.status(200).json({
status: 'healthy',
service: 'template-manager-ai',
version: '1.0.0',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
features: {
ai_analysis: true
}
});
});
// AI Feature Analysis endpoint
app.post('/api/analyze-feature', async (req, res) => {
try {
console.log('🤖 [Template Manager AI] AI Analysis request received');
const { featureName, description, requirements = [], projectType } = req.body;
// Ensure requirements is always an array
const safeRequirements = Array.isArray(requirements) ? requirements : [];
console.log('📋 [Template Manager AI] Analyzing feature:', featureName);
console.log('📋 [Template Manager AI] Project type:', projectType);
console.log('📋 [Template Manager AI] Requirements:', safeRequirements);
let analysis;
// Try Claude AI first if available
if (CLAUDE_AVAILABLE) {
try {
console.log('🤖 [Template Manager AI] Using Claude AI for analysis...');
analysis = await analyzeWithClaude(featureName, description, safeRequirements, projectType);
} catch (claudeError) {
console.warn('⚠️ [Template Manager AI] Claude AI failed, falling back to rule-based analysis:', claudeError.message);
analysis = await analyzeWithRules(featureName, description, safeRequirements, projectType);
}
} else {
console.log('📋 [Template Manager AI] Using rule-based analysis (Claude not available)');
analysis = await analyzeWithRules(featureName, description, safeRequirements, projectType);
}
console.log('✅ [Template Manager AI] Analysis completed:', analysis.complexity, 'complexity');
res.json({
success: true,
analysis: analysis
});
} catch (error) {
console.error('❌ [Template Manager AI] AI Analysis error:', error);
res.status(500).json({
success: false,
error: error.message,
message: 'AI analysis failed'
});
}
});
// Claude AI Analysis function
async function analyzeWithClaude(featureName, description, requirements, projectType) {
const safeRequirements = Array.isArray(requirements) ? requirements : [];
const requirementsText = safeRequirements.length > 0 ? safeRequirements.map(req => `- ${req}`).join('\n') : 'No specific requirements provided';
const prompt = `Analyze this custom feature for a ${projectType || 'web application'} project:
Feature Name: ${featureName || 'Custom Feature'}
Description: ${description || 'No description provided'}
Detailed Requirements:
${requirementsText}
Based on these requirements, provide a detailed analysis in JSON format:
{
"feature_name": "Improved technical name",
"complexity": "low|medium|high",
"logicRules": ["Business rule 1", "Business rule 2", "Business rule 3"],
"implementation_details": ["Technical detail 1", "Technical detail 2", "Technical detail 3"],
"technical_requirements": ["Requirement 1", "Requirement 2", "Requirement 3"],
"estimated_effort": "1-2 weeks|2-3 weeks|3-4 weeks|4+ weeks",
"dependencies": ["Dependency 1", "Dependency 2"],
"api_endpoints": ["POST /api/endpoint1", "GET /api/endpoint2"],
"database_tables": ["table1", "table2"],
"confidence_score": 0.85
}
For complexity assessment:
- "low": Simple CRUD, basic features, minimal business logic
- "medium": Moderate business logic, some integrations, standard features
- "high": Complex business rules, external integrations, security requirements, real-time features
For logicRules, generate specific business rules based on the requirements like:
- Access control and authorization rules
- Data validation and business logic rules
- Workflow and process rules
- Security and compliance requirements
Return ONLY the JSON object, no other text.`;
try {
const response = await axios.post('https://api.anthropic.com/v1/messages', {
model: 'claude-3-5-sonnet-20241022',
max_tokens: 2000,
temperature: 0.1,
messages: [{ role: 'user', content: prompt }]
}, {
headers: {
'x-api-key': CLAUDE_API_KEY,
'Content-Type': 'application/json',
'anthropic-version': '2023-06-01'
}
});
const responseText = response.data.content[0].text.trim();
// Extract JSON from response
const jsonMatch = responseText.match(/\{[\s\S]*\}/);
if (jsonMatch) {
const analysis = JSON.parse(jsonMatch[0]);
console.log('✅ [Template Manager AI] Claude analysis successful');
return analysis;
} else {
throw new Error('No valid JSON found in Claude response');
}
} catch (error) {
console.error('❌ [Template Manager AI] Claude API error:', error.message);
throw error;
}
}
// Rule-based analysis function
async function analyzeWithRules(featureName, description, requirements, projectType) {
const complexity = analyzeComplexity(description, requirements);
const logicRules = generateLogicRules(featureName, description, requirements, projectType);
return {
feature_name: featureName || 'Custom Feature',
complexity: complexity,
logicRules: logicRules,
implementation_details: [
`Implement ${featureName || 'Custom Feature'} with proper validation`,
'Add error handling and logging',
'Include unit and integration tests'
],
technical_requirements: [
'Database schema design',
'API endpoint implementation',
'Frontend component development'
],
estimated_effort: complexity === 'high' ? '3-4 weeks' : complexity === 'low' ? '1-2 weeks' : '2-3 weeks',
dependencies: ['User authentication', 'Database setup'],
api_endpoints: [
`POST /api/${(featureName || 'custom-feature').toLowerCase().replace(/\s+/g, '-')}`,
`GET /api/${(featureName || 'custom-feature').toLowerCase().replace(/\s+/g, '-')}`
],
database_tables: [`${(featureName || 'custom_feature').toLowerCase().replace(/\s+/g, '_')}_table`],
confidence_score: 0.75
};
}
// Helper function to analyze complexity
function analyzeComplexity(description, requirements) {
const safeRequirements = Array.isArray(requirements) ? requirements : [];
const text = `${description || ''} ${safeRequirements.join(' ')}`.toLowerCase();
const highComplexityKeywords = ['encryption', 'hipaa', 'compliance', 'security', 'integration', 'real-time', 'ai', 'machine learning', 'blockchain', 'payment', 'transaction'];
const mediumComplexityKeywords = ['crud', 'database', 'api', 'authentication', 'validation', 'search', 'filter', 'workflow', 'approval'];
const lowComplexityKeywords = ['display', 'show', 'view', 'list', 'basic', 'simple'];
if (highComplexityKeywords.some(keyword => text.includes(keyword))) {
return 'high';
} else if (mediumComplexityKeywords.some(keyword => text.includes(keyword))) {
return 'medium';
} else if (lowComplexityKeywords.some(keyword => text.includes(keyword))) {
return 'low';
}
return 'medium'; // default
}
// Helper function to generate logic rules
function generateLogicRules(featureName, description, requirements, projectType) {
const rules = [];
const safeRequirements = Array.isArray(requirements) ? requirements : [];
const text = `${description || ''} ${safeRequirements.join(' ')}`.toLowerCase();
// Project type specific rules
if (projectType?.toLowerCase() === 'healthcare') {
rules.push('Only authorized caregivers can access patient data');
rules.push('All patient data access must be logged for HIPAA compliance');
rules.push('Patient data must be encrypted at rest and in transit');
}
if (projectType?.toLowerCase() === 'ecommerce') {
rules.push('Payment information must be PCI DSS compliant');
rules.push('Order status updates must be real-time');
rules.push('Inventory levels must be validated before purchase');
}
// Feature specific rules
if (text.includes('crud') || text.includes('manage')) {
rules.push('Users can only modify data they have created or been granted access to');
}
if (text.includes('patient') || text.includes('medical')) {
rules.push('Patient information can only be accessed by assigned caregivers');
rules.push('All patient data modifications require audit trail');
}
if (text.includes('payment') || text.includes('transaction')) {
rules.push('All financial transactions must be logged and auditable');
rules.push('Payment processing must include fraud detection');
}
if (text.includes('approval') || text.includes('workflow')) {
rules.push('Approval workflows must have configurable escalation rules');
rules.push('All approval decisions must be logged with timestamps');
}
// Generic rules
if (rules.length === 0) {
rules.push('Data validation must be performed on all inputs');
rules.push('User permissions must be checked before data access');
rules.push('All operations must be logged for audit purposes');
}
return rules;
}
// Root endpoint
app.get('/', (req, res) => {
res.json({
message: 'Template Manager AI Service - AI Feature Analysis',
version: '1.0.0',
endpoints: {
health: '/health',
ai_analysis: '/api/analyze-feature'
}
});
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error('❌ Error:', err.stack);
res.status(500).json({
error: 'Internal Server Error',
message: process.env.NODE_ENV === 'development' ? err.message : 'Something went wrong'
});
});
// 404 handler
app.use('*', (req, res) => {
res.status(404).json({
error: 'Not Found',
message: `Route ${req.originalUrl} not found`
});
});
// Start server
app.listen(PORT, '0.0.0.0', () => {
console.log('🚀 Template Manager AI Service started');
console.log(`📡 Server running on http://0.0.0.0:${PORT}`);
console.log('🏥 Health check: http://0.0.0.0:8009/health');
console.log('🤖 AI Analysis endpoint: http://0.0.0.0:8009/api/analyze-feature');
console.log('🎯 AI Feature Analysis ready!');
});