mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-05 12:43:27 +00:00
* First draft on image labeling * Fixing execution providers for other OSs * Better error handling and shutdown * Working with shallow media processor * bruh * Fix warnings * Now hooked to media processor job * Link desktop app with libonnxruntime to avoid TLS error during startup * Be able to change models on runtime Revert to use labels table instead of tags * A bug on a model-less inference * Show AI labels on Inspector - Change yolo inference to use half precision - Add labels api to core * Remove LD_PRELOAD * Fix race condition on model executor shutdown * Don't load all images in memory moron * Embeed yolo model in prod build - Change yolo model path to new one relative to executable * Disable volume watcher on linux, it was crashing the app - Invalidate labels when they are updated * Rust fmt * Minor changes * Gate onnxruntime linking to the ai-models feature * Add build script to sd-server to handle onnxruntime linking workaround * Move AI stuff to its own crate and normalize deps * Rust fmt * Don't regenerate labels unless asked to * Now blazingly fast * Bad merge * Fix * Fix * Add backend logic to download extra yolo models * Add models api route - Add api call to get available model version - Add api call to change the model version * Improve new model download logic - Add frontend to change image labeler model * Fix new model downloader * Fix model select width * invalidate labels count after media_processor generates a new output * Rename AI crate and first draft on download notifications * fix types --------- Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com> Co-authored-by: Brendan Allan <brendonovich@outlook.com>
101 lines
2.6 KiB
TypeScript
101 lines
2.6 KiB
TypeScript
import '@fontsource/inter/variable.css';
|
|
|
|
import { init, Integrations } from '@sentry/browser';
|
|
import dayjs from 'dayjs';
|
|
import advancedFormat from 'dayjs/plugin/advancedFormat';
|
|
import duration from 'dayjs/plugin/duration';
|
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
|
import { PropsWithChildren, Suspense } from 'react';
|
|
import { RouterProvider, RouterProviderProps } from 'react-router-dom';
|
|
import {
|
|
P2PContextProvider,
|
|
useBridgeSubscription,
|
|
useInvalidateQuery,
|
|
useLoadBackendFeatureFlags
|
|
} from '@sd/client';
|
|
import { toast, TooltipProvider } from '@sd/ui';
|
|
|
|
import { createRoutes } from './app';
|
|
import { P2P, useP2PErrorToast } from './app/p2p';
|
|
import { Devtools } from './components/Devtools';
|
|
import { WithPrismTheme } from './components/TextViewer/prism';
|
|
import ErrorFallback, { BetterErrorBoundary } from './ErrorFallback';
|
|
import { useTheme } from './hooks';
|
|
import { RoutingContext } from './RoutingContext';
|
|
|
|
export * from './app';
|
|
export { ErrorPage } from './ErrorFallback';
|
|
export * from './TabsContext';
|
|
export * from './util/keybind';
|
|
export * from './util/Platform';
|
|
|
|
dayjs.extend(advancedFormat);
|
|
dayjs.extend(relativeTime);
|
|
dayjs.extend(duration);
|
|
|
|
init({
|
|
dsn: 'https://2fb2450aabb9401b92f379b111402dbc@o1261130.ingest.sentry.io/4504053670412288',
|
|
environment: import.meta.env.MODE,
|
|
defaultIntegrations: false,
|
|
integrations: [new Integrations.HttpContext(), new Integrations.Dedupe()]
|
|
});
|
|
|
|
export type Router = RouterProviderProps['router'];
|
|
|
|
export function SpacedriveRouterProvider(props: {
|
|
routing: {
|
|
routes: ReturnType<typeof createRoutes>;
|
|
visible: boolean;
|
|
router: Router;
|
|
currentIndex: number;
|
|
maxIndex: number;
|
|
};
|
|
}) {
|
|
return (
|
|
<RoutingContext.Provider
|
|
value={{
|
|
routes: props.routing.routes,
|
|
visible: props.routing.visible,
|
|
currentIndex: props.routing.currentIndex,
|
|
maxIndex: props.routing.maxIndex
|
|
}}
|
|
>
|
|
<RouterProvider
|
|
router={props.routing.router}
|
|
future={{
|
|
v7_startTransition: true
|
|
}}
|
|
/>
|
|
</RoutingContext.Provider>
|
|
);
|
|
}
|
|
|
|
export function SpacedriveInterfaceRoot({ children }: PropsWithChildren) {
|
|
useLoadBackendFeatureFlags();
|
|
useP2PErrorToast();
|
|
useInvalidateQuery();
|
|
useTheme();
|
|
|
|
useBridgeSubscription(['notifications.listen'], {
|
|
onData({ data: { title, content, kind }, expires }) {
|
|
console.log(expires);
|
|
toast({ title, body: content }, { type: kind });
|
|
}
|
|
});
|
|
|
|
return (
|
|
<Suspense>
|
|
<BetterErrorBoundary FallbackComponent={ErrorFallback}>
|
|
<TooltipProvider>
|
|
<P2PContextProvider>
|
|
<P2P />
|
|
<Devtools />
|
|
<WithPrismTheme />
|
|
{children}
|
|
</P2PContextProvider>
|
|
</TooltipProvider>
|
|
</BetterErrorBoundary>
|
|
</Suspense>
|
|
);
|
|
}
|