diff --git a/extensions/inference-cortex-extension/src/index.ts b/extensions/inference-cortex-extension/src/index.ts index 4ce2fb8f38..f029b6a961 100644 --- a/extensions/inference-cortex-extension/src/index.ts +++ b/extensions/inference-cortex-extension/src/index.ts @@ -162,6 +162,9 @@ export default class JanInferenceCortexExtension extends LocalOAIEngine { }, }, ]) + this.updateCortexConfig({ + huggingface_token: config.huggingface_token, + }) localStorage.setItem('cortex_migration_completed', 'true') } } diff --git a/web-app/src/providers/DataProvider.tsx b/web-app/src/providers/DataProvider.tsx index 49d9dcf4be..d0e3dacd4c 100644 --- a/web-app/src/providers/DataProvider.tsx +++ b/web-app/src/providers/DataProvider.tsx @@ -12,7 +12,6 @@ import { useMCPServers } from '@/hooks/useMCPServers' import { getMCPConfig } from '@/services/mcp' import { useAssistant } from '@/hooks/useAssistant' import { getAssistants } from '@/services/assistants' -import { migrateData } from '@/utils/migration' import { onOpenUrl, getCurrent as getCurrentDeepLinkUrls, @@ -45,7 +44,6 @@ export function DataProvider() { .catch((error) => { console.warn('Failed to load assistants, keeping default:', error) }) - migrateData() getCurrentDeepLinkUrls().then(handleDeepLink) onOpenUrl(handleDeepLink) // eslint-disable-next-line react-hooks/exhaustive-deps diff --git a/web-app/src/services/providers.ts b/web-app/src/services/providers.ts index 73f3c5432e..1ac7754da6 100644 --- a/web-app/src/services/providers.ts +++ b/web-app/src/services/providers.ts @@ -1,12 +1,22 @@ import { models as providerModels } from 'token.js' import { mockModelProvider } from '@/mock/data' -import { EngineManager, SettingComponentProps } from '@janhq/core' +import { + EngineManagementExtension, + EngineManager, + ExtensionTypeEnum, + SettingComponentProps, +} from '@janhq/core' import { ModelCapabilities } from '@/types/models' import { modelSettings } from '@/lib/predefined' import { fetchModels } from './models' import { ExtensionManager } from '@/lib/extension' export const getProviders = async (): Promise => { + const engines = !localStorage.getItem('migration_completed') + ? await ExtensionManager.getInstance() + .get(ExtensionTypeEnum.Engine) + ?.getEngines() + : {} const builtinProviders = mockModelProvider.map((provider) => { let models = provider.models as Model[] if (Object.keys(providerModels).includes(provider.provider)) { @@ -14,6 +24,29 @@ export const getProviders = async (): Promise => { provider.provider as unknown as keyof typeof providerModels ].models as unknown as string[] + if (engines && Object.keys(engines).length > 0) { + for (const [key, value] of Object.entries(engines)) { + const providerName = key.replace('google_gemini', 'gemini') + if (provider.provider !== providerName) continue + const engine = value[0] as + | { + api_key?: string + url?: string + engine?: string + } + | undefined + if (engine && 'api_key' in engine) { + const settings = provider?.settings.map((e) => { + if (e.key === 'api-key') + e.controller_props.value = (engine.api_key as string) ?? '' + return e + }) + + provider.settings = settings + } + } + } + if (Array.isArray(builtInModels)) models = builtInModels.map((model) => { const modelManifest = models.find((e) => e.id === model) @@ -33,11 +66,15 @@ export const getProviders = async (): Promise => { } as Model }) } + return { ...provider, models, } }) + if (engines && Object.keys(engines).length > 0) { + localStorage.setItem('migration_completed', 'true') + } const runtimeProviders: ModelProvider[] = [] diff --git a/web-app/src/utils/migration.ts b/web-app/src/utils/migration.ts deleted file mode 100644 index 45857722b7..0000000000 --- a/web-app/src/utils/migration.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { useModelProvider } from '@/hooks/useModelProvider' -import { ExtensionManager } from '@/lib/extension' -import { - EngineManagementExtension, - Engines, - ExtensionTypeEnum, -} from '@janhq/core' - -/** - * Migrates legacy browser data to new browser session. - */ -export const migrateData = async () => { - if (!localStorage.getItem('migration_completed')) { - let engines: Engines | undefined - // Wait for the extension manager to be ready - let attempts = 0 - await new Promise((resolve) => { - const checkExtensionManager = async () => { - engines = await ExtensionManager.getInstance() - .get(ExtensionTypeEnum.Engine) - ?.getEngines() - if (engines && attempts < 10) { - resolve(true) - } else if (attempts >= 10) { - resolve(false) - } else { - attempts += 1 - setTimeout(checkExtensionManager, 1000) - } - } - checkExtensionManager() - }) - try { - // Migrate provider configurations - if (engines) { - for (const [key, value] of Object.entries(engines)) { - const providerName = key.replace('google_gemini', 'gemini') - const engine = value[0] as - | { - api_key?: string - url?: string - engine?: string - } - | undefined - if (engine && 'api_key' in engine) { - const provider = useModelProvider - .getState() - .getProviderByName(providerName) - const settings = provider?.settings.map((e) => { - if (e.key === 'api-key') - e.controller_props.value = (engine.api_key as string) ?? '' - return e - }) - if (provider) { - useModelProvider.getState().updateProvider(providerName, { - ...provider, - settings: settings ?? [], - }) - } - } - } - } - localStorage.setItem('migration_completed', 'true') - } catch (error) { - console.error('Migration failed:', error) - } - } -}