import React from 'react'; import { ASSETS } from '../config/constants'; import { getModelIcon, getShortModelName } from '../utils/modelIcons'; import LobeModelLogo from './LobeModelLogo.jsx'; /** * Get rank medal/trophy */ function getRankMedal(rank) { if (rank === 1) return { emoji: 'ð', color: '#FFD700', label: 'éç' }; if (rank === 2) return { emoji: 'ð¥', color: '#C0C0C0', label: 'é¶ç' }; if (rank === 3) return { emoji: 'ð¥', color: '#CD7F32', label: 'éç' }; return { emoji: `#${rank}`, color: '#333333', label: `#${rank}` }; } /** * Agent Performance Card Component * Horizontal dropdown panel displayed below the agent indicator bar */ export default function AgentCard({ agent, onClose, isClosing }) { if (!agent) return null; const bullTotal = agent.bull?.n || 0; const bullWins = agent.bull?.win || 0; const bullUnknown = agent.bull?.unknown || 0; const bearTotal = agent.bear?.n || 0; const bearWins = agent.bear?.win || 0; const bearUnknown = agent.bear?.unknown || 0; const totalSignals = bullTotal + bearTotal; const evaluatedBull = Math.max(bullTotal - bullUnknown, 0); const evaluatedBear = Math.max(bearTotal - bearUnknown, 0); const evaluatedTotal = evaluatedBull + evaluatedBear; const bullWinRate = evaluatedBull > 0 ? (bullWins / evaluatedBull) : null; const bearWinRate = evaluatedBear > 0 ? (bearWins / evaluatedBear) : null; const overallWinRate = agent.winRate != null ? agent.winRate : (evaluatedTotal > 0 ? ((bullWins + bearWins) / evaluatedTotal) : null); const overallColor = overallWinRate != null ? (overallWinRate >= 0.5 ? '#00C853' : '#FF1744') : '#555555'; const rankMedal = agent.rank ? getRankMedal(agent.rank) : null; const isPortfolioManager = agent.id === 'portfolio_manager'; const isRiskManager = agent.id === 'risk_manager'; const isValuationAnalyst = agent.id === 'valuation_analyst'; const displayName = isPortfolioManager ? 'å¢é' : agent.name; // Get model icon configuration const modelInfo = getModelIcon(agent.modelName, agent.modelProvider); const shortModelName = getShortModelName(agent.modelName); return (