airefactor #19

Merged
mstoeck3 merged 25 commits from airefactor into main 2025-08-17 22:59:31 +00:00
3 changed files with 49 additions and 18 deletions
Showing only changes of commit 15d302031e - Show all commits

View File

@ -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) {

View File

@ -307,6 +307,7 @@ const sortedTags = Object.entries(tagFrequency)
<script define:vars={{ toolsData: data.tools, tagFrequency, sortedTags }}>
window.toolsData = toolsData;
import { isToolHosted } from "../utils/clientUtils.js";
document.addEventListener('DOMContentLoaded', () => {
const elements = {
@ -433,13 +434,6 @@ const sortedTags = Object.entries(tagFrequency)
}
}
function isToolHosted(tool) {
return tool.projectUrl !== undefined &&
tool.projectUrl !== null &&
tool.projectUrl !== "" &&
tool.projectUrl.trim() !== "";
}
function initTagCloud() {
const visibleCount = 20;
elements.tagCloudItems.forEach((item, index) => {

View File

@ -675,6 +675,7 @@ input[type="checkbox"] {
border-radius: 0.25rem;
font-size: 0.75rem;
margin: 0.125rem;
max-height: 1.5rem;
}
/* ===================================================================