diff --git a/ui/desktop/src/App.tsx b/ui/desktop/src/App.tsx index b24e15e7..82862c3d 100644 --- a/ui/desktop/src/App.tsx +++ b/ui/desktop/src/App.tsx @@ -93,8 +93,8 @@ export default function App() { try { const config = window.electron.getConfig(); - const provider = config.GOOSE_PROVIDER ?? (await read('GOOSE_PROVIDER', false)); - const model = config.GOOSE_MODEL ?? (await read('GOOSE_MODEL', false)); + const provider = (await read('GOOSE_PROVIDER', false)) ?? config.GOOSE_DEFAULT_PROVIDER; + const model = (await read('GOOSE_MODEL', false)) ?? config.GOOSE_DEFAULT_MODEL; if (provider && model) { setView('chat'); diff --git a/ui/desktop/src/components/settings_v2/models/index.ts b/ui/desktop/src/components/settings_v2/models/index.ts index b7bb1cce..eb63cb6a 100644 --- a/ui/desktop/src/components/settings_v2/models/index.ts +++ b/ui/desktop/src/components/settings_v2/models/index.ts @@ -74,10 +74,12 @@ export async function changeModel({ interface getCurrentModelAndProviderProps { readFromConfig: (key: string, is_secret: boolean) => Promise; + writeToConfig?: (key: string, value: unknown, is_secret: boolean) => Promise; } export async function getCurrentModelAndProvider({ readFromConfig, + writeToConfig, }: getCurrentModelAndProviderProps) { let model: string; let provider: string; @@ -90,6 +92,26 @@ export async function getCurrentModelAndProvider({ console.error(`Failed to read GOOSE_MODEL or GOOSE_PROVIDER from config`); throw error; } + if (!model || !provider) { + console.log('[getCurrentModelAndProvider] Checking app environment as fallback'); + return getFallbackModelAndProvider(writeToConfig); + } + return { model: model, provider: provider }; +} + +export async function getFallbackModelAndProvider( + writeToConfig: (key: string, value: unknown, is_secret: boolean) => Promise +) { + const provider = window.appConfig.get('GOOSE_DEFAULT_PROVIDER'); + const model = window.appConfig.get('GOOSE_DEFAULT_MODEL'); + if (provider && model && writeToConfig) { + try { + await writeToConfig('GOOSE_MODEL', model, false); + await writeToConfig('GOOSE_PROVIDER', provider, false); + } catch (error) { + console.error('[getFallbackModelAndProvider] Failed to write to config', error); + } + } return { model: model, provider: provider }; } diff --git a/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx b/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx index 85e0641b..ce749765 100644 --- a/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx +++ b/ui/desktop/src/components/settings_v2/models/model_list/BaseModelsList.tsx @@ -40,7 +40,10 @@ export function BaseModelsList({ const initializeCurrentModel = async () => { try { - const result = await getCurrentModelAndProvider({ readFromConfig: read }); + const result = await getCurrentModelAndProvider({ + readFromConfig: read, + writeToConfig: upsert, + }); if (isMounted) { // try to look up the model in the modelList let currentModel: Model; diff --git a/ui/desktop/src/components/settings_v2/providers/modal/ProviderConfiguationModal.tsx b/ui/desktop/src/components/settings_v2/providers/modal/ProviderConfiguationModal.tsx index 774ea03d..0fc1b61e 100644 --- a/ui/desktop/src/components/settings_v2/providers/modal/ProviderConfiguationModal.tsx +++ b/ui/desktop/src/components/settings_v2/providers/modal/ProviderConfiguationModal.tsx @@ -118,7 +118,10 @@ export default function ProviderConfigurationModal() { const handleDelete = async () => { // Check if this is the currently active provider try { - const providerModel = await getCurrentModelAndProvider({ readFromConfig: read }); + const providerModel = await getCurrentModelAndProvider({ + readFromConfig: read, + writeToConfig: upsert, + }); if (currentProvider.name === providerModel.provider) { // It's the active provider - set state and show warning setIsActiveProvider(true); diff --git a/ui/desktop/src/main.ts b/ui/desktop/src/main.ts index 068352dc..f33b6193 100644 --- a/ui/desktop/src/main.ts +++ b/ui/desktop/src/main.ts @@ -113,7 +113,7 @@ const getGooseProvider = () => { //{env-macro-start}// //needed when goose is bundled for a specific provider //{env-macro-end}// - return [process.env.GOOSE_PROVIDER, process.env.GOOSE_MODEL]; + return [process.env.GOOSE_DEFAULT_PROVIDER, process.env.GOOSE_DEFAULT_MODEL]; }; const generateSecretKey = () => { @@ -144,8 +144,8 @@ let sharingUrl = getSharingUrl(); let gooseVersion = getVersion(); let appConfig = { - GOOSE_PROVIDER: provider, - GOOSE_MODEL: model, + GOOSE_DEFAULT_PROVIDER: provider, + GOOSE_DEFAULT_MODEL: model, GOOSE_API_HOST: 'http://127.0.0.1', GOOSE_PORT: 0, GOOSE_WORKING_DIR: '',