chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
import { SetupUI, setupConsola } from './setup-ui'
|
||||
import setupRemoteLLM from './setup-remote-llm'
|
||||
|
||||
/**
|
||||
* Ask lightweight setup questions so users can skip optional downloads.
|
||||
*/
|
||||
export default async function setupPreferences(
|
||||
localAICapability,
|
||||
existingLLMChoice,
|
||||
localAISetupState,
|
||||
voiceSetupState
|
||||
) {
|
||||
const defaultPreferences = {
|
||||
setupLocalAI: localAICapability.canInstallLocalAI,
|
||||
setupVoice: false,
|
||||
remoteLLMProvider: '',
|
||||
remoteLLMModel: '',
|
||||
remoteLLMAPIKeyEnv: '',
|
||||
remoteLLMAPIKey: ''
|
||||
}
|
||||
|
||||
if (
|
||||
process.env.IS_DOCKER === 'true' ||
|
||||
!process.stdin.isTTY ||
|
||||
!process.stdout.isTTY
|
||||
) {
|
||||
if (!localAICapability.canInstallLocalAI) {
|
||||
SetupUI.info(
|
||||
'This computer is not a good fit for local AI or voice features, so I will set up the essentials.'
|
||||
)
|
||||
}
|
||||
|
||||
return defaultPreferences
|
||||
}
|
||||
|
||||
const hasConfiguredLocalAI =
|
||||
existingLLMChoice.hasResolvedChoice &&
|
||||
existingLLMChoice.setupLocalAI &&
|
||||
existingLLMChoice.targetType !== 'defaultLocal'
|
||||
const hasInstalledLocalAI =
|
||||
localAISetupState.isInstalled || hasConfiguredLocalAI
|
||||
const hasInstalledVoice = voiceSetupState.isInstalled
|
||||
const hasUsableExistingLLMChoice =
|
||||
existingLLMChoice.hasResolvedChoice &&
|
||||
(existingLLMChoice.targetType !== 'defaultLocal' || hasInstalledLocalAI)
|
||||
|
||||
if (hasUsableExistingLLMChoice) {
|
||||
SetupUI.info(
|
||||
`I found your current AI setup, so I will keep using it: ${existingLLMChoice.label}`
|
||||
)
|
||||
}
|
||||
|
||||
if (hasInstalledLocalAI) {
|
||||
SetupUI.info(
|
||||
`Local AI is already installed${
|
||||
localAISetupState.label ? `: ${localAISetupState.label}` : ''
|
||||
}`
|
||||
)
|
||||
}
|
||||
|
||||
if (hasInstalledVoice) {
|
||||
SetupUI.info('Voice is already installed, so I will keep it updated.')
|
||||
}
|
||||
|
||||
if (!localAICapability.canInstallLocalAI) {
|
||||
if (!hasUsableExistingLLMChoice) {
|
||||
return {
|
||||
...defaultPreferences,
|
||||
setupVoice: hasInstalledVoice,
|
||||
...(await setupRemoteLLM())
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
...defaultPreferences,
|
||||
setupLocalAI: hasInstalledLocalAI,
|
||||
setupVoice: hasInstalledVoice
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasInstalledLocalAI || !hasInstalledVoice) {
|
||||
SetupUI.info(
|
||||
'I just have a few quick questions so I can set things up the way you want.'
|
||||
)
|
||||
}
|
||||
|
||||
const setupLocalAI = hasInstalledLocalAI
|
||||
? true
|
||||
: await setupConsola.prompt('Do you want me to set up local AI now?', {
|
||||
type: 'confirm',
|
||||
initial: true,
|
||||
cancel: 'default'
|
||||
})
|
||||
|
||||
let remoteLLMPreferences = {
|
||||
remoteLLMProvider: '',
|
||||
remoteLLMModel: '',
|
||||
remoteLLMAPIKeyEnv: '',
|
||||
remoteLLMAPIKey: ''
|
||||
}
|
||||
|
||||
if (!setupLocalAI && !hasUsableExistingLLMChoice) {
|
||||
remoteLLMPreferences = await setupRemoteLLM()
|
||||
}
|
||||
|
||||
const setupVoice = hasInstalledVoice
|
||||
? true
|
||||
: await setupConsola.prompt('Do you want to talk to me with your voice now?', {
|
||||
type: 'confirm',
|
||||
initial: false,
|
||||
cancel: 'default'
|
||||
})
|
||||
|
||||
const preferences = {
|
||||
...defaultPreferences,
|
||||
setupLocalAI,
|
||||
setupVoice,
|
||||
...remoteLLMPreferences
|
||||
}
|
||||
|
||||
return preferences
|
||||
}
|
||||
Reference in New Issue
Block a user