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')
|
localStorage.setItem('cortex_migration_completed', 'true')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,6 @@ import { useMCPServers } from '@/hooks/useMCPServers'
|
|||||||
import { getMCPConfig } from '@/services/mcp'
|
import { getMCPConfig } from '@/services/mcp'
|
||||||
import { useAssistant } from '@/hooks/useAssistant'
|
import { useAssistant } from '@/hooks/useAssistant'
|
||||||
import { getAssistants } from '@/services/assistants'
|
import { getAssistants } from '@/services/assistants'
|
||||||
import { migrateData } from '@/utils/migration'
|
|
||||||
import {
|
import {
|
||||||
onOpenUrl,
|
onOpenUrl,
|
||||||
getCurrent as getCurrentDeepLinkUrls,
|
getCurrent as getCurrentDeepLinkUrls,
|
||||||
@ -45,7 +44,6 @@ export function DataProvider() {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.warn('Failed to load assistants, keeping default:', error)
|
console.warn('Failed to load assistants, keeping default:', error)
|
||||||
})
|
})
|
||||||
migrateData()
|
|
||||||
getCurrentDeepLinkUrls().then(handleDeepLink)
|
getCurrentDeepLinkUrls().then(handleDeepLink)
|
||||||
onOpenUrl(handleDeepLink)
|
onOpenUrl(handleDeepLink)
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
|||||||
@ -1,12 +1,22 @@
|
|||||||
import { models as providerModels } from 'token.js'
|
import { models as providerModels } from 'token.js'
|
||||||
import { mockModelProvider } from '@/mock/data'
|
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 { ModelCapabilities } from '@/types/models'
|
||||||
import { modelSettings } from '@/lib/predefined'
|
import { modelSettings } from '@/lib/predefined'
|
||||||
import { fetchModels } from './models'
|
import { fetchModels } from './models'
|
||||||
import { ExtensionManager } from '@/lib/extension'
|
import { ExtensionManager } from '@/lib/extension'
|
||||||
|
|
||||||
export const getProviders = async (): Promise<ModelProvider[]> => {
|
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) => {
|
const builtinProviders = mockModelProvider.map((provider) => {
|
||||||
let models = provider.models as Model[]
|
let models = provider.models as Model[]
|
||||||
if (Object.keys(providerModels).includes(provider.provider)) {
|
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
|
provider.provider as unknown as keyof typeof providerModels
|
||||||
].models as unknown as string[]
|
].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))
|
if (Array.isArray(builtInModels))
|
||||||
models = builtInModels.map((model) => {
|
models = builtInModels.map((model) => {
|
||||||
const modelManifest = models.find((e) => e.id === model)
|
const modelManifest = models.find((e) => e.id === model)
|
||||||
@ -33,11 +66,15 @@ export const getProviders = async (): Promise<ModelProvider[]> => {
|
|||||||
} as Model
|
} as Model
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...provider,
|
...provider,
|
||||||
models,
|
models,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
if (engines && Object.keys(engines).length > 0) {
|
||||||
|
localStorage.setItem('migration_completed', 'true')
|
||||||
|
}
|
||||||
|
|
||||||
const runtimeProviders: ModelProvider[] = []
|
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