// Locomo benchmark tab functionality let locomoData = null; window.loadLocomoResults = async function() { try { const response = await fetch('/api/locomo'); locomoData = await response.json(); renderLocomoResults(); } catch (e) { document.getElementById('locomo-content').innerHTML = `
Error loading benchmark results: ${e.message}
`; } } function renderLocomoResults() { if (!locomoData) return; const content = document.getElementById('locomo-content'); // Overall stats const overallHtml = `

Overall Performance

Overall Accuracy
${locomoData.overall_accuracy.toFixed(2)}%
Correct Answers
${locomoData.total_correct} / ${locomoData.total_questions}
Conversations
${locomoData.conversation_results.length}
`; // Filter controls const filterHtml = `
`; // Build conversation sections let conversationsHtml = ''; locomoData.conversation_results.forEach((conv, idx) => { const accuracy = conv.metrics.accuracy.toFixed(2); const correctCount = conv.metrics.correct; const totalCount = conv.metrics.total; conversationsHtml += `

📊 ${conv.sample_id} ${accuracy}% (${correctCount}/${totalCount})

`; }); content.innerHTML = overallHtml + filterHtml + conversationsHtml; } function renderConversationDetails(conv) { const results = conv.metrics.detailed_results; let html = '
'; results.forEach((result, idx) => { const isCorrect = result.is_correct; const bgColor = isCorrect ? '#e8f5e9' : '#ffebee'; const icon = isCorrect ? '✅' : '❌'; const category = getCategoryName(result.category); html += `
${icon} Question ${idx + 1} ${category}
Q: ${result.question}
✓ Correct Answer:
${result.correct_answer}
${isCorrect ? '✓' : '✗'} Predicted Answer:
${result.predicted_answer}
📝 Show Reasoning & Retrieved Memories
System Reasoning:
${result.reasoning}
Judge Reasoning:
${result.correctness_reasoning || 'N/A'}
Retrieved Memories (${result.retrieved_memories ? result.retrieved_memories.length : 0}): ${renderRetrievedMemories(result.retrieved_memories)}
`; }); html += '
'; return html; } function renderRetrievedMemories(memories) { if (!memories || memories.length === 0) { return '
No memories retrieved
'; } let html = '
'; memories.forEach((mem, idx) => { html += `
Rank #${idx + 1} | Score: ${mem.score ? mem.score.toFixed(4) : 'N/A'}
${mem.text}
`; }); html += '
'; return html; } function getCategoryName(category) { const categories = { 1: 'Multi-hop', 2: 'Single-hop', 3: 'Temporal', 4: 'Open-domain' }; return categories[category] || 'Unknown'; } function toggleConversation(idx) { const elem = document.getElementById(`conv-${idx}`); if (elem.style.display === 'none') { elem.style.display = 'block'; } else { elem.style.display = 'none'; } } function filterAnswers() { const filter = document.querySelector('input[name="answer-filter"]:checked').value; const items = document.querySelectorAll('.qa-item'); items.forEach(item => { const isCorrect = item.dataset.correct === 'true'; if (filter === 'all') { item.style.display = 'block'; } else if (filter === 'correct' && isCorrect) { item.style.display = 'block'; } else if (filter === 'incorrect' && !isCorrect) { item.style.display = 'block'; } else { item.style.display = 'none'; } }); }