| 5936 | |
| 5937 | // Helper function to check if a value is empty/null/undefined |
| 5938 | const isEmpty = (val) => val === null || val === undefined || val === ''; |
| 5939 | |
| 5940 | // Set defaults based on service if values are empty |
| 5941 | if (selectedService === 'puter') { |
| 5942 | // Load Puter.js when Puter service is selected in the dialog |
| 5943 | loadPuterJS().catch(err => { |
| 5944 | console.warn('[AI Config] Failed to preload Puter.js:', err); |
| 5945 | // Don't block dialog opening if Puter.js fails to load |
| 5946 | }); |
| 5947 | |
| 5948 | // For Puter.com, always use defaults (endpoint and model are required for Puter.com) |
| 5949 | const puterEndpoint = 'https://js.puter.com/v2/'; |
| 5950 | const puterModel = 'gpt-5-nano'; |
| 5951 | |
| 5952 | console.log('[AI Config] Setting Puter.com defaults:', { endpointEl: !!endpointEl, modelEl: !!modelEl, endpointValue, modelValue }); |
| 5953 | |
| 5954 | if (endpointEl) { |
| 5955 | // Always set the Puter.com endpoint |
| 5956 | endpointEl.value = puterEndpoint; |
| 5957 | endpointEl.required = false; |
| 5958 | console.log('[AI Config] Set endpoint to:', endpointEl.value); |
| 5959 | // Save it if it wasn't already saved or if it's different |
| 5960 | if (isEmpty(endpointValue) || endpointValue !== puterEndpoint) { |
| 5961 | await window.electron.saveSetting('apiEndpoint', puterEndpoint).catch((err) => { |
| 5962 | console.error('[AI Config] Error saving endpoint:', err); |
| 5963 | }); |
| 5964 | } |
| 5965 | } else { |
| 5966 | console.error('[AI Config] endpointEl not found!'); |
| 5967 | } |
| 5968 | if (modelEl) { |
| 5969 | // Always set the Puter.com model |
| 5970 | modelEl.value = puterModel; |
| 5971 | console.log('[AI Config] Set model to:', modelEl.value); |
| 5972 | // Save it if it wasn't already saved or if it's different |
| 5973 | if (isEmpty(modelValue) || modelValue !== puterModel) { |
| 5974 | await window.electron.saveSetting('aiModel', puterModel).catch((err) => { |
| 5975 | console.error('[AI Config] Error saving model:', err); |
| 5976 | }); |
| 5977 | } |
| 5978 | } else { |
| 5979 | console.error('[AI Config] modelEl not found!'); |
| 5980 | } |
| 5981 | if (keyEl) { |
| 5982 | keyEl.value = ''; |
| 5983 | } |
| 5984 | } else if (selectedService === 'openai') { |
| 5985 | if (endpointEl) { |
| 5986 | endpointEl.value = endpointValue || 'https://api.openai.com/v1'; |
| 5987 | endpointEl.required = true; |
| 5988 | } |
| 5989 | if (modelEl) { |
| 5990 | modelEl.value = modelValue || 'gpt-4o-mini'; |
| 5991 | } |
| 5992 | if (keyEl) { |
| 5993 | keyEl.value = apiKeyValue || ''; |
| 5994 | } |
| 5995 | } else if (selectedService === 'claude') { |