const fs = require('fs'); const v3 = fs.readFileSync('agent-evolution/ideas/apaw_agent_model_research_v3.html', 'utf8'); const dataStart = v3.indexOf('// ACTUAL STATE from _kilo.zip'); const renderStart = v3.indexOf('// ======================= RENDER ======================='); if (dataStart === -1 || renderStart === -1) { console.error('Cannot find markers'); process.exit(1); } const mapping = `// BENCHMARK_DATA_PLACEHOLDER - will be replaced by build script const EMBEDDED_DATA = {}; // === MAP EMBEDDED_DATA -> original v3 format === const allModels = EMBEDDED_DATA.models || []; const scoreModelIds = Object.keys((EMBEDDED_DATA.agent_model_scores || [])[0]?.scores || {}); const activeModels = allModels.filter(m => scoreModelIds.includes(m.id)); const cfg = (EMBEDDED_DATA.agent_current_config || []).map(c => { const modelId = (c.model || '').replace('ollama-cloud/', ''); const badge = c.badge_type || ( modelId.includes('qwen3') ? 'qwen' : modelId.includes('minimax') ? 'minimax' : modelId.includes('nemotron') ? 'nemotron' : modelId.includes('glm') ? 'glm' : modelId.includes('kimi') ? 'kimi' : modelId.includes('deepseek') ? 'deepseek' : 'groq' ); return { a: c.agent, m: modelId, p: c.provider || 'Ollama', cat: c.category || 'General', b: badge, fit: c.fit_score || 0, s: c.status || 'good', prev: c.previous_model }; }); const groqModels = (EMBEDDED_DATA.groq_models || []).map(g => ({ id: g.id, rpm: g.rpm, rpd: g.rpd, tpm: g.tpm, tpd: g.tpd, speed: g.speed, use: g.use_case })); const ollamaModels = activeModels.map(m => ({ n: m.name, org: m.organization, par: m.parameters, ctx: m.context_window, swe: m.swe_bench, ifScore: m.if_score, cat: m.categories || [], str: m.description, tags: m.tags || [], or: m.openrouter, groqSpeed: m.speed_tps })); const ifScores = {}; activeModels.forEach((m, i) => { if (m.if_score) ifScores[i] = m.if_score; }); const hmModels = activeModels.map(m => ({ n: m.display_name || m.name?.split(' ').pop() || m.id, p: m.provider === 'ollama-cloud' ? 'Ollama Cloud' : m.provider === 'openrouter' ? 'OpenRouter' : m.provider || 'Ollama', if: m.if_score || 0 })); const hmAgents = (EMBEDDED_DATA.agent_model_scores || []).map(ag => { const scores = activeModels.map(m => ag.scores?.[m.id] ?? 0); const fullModelId = allModels[ag.current_model_index]?.id; const c = activeModels.findIndex(m => m.id === fullModelId); return { n: ag.agent, c: c, re: ag.reasoning_effort || 'M', s: scores }; }); const recs = (EMBEDDED_DATA.recommendations || []).map(r => ({ a: r.agent, from: r.from_model, fromP: r.from_provider || 'Ollama', to: r.to_model, toP: r.to_provider || 'Ollama', imp: r.impact || 'low', q: r.quality_change || '0', sp: r.speed_change || '=', ctx: r.context_change || '-', prov: r.provider_change || r.to_provider || 'Ollama', r: r.rationale })); const impactData = (EMBEDDED_DATA.impact_data || []).map(d => ({ cat: d.category, b: d.before, a: d.after, d: d.delta, n: d.notes || d.note })); `; const final = v3.substring(0, dataStart) + mapping + v3.substring(renderStart); fs.writeFileSync('agent-evolution/research-dashboard.template.html', final); console.log('Template written:', final.length, 'chars,', final.split('\n').length, 'lines');