mirror of
https://github.com/mudler/LocalAI.git
synced 2026-06-07 16:27:09 -04:00
useOperations() spun up its own setInterval per hook instance, so on pages like /app/models the OperationsBar in App.jsx plus the page's own useOperations() call each polled /api/operations at 1 Hz - 2 RPS sustained for the whole session, repeated on Backends and Chat. Lift the poller into an OperationsProvider mounted under AuthProvider so all consumers (OperationsBar, Models, Backends, Chat) share one timer. The hook file re-exports from the context to keep call sites unchanged. Assisted-by: Claude:claude-opus-4-7 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
import { StrictMode, Suspense } from 'react'
|
|
import { createRoot } from 'react-dom/client'
|
|
import { RouterProvider } from 'react-router-dom'
|
|
import { ThemeProvider } from './contexts/ThemeContext'
|
|
import { BrandingProvider } from './contexts/BrandingContext'
|
|
import { AuthProvider } from './context/AuthContext'
|
|
import { OperationsProvider } from './contexts/OperationsContext'
|
|
import { router } from './router'
|
|
import './i18n'
|
|
import '@fortawesome/fontawesome-free/css/all.min.css'
|
|
import '@fontsource-variable/geist'
|
|
import '@fontsource-variable/geist-mono'
|
|
import './index.css'
|
|
import './theme.css'
|
|
import './App.css'
|
|
|
|
function BootFallback() {
|
|
return (
|
|
<div className="app-boot-spinner" role="status" aria-label="Loading">
|
|
<div className="app-boot-spinner-dot" />
|
|
</div>
|
|
)
|
|
}
|
|
|
|
// BrandingProvider sits outside AuthProvider so the login screen — which
|
|
// renders before authentication completes — can pick up the configured
|
|
// instance name and logo from the public /api/branding endpoint.
|
|
createRoot(document.getElementById('root')).render(
|
|
<StrictMode>
|
|
<Suspense fallback={<BootFallback />}>
|
|
<ThemeProvider>
|
|
<BrandingProvider>
|
|
<AuthProvider>
|
|
<OperationsProvider>
|
|
<RouterProvider router={router} />
|
|
</OperationsProvider>
|
|
</AuthProvider>
|
|
</BrandingProvider>
|
|
</ThemeProvider>
|
|
</Suspense>
|
|
</StrictMode>,
|
|
)
|