|
|
|
|
@@ -369,6 +369,7 @@ class AIQueryInterface {
|
|
|
|
|
this.statusInterval = null;
|
|
|
|
|
this.microTaskInterval = null;
|
|
|
|
|
this.currentMicroTaskStep = 0;
|
|
|
|
|
this.lastApiResponse = null;
|
|
|
|
|
|
|
|
|
|
console.log('[AI Interface] Initializing...');
|
|
|
|
|
this.initializeElements();
|
|
|
|
|
@@ -699,6 +700,8 @@ class AIQueryInterface {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const data = await response.json();
|
|
|
|
|
this.lastApiResponse = data;
|
|
|
|
|
this.currentRecommendation = data.recommendation;
|
|
|
|
|
|
|
|
|
|
console.log('[AI Interface] Received response:', {
|
|
|
|
|
ok: response.ok,
|
|
|
|
|
@@ -1329,26 +1332,54 @@ class AIQueryInterface {
|
|
|
|
|
|
|
|
|
|
const inputValue = this.elements.input ? this.elements.input.value : '';
|
|
|
|
|
|
|
|
|
|
// Extract real data from the current recommendation and stored response
|
|
|
|
|
const processingStats = this.currentRecommendation.processingStats || {};
|
|
|
|
|
const aiModel = processingStats.aiModel || 'unknown';
|
|
|
|
|
const toolsDataHash = processingStats.toolsDataHash || 'unknown';
|
|
|
|
|
|
|
|
|
|
// Get real AI parameters from the processing stats
|
|
|
|
|
const aiParameters = {
|
|
|
|
|
maxTokens: processingStats.maxTokensUsed || 0,
|
|
|
|
|
temperature: processingStats.temperature || 0.3,
|
|
|
|
|
totalTokensUsed: processingStats.totalAITokensUsed || 0,
|
|
|
|
|
microTasksCompleted: processingStats.microTasksCompleted || 0,
|
|
|
|
|
microTasksFailed: processingStats.microTasksFailed || 0,
|
|
|
|
|
embeddingsUsed: processingStats.embeddingsUsed || false
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Extract real context data from the recommendation
|
|
|
|
|
const rawContext = {
|
|
|
|
|
selectedTools: this.currentRecommendation.recommended_tools?.map(tool => ({
|
|
|
|
|
name: tool.name,
|
|
|
|
|
type: tool.type,
|
|
|
|
|
phase: tool.phase,
|
|
|
|
|
priority: tool.priority,
|
|
|
|
|
confidence: tool.confidence,
|
|
|
|
|
justification: tool.justification
|
|
|
|
|
})) || [],
|
|
|
|
|
backgroundKnowledge: this.currentRecommendation.background_knowledge?.map(bg => ({
|
|
|
|
|
concept_name: bg.concept_name,
|
|
|
|
|
relevance: bg.relevance
|
|
|
|
|
})) || [],
|
|
|
|
|
contextHistory: [], // This would need to be passed from server if needed
|
|
|
|
|
embeddingsSimilarities: {} // This would need to be passed from server if needed
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const exportData = {
|
|
|
|
|
metadata: {
|
|
|
|
|
timestamp: new Date().toISOString(),
|
|
|
|
|
version: "1.0",
|
|
|
|
|
toolsDataHash: "current", // This would come from dataService
|
|
|
|
|
aiModel: "claude-sonnet-4", // This would come from aiService
|
|
|
|
|
aiParameters: {},
|
|
|
|
|
toolsDataHash: toolsDataHash,
|
|
|
|
|
aiModel: aiModel,
|
|
|
|
|
aiParameters: aiParameters,
|
|
|
|
|
userQuery: inputValue,
|
|
|
|
|
mode: this.currentMode,
|
|
|
|
|
processingStats: {},
|
|
|
|
|
processingStats: processingStats,
|
|
|
|
|
exportedBy: 'ForensicPathways'
|
|
|
|
|
},
|
|
|
|
|
recommendation: this.currentRecommendation,
|
|
|
|
|
auditTrail: this.currentRecommendation.auditTrail || [],
|
|
|
|
|
rawContext: {
|
|
|
|
|
selectedTools: [],
|
|
|
|
|
backgroundKnowledge: [],
|
|
|
|
|
contextHistory: [],
|
|
|
|
|
embeddingsSimilarities: {}
|
|
|
|
|
}
|
|
|
|
|
rawContext: rawContext
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const blob = new Blob([JSON.stringify(exportData, null, 2)], {
|
|
|
|
|
@@ -1362,7 +1393,12 @@ class AIQueryInterface {
|
|
|
|
|
a.click();
|
|
|
|
|
URL.revokeObjectURL(url);
|
|
|
|
|
|
|
|
|
|
console.log('[AI Interface] Analysis downloaded');
|
|
|
|
|
console.log('[AI Interface] Analysis downloaded with real metadata:', {
|
|
|
|
|
aiModel,
|
|
|
|
|
toolsDataHash: toolsDataHash.slice(0, 8) + '...',
|
|
|
|
|
tokensUsed: aiParameters.totalTokensUsed,
|
|
|
|
|
auditEntries: exportData.auditTrail.length
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
validateUploadStructure(data) {
|
|
|
|
|
|