diff --git a/ui/desktop/src/App.tsx b/ui/desktop/src/App.tsx index 4c874616..c87aa5a1 100644 --- a/ui/desktop/src/App.tsx +++ b/ui/desktop/src/App.tsx @@ -38,7 +38,7 @@ export type View = | 'moreModels' | 'configureProviders' | 'configPage' - | 'alphaConfigureProviders' + | 'ConfigureProviders' | 'settingsV2' | 'sessions'; @@ -274,13 +274,16 @@ export default function App() {
- {view === 'welcome' && ( - { - setView('chat'); - }} - /> - )} + {view === 'welcome' && + (process.env.ALPHA ? ( + setView('chat')} isOnboarding={true} /> + ) : ( + { + setView('chat'); + }} + /> + ))} {view === 'settings' && (process.env.ALPHA ? ( )} - {view === 'alphaConfigureProviders' && ( - setView('chat')} /> + {view === 'ConfigureProviders' && ( + setView('chat')} isOnboarding={false} /> )} {view === 'chat' && !isLoadingSession && ( Add Model -
diff --git a/ui/desktop/src/components/settings_v2/providers/ProviderGrid.tsx b/ui/desktop/src/components/settings_v2/providers/ProviderGrid.tsx index c673f51a..b2b93548 100644 --- a/ui/desktop/src/components/settings_v2/providers/ProviderGrid.tsx +++ b/ui/desktop/src/components/settings_v2/providers/ProviderGrid.tsx @@ -1,6 +1,5 @@ import React, { memo, useMemo, useCallback } from 'react'; import { ProviderCard } from './subcomponents/ProviderCard'; -import OnRefresh from './callbacks/RefreshActiveProviders'; import { ProviderModalProvider, useProviderModal } from './modal/ProviderModalProvider'; import ProviderConfigurationModal from './modal/ProviderConfiguationModal'; import { ProviderDetails } from '../../../api'; @@ -18,10 +17,12 @@ const ProviderCards = memo(function ProviderCards({ providers, isOnboarding, refreshProviders, + onProviderLaunch, }: { providers: ProviderDetails[]; isOnboarding: boolean; refreshProviders?: () => void; + onProviderLaunch: (provider: ProviderDetails) => void; }) { const { openModal } = useProviderModal(); @@ -41,9 +42,8 @@ const ProviderCards = memo(function ProviderCards({ [openModal, refreshProviders] ); - const handleLaunch = useCallback(() => { - OnRefresh(); - }, []); + // We don't need an intermediate function here + // Just pass the onProviderLaunch directly // Use useMemo to memoize the cards array const providerCards = useMemo(() => { @@ -52,11 +52,11 @@ const ProviderCards = memo(function ProviderCards({ key={provider.name} provider={provider} onConfigure={() => configureProviderViaModal(provider)} - onLaunch={handleLaunch} + onLaunch={() => onProviderLaunch(provider)} isOnboarding={isOnboarding} /> )); - }, [providers, isOnboarding, configureProviderViaModal, handleLaunch]); + }, [providers, isOnboarding, configureProviderViaModal, onProviderLaunch]); return <>{providerCards}; }); @@ -65,10 +65,12 @@ export default memo(function ProviderGrid({ providers, isOnboarding, refreshProviders, + onProviderLaunch, }: { providers: ProviderDetails[]; isOnboarding: boolean; refreshProviders?: () => void; + onProviderLaunch?: (provider: ProviderDetails) => void; }) { // Memoize the modal provider and its children to avoid recreating on every render const modalProviderContent = useMemo( @@ -78,11 +80,12 @@ export default memo(function ProviderGrid({ providers={providers} isOnboarding={isOnboarding} refreshProviders={refreshProviders} + onProviderLaunch={onProviderLaunch} /> ), - [providers, isOnboarding, refreshProviders] + [providers, isOnboarding, refreshProviders, onProviderLaunch] ); return {modalProviderContent}; diff --git a/ui/desktop/src/components/settings_v2/providers/ProviderSettingsPage.tsx b/ui/desktop/src/components/settings_v2/providers/ProviderSettingsPage.tsx index 0c56e7a0..121d0247 100644 --- a/ui/desktop/src/components/settings_v2/providers/ProviderSettingsPage.tsx +++ b/ui/desktop/src/components/settings_v2/providers/ProviderSettingsPage.tsx @@ -5,8 +5,13 @@ import ProviderGrid from './ProviderGrid'; import { useConfig } from '../../ConfigContext'; import { ProviderDetails } from '../../../api/types.gen'; -export default function ProviderSettings({ onClose }: { onClose: () => void }) { - const { getProviders } = useConfig(); +interface ProviderSettingsProps { + onClose: () => void; + isOnboarding: boolean; +} + +export default function ProviderSettings({ onClose, isOnboarding }: ProviderSettingsProps) { + const { getProviders, upsert } = useConfig(); const [loading, setLoading] = useState(true); const [providers, setProviders] = useState([]); const initialLoadDone = useRef(false); @@ -43,14 +48,39 @@ export default function ProviderSettings({ onClose }: { onClose: () => void }) { } }, [getProviders]); + // Handler for when a provider is launched if this component is used as part of onboarding page + const handleProviderLaunch = useCallback( + (provider: ProviderDetails) => { + console.log(`Launching with provider: ${provider.name}`); + try { + // set GOOSE_PROVIDER in the config file + // @lily-de: leaving as test for now to avoid messing with my config directly + upsert('GOOSE_PROVIDER_TEST', provider.name, false).then((_) => + console.log('Setting GOOSE_PROVIDER to', provider.name) + ); + // set GOOSE_MODEL in the config file + upsert('GOOSE_MODEL_TEST', provider.metadata.default_model, false).then((_) => + console.log('Setting GOOSE_MODEL to', provider.metadata.default_model) + ); + } catch (error) { + console.error(`Failed to initialize with provider ${provider.name}:`, error); + } + onClose(); + }, + [onClose, upsert] + ); + return (
- -

Configure

+ {/* Only show back button if not in onboarding mode */} + {!isOnboarding && } +

+ {isOnboarding ? 'Select a Provider' : 'Configure'} +

@@ -66,7 +96,8 @@ export default function ProviderSettings({ onClose }: { onClose: () => void }) { ) : ( )} diff --git a/ui/desktop/src/components/settings_v2/providers/callbacks/AddProviderParameters.tsx b/ui/desktop/src/components/settings_v2/providers/callbacks/AddProviderParameters.tsx deleted file mode 100644 index 8a15d070..00000000 --- a/ui/desktop/src/components/settings_v2/providers/callbacks/AddProviderParameters.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { toast } from 'react-toastify'; - -export default function OnAdd() { - toast.success('adding worked!'); -} diff --git a/ui/desktop/src/components/settings_v2/providers/callbacks/CallbackRegistry.tsx b/ui/desktop/src/components/settings_v2/providers/callbacks/CallbackRegistry.tsx deleted file mode 100644 index baf4a6ce..00000000 --- a/ui/desktop/src/components/settings_v2/providers/callbacks/CallbackRegistry.tsx +++ /dev/null @@ -1,45 +0,0 @@ -// First define the default handlers separately -import OnAdd from './AddProviderParameters'; -import OnDelete from './DeleteProviderParameters'; - -const DEFAULT_HANDLERS = { - onAdd: (providerId: string, config: any) => { - OnAdd(); - }, - onDelete: (providerId: string) => { - OnDelete(); - }, - onShowSettings: (providerId: string) => { - /* default settings behavior */ - }, -}; - -// Then use them in the registry -export const CALLBACK_REGISTRY = { - default: DEFAULT_HANDLERS, - - anthropic: { - onAdd: (providerId: string, config: any) => { - /* Anthropic-specific add */ - }, - // Fall back to default handlers - onDelete: DEFAULT_HANDLERS.onDelete, - onShowSettings: DEFAULT_HANDLERS.onShowSettings, - }, - - ollama: { - onAdd: (providerId: string, config: any) => { - /* Ollama-specific add */ - }, - onDelete: (providerId: string) => { - /* Ollama-specific delete */ - }, - onRefresh: (providerId: string) => { - /* Ollama-specific refresh */ - }, - }, -} as const; - -// Type for the handlers -export type ActionHandler = typeof DEFAULT_HANDLERS; -export type ProviderId = keyof typeof CALLBACK_REGISTRY; diff --git a/ui/desktop/src/components/settings_v2/providers/callbacks/DeleteProviderParameters.tsx b/ui/desktop/src/components/settings_v2/providers/callbacks/DeleteProviderParameters.tsx deleted file mode 100644 index 227c2e13..00000000 --- a/ui/desktop/src/components/settings_v2/providers/callbacks/DeleteProviderParameters.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { toast } from 'react-toastify'; - -export default function OnDelete() { - toast.success('deleting worked!'); -} diff --git a/ui/desktop/src/components/settings_v2/providers/callbacks/RefreshActiveProviders.tsx b/ui/desktop/src/components/settings_v2/providers/callbacks/RefreshActiveProviders.tsx deleted file mode 100644 index 669676b1..00000000 --- a/ui/desktop/src/components/settings_v2/providers/callbacks/RefreshActiveProviders.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { toast } from 'react-toastify'; - -export default function OnRefresh() { - toast.success('refreshing worked!'); -} diff --git a/ui/desktop/src/components/settings_v2/providers/callbacks/ShowModal.tsx b/ui/desktop/src/components/settings_v2/providers/callbacks/ShowModal.tsx deleted file mode 100644 index 0121fd9a..00000000 --- a/ui/desktop/src/components/settings_v2/providers/callbacks/ShowModal.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { toast } from 'react-toastify'; - -export default function OnShowModal() { - toast.success('here is the modal yay!'); -} diff --git a/ui/desktop/src/components/settings_v2/providers/callbacks/UpdateProviderParameters.tsx b/ui/desktop/src/components/settings_v2/providers/callbacks/UpdateProviderParameters.tsx deleted file mode 100644 index bb5b3bab..00000000 --- a/ui/desktop/src/components/settings_v2/providers/callbacks/UpdateProviderParameters.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { toast } from 'react-toastify'; - -export default function OnShowSettings() { - toast.success('settings update worked!'); -} diff --git a/ui/desktop/src/components/settings_v2/providers/subcomponents/buttons/CardButtons.tsx b/ui/desktop/src/components/settings_v2/providers/subcomponents/buttons/CardButtons.tsx index 5cae8831..a6476edb 100644 --- a/ui/desktop/src/components/settings_v2/providers/subcomponents/buttons/CardButtons.tsx +++ b/ui/desktop/src/components/settings_v2/providers/subcomponents/buttons/CardButtons.tsx @@ -94,10 +94,6 @@ export function GreenCheckButton({ ); } -export function ExclamationButton({ tooltip, className, ...props }: ActionButtonProps) { - return {}} {...props} />; -} - export function ConfigureSettingsButton({ tooltip, className, ...props }: ActionButtonProps) { return ( ; -} - -export function DeleteButton({ tooltip, className, ...props }: ActionButtonProps) { - return ; -} - -export function RefreshButton({ tooltip, className, ...props }: ActionButtonProps) { - return ; -} - export function RocketButton({ tooltip, className, ...props }: ActionButtonProps) { return (