feat(gateway): global tier provider/model defaults with catalog-backed options
This commit is contained in:
@@ -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 });
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user