jan/web-app/src/utils/getModelToStart.ts

70 lines
2.0 KiB
TypeScript

import { localStorageKey } from '@/constants/localStorage'
import type { ModelInfo } from '@janhq/core'
export const getLastUsedModel = (): {
provider: string
model: string
} | null => {
try {
const stored = localStorage.getItem(localStorageKey.lastUsedModel)
return stored ? JSON.parse(stored) : null
} catch (error) {
console.debug('Failed to get last used model from localStorage:', error)
return null
}
}
// Helper function to determine which model to start
export const getModelToStart = (params: {
selectedModel?: ModelInfo | null
selectedProvider?: string | null
getProviderByName: (name: string) => ModelProvider | undefined
}): { model: string; provider: ModelProvider } | null => {
const { selectedModel, selectedProvider, getProviderByName } = params
// Use last used model if available
const lastUsedModel = getLastUsedModel()
if (lastUsedModel) {
const provider = getProviderByName(lastUsedModel.provider)
if (provider && provider.models.some((m) => m.id === lastUsedModel.model)) {
return { model: lastUsedModel.model, provider }
} else {
// Last used model not found under provider, fallback to first llamacpp model
const llamacppProvider = getProviderByName('llamacpp')
if (
llamacppProvider &&
llamacppProvider.models &&
llamacppProvider.models.length > 0
) {
return {
model: llamacppProvider.models[0].id,
provider: llamacppProvider,
}
}
}
}
// Use selected model if available
if (selectedModel && selectedProvider) {
const provider = getProviderByName(selectedProvider)
if (provider) {
return { model: selectedModel.id, provider }
}
}
// Use first model from llamacpp provider
const llamacppProvider = getProviderByName('llamacpp')
if (
llamacppProvider &&
llamacppProvider.models &&
llamacppProvider.models.length > 0
) {
return {
model: llamacppProvider.models[0].id,
provider: llamacppProvider,
}
}
return null
}