// 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})
${renderConversationDetails(conv)}
`;
});
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';
}
});
}