diff --git a/core/http/react-ui/src/pages/Manage.jsx b/core/http/react-ui/src/pages/Manage.jsx index 522f873d0..56ab73f23 100644 --- a/core/http/react-ui/src/pages/Manage.jsx +++ b/core/http/react-ui/src/pages/Manage.jsx @@ -1,12 +1,20 @@ import { useState, useEffect, useCallback } from 'react' -import { useNavigate, useOutletContext } from 'react-router-dom' +import { useNavigate, useOutletContext, useSearchParams } from 'react-router-dom' import ResourceMonitor from '../components/ResourceMonitor' import { useModels } from '../hooks/useModels' import { backendControlApi, modelsApi, backendsApi, systemApi } from '../utils/api' +const TABS = [ + { key: 'models', label: 'Models', icon: 'fa-brain' }, + { key: 'backends', label: 'Backends', icon: 'fa-server' }, +] + export default function Manage() { const { addToast } = useOutletContext() const navigate = useNavigate() + const [searchParams, setSearchParams] = useSearchParams() + const initialTab = searchParams.get('tab') || localStorage.getItem('manage-tab') || 'models' + const [activeTab, setActiveTab] = useState(TABS.some(t => t.key === initialTab) ? initialTab : 'models') const { models, loading: modelsLoading, refetch: refetchModels } = useModels() const [loadedModelIds, setLoadedModelIds] = useState(new Set()) const [backends, setBackends] = useState([]) @@ -14,6 +22,12 @@ export default function Manage() { const [reloading, setReloading] = useState(false) const [reinstallingBackends, setReinstallingBackends] = useState(new Set()) + const handleTabChange = (tab) => { + setActiveTab(tab) + localStorage.setItem('manage-tab', tab) + setSearchParams({ tab }) + } + const fetchLoadedModels = useCallback(async () => { try { const info = await systemApi.info() @@ -37,9 +51,12 @@ export default function Manage() { }, []) useEffect(() => { - fetchLoadedModels() - fetchBackends() - }, [fetchLoadedModels, fetchBackends]) + if (activeTab === 'models') { + fetchLoadedModels() + } else { + fetchBackends() + } + }, [activeTab, fetchLoadedModels, fetchBackends]) const handleStopModel = async (modelName) => { if (!confirm(`Stop model ${modelName}?`)) return @@ -106,18 +123,33 @@ export default function Manage() { return (
Manage installed models and backends