diff --git a/src/components/AIQueryInterface.astro b/src/components/AIQueryInterface.astro index 9007691..2b60021 100644 --- a/src/components/AIQueryInterface.astro +++ b/src/components/AIQueryInterface.astro @@ -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) { diff --git a/src/components/ToolFilters.astro b/src/components/ToolFilters.astro index c8ba300..5a8f262 100644 --- a/src/components/ToolFilters.astro +++ b/src/components/ToolFilters.astro @@ -307,6 +307,7 @@ const sortedTags = Object.entries(tagFrequency)