@dbx-tools/shared-model-gateway 0.9.61 → 0.9.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -67,14 +67,18 @@ import {
67
67
  } from "@dbx-tools/shared-model-gateway/options";
68
68
 
69
69
  const options = resolveModelGatewayOptions({
70
- host: "localhost",
71
- port: 4400,
70
+ listen: "localhost:4400",
71
+ modelClass: "chat-balanced",
72
72
  bodyLimit: "100mb",
73
73
  });
74
74
 
75
75
  ModelGatewayOptionsSchema.parse(options);
76
76
  ```
77
77
 
78
+ `ModelSelectionOptionsSchema` owns the mutually exclusive `model` and
79
+ `modelClass` fields shared by model-gateway and Genie Code callers. Omit both to
80
+ select the best available chat model.
81
+
78
82
  ## Package API
79
83
 
80
84
  - `client` creates the model-discovery client and typed HTTP errors.
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-model-gateway";
6
- export const PACKAGE_VERSION = "0.9.61";
6
+ export const PACKAGE_VERSION = "0.9.65";
7
7
  export * as client from "./src/client.ts";
8
8
  export * as contracts from "./src/contracts.ts";
9
9
  export * as models from "./src/models.ts";
@@ -15,6 +15,6 @@ export { ClientProtocolSchema, UpstreamProtocolSchema, ModelCapabilitiesSchema,
15
15
  export type { ClientProtocol, UpstreamProtocol, ModelCapabilities, ModelTarget, RequestedFeatures, GatewayRoute, ModelCapabilityOverride, ResolveRouteInput } from "./src/contracts.ts";
16
16
  export { OpenAIModelCapabilitiesSchema, OpenAIModelSchema, OpenAIModelListResponseSchema, CodexReasoningLevelSchema, CodexTruncationPolicySchema, CodexModelSchema, CodexModelListResponseSchema, ModelListResponseSchema, EmbeddingRequestSchema, EmbeddingDataSchema, EmbeddingUsageSchema, EmbeddingResponseSchema, OpenAIErrorResponseSchema, AnthropicErrorResponseSchema, GatewayErrorResponseSchema } from "./src/models.ts";
17
17
  export type { OpenAIModelCapabilities, OpenAIModel, OpenAIModelListResponse, CodexReasoningLevel, CodexTruncationPolicy, CodexModel, CodexModelListResponse, ModelListResponse, EmbeddingRequest, EmbeddingData, EmbeddingUsage, EmbeddingResponse, OpenAIErrorResponse, AnthropicErrorResponse, GatewayErrorResponse } from "./src/models.ts";
18
- export { ModelGatewayOptionsSchema, ModelGatewayCliOptionsSchema, MODEL_GATEWAY_DEFAULTS } from "./src/options.ts";
18
+ export { ModelOptionSchema, ModelClassOptionSchema, ChatModelClassOptionSchema, ModelSelectionOptionsSchema, ChatModelSelectionOptionsSchema, ModelGatewayOptionsSchema, ModelGatewayCliOptionsSchema, MODEL_GATEWAY_DEFAULTS } from "./src/options.ts";
19
19
  export type { ModelGatewayOptions, ResolvedModelGatewayOptions, ModelGatewayCliOptions } from "./src/options.ts";
20
20
  export * from "./exports.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-model-gateway";
2
- export declare const PACKAGE_VERSION = "0.9.61";
2
+ export declare const PACKAGE_VERSION = "0.9.65";
3
3
  export * as client from "./src/client.ts";
4
4
  export * as contracts from "./src/contracts.ts";
5
5
  export * as models from "./src/models.ts";
@@ -11,6 +11,6 @@ export { ClientProtocolSchema, UpstreamProtocolSchema, ModelCapabilitiesSchema,
11
11
  export type { ClientProtocol, UpstreamProtocol, ModelCapabilities, ModelTarget, RequestedFeatures, GatewayRoute, ModelCapabilityOverride, ResolveRouteInput } from "./src/contracts.ts";
12
12
  export { OpenAIModelCapabilitiesSchema, OpenAIModelSchema, OpenAIModelListResponseSchema, CodexReasoningLevelSchema, CodexTruncationPolicySchema, CodexModelSchema, CodexModelListResponseSchema, ModelListResponseSchema, EmbeddingRequestSchema, EmbeddingDataSchema, EmbeddingUsageSchema, EmbeddingResponseSchema, OpenAIErrorResponseSchema, AnthropicErrorResponseSchema, GatewayErrorResponseSchema } from "./src/models.ts";
13
13
  export type { OpenAIModelCapabilities, OpenAIModel, OpenAIModelListResponse, CodexReasoningLevel, CodexTruncationPolicy, CodexModel, CodexModelListResponse, ModelListResponse, EmbeddingRequest, EmbeddingData, EmbeddingUsage, EmbeddingResponse, OpenAIErrorResponse, AnthropicErrorResponse, GatewayErrorResponse } from "./src/models.ts";
14
- export { ModelGatewayOptionsSchema, ModelGatewayCliOptionsSchema, MODEL_GATEWAY_DEFAULTS } from "./src/options.ts";
14
+ export { ModelOptionSchema, ModelClassOptionSchema, ChatModelClassOptionSchema, ModelSelectionOptionsSchema, ChatModelSelectionOptionsSchema, ModelGatewayOptionsSchema, ModelGatewayCliOptionsSchema, MODEL_GATEWAY_DEFAULTS } from "./src/options.ts";
15
15
  export type { ModelGatewayOptions, ResolvedModelGatewayOptions, ModelGatewayCliOptions } from "./src/options.ts";
16
16
  export * from "./exports.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-model-gateway";
5
- export const PACKAGE_VERSION = "0.9.61";
5
+ export const PACKAGE_VERSION = "0.9.65";
6
6
  export * as client from "./src/client.js";
7
7
  export * as contracts from "./src/contracts.js";
8
8
  export * as models from "./src/models.js";
@@ -11,6 +11,6 @@ export * as upstream from "./src/upstream.js";
11
11
  export { ModelGatewayClientError } from "./src/client.js";
12
12
  export { ClientProtocolSchema, UpstreamProtocolSchema, ModelCapabilitiesSchema, ModelTargetSchema, RequestedFeaturesSchema, GatewayRouteSchema, ModelCapabilityOverrideSchema, ResolveRouteInputSchema } from "./src/contracts.js";
13
13
  export { OpenAIModelCapabilitiesSchema, OpenAIModelSchema, OpenAIModelListResponseSchema, CodexReasoningLevelSchema, CodexTruncationPolicySchema, CodexModelSchema, CodexModelListResponseSchema, ModelListResponseSchema, EmbeddingRequestSchema, EmbeddingDataSchema, EmbeddingUsageSchema, EmbeddingResponseSchema, OpenAIErrorResponseSchema, AnthropicErrorResponseSchema, GatewayErrorResponseSchema } from "./src/models.js";
14
- export { ModelGatewayOptionsSchema, ModelGatewayCliOptionsSchema, MODEL_GATEWAY_DEFAULTS } from "./src/options.js";
14
+ export { ModelOptionSchema, ModelClassOptionSchema, ChatModelClassOptionSchema, ModelSelectionOptionsSchema, ChatModelSelectionOptionsSchema, ModelGatewayOptionsSchema, ModelGatewayCliOptionsSchema, MODEL_GATEWAY_DEFAULTS } from "./src/options.js";
15
15
  export * from "./exports.js";
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuTyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwYSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS42MVwiO1xuZXhwb3J0ICogYXMgY2xpZW50IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbnRyYWN0cyBmcm9tIFwiLi9zcmMvY29udHJhY3RzLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgb3B0aW9ucyBmcm9tIFwiLi9zcmMvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdXBzdHJlYW0gZnJvbSBcIi4vc3JjL3Vwc3RyZWFtLnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlDbGllbnRFcnJvciB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5Q2xpZW50T3B0aW9ucywgTGlzdE1vZGVsc09wdGlvbnMsIE1vZGVsR2F0ZXdheUNsaWVudCB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB7IENsaWVudFByb3RvY29sU2NoZW1hLCBVcHN0cmVhbVByb3RvY29sU2NoZW1hLCBNb2RlbENhcGFiaWxpdGllc1NjaGVtYSwgTW9kZWxUYXJnZXRTY2hlbWEsIFJlcXVlc3RlZEZlYXR1cmVzU2NoZW1hLCBHYXRld2F5Um91dGVTY2hlbWEsIE1vZGVsQ2FwYWJpbGl0eU92ZXJyaWRlU2NoZW1hLCBSZXNvbHZlUm91dGVJbnB1dFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jb250cmFjdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2xpZW50UHJvdG9jb2wsIFVwc3RyZWFtUHJvdG9jb2wsIE1vZGVsQ2FwYWJpbGl0aWVzLCBNb2RlbFRhcmdldCwgUmVxdWVzdGVkRmVhdHVyZXMsIEdhdGV3YXlSb3V0ZSwgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGUsIFJlc29sdmVSb3V0ZUlucHV0IH0gZnJvbSBcIi4vc3JjL2NvbnRyYWN0cy50c1wiO1xuZXhwb3J0IHsgT3BlbkFJTW9kZWxDYXBhYmlsaXRpZXNTY2hlbWEsIE9wZW5BSU1vZGVsU2NoZW1hLCBPcGVuQUlNb2RlbExpc3RSZXNwb25zZVNjaGVtYSwgQ29kZXhSZWFzb25pbmdMZXZlbFNjaGVtYSwgQ29kZXhUcnVuY2F0aW9uUG9saWN5U2NoZW1hLCBDb2RleE1vZGVsU2NoZW1hLCBDb2RleE1vZGVsTGlzdFJlc3BvbnNlU2NoZW1hLCBNb2RlbExpc3RSZXNwb25zZVNjaGVtYSwgRW1iZWRkaW5nUmVxdWVzdFNjaGVtYSwgRW1iZWRkaW5nRGF0YVNjaGVtYSwgRW1iZWRkaW5nVXNhZ2VTY2hlbWEsIEVtYmVkZGluZ1Jlc3BvbnNlU2NoZW1hLCBPcGVuQUlFcnJvclJlc3BvbnNlU2NoZW1hLCBBbnRocm9waWNFcnJvclJlc3BvbnNlU2NoZW1hLCBHYXRld2F5RXJyb3JSZXNwb25zZVNjaGVtYSB9IGZyb20gXCIuL3NyYy9tb2RlbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgT3BlbkFJTW9kZWxDYXBhYmlsaXRpZXMsIE9wZW5BSU1vZGVsLCBPcGVuQUlNb2RlbExpc3RSZXNwb25zZSwgQ29kZXhSZWFzb25pbmdMZXZlbCwgQ29kZXhUcnVuY2F0aW9uUG9saWN5LCBDb2RleE1vZGVsLCBDb2RleE1vZGVsTGlzdFJlc3BvbnNlLCBNb2RlbExpc3RSZXNwb25zZSwgRW1iZWRkaW5nUmVxdWVzdCwgRW1iZWRkaW5nRGF0YSwgRW1iZWRkaW5nVXNhZ2UsIEVtYmVkZGluZ1Jlc3BvbnNlLCBPcGVuQUlFcnJvclJlc3BvbnNlLCBBbnRocm9waWNFcnJvclJlc3BvbnNlLCBHYXRld2F5RXJyb3JSZXNwb25zZSB9IGZyb20gXCIuL3NyYy9tb2RlbHMudHNcIjtcbmV4cG9ydCB7IE1vZGVsR2F0ZXdheU9wdGlvbnNTY2hlbWEsIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnNTY2hlbWEsIE1PREVMX0dBVEVXQVlfREVGQVVMVFMgfSBmcm9tIFwiLi9zcmMvb3B0aW9ucy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb2RlbEdhdGV3YXlPcHRpb25zLCBSZXNvbHZlZE1vZGVsR2F0ZXdheU9wdGlvbnMsIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhwb3J0cy50c1wiO1xuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuTyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwYSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsK0JBQStCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4UCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS42NVwiO1xuZXhwb3J0ICogYXMgY2xpZW50IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbnRyYWN0cyBmcm9tIFwiLi9zcmMvY29udHJhY3RzLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgb3B0aW9ucyBmcm9tIFwiLi9zcmMvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdXBzdHJlYW0gZnJvbSBcIi4vc3JjL3Vwc3RyZWFtLnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlDbGllbnRFcnJvciB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5Q2xpZW50T3B0aW9ucywgTGlzdE1vZGVsc09wdGlvbnMsIE1vZGVsR2F0ZXdheUNsaWVudCB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB7IENsaWVudFByb3RvY29sU2NoZW1hLCBVcHN0cmVhbVByb3RvY29sU2NoZW1hLCBNb2RlbENhcGFiaWxpdGllc1NjaGVtYSwgTW9kZWxUYXJnZXRTY2hlbWEsIFJlcXVlc3RlZEZlYXR1cmVzU2NoZW1hLCBHYXRld2F5Um91dGVTY2hlbWEsIE1vZGVsQ2FwYWJpbGl0eU92ZXJyaWRlU2NoZW1hLCBSZXNvbHZlUm91dGVJbnB1dFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jb250cmFjdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2xpZW50UHJvdG9jb2wsIFVwc3RyZWFtUHJvdG9jb2wsIE1vZGVsQ2FwYWJpbGl0aWVzLCBNb2RlbFRhcmdldCwgUmVxdWVzdGVkRmVhdHVyZXMsIEdhdGV3YXlSb3V0ZSwgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGUsIFJlc29sdmVSb3V0ZUlucHV0IH0gZnJvbSBcIi4vc3JjL2NvbnRyYWN0cy50c1wiO1xuZXhwb3J0IHsgT3BlbkFJTW9kZWxDYXBhYmlsaXRpZXNTY2hlbWEsIE9wZW5BSU1vZGVsU2NoZW1hLCBPcGVuQUlNb2RlbExpc3RSZXNwb25zZVNjaGVtYSwgQ29kZXhSZWFzb25pbmdMZXZlbFNjaGVtYSwgQ29kZXhUcnVuY2F0aW9uUG9saWN5U2NoZW1hLCBDb2RleE1vZGVsU2NoZW1hLCBDb2RleE1vZGVsTGlzdFJlc3BvbnNlU2NoZW1hLCBNb2RlbExpc3RSZXNwb25zZVNjaGVtYSwgRW1iZWRkaW5nUmVxdWVzdFNjaGVtYSwgRW1iZWRkaW5nRGF0YVNjaGVtYSwgRW1iZWRkaW5nVXNhZ2VTY2hlbWEsIEVtYmVkZGluZ1Jlc3BvbnNlU2NoZW1hLCBPcGVuQUlFcnJvclJlc3BvbnNlU2NoZW1hLCBBbnRocm9waWNFcnJvclJlc3BvbnNlU2NoZW1hLCBHYXRld2F5RXJyb3JSZXNwb25zZVNjaGVtYSB9IGZyb20gXCIuL3NyYy9tb2RlbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgT3BlbkFJTW9kZWxDYXBhYmlsaXRpZXMsIE9wZW5BSU1vZGVsLCBPcGVuQUlNb2RlbExpc3RSZXNwb25zZSwgQ29kZXhSZWFzb25pbmdMZXZlbCwgQ29kZXhUcnVuY2F0aW9uUG9saWN5LCBDb2RleE1vZGVsLCBDb2RleE1vZGVsTGlzdFJlc3BvbnNlLCBNb2RlbExpc3RSZXNwb25zZSwgRW1iZWRkaW5nUmVxdWVzdCwgRW1iZWRkaW5nRGF0YSwgRW1iZWRkaW5nVXNhZ2UsIEVtYmVkZGluZ1Jlc3BvbnNlLCBPcGVuQUlFcnJvclJlc3BvbnNlLCBBbnRocm9waWNFcnJvclJlc3BvbnNlLCBHYXRld2F5RXJyb3JSZXNwb25zZSB9IGZyb20gXCIuL3NyYy9tb2RlbHMudHNcIjtcbmV4cG9ydCB7IE1vZGVsT3B0aW9uU2NoZW1hLCBNb2RlbENsYXNzT3B0aW9uU2NoZW1hLCBDaGF0TW9kZWxDbGFzc09wdGlvblNjaGVtYSwgTW9kZWxTZWxlY3Rpb25PcHRpb25zU2NoZW1hLCBDaGF0TW9kZWxTZWxlY3Rpb25PcHRpb25zU2NoZW1hLCBNb2RlbEdhdGV3YXlPcHRpb25zU2NoZW1hLCBNb2RlbEdhdGV3YXlDbGlPcHRpb25zU2NoZW1hLCBNT0RFTF9HQVRFV0FZX0RFRkFVTFRTIH0gZnJvbSBcIi4vc3JjL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5T3B0aW9ucywgUmVzb2x2ZWRNb2RlbEdhdGV3YXlPcHRpb25zLCBNb2RlbEdhdGV3YXlDbGlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4cG9ydHMudHNcIjtcbiJdfQ==
@@ -8,13 +8,56 @@
8
8
  */
9
9
  import { options } from "@dbx-tools/shared-core";
10
10
  import { z } from "zod";
11
+ export declare const ModelOptionSchema: z.ZodOptional<z.ZodString>;
12
+ export declare const ModelClassOptionSchema: z.ZodOptional<z.ZodEnum<{
13
+ "chat-thinking": "chat-thinking";
14
+ "chat-balanced": "chat-balanced";
15
+ "chat-fast": "chat-fast";
16
+ embedding: "embedding";
17
+ }>>;
18
+ export declare const ChatModelClassOptionSchema: z.ZodOptional<z.ZodEnum<{
19
+ "chat-thinking": "chat-thinking";
20
+ "chat-balanced": "chat-balanced";
21
+ "chat-fast": "chat-fast";
22
+ }>>;
23
+ export declare const ModelSelectionOptionsSchema: z.ZodObject<{
24
+ model: z.ZodOptional<z.ZodString>;
25
+ modelClass: z.ZodOptional<z.ZodEnum<{
26
+ "chat-thinking": "chat-thinking";
27
+ "chat-balanced": "chat-balanced";
28
+ "chat-fast": "chat-fast";
29
+ embedding: "embedding";
30
+ }>>;
31
+ }, z.core.$strip>;
32
+ export declare const ChatModelSelectionOptionsSchema: z.ZodObject<{
33
+ model: z.ZodOptional<z.ZodString>;
34
+ modelClass: z.ZodOptional<z.ZodEnum<{
35
+ "chat-thinking": "chat-thinking";
36
+ "chat-balanced": "chat-balanced";
37
+ "chat-fast": "chat-fast";
38
+ }>>;
39
+ }, z.core.$strip>;
11
40
  export declare const ModelGatewayOptionsSchema: z.ZodObject<{
41
+ model: z.ZodOptional<z.ZodString>;
42
+ modelClass: z.ZodOptional<z.ZodEnum<{
43
+ "chat-thinking": "chat-thinking";
44
+ "chat-balanced": "chat-balanced";
45
+ "chat-fast": "chat-fast";
46
+ embedding: "embedding";
47
+ }>>;
12
48
  listen: z.ZodDefault<z.ZodType<options.TcpListenAddress, unknown, z.core.$ZodTypeInternals<options.TcpListenAddress, unknown>>>;
13
49
  profile: z.ZodOptional<z.ZodString>;
14
50
  bodyLimit: z.ZodDefault<z.ZodString>;
15
51
  bearerToken: z.ZodOptional<z.ZodString>;
16
52
  }, z.core.$strict>;
17
53
  export declare const ModelGatewayCliOptionsSchema: z.ZodObject<{
54
+ model: z.ZodOptional<z.ZodString>;
55
+ modelClass: z.ZodOptional<z.ZodEnum<{
56
+ "chat-thinking": "chat-thinking";
57
+ "chat-balanced": "chat-balanced";
58
+ "chat-fast": "chat-fast";
59
+ embedding: "embedding";
60
+ }>>;
18
61
  listen: z.ZodDefault<z.ZodType<options.TcpListenAddress, unknown, z.core.$ZodTypeInternals<options.TcpListenAddress, unknown>>>;
19
62
  profile: z.ZodOptional<z.ZodString>;
20
63
  bodyLimit: z.ZodDefault<z.ZodString>;
@@ -28,6 +71,8 @@ export type ModelGatewayCliOptions = z.output<typeof ModelGatewayCliOptionsSchem
28
71
  export declare const MODEL_GATEWAY_DEFAULTS: Readonly<{
29
72
  listen: options.TcpListenAddress;
30
73
  bodyLimit: string;
74
+ model?: string | undefined;
75
+ modelClass?: "chat-thinking" | "chat-balanced" | "chat-fast" | "embedding" | undefined;
31
76
  profile?: string | undefined;
32
77
  bearerToken?: string | undefined;
33
78
  }>;
@@ -7,19 +7,37 @@
7
7
  * @module
8
8
  */
9
9
  import { options } from "@dbx-tools/shared-core";
10
+ import { ModelClassSchema } from "@dbx-tools/shared-model/contracts";
10
11
  import { z } from "zod";
11
- export const ModelGatewayOptionsSchema = z
12
+ export const ModelOptionSchema = z
13
+ .string()
14
+ .trim()
15
+ .min(1)
16
+ .optional()
17
+ .describe("Optional fuzzy or exact model name.");
18
+ export const ModelClassOptionSchema = ModelClassSchema.optional().describe("Optional model capability class used when selecting a default model.");
19
+ export const ChatModelClassOptionSchema = ModelClassSchema.exclude(["embedding"])
20
+ .optional()
21
+ .describe("Optional chat capability class used when selecting a default model.");
22
+ export const ModelSelectionOptionsSchema = z
12
23
  .object({
24
+ model: ModelOptionSchema,
25
+ modelClass: ModelClassOptionSchema,
26
+ })
27
+ .refine((options) => !(options.model && options.modelClass), {
28
+ message: "Model and model class are mutually exclusive.",
29
+ path: ["modelClass"],
30
+ })
31
+ .describe("Model selection by name or capability class.");
32
+ export const ChatModelSelectionOptionsSchema = ModelSelectionOptionsSchema.safeExtend({
33
+ modelClass: ChatModelClassOptionSchema,
34
+ }).describe("Chat-model selection by name or capability class.");
35
+ export const ModelGatewayOptionsSchema = ModelSelectionOptionsSchema.safeExtend({
13
36
  listen: options
14
37
  .listenAddressSchema({ port: 4000, loopback: true })
15
38
  .describe("Loopback listener address."),
16
39
  profile: options.DatabricksOptionsSchema.shape.profile.describe("Databricks profile used for model discovery and requests."),
17
- bodyLimit: z
18
- .string()
19
- .trim()
20
- .min(1)
21
- .default("100mb")
22
- .describe("Maximum JSON request body size."),
40
+ bodyLimit: z.string().trim().min(1).default("100mb").describe("Maximum JSON request body size."),
23
41
  bearerToken: z
24
42
  .string()
25
43
  .trim()
@@ -34,7 +52,7 @@ export const ModelGatewayOptionsSchema = z
34
52
  })
35
53
  .strict()
36
54
  .describe("Model-gateway server configuration.");
37
- export const ModelGatewayCliOptionsSchema = ModelGatewayOptionsSchema.extend({
55
+ export const ModelGatewayCliOptionsSchema = ModelGatewayOptionsSchema.safeExtend({
38
56
  runtimeInfo: z.boolean().default(false).describe("Print runtime implementation metadata."),
39
57
  })
40
58
  .refine((options) => options.listen.port > 0, {
@@ -52,4 +70,4 @@ export function resolveModelGatewayOptions(options = {}) {
52
70
  export function resolveModelGatewayCliOptions(options) {
53
71
  return ModelGatewayCliOptionsSchema.parse(options);
54
72
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDO0tBQ3ZDLE1BQU0sQ0FBQztJQUNOLE1BQU0sRUFBRSxPQUFPO1NBQ1osbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNuRCxRQUFRLENBQUMsNEJBQTRCLENBQUM7SUFDekMsT0FBTyxFQUFFLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FDN0QsMkRBQTJELENBQzVEO0lBQ0QsU0FBUyxFQUFFLENBQUM7U0FDVCxNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixRQUFRLENBQUMsaUNBQWlDLENBQUM7SUFDOUMsV0FBVyxFQUFFLENBQUM7U0FDWCxNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLHdEQUF3RCxDQUFDO1NBQ2xFLElBQUksQ0FBQztRQUNKLEdBQUcsRUFBRSxzQ0FBc0M7UUFDM0MsSUFBSSxFQUFFLEtBQUs7UUFDWCxXQUFXLEVBQUUsS0FBSztLQUNuQixDQUFDO0NBQ0wsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztJQUMzRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUM7Q0FDM0YsQ0FBQztLQUNDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO0lBQzVDLE9BQU8sRUFBRSwrQ0FBK0M7SUFDeEQsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQ2pCLENBQUM7S0FDRCxRQUFRLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQVF6RCxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUV6Rix5REFBeUQ7QUFDekQsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxVQUErQixFQUFFO0lBRWpDLE9BQU8seUJBQXlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLDZCQUE2QixDQUFDLE9BQWdCO0lBQzVELE9BQU8sNEJBQTRCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBtb2RlbC1nYXRld2F5IHJ1bnRpbWUgYW5kIENMSSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEZpZWxkIG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMgYXJlIHRoZSBzaW5nbGUgc291cmNlIGZvciBkZXJpdmVkIENvbW1hbmRlclxuICogZmxhZ3MsIGVudmlyb25tZW50IG5hbWVzLCBnZW5lcmF0ZWQgaGVscCwgSmF2YVNjcmlwdCBjYWxsZXJzLCBhbmQgc2VydmljZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG9wdGlvbnMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IE1vZGVsR2F0ZXdheU9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGxpc3Rlbjogb3B0aW9uc1xuICAgICAgLmxpc3RlbkFkZHJlc3NTY2hlbWEoeyBwb3J0OiA0MDAwLCBsb29wYmFjazogdHJ1ZSB9KVxuICAgICAgLmRlc2NyaWJlKFwiTG9vcGJhY2sgbGlzdGVuZXIgYWRkcmVzcy5cIiksXG4gICAgcHJvZmlsZTogb3B0aW9ucy5EYXRhYnJpY2tzT3B0aW9uc1NjaGVtYS5zaGFwZS5wcm9maWxlLmRlc2NyaWJlKFxuICAgICAgXCJEYXRhYnJpY2tzIHByb2ZpbGUgdXNlZCBmb3IgbW9kZWwgZGlzY292ZXJ5IGFuZCByZXF1ZXN0cy5cIixcbiAgICApLFxuICAgIGJvZHlMaW1pdDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAubWluKDEpXG4gICAgICAuZGVmYXVsdChcIjEwMG1iXCIpXG4gICAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIEpTT04gcmVxdWVzdCBib2R5IHNpemUuXCIpLFxuICAgIGJlYXJlclRva2VuOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5taW4oMSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJPcHRpb25hbCBiZWFyZXIgdG9rZW4gcmVxdWlyZWQgYnkgZXZlcnkgZ2F0ZXdheSByb3V0ZS5cIilcbiAgICAgIC5tZXRhKHtcbiAgICAgICAgZW52OiBcIkRCWF9UT09MU19NT0RFTF9HQVRFV0FZX0JFQVJFUl9UT0tFTlwiLFxuICAgICAgICBmbGFnOiBmYWxzZSxcbiAgICAgICAgaGVscERlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJNb2RlbC1nYXRld2F5IHNlcnZlciBjb25maWd1cmF0aW9uLlwiKTtcblxuZXhwb3J0IGNvbnN0IE1vZGVsR2F0ZXdheUNsaU9wdGlvbnNTY2hlbWEgPSBNb2RlbEdhdGV3YXlPcHRpb25zU2NoZW1hLmV4dGVuZCh7XG4gIHJ1bnRpbWVJbmZvOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5kZXNjcmliZShcIlByaW50IHJ1bnRpbWUgaW1wbGVtZW50YXRpb24gbWV0YWRhdGEuXCIpLFxufSlcbiAgLnJlZmluZSgob3B0aW9ucykgPT4gb3B0aW9ucy5saXN0ZW4ucG9ydCA+IDAsIHtcbiAgICBtZXNzYWdlOiBcIlBvcnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMSB0aHJvdWdoIDY1NTM1LlwiLFxuICAgIHBhdGg6IFtcImxpc3RlblwiXSxcbiAgfSlcbiAgLmRlc2NyaWJlKFwiTW9kZWwtZ2F0ZXdheSBjb21tYW5kLWxpbmUgY29uZmlndXJhdGlvbi5cIik7XG5cbmV4cG9ydCB0eXBlIE1vZGVsR2F0ZXdheU9wdGlvbnMgPSB6LmlucHV0PHR5cGVvZiBNb2RlbEdhdGV3YXlPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRNb2RlbEdhdGV3YXlPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIE1vZGVsR2F0ZXdheU9wdGlvbnNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBNb2RlbEdhdGV3YXlDbGlPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnNTY2hlbWE+O1xuXG4vKiogRGVmYXVsdHMgcGFyc2VkIGZyb20gdGhlIG93bmluZyBydW50aW1lIHNjaGVtYS4gKi9cbmV4cG9ydCBjb25zdCBNT0RFTF9HQVRFV0FZX0RFRkFVTFRTID0gT2JqZWN0LmZyZWV6ZShNb2RlbEdhdGV3YXlPcHRpb25zU2NoZW1hLnBhcnNlKHt9KSk7XG5cbi8qKiBWYWxpZGF0ZSBhbmQgZGVmYXVsdCBtb2RlbC1nYXRld2F5IHNlcnZlciBvcHRpb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNb2RlbEdhdGV3YXlPcHRpb25zKFxuICBvcHRpb25zOiBNb2RlbEdhdGV3YXlPcHRpb25zID0ge30sXG4pOiBSZXNvbHZlZE1vZGVsR2F0ZXdheU9wdGlvbnMge1xuICByZXR1cm4gTW9kZWxHYXRld2F5T3B0aW9uc1NjaGVtYS5wYXJzZShvcHRpb25zKTtcbn1cblxuLyoqIFZhbGlkYXRlIGFuZCBkZWZhdWx0IG1vZGVsLWdhdGV3YXkgY29tbWFuZC1saW5lIG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsR2F0ZXdheUNsaU9wdGlvbnMob3B0aW9uczogdW5rbm93bik6IE1vZGVsR2F0ZXdheUNsaU9wdGlvbnMge1xuICByZXR1cm4gTW9kZWxHYXRld2F5Q2xpT3B0aW9uc1NjaGVtYS5wYXJzZShvcHRpb25zKTtcbn1cbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDO0tBQy9CLE1BQU0sRUFBRTtLQUNSLElBQUksRUFBRTtLQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDTixRQUFRLEVBQUU7S0FDVixRQUFRLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQ3hFLHNFQUFzRSxDQUN2RSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDOUUsUUFBUSxFQUFFO0tBQ1YsUUFBUSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7QUFFbkYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQztLQUN6QyxNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsaUJBQWlCO0lBQ3hCLFVBQVUsRUFBRSxzQkFBc0I7Q0FDbkMsQ0FBQztLQUNELE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQzNELE9BQU8sRUFBRSwrQ0FBK0M7SUFDeEQsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO0NBQ3JCLENBQUM7S0FDRCxRQUFRLENBQUMsOENBQThDLENBQUMsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRywyQkFBMkIsQ0FBQyxVQUFVLENBQUM7SUFDcEYsVUFBVSxFQUFFLDBCQUEwQjtDQUN2QyxDQUFDLENBQUMsUUFBUSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsMkJBQTJCLENBQUMsVUFBVSxDQUFDO0lBQzlFLE1BQU0sRUFBRSxPQUFPO1NBQ1osbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNuRCxRQUFRLENBQUMsNEJBQTRCLENBQUM7SUFDekMsT0FBTyxFQUFFLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FDN0QsMkRBQTJELENBQzVEO0lBQ0QsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQztJQUNoRyxXQUFXLEVBQUUsQ0FBQztTQUNYLE1BQU0sRUFBRTtTQUNSLElBQUksRUFBRTtTQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDTixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsd0RBQXdELENBQUM7U0FDbEUsSUFBSSxDQUFDO1FBQ0osR0FBRyxFQUFFLHNDQUFzQztRQUMzQyxJQUFJLEVBQUUsS0FBSztRQUNYLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUM7Q0FDTCxDQUFDO0tBQ0MsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcseUJBQXlCLENBQUMsVUFBVSxDQUFDO0lBQy9FLFdBQVcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQztDQUMzRixDQUFDO0tBQ0MsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7SUFDNUMsT0FBTyxFQUFFLCtDQUErQztJQUN4RCxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakIsQ0FBQztLQUNELFFBQVEsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0FBUXpELHNEQUFzRDtBQUN0RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXpGLHlEQUF5RDtBQUN6RCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLFVBQStCLEVBQUU7SUFFakMsT0FBTyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsT0FBZ0I7SUFDNUQsT0FBTyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3Nlci1zYWZlIG1vZGVsLWdhdGV3YXkgcnVudGltZSBhbmQgQ0xJIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRmllbGQgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucyBhcmUgdGhlIHNpbmdsZSBzb3VyY2UgZm9yIGRlcml2ZWQgQ29tbWFuZGVyXG4gKiBmbGFncywgZW52aXJvbm1lbnQgbmFtZXMsIGdlbmVyYXRlZCBoZWxwLCBKYXZhU2NyaXB0IGNhbGxlcnMsIGFuZCBzZXJ2aWNlcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgb3B0aW9ucyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBNb2RlbENsYXNzU2NoZW1hIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsL2NvbnRyYWN0c1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IE1vZGVsT3B0aW9uU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLnRyaW0oKVxuICAubWluKDEpXG4gIC5vcHRpb25hbCgpXG4gIC5kZXNjcmliZShcIk9wdGlvbmFsIGZ1enp5IG9yIGV4YWN0IG1vZGVsIG5hbWUuXCIpO1xuXG5leHBvcnQgY29uc3QgTW9kZWxDbGFzc09wdGlvblNjaGVtYSA9IE1vZGVsQ2xhc3NTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcbiAgXCJPcHRpb25hbCBtb2RlbCBjYXBhYmlsaXR5IGNsYXNzIHVzZWQgd2hlbiBzZWxlY3RpbmcgYSBkZWZhdWx0IG1vZGVsLlwiLFxuKTtcblxuZXhwb3J0IGNvbnN0IENoYXRNb2RlbENsYXNzT3B0aW9uU2NoZW1hID0gTW9kZWxDbGFzc1NjaGVtYS5leGNsdWRlKFtcImVtYmVkZGluZ1wiXSlcbiAgLm9wdGlvbmFsKClcbiAgLmRlc2NyaWJlKFwiT3B0aW9uYWwgY2hhdCBjYXBhYmlsaXR5IGNsYXNzIHVzZWQgd2hlbiBzZWxlY3RpbmcgYSBkZWZhdWx0IG1vZGVsLlwiKTtcblxuZXhwb3J0IGNvbnN0IE1vZGVsU2VsZWN0aW9uT3B0aW9uc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbW9kZWw6IE1vZGVsT3B0aW9uU2NoZW1hLFxuICAgIG1vZGVsQ2xhc3M6IE1vZGVsQ2xhc3NPcHRpb25TY2hlbWEsXG4gIH0pXG4gIC5yZWZpbmUoKG9wdGlvbnMpID0+ICEob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsQ2xhc3MpLCB7XG4gICAgbWVzc2FnZTogXCJNb2RlbCBhbmQgbW9kZWwgY2xhc3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cIixcbiAgICBwYXRoOiBbXCJtb2RlbENsYXNzXCJdLFxuICB9KVxuICAuZGVzY3JpYmUoXCJNb2RlbCBzZWxlY3Rpb24gYnkgbmFtZSBvciBjYXBhYmlsaXR5IGNsYXNzLlwiKTtcblxuZXhwb3J0IGNvbnN0IENoYXRNb2RlbFNlbGVjdGlvbk9wdGlvbnNTY2hlbWEgPSBNb2RlbFNlbGVjdGlvbk9wdGlvbnNTY2hlbWEuc2FmZUV4dGVuZCh7XG4gIG1vZGVsQ2xhc3M6IENoYXRNb2RlbENsYXNzT3B0aW9uU2NoZW1hLFxufSkuZGVzY3JpYmUoXCJDaGF0LW1vZGVsIHNlbGVjdGlvbiBieSBuYW1lIG9yIGNhcGFiaWxpdHkgY2xhc3MuXCIpO1xuXG5leHBvcnQgY29uc3QgTW9kZWxHYXRld2F5T3B0aW9uc1NjaGVtYSA9IE1vZGVsU2VsZWN0aW9uT3B0aW9uc1NjaGVtYS5zYWZlRXh0ZW5kKHtcbiAgbGlzdGVuOiBvcHRpb25zXG4gICAgLmxpc3RlbkFkZHJlc3NTY2hlbWEoeyBwb3J0OiA0MDAwLCBsb29wYmFjazogdHJ1ZSB9KVxuICAgIC5kZXNjcmliZShcIkxvb3BiYWNrIGxpc3RlbmVyIGFkZHJlc3MuXCIpLFxuICBwcm9maWxlOiBvcHRpb25zLkRhdGFicmlja3NPcHRpb25zU2NoZW1hLnNoYXBlLnByb2ZpbGUuZGVzY3JpYmUoXG4gICAgXCJEYXRhYnJpY2tzIHByb2ZpbGUgdXNlZCBmb3IgbW9kZWwgZGlzY292ZXJ5IGFuZCByZXF1ZXN0cy5cIixcbiAgKSxcbiAgYm9keUxpbWl0OiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkuZGVmYXVsdChcIjEwMG1iXCIpLmRlc2NyaWJlKFwiTWF4aW11bSBKU09OIHJlcXVlc3QgYm9keSBzaXplLlwiKSxcbiAgYmVhcmVyVG9rZW46IHpcbiAgICAuc3RyaW5nKClcbiAgICAudHJpbSgpXG4gICAgLm1pbigxKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiT3B0aW9uYWwgYmVhcmVyIHRva2VuIHJlcXVpcmVkIGJ5IGV2ZXJ5IGdhdGV3YXkgcm91dGUuXCIpXG4gICAgLm1ldGEoe1xuICAgICAgZW52OiBcIkRCWF9UT09MU19NT0RFTF9HQVRFV0FZX0JFQVJFUl9UT0tFTlwiLFxuICAgICAgZmxhZzogZmFsc2UsXG4gICAgICBoZWxwRGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG59KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiTW9kZWwtZ2F0ZXdheSBzZXJ2ZXIgY29uZmlndXJhdGlvbi5cIik7XG5cbmV4cG9ydCBjb25zdCBNb2RlbEdhdGV3YXlDbGlPcHRpb25zU2NoZW1hID0gTW9kZWxHYXRld2F5T3B0aW9uc1NjaGVtYS5zYWZlRXh0ZW5kKHtcbiAgcnVudGltZUluZm86IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLmRlc2NyaWJlKFwiUHJpbnQgcnVudGltZSBpbXBsZW1lbnRhdGlvbiBtZXRhZGF0YS5cIiksXG59KVxuICAucmVmaW5lKChvcHRpb25zKSA9PiBvcHRpb25zLmxpc3Rlbi5wb3J0ID4gMCwge1xuICAgIG1lc3NhZ2U6IFwiUG9ydCBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxIHRocm91Z2ggNjU1MzUuXCIsXG4gICAgcGF0aDogW1wibGlzdGVuXCJdLFxuICB9KVxuICAuZGVzY3JpYmUoXCJNb2RlbC1nYXRld2F5IGNvbW1hbmQtbGluZSBjb25maWd1cmF0aW9uLlwiKTtcblxuZXhwb3J0IHR5cGUgTW9kZWxHYXRld2F5T3B0aW9ucyA9IHouaW5wdXQ8dHlwZW9mIE1vZGVsR2F0ZXdheU9wdGlvbnNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsR2F0ZXdheU9wdGlvbnMgPSB6Lm91dHB1dDx0eXBlb2YgTW9kZWxHYXRld2F5T3B0aW9uc1NjaGVtYT47XG5cbmV4cG9ydCB0eXBlIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnMgPSB6Lm91dHB1dDx0eXBlb2YgTW9kZWxHYXRld2F5Q2xpT3B0aW9uc1NjaGVtYT47XG5cbi8qKiBEZWZhdWx0cyBwYXJzZWQgZnJvbSB0aGUgb3duaW5nIHJ1bnRpbWUgc2NoZW1hLiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX0dBVEVXQVlfREVGQVVMVFMgPSBPYmplY3QuZnJlZXplKE1vZGVsR2F0ZXdheU9wdGlvbnNTY2hlbWEucGFyc2Uoe30pKTtcblxuLyoqIFZhbGlkYXRlIGFuZCBkZWZhdWx0IG1vZGVsLWdhdGV3YXkgc2VydmVyIG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsR2F0ZXdheU9wdGlvbnMoXG4gIG9wdGlvbnM6IE1vZGVsR2F0ZXdheU9wdGlvbnMgPSB7fSxcbik6IFJlc29sdmVkTW9kZWxHYXRld2F5T3B0aW9ucyB7XG4gIHJldHVybiBNb2RlbEdhdGV3YXlPcHRpb25zU2NoZW1hLnBhcnNlKG9wdGlvbnMpO1xufVxuXG4vKiogVmFsaWRhdGUgYW5kIGRlZmF1bHQgbW9kZWwtZ2F0ZXdheSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWxHYXRld2F5Q2xpT3B0aW9ucyhvcHRpb25zOiB1bmtub3duKTogTW9kZWxHYXRld2F5Q2xpT3B0aW9ucyB7XG4gIHJldHVybiBNb2RlbEdhdGV3YXlDbGlPcHRpb25zU2NoZW1hLnBhcnNlKG9wdGlvbnMpO1xufVxuIl19
package/package.json CHANGED
@@ -22,8 +22,8 @@
22
22
  "typescript": "^5.9.3"
23
23
  },
24
24
  "dependencies": {
25
- "@dbx-tools/shared-core": "^0.9.61",
26
- "@dbx-tools/shared-model": "^0.9.61",
25
+ "@dbx-tools/shared-core": "^0.9.65",
26
+ "@dbx-tools/shared-model": "^0.9.65",
27
27
  "zod": "4.3.6"
28
28
  },
29
29
  "main": "./lib/index.js",
@@ -60,7 +60,7 @@
60
60
  "./package.json": "./package.json"
61
61
  }
62
62
  },
63
- "version": "0.9.61",
63
+ "version": "0.9.65",
64
64
  "types": "./lib/index.d.ts",
65
65
  "dbxToolsConfig": {
66
66
  "tags": [
package/src/options.ts CHANGED
@@ -8,38 +8,63 @@
8
8
  */
9
9
 
10
10
  import { options } from "@dbx-tools/shared-core";
11
+ import { ModelClassSchema } from "@dbx-tools/shared-model/contracts";
11
12
  import { z } from "zod";
12
13
 
13
- export const ModelGatewayOptionsSchema = z
14
+ export const ModelOptionSchema = z
15
+ .string()
16
+ .trim()
17
+ .min(1)
18
+ .optional()
19
+ .describe("Optional fuzzy or exact model name.");
20
+
21
+ export const ModelClassOptionSchema = ModelClassSchema.optional().describe(
22
+ "Optional model capability class used when selecting a default model.",
23
+ );
24
+
25
+ export const ChatModelClassOptionSchema = ModelClassSchema.exclude(["embedding"])
26
+ .optional()
27
+ .describe("Optional chat capability class used when selecting a default model.");
28
+
29
+ export const ModelSelectionOptionsSchema = z
14
30
  .object({
15
- listen: options
16
- .listenAddressSchema({ port: 4000, loopback: true })
17
- .describe("Loopback listener address."),
18
- profile: options.DatabricksOptionsSchema.shape.profile.describe(
19
- "Databricks profile used for model discovery and requests.",
20
- ),
21
- bodyLimit: z
22
- .string()
23
- .trim()
24
- .min(1)
25
- .default("100mb")
26
- .describe("Maximum JSON request body size."),
27
- bearerToken: z
28
- .string()
29
- .trim()
30
- .min(1)
31
- .optional()
32
- .describe("Optional bearer token required by every gateway route.")
33
- .meta({
34
- env: "DBX_TOOLS_MODEL_GATEWAY_BEARER_TOKEN",
35
- flag: false,
36
- helpDefault: false,
37
- }),
31
+ model: ModelOptionSchema,
32
+ modelClass: ModelClassOptionSchema,
33
+ })
34
+ .refine((options) => !(options.model && options.modelClass), {
35
+ message: "Model and model class are mutually exclusive.",
36
+ path: ["modelClass"],
38
37
  })
38
+ .describe("Model selection by name or capability class.");
39
+
40
+ export const ChatModelSelectionOptionsSchema = ModelSelectionOptionsSchema.safeExtend({
41
+ modelClass: ChatModelClassOptionSchema,
42
+ }).describe("Chat-model selection by name or capability class.");
43
+
44
+ export const ModelGatewayOptionsSchema = ModelSelectionOptionsSchema.safeExtend({
45
+ listen: options
46
+ .listenAddressSchema({ port: 4000, loopback: true })
47
+ .describe("Loopback listener address."),
48
+ profile: options.DatabricksOptionsSchema.shape.profile.describe(
49
+ "Databricks profile used for model discovery and requests.",
50
+ ),
51
+ bodyLimit: z.string().trim().min(1).default("100mb").describe("Maximum JSON request body size."),
52
+ bearerToken: z
53
+ .string()
54
+ .trim()
55
+ .min(1)
56
+ .optional()
57
+ .describe("Optional bearer token required by every gateway route.")
58
+ .meta({
59
+ env: "DBX_TOOLS_MODEL_GATEWAY_BEARER_TOKEN",
60
+ flag: false,
61
+ helpDefault: false,
62
+ }),
63
+ })
39
64
  .strict()
40
65
  .describe("Model-gateway server configuration.");
41
66
 
42
- export const ModelGatewayCliOptionsSchema = ModelGatewayOptionsSchema.extend({
67
+ export const ModelGatewayCliOptionsSchema = ModelGatewayOptionsSchema.safeExtend({
43
68
  runtimeInfo: z.boolean().default(false).describe("Print runtime implementation metadata."),
44
69
  })
45
70
  .refine((options) => options.listen.port > 0, {