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:
parent
81f1d644e1
commit
b85bce8e09
@ -162,6 +162,9 @@ export default class JanInferenceCortexExtension extends LocalOAIEngine {
|
||||
},
|
||||
},
|
||||
])
|
||||
this.updateCortexConfig({
|
||||
huggingface_token: config.huggingface_token,
|
||||
})
|
||||
localStorage.setItem('cortex_migration_completed', 'true')
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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[] = []
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user