first commit

This commit is contained in:
2025-11-06 11:08:59 +01:00
commit 3c5117c2c3
85 changed files with 13275 additions and 0 deletions
+248
View File
@@ -0,0 +1,248 @@
const Groq = require('groq-sdk');
const logger = require('../utils/logger');
const { groqConfig, validateConfig, getModelConfig } = require('../config/groq');
class GroqService {
constructor() {
// Validate configuration
validateConfig();
this.groq = new Groq({
apiKey: groqConfig.apiKey,
baseURL: groqConfig.baseURL
});
this.model = groqConfig.model;
this.config = groqConfig;
}
async generateResponse(messages, options = {}) {
try {
const startTime = Date.now();
const response = await this.groq.chat.completions.create({
model: this.model,
messages: messages,
temperature: options.temperature || 0.7,
max_tokens: options.maxTokens || 3000,
top_p: options.topP || 0.9,
stream: options.stream || false
});
const endTime = Date.now();
const processingTime = (endTime - startTime) / 1000;
const result = {
content: response.choices[0].message.content,
usage: response.usage,
processingTime,
model: this.model,
finishReason: response.choices[0].finish_reason
};
logger.info(`Groq API call completed in ${processingTime}s, tokens: ${result.usage.total_tokens}`);
return result;
} catch (error) {
logger.error('Groq API error:', error);
throw new Error(`Groq API error: ${error.message}`);
}
}
async generateEngineeringPlan(query, context = {}) {
const systemPrompt = `You are an expert engineering consultant with deep knowledge in structural engineering, mechanical engineering, electrical engineering, and civil engineering.
Your task is to analyze engineering problems and create detailed, step-by-step plans to solve them.
Guidelines:
1. Break down complex problems into clear, actionable steps
2. Consider safety, feasibility, and best practices
3. Include relevant calculations, standards, and regulations
4. Suggest appropriate tools and resources
5. Provide time estimates for each step
6. Consider potential challenges and mitigation strategies
Context: ${JSON.stringify(context)}
Create a comprehensive plan for the following engineering question:`;
const messages = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: query }
];
return await this.generateResponse(messages, {
temperature: 0.3, // Lower temperature for more focused, technical responses
maxTokens: 3000
});
}
async executePlan(plan, tools = []) {
const systemPrompt = `You are an engineering execution specialist. You have access to various tools to help execute engineering plans.
Available tools:
${tools.map(tool => `- ${tool.name}: ${tool.description}`).join('\n')}
Your task is to execute the given plan step by step, using the appropriate tools when needed.
Guidelines:
1. Execute each step of the plan systematically
2. Use tools when necessary to gather information or perform calculations
3. Provide detailed results for each step
4. Document any issues or deviations from the plan
5. Ensure all safety and quality standards are met
Execute the following plan:`;
const messages = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: plan }
];
return await this.generateResponse(messages, {
temperature: 0.5,
maxTokens: 4000
});
}
async expandQuery(query, context = {}) {
const systemPrompt = `You are a query expansion specialist for engineering problems. Your task is to take a user's engineering question and expand it into a more comprehensive, detailed query that will help find the most relevant information.
Guidelines:
1. Identify key engineering concepts and terminology
2. Suggest related questions and considerations
3. Include relevant standards, codes, and regulations
4. Consider different engineering disciplines that might be relevant
5. Add context about project scope, constraints, and requirements
Context: ${JSON.stringify(context)}
Expand the following engineering query:`;
const messages = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: query }
];
return await this.generateResponse(messages, {
temperature: 0.4,
maxTokens: 1500
});
}
async generateReport(data, reportType = 'general') {
const systemPrompts = {
general: `You are an engineering report generator. Create a comprehensive, professional engineering report based on the provided data.`,
technical: `You are a technical engineering report generator. Create a detailed technical report with calculations, analysis, and recommendations.`,
summary: `You are an engineering summary generator. Create a concise executive summary of the engineering analysis and findings.`
};
const systemPrompt = systemPrompts[reportType] || systemPrompts.general;
const messages = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: `Generate a ${reportType} report based on this data: ${JSON.stringify(data)}` }
];
return await this.generateResponse(messages, {
temperature: 0.3,
maxTokens: 2500
});
}
async searchAndAnalyze(query, searchResults = []) {
const systemPrompt = `You are an engineering analysis specialist. Analyze the provided search results and provide a comprehensive analysis of the engineering question.
Guidelines:
1. Synthesize information from multiple sources
2. Identify key findings and insights
3. Highlight important calculations, formulas, or methodologies
4. Note any conflicting information or gaps
5. Provide recommendations based on the analysis
6. Cite relevant sources and standards
Search results: ${JSON.stringify(searchResults)}
Analyze the following engineering question:`;
const messages = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: query }
];
return await this.generateResponse(messages, {
temperature: 0.4,
maxTokens: 3000
});
}
async validatePlan(plan, feedback = []) {
const systemPrompt = `You are an engineering plan validator. Review the provided plan and feedback to determine if the plan is valid, complete, and follows engineering best practices.
Guidelines:
1. Check for completeness and logical flow
2. Verify technical accuracy
3. Ensure safety considerations are addressed
4. Validate against engineering standards
5. Consider the provided feedback
6. Suggest improvements if needed
Feedback: ${JSON.stringify(feedback)}
Validate the following plan:`;
const messages = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: plan }
];
return await this.generateResponse(messages, {
temperature: 0.2,
maxTokens: 2000
});
}
async getModelInfo() {
try {
// Get available models
const models = await this.groq.models.list();
return {
currentModel: this.model,
availableModels: models.data,
apiStatus: 'connected'
};
} catch (error) {
logger.error('Error getting model info:', error);
return {
currentModel: this.model,
availableModels: [],
apiStatus: 'error',
error: error.message
};
}
}
async testConnection() {
try {
const testResponse = await this.generateResponse([
{ role: 'user', content: 'Hello, this is a test message.' }
], {
maxTokens: 10
});
return {
success: true,
response: testResponse,
model: this.model
};
} catch (error) {
logger.error('Groq connection test failed:', error);
return {
success: false,
error: error.message
};
}
}
}
module.exports = new GroqService();