| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import { useCallback, useEffect, useState } from 'react'; |
| import { API } from '../../helpers'; |
|
|
| export const useModelDeploymentSettings = () => { |
| const [loading, setLoading] = useState(true); |
| const [settings, setSettings] = useState({ |
| 'model_deployment.ionet.enabled': false, |
| }); |
| const [connectionState, setConnectionState] = useState({ |
| loading: false, |
| ok: null, |
| error: null, |
| }); |
|
|
| const getSettings = async () => { |
| try { |
| setLoading(true); |
| const res = await API.get('/api/deployments/settings'); |
| const { success, data } = res.data; |
|
|
| if (success) { |
| setSettings({ |
| 'model_deployment.ionet.enabled': data?.enabled === true, |
| }); |
| } |
| } catch (error) { |
| console.error('Failed to get model deployment settings:', error); |
| } finally { |
| setLoading(false); |
| } |
| }; |
|
|
| useEffect(() => { |
| getSettings(); |
| }, []); |
|
|
| const isIoNetEnabled = settings['model_deployment.ionet.enabled']; |
|
|
| const buildConnectionError = ( |
| rawMessage, |
| fallbackMessage = 'Connection failed', |
| ) => { |
| const message = (rawMessage || fallbackMessage).trim(); |
| const normalized = message.toLowerCase(); |
| if (normalized.includes('expired') || normalized.includes('expire')) { |
| return { type: 'expired', message }; |
| } |
| if ( |
| normalized.includes('invalid') || |
| normalized.includes('unauthorized') || |
| normalized.includes('api key') |
| ) { |
| return { type: 'invalid', message }; |
| } |
| if (normalized.includes('network') || normalized.includes('timeout')) { |
| return { type: 'network', message }; |
| } |
| return { type: 'unknown', message }; |
| }; |
|
|
| const testConnection = useCallback(async () => { |
| setConnectionState({ loading: true, ok: null, error: null }); |
| try { |
| const response = await API.post( |
| '/api/deployments/settings/test-connection', |
| {}, |
| { skipErrorHandler: true }, |
| ); |
|
|
| if (response?.data?.success) { |
| setConnectionState({ loading: false, ok: true, error: null }); |
| return; |
| } |
|
|
| const message = response?.data?.message || 'Connection failed'; |
| setConnectionState({ |
| loading: false, |
| ok: false, |
| error: buildConnectionError(message), |
| }); |
| } catch (error) { |
| if (error?.code === 'ERR_NETWORK') { |
| setConnectionState({ |
| loading: false, |
| ok: false, |
| error: { type: 'network', message: 'Network connection failed' }, |
| }); |
| return; |
| } |
| const rawMessage = |
| error?.response?.data?.message || error?.message || 'Unknown error'; |
| setConnectionState({ |
| loading: false, |
| ok: false, |
| error: buildConnectionError(rawMessage, 'Connection failed'), |
| }); |
| } |
| }, []); |
|
|
| useEffect(() => { |
| if (!loading && isIoNetEnabled) { |
| testConnection(); |
| return; |
| } |
| setConnectionState({ loading: false, ok: null, error: null }); |
| }, [loading, isIoNetEnabled, testConnection]); |
|
|
| return { |
| loading, |
| settings, |
| isIoNetEnabled, |
| refresh: getSettings, |
| connectionLoading: connectionState.loading, |
| connectionOk: connectionState.ok, |
| connectionError: connectionState.error, |
| testConnection, |
| }; |
| }; |
|
|