feat(gateway): global tier provider/model defaults with catalog-backed options

This commit is contained in:
William Valentin
2026-02-19 10:17:16 -08:00
parent 5883e046ac
commit 708683297a
7 changed files with 495 additions and 5 deletions
+20
View File
@@ -95,6 +95,14 @@ export interface SystemHandlerDeps {
getNodeLocations?: (opts?: { role?: string; nodeId?: string; limit?: number }) => NodeLocationEntry[];
/** Optional callback to retrieve registered node connection snapshots. */
getNodes?: (opts?: { role?: string; platform?: string; limit?: number }) => NodeEntry[];
/** Optional callback to retrieve provider model catalogs. */
getModelCatalog?: (opts?: { provider?: string; forceRefresh?: boolean }) => Promise<Array<{
provider: string;
models: string[];
source: 'api' | 'config' | 'unavailable';
error?: string;
fetchedAt: number;
}>>;
}
export function createSystemHandlers(deps: SystemHandlerDeps) {
@@ -265,5 +273,17 @@ export function createSystemHandlers(deps: SystemHandlerDeps) {
}
return makeResponse(request.id, { requests: deps.getActiveRequests() });
},
'system.modelCatalog': async (request: GatewayRequest): Promise<OutboundMessage> => {
if (!deps.getModelCatalog) {
return makeResponse(request.id, { providers: [] });
}
const params = request.params as { provider?: string; forceRefresh?: boolean } | undefined;
const providers = await deps.getModelCatalog({
provider: params?.provider,
forceRefresh: params?.forceRefresh === true,
});
return makeResponse(request.id, { providers });
},
};
}