import { useEffect, useState } from 'react'; import { getStoredGatewayToken, getStoredGatewayUrl } from '../../lib/gateway-client'; import { useGatewayStore } from '../../store/gatewayStore'; import { useChatStore } from '../../store/chatStore'; import { silentErrorHandler } from '../../lib/error-utils'; // Helper function to format context window size function formatContextWindow(tokens?: number): string { if (!tokens) return ''; if (tokens >= 1000000) { return `${(tokens / 1000000).toFixed(1)}M`; } if (tokens >= 1000) { return `${(tokens / 1000).toFixed(0)}K`; } return `${tokens}`; } export function ModelsAPI() { const { connectionState, connect, disconnect, quickConfig, saveQuickConfig, models, modelsLoading, modelsError, loadModels } = useGatewayStore(); const { currentModel, setCurrentModel } = useChatStore(); const [gatewayUrl, setGatewayUrl] = useState(getStoredGatewayUrl()); const [gatewayToken, setGatewayToken] = useState(quickConfig.gatewayToken || getStoredGatewayToken()); const connected = connectionState === 'connected'; const connecting = connectionState === 'connecting' || connectionState === 'reconnecting'; // Load models when connected useEffect(() => { if (connected && models.length === 0 && !modelsLoading) { loadModels(); } }, [connected, models.length, modelsLoading, loadModels]); useEffect(() => { setGatewayUrl(quickConfig.gatewayUrl || getStoredGatewayUrl()); setGatewayToken(quickConfig.gatewayToken || getStoredGatewayToken()); }, [quickConfig.gatewayToken, quickConfig.gatewayUrl]); const handleReconnect = () => { disconnect(); setTimeout(() => connect( gatewayUrl || quickConfig.gatewayUrl || 'ws://127.0.0.1:50051/ws', gatewayToken || quickConfig.gatewayToken || getStoredGatewayToken() ).catch(silentErrorHandler('ModelsAPI')), 500); }; const handleSaveGatewaySettings = () => { saveQuickConfig({ gatewayUrl, gatewayToken, }).catch(silentErrorHandler('ModelsAPI')); }; const handleRefreshModels = () => { loadModels(); }; return (
加载模型列表失败
{modelsError}
请先连接 Gateway 以获取可用模型列表
暂无可用模型
请检查 Gateway 配置或 Provider 设置