feat(chat): user-friendly badge — hide model/cost for non-admins, show only quality + time
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions

This commit is contained in:
Maciej Pienczyn 2026-03-28 15:01:39 +01:00
parent 4b10d38022
commit 7fe5eb929b

View File

@ -2583,24 +2583,17 @@ async function sendMessage() {
};
const infoBadge = document.createElement('div');
infoBadge.className = 'thinking-info-badge';
const modelLabels = {
'flash': '⚡ Flash', 'pro': '🧠 Pro',
'gemini-3-flash-preview': '⚡ Flash',
'gemini-3.1-flash-lite-preview': '⚡ Lite',
'gemini-3.1-pro-preview': '🧠 Pro'
};
const actualModel = chunk.model || currentModel;
const modelLabel = modelLabels[actualModel] || modelLabels[currentModel] || actualModel;
const latencySec = ((chunk.latency_ms || 0) / 1000).toFixed(1);
const costStr = (chunk.cost_usd || 0) > 0 ? `$${(chunk.cost_usd).toFixed(4)}` : '$0.00';
const complexityIcons = {'simple': '💬', 'medium': '🔍', 'complex': '🧠'};
const thinkingLabels = {'minimal': 'szybki', 'low': 'analiza', 'high': 'głęboka analiza'};
const cIcon = complexityIcons[chunk.complexity] || '';
const tLabel = thinkingLabels[chunk.thinking] || '';
let badgeHTML = `<span class="badge-chip model">${modelLabel}</span>`;
if (cIcon && tLabel) badgeHTML += `<span class="badge-chip thinking">${cIcon} ${tLabel}</span>`;
const qualityLabels = {'minimal': 'szybka odpowiedź', 'low': 'standardowa', 'high': 'dokładna analiza'};
const qLabel = qualityLabels[chunk.thinking] || 'standardowa';
let badgeHTML = `<span class="badge-chip thinking">${qLabel}</span>`;
badgeHTML += `<span class="badge-chip time">⏱ ${latencySec}s</span>`;
if (IS_ADMIN) badgeHTML += `<span class="badge-chip cost">💰 ${costStr}</span>`;
if (IS_ADMIN) {
const modelLabels = {'gemini-3-flash-preview': 'Flash', 'gemini-3.1-flash-lite-preview': 'Lite', 'gemini-3.1-pro-preview': 'Pro'};
const costStr = (chunk.cost_usd || 0) > 0 ? `$${(chunk.cost_usd).toFixed(4)}` : '$0.00';
badgeHTML += `<span class="badge-chip model">${modelLabels[chunk.model || ''] || 'Flash'}</span>`;
badgeHTML += `<span class="badge-chip cost">💰 ${costStr}</span>`;
}
infoBadge.innerHTML = badgeHTML;
streamContent.appendChild(infoBadge);
@ -2716,15 +2709,14 @@ function addMessage(role, content, animate = true, techInfo = null) {
'gemini-2.5-flash': '⚡ Flash (fallback)',
'gemini-3-pro-preview': '🧠 Pro'
};
const modelLabel = modelLabels[modelName] || modelName;
// Format cost
const costStr = costUsd > 0 ? `$${costUsd.toFixed(4)}` : '$0.00';
// Build badge content with chips
let badgeHTML = `<span class="badge-chip model">${modelLabel}</span>`;
badgeHTML += `<span class="badge-chip time">⏱ ${latencySec}s</span>`;
if (IS_ADMIN) badgeHTML += `<span class="badge-chip cost">💰 ${costStr}</span>`;
// Build badge content — user-friendly labels
let badgeHTML = `<span class="badge-chip time">⏱ ${latencySec}s</span>`;
if (IS_ADMIN) {
const modelLabels = {'flash': 'Flash', 'pro': 'Pro', 'gemini-3-flash-preview': 'Flash', 'gemini-3.1-flash-lite-preview': 'Lite'};
const costStr = costUsd > 0 ? `$${costUsd.toFixed(4)}` : '$0.00';
badgeHTML += `<span class="badge-chip model">${modelLabels[modelName] || modelName}</span>`;
badgeHTML += `<span class="badge-chip cost">💰 ${costStr}</span>`;
}
infoBadge.innerHTML = badgeHTML;
contentDiv.appendChild(infoBadge);