fix: migrate provider settings (#5205)

* chore: fix migrate api key

* chore: add logs

* chore: deprecate migration step

* chore: clean up

* fix: key apply
This commit is contained in:
Louis 2025-06-05 20:25:43 +07:00 committed by GitHub
parent 81f1d644e1
commit b85bce8e09
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 41 additions and 71 deletions

View File

@ -162,6 +162,9 @@ export default class JanInferenceCortexExtension extends LocalOAIEngine {
},
},
])
this.updateCortexConfig({
huggingface_token: config.huggingface_token,
})
localStorage.setItem('cortex_migration_completed', 'true')
}
}

View File

@ -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

View File

@ -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<ModelProvider[]> => {
const engines = !localStorage.getItem('migration_completed')
? await ExtensionManager.getInstance()
.get<EngineManagementExtension>(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<ModelProvider[]> => {
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<ModelProvider[]> => {
} as Model
})
}
return {
...provider,
models,
}
})
if (engines && Object.keys(engines).length > 0) {
localStorage.setItem('migration_completed', 'true')
}
const runtimeProviders: ModelProvider[] = []

View File

@ -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<EngineManagementExtension>(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)
}
}
}