CSF: global DC status

This commit is contained in:
Enrico Ros
2026-02-23 12:11:36 -08:00
parent 01299e4f19
commit c6208a2900
@@ -7,7 +7,56 @@ import type { DModelsService } from '../llms.service.types';
import { llmsStoreActions, useModelsStore } from '../store-llms';
const CSF_KEY = 'csf';
const CSF_SETUP_KEY = 'csf';
/**
* Hook to compute DC (Direct Connection) status across all services,
* with derived booleans and enable/disable-all handlers.
*/
export function useAllServicesDCStatus(services: readonly DModelsService[]) {
return React.useMemo(() => {
const dcStatus = _computeAllServicesDCStatus(services);
return {
dcStatus,
dcHasEligible: dcStatus.eligible > 0,
dcAllEnabled: dcStatus.enabled === dcStatus.eligible,
dcNoneEnabled: dcStatus.enabled === 0,
handleEnableAllDC: () => _setAllServicesDC(services, true),
handleDisableAllDC: () => _setAllServicesDC(services, false),
};
}, [services]);
}
/**
* Compute DC (Direct Connection) status across all configured services.
* Returns how many services are eligible for DC (vendor supports it and prerequisites met)
* and how many currently have it enabled.
*/
function _computeAllServicesDCStatus(services: readonly DModelsService[]): { unavailable: number; eligible: number; enabled: number } {
let unavailable = 0;
let eligible = 0;
let enabled = 0;
for (const service of services) {
const vendor = findModelVendor(service.vId);
if (!vendor?.csfAvailable?.(service.setup)) {
unavailable++;
} else {
eligible++;
if ((service.setup as any)?.[CSF_SETUP_KEY])
enabled++;
}
}
return { unavailable, eligible, enabled };
}
function _setAllServicesDC(services: readonly DModelsService[], enable: boolean): void {
for (const service of services) {
const vendor = findModelVendor(service.vId);
if (vendor?.csfAvailable?.(service.setup))
llmsStoreActions().updateServiceSettings(service.id, { [CSF_SETUP_KEY]: enable });
}
}
/**
@@ -27,17 +76,17 @@ export function useModelServiceClientSideFetch(enabled: boolean, model: DLLM | n
// actual state
const csfAvailable: boolean | undefined = !!vendor?.csfAvailable && vendor?.csfAvailable?.(service?.setup);
const csfActive: boolean | undefined = csfAvailable && (service?.setup as any)?.[CSF_KEY];
const csfActive: boolean | undefined = csfAvailable && (service?.setup as any)?.[CSF_SETUP_KEY];
const serviceId = service?.id || '';
const csfToggle = React.useCallback((value: boolean) => {
if (serviceId)
llmsStoreActions().updateServiceSettings(serviceId, { [CSF_KEY]: value });
llmsStoreActions().updateServiceSettings(serviceId, { [CSF_SETUP_KEY]: value });
}, [serviceId]);
const csfReset = React.useCallback(() => {
if (serviceId)
llmsStoreActions().updateServiceSettings(serviceId, { [CSF_KEY]: false });
llmsStoreActions().updateServiceSettings(serviceId, { [CSF_SETUP_KEY]: false });
}, [serviceId]);
return { csfAvailable, csfActive, csfToggle, csfReset, vendorName: vendor?.name || vendor?.id || 'AI Service' };