@dbx-tools/shared-model 0.9.40 → 0.9.46

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.
@@ -8,60 +8,84 @@
8
8
  * whereas the wire payload itself is the stable contract every caller in this
9
9
  * repo actually codes against.
10
10
  *
11
- * Pure types plus one text-flattening helper - no zod, no runtime deps - so a
12
- * browser client, a Node proxy, and an AppKit plugin can all agree on the shape
13
- * without any of them pulling in the others' dependencies.
14
- *
15
11
  * @module
16
12
  */
17
13
 
18
- /**
19
- * The roles OpenAI defines for a chat turn. {@link ChatMessage.role} is typed as
20
- * a plain string rather than this union, because providers add their own (for
21
- * example Databricks-hosted Claude replays a `"reasoning"` turn); use this when
22
- * you want the standard set named.
23
- */
24
- export type ChatRole = "system" | "developer" | "user" | "assistant" | "tool";
14
+ import { z } from "zod";
25
15
 
26
- /**
27
- * One entry of a structured `content` array. Only `type` and `text` are read
28
- * here; the index signature keeps provider-specific parts (images, thinking
29
- * blocks, cache markers) intact through a parse/serialize round trip.
30
- */
31
- export interface ChatContentPart {
32
- type?: string;
33
- text?: string;
34
- [key: string]: unknown;
35
- }
16
+ export const ChatRoleSchema = z
17
+ .enum(["system", "developer", "user", "assistant", "tool"])
18
+ .describe(
19
+ "Standard OpenAI chat roles. Message.role stays a plain string because providers add values such as reasoning.",
20
+ );
36
21
 
37
- /** The function a tool call invokes, with its arguments as a JSON string. */
38
- export interface ChatToolCallFunction {
39
- name: string;
40
- /** JSON-encoded argument object. Streamed in fragments, so assemble before parsing. */
41
- arguments: string;
42
- }
22
+ export type ChatRole = z.infer<typeof ChatRoleSchema>;
43
23
 
44
- /** One tool call attached to an assistant turn. */
45
- export interface ChatToolCall {
46
- id: string;
47
- /** `"function"` in practice; widened so an unrecognized type round-trips. */
48
- type: string;
49
- function: ChatToolCallFunction;
50
- }
24
+ export const ChatContentPartSchema = z
25
+ .object({
26
+ type: z
27
+ .string()
28
+ .optional()
29
+ .describe("Part discriminator, such as text, input_text, or output_text."),
30
+ text: z.string().optional().describe("Plain-text payload carried by this part when present."),
31
+ })
32
+ .catchall(z.unknown())
33
+ .describe(
34
+ "One entry of a structured content array. Extra provider keys round-trip through the catch-all.",
35
+ );
51
36
 
52
- /**
53
- * A single chat message. `content` is nullable because an assistant turn that
54
- * only calls tools carries `content: null`.
55
- */
56
- export interface ChatMessage {
57
- /** See {@link ChatRole} for the standard values; widened for provider extensions. */
58
- role: string;
59
- content?: string | ChatContentPart | ChatContentPart[] | null;
60
- tool_calls?: ChatToolCall[];
61
- /** Set on a `tool` turn, keying it back to the call it answers. */
62
- tool_call_id?: string;
63
- name?: string;
64
- }
37
+ export type ChatContentPart = z.infer<typeof ChatContentPartSchema>;
38
+
39
+ export const ChatToolCallFunctionSchema = z
40
+ .object({
41
+ name: z.string().describe("Function name the model wants to invoke."),
42
+ arguments: z
43
+ .string()
44
+ .describe("JSON-encoded argument object. Streamed in fragments, so assemble before parsing."),
45
+ })
46
+ .describe("The function a tool call invokes, with its arguments as a JSON string.");
47
+
48
+ export type ChatToolCallFunction = z.infer<typeof ChatToolCallFunctionSchema>;
49
+
50
+ export const ChatToolCallSchema = z
51
+ .object({
52
+ id: z.string().describe("Tool-call identifier echoed on the matching tool message."),
53
+ type: z
54
+ .string()
55
+ .describe("Tool type. function in practice; widened so unrecognized values round-trip."),
56
+ function: ChatToolCallFunctionSchema.describe(
57
+ "Function name and JSON arguments for this call.",
58
+ ),
59
+ })
60
+ .describe("One tool call attached to an assistant turn.");
61
+
62
+ export type ChatToolCall = z.infer<typeof ChatToolCallSchema>;
63
+
64
+ export const ChatMessageSchema = z
65
+ .object({
66
+ role: z
67
+ .string()
68
+ .describe(
69
+ "Message author. See ChatRole for the standard values; widened for provider extensions.",
70
+ ),
71
+ content: z
72
+ .union([z.string(), ChatContentPartSchema, z.array(ChatContentPartSchema)])
73
+ .nullable()
74
+ .optional()
75
+ .describe("Message body. Null when an assistant turn only calls tools."),
76
+ tool_calls: z
77
+ .array(ChatToolCallSchema)
78
+ .optional()
79
+ .describe("Tool calls attached to an assistant turn."),
80
+ tool_call_id: z
81
+ .string()
82
+ .optional()
83
+ .describe("Set on a tool turn, keying it back to the call it answers."),
84
+ name: z.string().optional().describe("Optional speaker or function name."),
85
+ })
86
+ .describe("A single chat message in an OpenAI Chat Completions request or response.");
87
+
88
+ export type ChatMessage = z.infer<typeof ChatMessageSchema>;
65
89
 
66
90
  /**
67
91
  * Top-level request fields an OpenAI client may send that Databricks Model
@@ -80,10 +104,7 @@ export interface ChatMessage {
80
104
  * paths that forward a client body largely as-is.
81
105
  */
82
106
  export const UNSUPPORTED_CHAT_FIELDS: readonly string[] = [
83
- // Tool-calling concurrency hint. Databricks rejects it; the upstream provider
84
- // decides parallelism itself.
85
107
  "parallel_tool_calls",
86
- // Response-persistence and bookkeeping fields for OpenAI's own platform.
87
108
  "store",
88
109
  "metadata",
89
110
  "service_tier",
@@ -112,21 +133,20 @@ export function stripUnsupportedChatFields(
112
133
  return dropped;
113
134
  }
114
135
 
115
- /** Options for {@link chatContentToText}. */
116
- export interface ChatContentToTextOptions {
117
- /**
118
- * Placed between parts. Defaults to `""`, which reassembles a message that was
119
- * split purely for transport; pass `"\n\n"` when the parts are separate
120
- * paragraphs that a human will read.
121
- */
122
- separator?: string;
123
- /**
124
- * Restrict to these `type` values. Defaults to accepting any part carrying
125
- * `text`, which covers the `input_text` / `output_text` / `text` spellings
126
- * different APIs use for the same thing.
127
- */
128
- types?: readonly string[];
129
- }
136
+ export const ChatContentToTextOptionsSchema = z
137
+ .object({
138
+ separator: z
139
+ .string()
140
+ .optional()
141
+ .describe("Placed between parts. Defaults to empty, which reassembles transport-split text."),
142
+ types: z
143
+ .array(z.string())
144
+ .optional()
145
+ .describe("Restrict flattening to these part type values when set."),
146
+ })
147
+ .describe("Options for flattening structured chat content to plain text.");
148
+
149
+ export type ChatContentToTextOptions = z.infer<typeof ChatContentToTextOptionsSchema>;
130
150
 
131
151
  /**
132
152
  * Normalize structured chat content to an array. Providers usually emit a
@@ -141,9 +161,10 @@ export function chatContentParts(content: unknown): ChatContentPart[] | undefine
141
161
  ? [content]
142
162
  : undefined;
143
163
  if (!values) return undefined;
144
- return values.filter((part): part is ChatContentPart =>
145
- Boolean(part && typeof part === "object"),
146
- );
164
+ return values.flatMap((part) => {
165
+ const parsed = ChatContentPartSchema.safeParse(part);
166
+ return parsed.success ? [parsed.data] : [];
167
+ });
147
168
  }
148
169
 
149
170
  /**
@@ -160,7 +181,7 @@ export function chatContentToText(
160
181
  if (typeof content === "string") return content;
161
182
  const normalized = chatContentParts(content);
162
183
  if (!normalized) return "";
163
- const { separator = "", types } = options;
184
+ const { separator = "", types } = ChatContentToTextOptionsSchema.parse(options);
164
185
  const parts: string[] = [];
165
186
  for (const part of normalized) {
166
187
  if (types && (typeof part.type !== "string" || !types.includes(part.type))) continue;
@@ -1,168 +0,0 @@
1
- import { z } from "zod";
2
- /** Browser-safe model contracts owned by the TypeScript model runtime. */
3
- /** Intent-oriented endpoint class slug. */
4
- export declare const modelClassSchema: z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>;
5
- /** Reasoning effort value accepted by compatible model endpoints. */
6
- export declare const reasoningEffortSchema: z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>;
7
- /** Relative quality, speed, and cost scores for an endpoint. */
8
- export declare const modelProfileSchema: z.ZodObject<{
9
- quality: z.ZodOptional<z.ZodNumber>;
10
- speed: z.ZodOptional<z.ZodNumber>;
11
- cost: z.ZodOptional<z.ZodNumber>;
12
- }, z.core.$strip>;
13
- /** Model retirement status. */
14
- export declare const modelStatusSchema: z.ZodObject<{
15
- deprecated: z.ZodDefault<z.ZodBoolean>;
16
- }, z.core.$strip>;
17
- /** Browser-safe normalized Model Serving endpoint metadata. */
18
- export declare const servingEndpointSummarySchema: z.ZodObject<{
19
- name: z.ZodString;
20
- displayName: z.ZodOptional<z.ZodString>;
21
- family: z.ZodOptional<z.ZodString>;
22
- task: z.ZodOptional<z.ZodString>;
23
- state: z.ZodOptional<z.ZodString>;
24
- description: z.ZodOptional<z.ZodString>;
25
- supportsTools: z.ZodOptional<z.ZodBoolean>;
26
- profile: z.ZodOptional<z.ZodObject<{
27
- quality: z.ZodOptional<z.ZodNumber>;
28
- speed: z.ZodOptional<z.ZodNumber>;
29
- cost: z.ZodOptional<z.ZodNumber>;
30
- }, z.core.$strip>>;
31
- class: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
32
- serviceNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
33
- modelServiceName: z.ZodOptional<z.ZodString>;
34
- reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>>;
35
- status: z.ZodOptional<z.ZodObject<{
36
- deprecated: z.ZodDefault<z.ZodBoolean>;
37
- }, z.core.$strip>>;
38
- dimension: z.ZodOptional<z.ZodNumber>;
39
- }, z.core.$strip>;
40
- /** Browser-safe model catalogue search and ranking controls. */
41
- export declare const modelQuerySchema: z.ZodObject<{
42
- search: z.ZodOptional<z.ZodString>;
43
- modelClass: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
44
- requiresTools: z.ZodOptional<z.ZodBoolean>;
45
- includeDeprecated: z.ZodOptional<z.ZodBoolean>;
46
- limit: z.ZodOptional<z.ZodNumber>;
47
- threshold: z.ZodOptional<z.ZodNumber>;
48
- }, z.core.$strip>;
49
- /** One ranked model-search result. */
50
- export declare const rankedModelSchema: z.ZodObject<{
51
- endpoint: z.ZodObject<{
52
- name: z.ZodString;
53
- displayName: z.ZodOptional<z.ZodString>;
54
- family: z.ZodOptional<z.ZodString>;
55
- task: z.ZodOptional<z.ZodString>;
56
- state: z.ZodOptional<z.ZodString>;
57
- description: z.ZodOptional<z.ZodString>;
58
- supportsTools: z.ZodOptional<z.ZodBoolean>;
59
- profile: z.ZodOptional<z.ZodObject<{
60
- quality: z.ZodOptional<z.ZodNumber>;
61
- speed: z.ZodOptional<z.ZodNumber>;
62
- cost: z.ZodOptional<z.ZodNumber>;
63
- }, z.core.$strip>>;
64
- class: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
65
- serviceNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
66
- modelServiceName: z.ZodOptional<z.ZodString>;
67
- reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>>;
68
- status: z.ZodOptional<z.ZodObject<{
69
- deprecated: z.ZodDefault<z.ZodBoolean>;
70
- }, z.core.$strip>>;
71
- dimension: z.ZodOptional<z.ZodNumber>;
72
- }, z.core.$strip>;
73
- modelClass: z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>;
74
- score: z.ZodOptional<z.ZodNumber>;
75
- }, z.core.$strip>;
76
- /** Capabilities derived from one normalized serving endpoint. */
77
- export declare const endpointCapabilitiesSchema: z.ZodObject<{
78
- chat: z.ZodBoolean;
79
- embedding: z.ZodBoolean;
80
- tools: z.ZodBoolean;
81
- }, z.core.$strip>;
82
- /** Fallback class and rank for an unscored recognized model family. */
83
- export declare const familyClassSchema: z.ZodObject<{
84
- class: z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>;
85
- rank: z.ZodNumber;
86
- }, z.core.$strip>;
87
- /** Documented capabilities resolved for one model identity. */
88
- export declare const modelCapabilitiesSchema: z.ZodObject<{
89
- responses: z.ZodBoolean;
90
- imageInput: z.ZodBoolean;
91
- applyPatch: z.ZodBoolean;
92
- webSearch: z.ZodBoolean;
93
- }, z.core.$strip>;
94
- /** Published pay-per-token limits for one model. */
95
- export declare const modelRateLimitsSchema: z.ZodObject<{
96
- inputTokensPerMinute: z.ZodNullable<z.ZodNumber>;
97
- outputTokensPerMinute: z.ZodNullable<z.ZodNumber>;
98
- queriesPerHour: z.ZodNullable<z.ZodNumber>;
99
- }, z.core.$strip>;
100
- /** Combined retirement, capability, and rate-limit metadata. */
101
- export declare const modelMetadataSchema: z.ZodObject<{
102
- status: z.ZodObject<{
103
- deprecated: z.ZodDefault<z.ZodBoolean>;
104
- }, z.core.$strip>;
105
- capabilities: z.ZodObject<{
106
- responses: z.ZodBoolean;
107
- imageInput: z.ZodBoolean;
108
- applyPatch: z.ZodBoolean;
109
- webSearch: z.ZodBoolean;
110
- }, z.core.$strip>;
111
- rateLimits: z.ZodOptional<z.ZodObject<{
112
- inputTokensPerMinute: z.ZodNullable<z.ZodNumber>;
113
- outputTokensPerMinute: z.ZodNullable<z.ZodNumber>;
114
- queriesPerHour: z.ZodNullable<z.ZodNumber>;
115
- }, z.core.$strip>>;
116
- }, z.core.$strip>;
117
- /** Result of resolving a fuzzy model identifier. */
118
- export declare const resolvedModelSchema: z.ZodObject<{
119
- modelId: z.ZodString;
120
- matched: z.ZodBoolean;
121
- score: z.ZodOptional<z.ZodNumber>;
122
- }, z.core.$strip>;
123
- /** Pure controls for fuzzy endpoint resolution. */
124
- export declare const resolveModelOptionsSchema: z.ZodObject<{
125
- threshold: z.ZodOptional<z.ZodNumber>;
126
- requiresTools: z.ZodOptional<z.ZodBoolean>;
127
- }, z.core.$strip>;
128
- /** One endpoint paired with its fuzzy-match distance. */
129
- export declare const scoredEndpointSchema: z.ZodObject<{
130
- endpoint: z.ZodObject<{
131
- name: z.ZodString;
132
- displayName: z.ZodOptional<z.ZodString>;
133
- family: z.ZodOptional<z.ZodString>;
134
- task: z.ZodOptional<z.ZodString>;
135
- state: z.ZodOptional<z.ZodString>;
136
- description: z.ZodOptional<z.ZodString>;
137
- supportsTools: z.ZodOptional<z.ZodBoolean>;
138
- profile: z.ZodOptional<z.ZodObject<{
139
- quality: z.ZodOptional<z.ZodNumber>;
140
- speed: z.ZodOptional<z.ZodNumber>;
141
- cost: z.ZodOptional<z.ZodNumber>;
142
- }, z.core.$strip>>;
143
- class: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
144
- serviceNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
145
- modelServiceName: z.ZodOptional<z.ZodString>;
146
- reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>>;
147
- status: z.ZodOptional<z.ZodObject<{
148
- deprecated: z.ZodDefault<z.ZodBoolean>;
149
- }, z.core.$strip>>;
150
- dimension: z.ZodOptional<z.ZodNumber>;
151
- }, z.core.$strip>;
152
- score: z.ZodNumber;
153
- }, z.core.$strip>;
154
- /** Caller intent used to resolve one model from a catalogue. */
155
- export declare const resolveModelInputSchema: z.ZodObject<{
156
- explicit: z.ZodOptional<z.ZodString>;
157
- fuzzy: z.ZodOptional<z.ZodBoolean>;
158
- threshold: z.ZodOptional<z.ZodNumber>;
159
- requiresTools: z.ZodOptional<z.ZodBoolean>;
160
- modelClass: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
161
- fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
162
- liveOnly: z.ZodOptional<z.ZodBoolean>;
163
- }, z.core.$strip>;
164
- /** Selected model identifier and the policy branch that selected it. */
165
- export declare const resolvedModelSelectionSchema: z.ZodObject<{
166
- modelId: z.ZodString;
167
- source: z.ZodUnion<readonly [z.ZodLiteral<"explicit">, z.ZodLiteral<"fuzzy-match">, z.ZodLiteral<"class">, z.ZodLiteral<"fallback">]>;
168
- }, z.core.$strip>;
@@ -1,111 +0,0 @@
1
- // Generated by ts-to-zod
2
- import { z } from "zod";
3
- /** Browser-safe model contracts owned by the TypeScript model runtime. */
4
- /** Intent-oriented endpoint class slug. */
5
- export const modelClassSchema = z.union([z.literal("chat-thinking"), z.literal("chat-balanced"), z.literal("chat-fast"), z.literal("embedding")]);
6
- /** Reasoning effort value accepted by compatible model endpoints. */
7
- export const reasoningEffortSchema = z.union([z.literal("none"), z.literal("minimal"), z.literal("low"), z.literal("medium"), z.literal("high"), z.literal("xhigh"), z.literal("max")]);
8
- /** Relative quality, speed, and cost scores for an endpoint. */
9
- export const modelProfileSchema = z.object({
10
- quality: z.number().optional(),
11
- speed: z.number().optional(),
12
- cost: z.number().optional()
13
- });
14
- /** Model retirement status. */
15
- export const modelStatusSchema = z.object({
16
- deprecated: z.boolean().default(false)
17
- });
18
- /** Browser-safe normalized Model Serving endpoint metadata. */
19
- export const servingEndpointSummarySchema = z.object({
20
- name: z.string(),
21
- displayName: z.string().optional(),
22
- family: z.string().optional(),
23
- task: z.string().optional(),
24
- state: z.string().optional(),
25
- description: z.string().optional(),
26
- supportsTools: z.boolean().optional(),
27
- profile: modelProfileSchema.optional(),
28
- class: modelClassSchema.optional(),
29
- serviceNames: z.record(z.string(), z.string()).optional(),
30
- modelServiceName: z.string().optional(),
31
- reasoningEfforts: z.array(reasoningEffortSchema).optional(),
32
- status: modelStatusSchema.optional(),
33
- dimension: z.number().optional()
34
- });
35
- /** Browser-safe model catalogue search and ranking controls. */
36
- export const modelQuerySchema = z.object({
37
- search: z.string().optional(),
38
- modelClass: modelClassSchema.optional(),
39
- requiresTools: z.boolean().optional(),
40
- includeDeprecated: z.boolean().optional(),
41
- limit: z.number().int().min(1).max(50).optional(),
42
- threshold: z.number().min(0).max(1).optional()
43
- });
44
- /** One ranked model-search result. */
45
- export const rankedModelSchema = z.object({
46
- endpoint: servingEndpointSummarySchema,
47
- modelClass: modelClassSchema,
48
- score: z.number().min(0).max(1).optional()
49
- });
50
- /** Capabilities derived from one normalized serving endpoint. */
51
- export const endpointCapabilitiesSchema = z.object({
52
- chat: z.boolean(),
53
- embedding: z.boolean(),
54
- tools: z.boolean()
55
- });
56
- /** Fallback class and rank for an unscored recognized model family. */
57
- export const familyClassSchema = z.object({
58
- class: modelClassSchema,
59
- rank: z.number().min(0)
60
- });
61
- /** Documented capabilities resolved for one model identity. */
62
- export const modelCapabilitiesSchema = z.object({
63
- responses: z.boolean(),
64
- imageInput: z.boolean(),
65
- applyPatch: z.boolean(),
66
- webSearch: z.boolean()
67
- });
68
- /** Published pay-per-token limits for one model. */
69
- export const modelRateLimitsSchema = z.object({
70
- inputTokensPerMinute: z.number().int().min(0).nullable(),
71
- outputTokensPerMinute: z.number().int().min(0).nullable(),
72
- queriesPerHour: z.number().int().min(0).nullable()
73
- });
74
- /** Combined retirement, capability, and rate-limit metadata. */
75
- export const modelMetadataSchema = z.object({
76
- status: modelStatusSchema,
77
- capabilities: modelCapabilitiesSchema,
78
- rateLimits: modelRateLimitsSchema.optional()
79
- });
80
- /** Result of resolving a fuzzy model identifier. */
81
- export const resolvedModelSchema = z.object({
82
- modelId: z.string(),
83
- matched: z.boolean(),
84
- score: z.number().min(0).max(1).optional()
85
- });
86
- /** Pure controls for fuzzy endpoint resolution. */
87
- export const resolveModelOptionsSchema = z.object({
88
- threshold: z.number().min(0).max(1).optional(),
89
- requiresTools: z.boolean().optional()
90
- });
91
- /** One endpoint paired with its fuzzy-match distance. */
92
- export const scoredEndpointSchema = z.object({
93
- endpoint: servingEndpointSummarySchema,
94
- score: z.number().min(0).max(1)
95
- });
96
- /** Caller intent used to resolve one model from a catalogue. */
97
- export const resolveModelInputSchema = z.object({
98
- explicit: z.string().optional(),
99
- fuzzy: z.boolean().optional(),
100
- threshold: z.number().min(0).max(1).optional(),
101
- requiresTools: z.boolean().optional(),
102
- modelClass: modelClassSchema.optional(),
103
- fallbacks: z.array(z.string()).optional(),
104
- liveOnly: z.boolean().optional()
105
- });
106
- /** Selected model identifier and the policy branch that selected it. */
107
- export const resolvedModelSelectionSchema = z.object({
108
- modelId: z.string(),
109
- source: z.union([z.literal("explicit"), z.literal("fuzzy-match"), z.literal("class"), z.literal("fallback")])
110
- });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3NjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL19zY2hlbWFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlCQUF5QjtBQUN6QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLDBFQUEwRTtBQUMxRSwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWxKLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFeEwsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVB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QUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDL0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUM5QyxhQUFhLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN6QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFFSCx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUNoSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgdHMtdG8tem9kXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vKiogQnJvd3Nlci1zYWZlIG1vZGVsIGNvbnRyYWN0cyBvd25lZCBieSB0aGUgVHlwZVNjcmlwdCBtb2RlbCBydW50aW1lLiAqL1xuLyoqIEludGVudC1vcmllbnRlZCBlbmRwb2ludCBjbGFzcyBzbHVnLiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsQ2xhc3NTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJjaGF0LXRoaW5raW5nXCIpLCB6LmxpdGVyYWwoXCJjaGF0LWJhbGFuY2VkXCIpLCB6LmxpdGVyYWwoXCJjaGF0LWZhc3RcIiksIHoubGl0ZXJhbChcImVtYmVkZGluZ1wiKV0pO1xuXG4vKiogUmVhc29uaW5nIGVmZm9ydCB2YWx1ZSBhY2NlcHRlZCBieSBjb21wYXRpYmxlIG1vZGVsIGVuZHBvaW50cy4gKi9cbmV4cG9ydCBjb25zdCByZWFzb25pbmdFZmZvcnRTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJub25lXCIpLCB6LmxpdGVyYWwoXCJtaW5pbWFsXCIpLCB6LmxpdGVyYWwoXCJsb3dcIiksIHoubGl0ZXJhbChcIm1lZGl1bVwiKSwgei5saXRlcmFsKFwiaGlnaFwiKSwgei5saXRlcmFsKFwieGhpZ2hcIiksIHoubGl0ZXJhbChcIm1heFwiKV0pO1xuXG4vKiogUmVsYXRpdmUgcXVhbGl0eSwgc3BlZWQsIGFuZCBjb3N0IHNjb3JlcyBmb3IgYW4gZW5kcG9pbnQuICovXG5leHBvcnQgY29uc3QgbW9kZWxQcm9maWxlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHF1YWxpdHk6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBzcGVlZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNvc3Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKVxufSk7XG5cbi8qKiBNb2RlbCByZXRpcmVtZW50IHN0YXR1cy4gKi9cbmV4cG9ydCBjb25zdCBtb2RlbFN0YXR1c1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkZXByZWNhdGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKVxufSk7XG5cbi8qKiBCcm93c2VyLXNhZmUgbm9ybWFsaXplZCBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50IG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IHNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBkaXNwbGF5TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGZhbWlseTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHRhc2s6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3VwcG9ydHNUb29sczogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBwcm9maWxlOiBtb2RlbFByb2ZpbGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBjbGFzczogbW9kZWxDbGFzc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIHNlcnZpY2VOYW1lczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICBtb2RlbFNlcnZpY2VOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcmVhc29uaW5nRWZmb3J0czogei5hcnJheShyZWFzb25pbmdFZmZvcnRTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgc3RhdHVzOiBtb2RlbFN0YXR1c1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIGRpbWVuc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpXG59KTtcblxuLyoqIEJyb3dzZXItc2FmZSBtb2RlbCBjYXRhbG9ndWUgc2VhcmNoIGFuZCByYW5raW5nIGNvbnRyb2xzLiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsUXVlcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgc2VhcmNoOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbW9kZWxDbGFzczogbW9kZWxDbGFzc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIHJlcXVpcmVzVG9vbHM6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgaW5jbHVkZURlcHJlY2F0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgbGltaXQ6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLm1heCg1MCkub3B0aW9uYWwoKSxcbiAgICB0aHJlc2hvbGQ6IHoubnVtYmVyKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpXG59KTtcblxuLyoqIE9uZSByYW5rZWQgbW9kZWwtc2VhcmNoIHJlc3VsdC4gKi9cbmV4cG9ydCBjb25zdCByYW5rZWRNb2RlbFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBlbmRwb2ludDogc2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYSxcbiAgICBtb2RlbENsYXNzOiBtb2RlbENsYXNzU2NoZW1hLFxuICAgIHNjb3JlOiB6Lm51bWJlcigpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKVxufSk7XG5cbi8qKiBDYXBhYmlsaXRpZXMgZGVyaXZlZCBmcm9tIG9uZSBub3JtYWxpemVkIHNlcnZpbmcgZW5kcG9pbnQuICovXG5leHBvcnQgY29uc3QgZW5kcG9pbnRDYXBhYmlsaXRpZXNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgY2hhdDogei5ib29sZWFuKCksXG4gICAgZW1iZWRkaW5nOiB6LmJvb2xlYW4oKSxcbiAgICB0b29sczogei5ib29sZWFuKClcbn0pO1xuXG4vKiogRmFsbGJhY2sgY2xhc3MgYW5kIHJhbmsgZm9yIGFuIHVuc2NvcmVkIHJlY29nbml6ZWQgbW9kZWwgZmFtaWx5LiAqL1xuZXhwb3J0IGNvbnN0IGZhbWlseUNsYXNzU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNsYXNzOiBtb2RlbENsYXNzU2NoZW1hLFxuICAgIHJhbms6IHoubnVtYmVyKCkubWluKDApXG59KTtcblxuLyoqIERvY3VtZW50ZWQgY2FwYWJpbGl0aWVzIHJlc29sdmVkIGZvciBvbmUgbW9kZWwgaWRlbnRpdHkuICovXG5leHBvcnQgY29uc3QgbW9kZWxDYXBhYmlsaXRpZXNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgcmVzcG9uc2VzOiB6LmJvb2xlYW4oKSxcbiAgICBpbWFnZUlucHV0OiB6LmJvb2xlYW4oKSxcbiAgICBhcHBseVBhdGNoOiB6LmJvb2xlYW4oKSxcbiAgICB3ZWJTZWFyY2g6IHouYm9vbGVhbigpXG59KTtcblxuLyoqIFB1Ymxpc2hlZCBwYXktcGVyLXRva2VuIGxpbWl0cyBmb3Igb25lIG1vZGVsLiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsUmF0ZUxpbWl0c1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBpbnB1dFRva2Vuc1Blck1pbnV0ZTogei5udW1iZXIoKS5pbnQoKS5taW4oMCkubnVsbGFibGUoKSxcbiAgICBvdXRwdXRUb2tlbnNQZXJNaW51dGU6IHoubnVtYmVyKCkuaW50KCkubWluKDApLm51bGxhYmxlKCksXG4gICAgcXVlcmllc1BlckhvdXI6IHoubnVtYmVyKCkuaW50KCkubWluKDApLm51bGxhYmxlKClcbn0pO1xuXG4vKiogQ29tYmluZWQgcmV0aXJlbWVudCwgY2FwYWJpbGl0eSwgYW5kIHJhdGUtbGltaXQgbWV0YWRhdGEuICovXG5leHBvcnQgY29uc3QgbW9kZWxNZXRhZGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBzdGF0dXM6IG1vZGVsU3RhdHVzU2NoZW1hLFxuICAgIGNhcGFiaWxpdGllczogbW9kZWxDYXBhYmlsaXRpZXNTY2hlbWEsXG4gICAgcmF0ZUxpbWl0czogbW9kZWxSYXRlTGltaXRzU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuXG4vKiogUmVzdWx0IG9mIHJlc29sdmluZyBhIGZ1enp5IG1vZGVsIGlkZW50aWZpZXIuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZWRNb2RlbFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBtb2RlbElkOiB6LnN0cmluZygpLFxuICAgIG1hdGNoZWQ6IHouYm9vbGVhbigpLFxuICAgIHNjb3JlOiB6Lm51bWJlcigpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKVxufSk7XG5cbi8qKiBQdXJlIGNvbnRyb2xzIGZvciBmdXp6eSBlbmRwb2ludCByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVNb2RlbE9wdGlvbnNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgdGhyZXNob2xkOiB6Lm51bWJlcigpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxcbiAgICByZXF1aXJlc1Rvb2xzOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcblxuLyoqIE9uZSBlbmRwb2ludCBwYWlyZWQgd2l0aCBpdHMgZnV6enktbWF0Y2ggZGlzdGFuY2UuICovXG5leHBvcnQgY29uc3Qgc2NvcmVkRW5kcG9pbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZW5kcG9pbnQ6IHNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEsXG4gICAgc2NvcmU6IHoubnVtYmVyKCkubWluKDApLm1heCgxKVxufSk7XG5cbi8qKiBDYWxsZXIgaW50ZW50IHVzZWQgdG8gcmVzb2x2ZSBvbmUgbW9kZWwgZnJvbSBhIGNhdGFsb2d1ZS4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlTW9kZWxJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBleHBsaWNpdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGZ1enp5OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHRocmVzaG9sZDogei5udW1iZXIoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksXG4gICAgcmVxdWlyZXNUb29sczogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBtb2RlbENsYXNzOiBtb2RlbENsYXNzU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgZmFsbGJhY2tzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgbGl2ZU9ubHk6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuXG4vKiogU2VsZWN0ZWQgbW9kZWwgaWRlbnRpZmllciBhbmQgdGhlIHBvbGljeSBicmFuY2ggdGhhdCBzZWxlY3RlZCBpdC4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlZE1vZGVsU2VsZWN0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIG1vZGVsSWQ6IHouc3RyaW5nKCksXG4gICAgc291cmNlOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJleHBsaWNpdFwiKSwgei5saXRlcmFsKFwiZnV6enktbWF0Y2hcIiksIHoubGl0ZXJhbChcImNsYXNzXCIpLCB6LmxpdGVyYWwoXCJmYWxsYmFja1wiKV0pXG59KTtcbiJdfQ==
@@ -1,127 +0,0 @@
1
- // Generated by ts-to-zod
2
- import { z } from "zod";
3
-
4
- /** Browser-safe model contracts owned by the TypeScript model runtime. */
5
- /** Intent-oriented endpoint class slug. */
6
- export const modelClassSchema = z.union([z.literal("chat-thinking"), z.literal("chat-balanced"), z.literal("chat-fast"), z.literal("embedding")]);
7
-
8
- /** Reasoning effort value accepted by compatible model endpoints. */
9
- export const reasoningEffortSchema = z.union([z.literal("none"), z.literal("minimal"), z.literal("low"), z.literal("medium"), z.literal("high"), z.literal("xhigh"), z.literal("max")]);
10
-
11
- /** Relative quality, speed, and cost scores for an endpoint. */
12
- export const modelProfileSchema = z.object({
13
- quality: z.number().optional(),
14
- speed: z.number().optional(),
15
- cost: z.number().optional()
16
- });
17
-
18
- /** Model retirement status. */
19
- export const modelStatusSchema = z.object({
20
- deprecated: z.boolean().default(false)
21
- });
22
-
23
- /** Browser-safe normalized Model Serving endpoint metadata. */
24
- export const servingEndpointSummarySchema = z.object({
25
- name: z.string(),
26
- displayName: z.string().optional(),
27
- family: z.string().optional(),
28
- task: z.string().optional(),
29
- state: z.string().optional(),
30
- description: z.string().optional(),
31
- supportsTools: z.boolean().optional(),
32
- profile: modelProfileSchema.optional(),
33
- class: modelClassSchema.optional(),
34
- serviceNames: z.record(z.string(), z.string()).optional(),
35
- modelServiceName: z.string().optional(),
36
- reasoningEfforts: z.array(reasoningEffortSchema).optional(),
37
- status: modelStatusSchema.optional(),
38
- dimension: z.number().optional()
39
- });
40
-
41
- /** Browser-safe model catalogue search and ranking controls. */
42
- export const modelQuerySchema = z.object({
43
- search: z.string().optional(),
44
- modelClass: modelClassSchema.optional(),
45
- requiresTools: z.boolean().optional(),
46
- includeDeprecated: z.boolean().optional(),
47
- limit: z.number().int().min(1).max(50).optional(),
48
- threshold: z.number().min(0).max(1).optional()
49
- });
50
-
51
- /** One ranked model-search result. */
52
- export const rankedModelSchema = z.object({
53
- endpoint: servingEndpointSummarySchema,
54
- modelClass: modelClassSchema,
55
- score: z.number().min(0).max(1).optional()
56
- });
57
-
58
- /** Capabilities derived from one normalized serving endpoint. */
59
- export const endpointCapabilitiesSchema = z.object({
60
- chat: z.boolean(),
61
- embedding: z.boolean(),
62
- tools: z.boolean()
63
- });
64
-
65
- /** Fallback class and rank for an unscored recognized model family. */
66
- export const familyClassSchema = z.object({
67
- class: modelClassSchema,
68
- rank: z.number().min(0)
69
- });
70
-
71
- /** Documented capabilities resolved for one model identity. */
72
- export const modelCapabilitiesSchema = z.object({
73
- responses: z.boolean(),
74
- imageInput: z.boolean(),
75
- applyPatch: z.boolean(),
76
- webSearch: z.boolean()
77
- });
78
-
79
- /** Published pay-per-token limits for one model. */
80
- export const modelRateLimitsSchema = z.object({
81
- inputTokensPerMinute: z.number().int().min(0).nullable(),
82
- outputTokensPerMinute: z.number().int().min(0).nullable(),
83
- queriesPerHour: z.number().int().min(0).nullable()
84
- });
85
-
86
- /** Combined retirement, capability, and rate-limit metadata. */
87
- export const modelMetadataSchema = z.object({
88
- status: modelStatusSchema,
89
- capabilities: modelCapabilitiesSchema,
90
- rateLimits: modelRateLimitsSchema.optional()
91
- });
92
-
93
- /** Result of resolving a fuzzy model identifier. */
94
- export const resolvedModelSchema = z.object({
95
- modelId: z.string(),
96
- matched: z.boolean(),
97
- score: z.number().min(0).max(1).optional()
98
- });
99
-
100
- /** Pure controls for fuzzy endpoint resolution. */
101
- export const resolveModelOptionsSchema = z.object({
102
- threshold: z.number().min(0).max(1).optional(),
103
- requiresTools: z.boolean().optional()
104
- });
105
-
106
- /** One endpoint paired with its fuzzy-match distance. */
107
- export const scoredEndpointSchema = z.object({
108
- endpoint: servingEndpointSummarySchema,
109
- score: z.number().min(0).max(1)
110
- });
111
-
112
- /** Caller intent used to resolve one model from a catalogue. */
113
- export const resolveModelInputSchema = z.object({
114
- explicit: z.string().optional(),
115
- fuzzy: z.boolean().optional(),
116
- threshold: z.number().min(0).max(1).optional(),
117
- requiresTools: z.boolean().optional(),
118
- modelClass: modelClassSchema.optional(),
119
- fallbacks: z.array(z.string()).optional(),
120
- liveOnly: z.boolean().optional()
121
- });
122
-
123
- /** Selected model identifier and the policy branch that selected it. */
124
- export const resolvedModelSelectionSchema = z.object({
125
- modelId: z.string(),
126
- source: z.union([z.literal("explicit"), z.literal("fuzzy-match"), z.literal("class"), z.literal("fallback")])
127
- });