@dbx-tools/model 0.9.21 → 0.9.28

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.
Files changed (86) hide show
  1. package/README.md +61 -10
  2. package/index.ts +12 -2
  3. package/lib/exports.d.ts +1 -0
  4. package/lib/exports.js +2 -0
  5. package/lib/index.d.ts +12 -2
  6. package/lib/index.js +9 -2
  7. package/lib/src/_metadata-contract.d.ts +42 -0
  8. package/lib/src/_metadata-contract.js +11 -0
  9. package/lib/src/_metadata-generator.d.ts +7 -0
  10. package/lib/src/_metadata-generator.js +182 -0
  11. package/lib/src/_ranking.d.ts +20 -0
  12. package/lib/src/_ranking.js +226 -0
  13. package/lib/src/_selection.d.ts +23 -0
  14. package/lib/src/_selection.js +95 -0
  15. package/lib/src/classes.d.ts +2 -2
  16. package/lib/src/classes.js +10 -8
  17. package/lib/src/classify.d.ts +130 -0
  18. package/lib/src/classify.js +283 -0
  19. package/lib/src/fallback.d.ts +4 -4
  20. package/lib/src/fallback.js +7 -7
  21. package/lib/src/generated/model-capabilities.json +90 -0
  22. package/lib/src/generated/model-rate-limits.json +342 -0
  23. package/lib/src/generated/retired-models.json +32 -0
  24. package/lib/src/invoke.js +3 -3
  25. package/lib/src/metadata.d.ts +33 -0
  26. package/lib/src/metadata.js +120 -0
  27. package/lib/src/model-catalog.d.ts +4 -4
  28. package/lib/src/model-catalog.js +19 -24
  29. package/lib/src/model-client.d.ts +67 -0
  30. package/lib/src/model-client.js +181 -0
  31. package/lib/src/policy.d.ts +14 -8
  32. package/lib/src/policy.js +173 -14
  33. package/lib/src/python.d.ts +2 -0
  34. package/lib/src/python.js +3 -0
  35. package/lib/src/resolve.d.ts +10 -143
  36. package/lib/src/resolve.js +11 -196
  37. package/lib/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +15 -5
  39. package/src/_metadata-contract.ts +56 -0
  40. package/src/_metadata-generator.ts +199 -0
  41. package/src/_ranking.ts +260 -0
  42. package/src/_selection.ts +141 -0
  43. package/src/classes.ts +11 -7
  44. package/src/classify.ts +324 -0
  45. package/src/fallback.ts +11 -7
  46. package/src/generated/model-capabilities.json +90 -0
  47. package/src/generated/model-rate-limits.json +342 -0
  48. package/src/generated/retired-models.json +32 -0
  49. package/src/invoke.ts +2 -2
  50. package/src/metadata.ts +189 -0
  51. package/src/model-catalog.ts +26 -28
  52. package/src/model-client.ts +311 -0
  53. package/src/policy.ts +176 -19
  54. package/src/python.ts +2 -0
  55. package/src/resolve.ts +24 -270
  56. package/._LICENSE +0 -0
  57. package/._README.md +0 -0
  58. package/._index.ts +0 -0
  59. package/._package.json +0 -0
  60. package/lib/._index.d.ts +0 -0
  61. package/lib/._index.js +0 -0
  62. package/lib/._tsconfig.tsbuildinfo +0 -0
  63. package/lib/src/.__native.d.ts +0 -0
  64. package/lib/src/.__native.js +0 -0
  65. package/lib/src/._classes.d.ts +0 -0
  66. package/lib/src/._classes.js +0 -0
  67. package/lib/src/._fallback.d.ts +0 -0
  68. package/lib/src/._fallback.js +0 -0
  69. package/lib/src/._invoke.d.ts +0 -0
  70. package/lib/src/._invoke.js +0 -0
  71. package/lib/src/._model-catalog.d.ts +0 -0
  72. package/lib/src/._model-catalog.js +0 -0
  73. package/lib/src/._policy.d.ts +0 -0
  74. package/lib/src/._policy.js +0 -0
  75. package/lib/src/._resolve.d.ts +0 -0
  76. package/lib/src/._resolve.js +0 -0
  77. package/lib/src/_native.d.ts +0 -14
  78. package/lib/src/_native.js +0 -124
  79. package/src/.__native.ts +0 -0
  80. package/src/._classes.ts +0 -0
  81. package/src/._fallback.ts +0 -0
  82. package/src/._invoke.ts +0 -0
  83. package/src/._model-catalog.ts +0 -0
  84. package/src/._policy.ts +0 -0
  85. package/src/._resolve.ts +0 -0
  86. package/src/_native.ts +0 -174
package/src/resolve.ts CHANGED
@@ -1,165 +1,41 @@
1
1
  /**
2
- * Workspace-aware model selection.
3
- *
4
- * Given a caller's intent - a search string, a capability {@link ModelClass}
5
- * ceiling, both, or nothing - the toolkit returns matching endpoints ranked by
6
- * match quality then class, or collapses to the single best id the workspace
7
- * actually has, degrading from "best in range" down to the static fallback
8
- * floor. Selection is chat-only: embedding endpoints surface only when
9
- * `modelClass` is explicitly {@link ModelClass.Embedding}.
10
- *
11
- * Two shapes of selection, each in a pure form (over an endpoint list the
12
- * caller already holds) and an I/O wrapper (that lists `/serving-endpoints`
13
- * first): ranking, which returns a match- then class-ordered list, and
14
- * single-selection, which collapses to one id plus how it was reached and
15
- * layers the operator-pinned fallback / static-floor safety net on top. A chat
16
- * `modelClass` acts as a ceiling: that band and the less-capable chat bands
17
- * below it are eligible (see {@link classesAtOrBelow}), so a `chat-balanced`
18
- * ask can fall to `chat-fast` but never escalate to `chat-thinking`.
2
+ * Workspace-aware model selection wrappers.
19
3
  *
20
4
  * @module
21
5
  */
6
+ import type { ModelQuery, RankedModel, ServingEndpointSummary } from "@dbx-tools/shared-model";
22
7
 
23
- import { object } from "@dbx-tools/shared-core";
24
8
  import {
25
- model,
26
- type ModelQuery,
27
- type RankedModel,
28
- type ServingEndpointSummary,
29
- } from "@dbx-tools/shared-model";
30
-
31
- import { rankEndpoints } from "./_native.ts";
32
- import { FALLBACK_MODEL_IDS, modelsForClass } from "./fallback.ts";
9
+ lookupModels,
10
+ rankModelId,
11
+ type ResolveModelInput,
12
+ type ResolvedModelSelection,
13
+ resolveModel,
14
+ } from "./_selection.ts";
33
15
  import {
34
16
  listServingEndpoints,
17
+ type ListServingEndpointsOptions,
35
18
  type ResolvedModel,
36
19
  type ResolveModelOptions,
37
20
  type WorkspaceClientLike,
38
21
  } from "./model-catalog.ts";
39
- import { endpointSupportsTools } from "./policy.ts";
40
-
41
- type ModelClass = model.ModelClass;
42
22
 
43
- /** Preferred live family for an unconfigured general-purpose chat default. */
44
- const DEFAULT_MODEL_FAMILY_SEARCH = "gpt";
45
-
46
- /** Caller intent passed to {@link resolveModel}. */
47
- export interface ResolveModelInput {
48
- /**
49
- * Explicit model id / loose name (per-request override, agent / plugin
50
- * default, or env var). When set it wins over `modelClass` and `fallbacks`.
51
- */
52
- explicit?: string;
53
- /**
54
- * Fuzzy-match an `explicit` name against the live catalogue so loose names
55
- * like `"claude sonnet"` resolve. Default `true`. When `false` the explicit
56
- * input is returned verbatim (Databricks surfaces the canonical 404 if it
57
- * doesn't exist).
58
- */
59
- fuzzy?: boolean;
60
- /** Rust fuzzy-distance threshold forwarded to the search match. */
61
- threshold?: number;
62
- /** Require a model that supports a complete function-tool round-trip. */
63
- requiresTools?: boolean;
64
- /**
65
- * Chat capability class to resolve when no `explicit` id is given. The live
66
- * catalogue is classified by its Foundation Model API scores and the top
67
- * available model in the class (and the chat bands below it) wins, falling
68
- * back to the class's small static list.
69
- */
70
- modelClass?: ModelClass;
71
- /**
72
- * Operator-supplied fallback ids tried *first* in the no-explicit, no-class
73
- * path (e.g. a regulated workspace pinned to an approved subset), ahead of
74
- * the auto-classified catalogue.
75
- */
76
- fallbacks?: readonly string[];
77
- /**
78
- * Refuse the static offline floor when the live catalogue has no match.
79
- * Use for unpinned defaults that must always name a currently available
80
- * endpoint.
81
- */
82
- liveOnly?: boolean;
83
- }
84
-
85
- /** Outcome of {@link resolveModel}: the chosen id plus how it was reached. */
86
- export interface ResolvedModelSelection {
87
- modelId: string;
88
- source: "explicit" | "fuzzy-match" | "class" | "fallback";
89
- }
23
+ export { lookupModels, rankModelId, resolveModel } from "./_selection.ts";
24
+ export type { ResolveModelInput, ResolvedModelSelection } from "./_selection.ts";
90
25
 
91
- /** Intent + catalogue knobs passed to {@link selectModel}. */
26
+ /** Intent plus catalogue cache controls passed to {@link selectModel}. */
92
27
  export interface SelectModelInput extends ResolveModelInput {
93
- /** TTL override for the cached `/serving-endpoints` listing, in ms. */
94
28
  ttlMs?: number;
95
- /** Trusted opaque identity of the credential used by the workspace client. */
96
29
  cacheIdentity?: string;
97
30
  }
98
31
 
99
- /** TTL override merged into a {@link ModelQuery} for {@link searchModels}. */
32
+ /** Query plus catalogue cache controls passed to {@link searchModels}. */
100
33
  export interface SearchModelsInput extends ModelQuery {
101
- /** TTL override for the cached `/serving-endpoints` listing, in ms. */
102
34
  ttlMs?: number;
103
- /** Trusted opaque identity of the credential used by the workspace client. */
104
35
  cacheIdentity?: string;
105
36
  }
106
37
 
107
- /**
108
- * Rank the live catalogue against a {@link ModelQuery}, best-first.
109
- *
110
- * Rust owns classification, fuzzy scoring, family-version ordering, preferred
111
- * variants, class ceilings, tool filtering, and result limiting. Node retains
112
- * the caller's endpoint objects so fields outside the ranking contract remain
113
- * available unchanged.
114
- */
115
- export function lookupModels(
116
- endpoints: readonly ServingEndpointSummary[],
117
- query: ModelQuery = {},
118
- ): RankedModel[] {
119
- return rankEndpoints(endpoints, query);
120
- }
121
-
122
- /**
123
- * Collapse {@link lookupModels} to a single id: the closest endpoint to `search`
124
- * in a catalogue snapshot, or the input verbatim when nothing scores within the
125
- * threshold.
126
- *
127
- * The ranked counterpart to {@link resolveModelId}: equal
128
- * match scores are broken by class and then within-class version, so a loose
129
- * `"opus"` prefers `opus-5` over `opus-4-7` instead of picking whichever
130
- * sibling appeared first. Returning the input unmatched (rather
131
- * than a near neighbour) is deliberate - a deliberate endpoint id is never
132
- * silently rewritten, and Databricks surfaces a clean 404.
133
- */
134
- export function rankModelId(
135
- endpoints: readonly ServingEndpointSummary[],
136
- search: string,
137
- options: ResolveModelOptions = {},
138
- ): ResolvedModel {
139
- const [top] = lookupModels(endpoints, {
140
- search,
141
- limit: 1,
142
- ...(options.threshold !== undefined ? { threshold: options.threshold } : {}),
143
- ...(options.requiresTools !== undefined ? { requiresTools: options.requiresTools } : {}),
144
- });
145
- if (!top) return { modelId: search, matched: false };
146
- return { modelId: top.endpoint.name, matched: true, score: top.score };
147
- }
148
-
149
- /**
150
- * {@link rankModelId} against a catalogue the caller may be holding stale:
151
- * match the loaded snapshot, and on a miss reload once with `force` and match
152
- * again. That way a model deployed after the catalogue was cached still
153
- * resolves on first use, without a restart and without giving up caching.
154
- *
155
- * The catalogue arrives as a loader rather than a client so the caller keeps
156
- * ownership of *how* it is cached - {@link listServingEndpoints} and its
157
- * `CacheManager`, a plain process-lifetime field in a CLI, or a test double.
158
- * Only one reload is attempted: a genuinely unknown name should fail fast
159
- * rather than re-list on every request.
160
- *
161
- * @param load - Returns the catalogue; `force` asks it to bypass its cache.
162
- */
38
+ /** Resolve against a potentially stale catalogue, refreshing once on a miss. */
163
39
  export async function rankModelIdLive(
164
40
  load: (force: boolean) => Promise<readonly ServingEndpointSummary[]>,
165
41
  search: string,
@@ -170,42 +46,17 @@ export async function rankModelIdLive(
170
46
  return rankModelId(await load(true), search, options);
171
47
  }
172
48
 
173
- /**
174
- * Rank a workspace's catalogue in one call: list its `/serving-endpoints`
175
- * (cached) and run {@link lookupModels} over the result. The list counterpart to
176
- * {@link selectModel}, for a consumer that wants the full ranked set (a model
177
- * picker, a CLI) rather than a single id. Catalogue fetches fail loud: network
178
- * / auth errors propagate so the caller sees the real SDK message.
179
- *
180
- * @param host - Workspace host used as the cache key. Pass the value resolved
181
- * from `client.config.getHost()`.
182
- */
49
+ /** List and rank a workspace model catalogue. */
183
50
  export async function searchModels(
184
51
  client: WorkspaceClientLike,
185
52
  host: string,
186
53
  input: SearchModelsInput = {},
187
54
  ): Promise<RankedModel[]> {
188
- const endpoints = await listServingEndpoints(client, host, {
189
- ...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),
190
- ...(input.cacheIdentity !== undefined ? { cacheIdentity: input.cacheIdentity } : {}),
191
- });
55
+ const endpoints = await listServingEndpoints(client, host, catalogueOptions(input));
192
56
  return lookupModels(endpoints, input);
193
57
  }
194
58
 
195
- /**
196
- * Resolve a model id for a workspace in one call: list its `/serving-endpoints`
197
- * (cached) and run {@link resolveModel} over the result. This is the entry
198
- * point for any consumer that holds a `WorkspaceClient` and just wants a usable
199
- * model name - a Lakeflow job, a one-off script, or the Mastra plugin alike.
200
- *
201
- * Cheap exit: when an `explicit` name is given, `fuzzy` is off, and tool
202
- * capability is not required, the catalogue is never fetched. Catalogue
203
- * fetches otherwise fail loud: network / auth errors propagate so the caller
204
- * sees the real SDK message instead of a silent fallback.
205
- *
206
- * @param host - Workspace host used as the cache key. Pass the value resolved
207
- * from `client.config.getHost()`.
208
- */
59
+ /** List a workspace catalogue and resolve one model. */
209
60
  export async function selectModel(
210
61
  client: WorkspaceClientLike,
211
62
  host: string,
@@ -214,113 +65,16 @@ export async function selectModel(
214
65
  if (input.explicit !== undefined && input.fuzzy === false && !input.requiresTools) {
215
66
  return { modelId: input.explicit, source: "explicit" };
216
67
  }
217
- const endpoints = await listServingEndpoints(client, host, {
218
- ...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),
219
- ...(input.cacheIdentity !== undefined ? { cacheIdentity: input.cacheIdentity } : {}),
220
- });
68
+ const endpoints = await listServingEndpoints(client, host, catalogueOptions(input));
221
69
  return resolveModel(endpoints, input);
222
70
  }
223
71
 
224
- /**
225
- * Resolve a single model id from the live catalogue and caller intent,
226
- * delegating the live selection to {@link lookupModels} with `limit: 1`.
227
- *
228
- * 1. **Explicit ask**: with `fuzzy` off, returned verbatim; otherwise
229
- * fuzzy-ranked within the (optional) class ceiling and the best taken,
230
- * falling back to the input verbatim when nothing matches.
231
- * 2. **No explicit ask**: an operator-pinned `fallback` that exists in the live
232
- * catalogue wins first. A class request ranks within that ceiling. A
233
- * general request prefers the highest-ranked live GPT, then any ranked live
234
- * chat model. The static {@link FALLBACK_MODEL_IDS} floor is used only when
235
- * the catalogue yields nothing in range.
236
- */
237
- export function resolveModel(
238
- endpoints: readonly ServingEndpointSummary[],
239
- input: ResolveModelInput = {},
240
- ): ResolvedModelSelection {
241
- if (input.explicit !== undefined) {
242
- if (input.fuzzy === false) {
243
- if (input.requiresTools) assertToolSupport(endpoints, input.explicit);
244
- return { modelId: input.explicit, source: "explicit" };
245
- }
246
- const [top] = lookupModels(endpoints, buildQuery(input, input.explicit));
247
- if (input.requiresTools && !top) {
248
- throw new Error(`No tool-capable model matches "${input.explicit}"`);
249
- }
250
- return { modelId: top?.endpoint.name ?? input.explicit, source: "fuzzy-match" };
251
- }
252
-
253
- // Operator-pinned fallbacks win when present and live (e.g. a regulated
254
- // workspace restricted to an approved subset).
255
- if (input.modelClass === undefined && input.fallbacks && input.fallbacks.length > 0) {
256
- const present = new Set(
257
- endpoints
258
- .filter((endpoint) => !input.requiresTools || endpointSupportsTools(endpoint))
259
- .map((endpoint) => endpoint.name),
260
- );
261
- const pinned = input.fallbacks.find((id) => present.has(id));
262
- if (pinned) return { modelId: pinned, source: "fallback" };
263
- }
264
-
265
- const source = input.modelClass !== undefined ? "class" : "fallback";
266
- if (input.modelClass === undefined) {
267
- const [preferred] = lookupModels(endpoints, buildQuery(input, DEFAULT_MODEL_FAMILY_SEARCH));
268
- if (preferred) return { modelId: preferred.endpoint.name, source };
269
- }
270
- const [top] = lookupModels(endpoints, buildQuery(input, undefined));
271
- if (top) return { modelId: top.endpoint.name, source };
272
-
273
- if (input.liveOnly) {
274
- throw new Error("No matching live Model Serving endpoint is available");
275
- }
276
-
277
- // Live catalogue yielded nothing in range: walk the static floor.
278
- const floorSource =
279
- input.modelClass !== undefined ? modelsForClass(input.modelClass) : (input.fallbacks ?? []);
280
- const floor = object.sequence(floorSource).concat(FALLBACK_MODEL_IDS).distinct().toArray();
281
- if (input.requiresTools) {
282
- const available = new Set(
283
- endpoints.filter(endpointSupportsTools).map((endpoint) => endpoint.name),
284
- );
285
- const selected = floor.find((id) => available.has(id));
286
- if (!selected) throw new Error("No tool-capable model is available");
287
- return { modelId: selected, source };
288
- }
289
- return { modelId: pickFirstAvailable(floor, endpoints), source };
290
- }
291
-
292
- /** Build a {@link ModelQuery} from {@link ResolveModelInput} for the `limit: 1` delegation. */
293
- function buildQuery(input: ResolveModelInput, search: string | undefined): ModelQuery {
72
+ function catalogueOptions(input: {
73
+ readonly ttlMs?: number;
74
+ readonly cacheIdentity?: string;
75
+ }): ListServingEndpointsOptions {
294
76
  return {
295
- ...(search !== undefined ? { search } : {}),
296
- ...(input.modelClass !== undefined ? { modelClass: input.modelClass } : {}),
297
- ...(input.requiresTools !== undefined ? { requiresTools: input.requiresTools } : {}),
298
- ...(input.threshold !== undefined ? { threshold: input.threshold } : {}),
299
- limit: 1,
77
+ ...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),
78
+ ...(input.cacheIdentity !== undefined ? { cacheIdentity: input.cacheIdentity } : {}),
300
79
  };
301
80
  }
302
-
303
- /** Throw when an explicit id is absent or not verified for function tools. */
304
- function assertToolSupport(endpoints: readonly ServingEndpointSummary[], modelId: string): void {
305
- const endpoint = endpoints.find((candidate) => candidate.name === modelId);
306
- if (!endpoint || !endpointSupportsTools(endpoint)) {
307
- throw new Error(`Model "${modelId}" does not support function tools`);
308
- }
309
- }
310
-
311
- /**
312
- * Find the first id in `candidates` whose endpoint is present in `endpoints`.
313
- * Returns the top candidate when the workspace has none of them so callers
314
- * always get a string; an offline workspace then receives a clean 404 from
315
- * Databricks instead of a malformed config.
316
- */
317
- function pickFirstAvailable(
318
- candidates: readonly string[],
319
- endpoints: readonly ServingEndpointSummary[],
320
- ): string {
321
- const present = new Set(endpoints.map((e) => e.name));
322
- for (const candidate of candidates) {
323
- if (present.has(candidate)) return candidate;
324
- }
325
- return candidates[0] ?? FALLBACK_MODEL_IDS[0]!;
326
- }
package/._LICENSE DELETED
Binary file
package/._README.md DELETED
Binary file
package/._index.ts DELETED
Binary file
package/._package.json DELETED
Binary file
package/lib/._index.d.ts DELETED
Binary file
package/lib/._index.js DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,14 +0,0 @@
1
- import { model, type ModelQuery, type RankedModel, type ServingEndpointSummary } from "@dbx-tools/shared-model";
2
- type ModelClass = model.ModelClass;
3
- interface NativeRankingOptions {
4
- readonly includeDeprecated?: boolean;
5
- readonly modelClass?: ModelClass;
6
- readonly task?: string;
7
- }
8
- /** Rank public endpoint records through the Rust-owned model policy. */
9
- export declare function rankEndpoints(endpoints: readonly ServingEndpointSummary[], query?: ModelQuery, options?: NativeRankingOptions): RankedModel[];
10
- /** Classify chat and embedding endpoints through the Rust-owned policy. */
11
- export declare function classifyEndpointClasses(endpoints: readonly ServingEndpointSummary[]): ReadonlyMap<string, ModelClass>;
12
- /** Normalize serialized SDK endpoint records through the Rust-owned catalogue policy. */
13
- export declare function normalizeEndpoints(endpoints: readonly unknown[]): ServingEndpointSummary[];
14
- export {};
@@ -1,124 +0,0 @@
1
- import { ModelClass as NativeModelClass, ReasoningEffort as NativeReasoningEffort, normalizeServingEndpointsJson, rankModels as rankModelsWithRust, } from "@dbx-tools/model-rs";
2
- import { model, } from "@dbx-tools/shared-model";
3
- const MODEL_CLASS_TO_NATIVE = {
4
- [model.ModelClass.ChatThinking]: NativeModelClass.ChatThinking,
5
- [model.ModelClass.ChatBalanced]: NativeModelClass.ChatBalanced,
6
- [model.ModelClass.ChatFast]: NativeModelClass.ChatFast,
7
- [model.ModelClass.Embedding]: NativeModelClass.Embedding,
8
- };
9
- const REASONING_EFFORT_TO_NATIVE = {
10
- none: NativeReasoningEffort.None,
11
- minimal: NativeReasoningEffort.Minimal,
12
- low: NativeReasoningEffort.Low,
13
- medium: NativeReasoningEffort.Medium,
14
- high: NativeReasoningEffort.High,
15
- xhigh: NativeReasoningEffort.Xhigh,
16
- max: NativeReasoningEffort.Max,
17
- };
18
- const REASONING_EFFORT_FROM_NATIVE = {
19
- [NativeReasoningEffort.None]: "none",
20
- [NativeReasoningEffort.Minimal]: "minimal",
21
- [NativeReasoningEffort.Low]: "low",
22
- [NativeReasoningEffort.Medium]: "medium",
23
- [NativeReasoningEffort.High]: "high",
24
- [NativeReasoningEffort.Xhigh]: "xhigh",
25
- [NativeReasoningEffort.Max]: "max",
26
- };
27
- /** Rank public endpoint records through the Rust-owned model policy. */
28
- export function rankEndpoints(endpoints, query = {}, options = {}) {
29
- const endpointsByName = new Map(endpoints.map((endpoint) => [endpoint.name, endpoint]));
30
- return rankModelsWithRust(endpoints.map((endpoint) => toNativeEndpoint(endpoint, options)), toNativeQuery(query, options.includeDeprecated ?? false)).map((ranked) => {
31
- const endpoint = endpointsByName.get(ranked.endpoint.name);
32
- if (!endpoint) {
33
- throw new Error(`Rust model ranking returned unknown endpoint "${ranked.endpoint.name}"`);
34
- }
35
- return {
36
- endpoint,
37
- modelClass: fromNativeClass(ranked.modelClass),
38
- ...(ranked.score !== undefined ? { score: ranked.score } : {}),
39
- };
40
- });
41
- }
42
- /** Classify chat and embedding endpoints through the Rust-owned policy. */
43
- export function classifyEndpointClasses(endpoints) {
44
- const chat = rankEndpoints(endpoints, {}, { includeDeprecated: true });
45
- const embeddings = rankEndpoints(endpoints, { modelClass: model.ModelClass.Embedding }, { includeDeprecated: true });
46
- return new Map([...chat, ...embeddings].map((ranked) => [ranked.endpoint.name, ranked.modelClass]));
47
- }
48
- /** Normalize serialized SDK endpoint records through the Rust-owned catalogue policy. */
49
- export function normalizeEndpoints(endpoints) {
50
- return normalizeServingEndpointsJson(JSON.stringify({ endpoints })).map(fromNativeEndpoint);
51
- }
52
- function toNativeQuery(query, includeDeprecated) {
53
- return {
54
- search: query.search,
55
- modelClass: query.modelClass === undefined ? undefined : MODEL_CLASS_TO_NATIVE[query.modelClass],
56
- requiresTools: query.requiresTools,
57
- includeDeprecated: includeDeprecated || undefined,
58
- limit: query.limit,
59
- threshold: query.threshold,
60
- };
61
- }
62
- function toNativeEndpoint(endpoint, options) {
63
- const modelClass = options.modelClass ?? endpoint.class;
64
- return {
65
- name: endpoint.name,
66
- displayName: endpoint.displayName,
67
- family: endpoint.family,
68
- task: options.task ?? endpoint.task,
69
- state: endpoint.state,
70
- description: endpoint.description,
71
- supportsTools: endpoint.supportsTools,
72
- profile: endpoint.profile,
73
- modelClass: modelClass === undefined ? undefined : MODEL_CLASS_TO_NATIVE[modelClass],
74
- serviceNames: new Map(Object.entries(endpoint.serviceNames ?? {})),
75
- modelServiceName: endpoint.modelServiceName,
76
- reasoningEfforts: (endpoint.reasoningEfforts ?? []).map((effort) => {
77
- const native = REASONING_EFFORT_TO_NATIVE[effort];
78
- if (native === undefined)
79
- throw new Error(`Unknown reasoning effort "${effort}"`);
80
- return native;
81
- }),
82
- status: { deprecated: endpoint.status?.deprecated ?? false },
83
- dimension: endpoint.dimension,
84
- };
85
- }
86
- function fromNativeEndpoint(endpoint) {
87
- return {
88
- name: endpoint.name,
89
- ...(endpoint.displayName !== undefined ? { displayName: endpoint.displayName } : {}),
90
- ...(endpoint.family !== undefined ? { family: endpoint.family } : {}),
91
- ...(endpoint.task !== undefined ? { task: endpoint.task } : {}),
92
- ...(endpoint.state !== undefined ? { state: endpoint.state } : {}),
93
- ...(endpoint.description !== undefined ? { description: endpoint.description } : {}),
94
- ...(endpoint.supportsTools !== undefined ? { supportsTools: endpoint.supportsTools } : {}),
95
- ...(endpoint.profile !== undefined ? { profile: endpoint.profile } : {}),
96
- ...(endpoint.modelClass !== undefined ? { class: fromNativeClass(endpoint.modelClass) } : {}),
97
- ...(endpoint.serviceNames.size > 0
98
- ? { serviceNames: Object.fromEntries(endpoint.serviceNames) }
99
- : {}),
100
- ...(endpoint.modelServiceName !== undefined
101
- ? { modelServiceName: endpoint.modelServiceName }
102
- : {}),
103
- ...(endpoint.reasoningEfforts.length > 0
104
- ? {
105
- reasoningEfforts: endpoint.reasoningEfforts.map((effort) => REASONING_EFFORT_FROM_NATIVE[effort]),
106
- }
107
- : {}),
108
- status: { deprecated: endpoint.status.deprecated },
109
- ...(endpoint.dimension !== undefined ? { dimension: endpoint.dimension } : {}),
110
- };
111
- }
112
- function fromNativeClass(modelClass) {
113
- switch (modelClass) {
114
- case NativeModelClass.ChatThinking:
115
- return model.ModelClass.ChatThinking;
116
- case NativeModelClass.ChatBalanced:
117
- return model.ModelClass.ChatBalanced;
118
- case NativeModelClass.ChatFast:
119
- return model.ModelClass.ChatFast;
120
- case NativeModelClass.Embedding:
121
- return model.ModelClass.Embedding;
122
- }
123
- }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX25hdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fbmF0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLElBQUksZ0JBQWdCLEVBQzlCLGVBQWUsSUFBSSxxQkFBcUIsRUFDeEMsNkJBQTZCLEVBQzdCLFVBQVUsSUFBSSxrQkFBa0IsR0FHakMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsS0FBSyxHQUtOLE1BQU0seUJBQXlCLENBQUM7QUFJakMsTUFBTSxxQkFBcUIsR0FBbUQ7SUFDNUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVk7SUFDOUQsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVk7SUFDOUQsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFFBQVE7SUFDdEQsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFNBQVM7Q0FDekQsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQW9EO0lBQ2xGLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO0lBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO0lBQ3RDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHO0lBQzlCLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxNQUFNO0lBQ3BDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO0lBQ2hDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxLQUFLO0lBQ2xDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHO0NBQy9CLENBQUM7QUFFRixNQUFNLDRCQUE0QixHQUE2RDtJQUM3RixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07SUFDcEMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTO0lBQzFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSztJQUNsQyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVE7SUFDeEMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3BDLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTztJQUN0QyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUs7Q0FDbkMsQ0FBQztBQVFGLHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsYUFBYSxDQUMzQixTQUE0QyxFQUM1QyxRQUFvQixFQUFFLEVBQ3RCLFVBQWdDLEVBQUU7SUFFbEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixPQUFPLGtCQUFrQixDQUN2QixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFDaEUsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDLENBQ3pELENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDZixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCxPQUFPO1lBQ0wsUUFBUTtZQUNSLFVBQVUsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUM5QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQy9ELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxTQUE0QztJQUU1QyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUM5QixTQUFTLEVBQ1QsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFDMUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztJQUNGLE9BQU8sSUFBSSxHQUFHLENBQ1osQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDcEYsQ0FBQztBQUNKLENBQUM7QUFFRCx5RkFBeUY7QUFDekYsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFNBQTZCO0lBQzlELE9BQU8sNkJBQTZCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBaUIsRUFBRSxpQkFBMEI7SUFDbEUsT0FBTztRQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixVQUFVLEVBQ1IsS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN0RixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7UUFDbEMsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksU0FBUztRQUNqRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0tBQzNCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsUUFBZ0MsRUFDaEMsT0FBNkI7SUFFN0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ3hELE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDbkIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1FBQ2pDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtRQUN2QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSTtRQUNuQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDckIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1FBQ2pDLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYTtRQUNyQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87UUFDekIsVUFBVSxFQUFFLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO1FBQ3BGLFlBQVksRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGdCQUFnQjtRQUMzQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRSxNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRCxJQUFJLE1BQU0sS0FBSyxTQUFTO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbEYsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLEtBQUssRUFBRTtRQUM1RCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7S0FDOUIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFFBQXNDO0lBQ2hFLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDbkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BGLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdGLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM3RCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO1lBQ3pDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN0QyxDQUFDLENBQUM7Z0JBQ0UsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FDN0MsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUNqRDthQUNGO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNsRCxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQy9FLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsVUFBNEI7SUFDbkQsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNuQixLQUFLLGdCQUFnQixDQUFDLFlBQVk7WUFDaEMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUN2QyxLQUFLLGdCQUFnQixDQUFDLFlBQVk7WUFDaEMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUN2QyxLQUFLLGdCQUFnQixDQUFDLFFBQVE7WUFDNUIsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxLQUFLLGdCQUFnQixDQUFDLFNBQVM7WUFDN0IsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1vZGVsQ2xhc3MgYXMgTmF0aXZlTW9kZWxDbGFzcyxcbiAgUmVhc29uaW5nRWZmb3J0IGFzIE5hdGl2ZVJlYXNvbmluZ0VmZm9ydCxcbiAgbm9ybWFsaXplU2VydmluZ0VuZHBvaW50c0pzb24sXG4gIHJhbmtNb2RlbHMgYXMgcmFua01vZGVsc1dpdGhSdXN0LFxuICB0eXBlIE1vZGVsUXVlcnkgYXMgTmF0aXZlTW9kZWxRdWVyeSxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IGFzIE5hdGl2ZVNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsLXJzXCI7XG5pbXBvcnQge1xuICBtb2RlbCxcbiAgdHlwZSBNb2RlbFF1ZXJ5LFxuICB0eXBlIFJhbmtlZE1vZGVsLFxuICB0eXBlIFJlYXNvbmluZ0VmZm9ydCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxudHlwZSBNb2RlbENsYXNzID0gbW9kZWwuTW9kZWxDbGFzcztcblxuY29uc3QgTU9ERUxfQ0xBU1NfVE9fTkFUSVZFOiBSZWFkb25seTxSZWNvcmQ8TW9kZWxDbGFzcywgTmF0aXZlTW9kZWxDbGFzcz4+ID0ge1xuICBbbW9kZWwuTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmddOiBOYXRpdmVNb2RlbENsYXNzLkNoYXRUaGlua2luZyxcbiAgW21vZGVsLk1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogTmF0aXZlTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQsXG4gIFttb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0XTogTmF0aXZlTW9kZWxDbGFzcy5DaGF0RmFzdCxcbiAgW21vZGVsLk1vZGVsQ2xhc3MuRW1iZWRkaW5nXTogTmF0aXZlTW9kZWxDbGFzcy5FbWJlZGRpbmcsXG59O1xuXG5jb25zdCBSRUFTT05JTkdfRUZGT1JUX1RPX05BVElWRTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgTmF0aXZlUmVhc29uaW5nRWZmb3J0Pj4gPSB7XG4gIG5vbmU6IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5Ob25lLFxuICBtaW5pbWFsOiBOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWluaW1hbCxcbiAgbG93OiBOYXRpdmVSZWFzb25pbmdFZmZvcnQuTG93LFxuICBtZWRpdW06IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5NZWRpdW0sXG4gIGhpZ2g6IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5IaWdoLFxuICB4aGlnaDogTmF0aXZlUmVhc29uaW5nRWZmb3J0LlhoaWdoLFxuICBtYXg6IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5NYXgsXG59O1xuXG5jb25zdCBSRUFTT05JTkdfRUZGT1JUX0ZST01fTkFUSVZFOiBSZWFkb25seTxSZWNvcmQ8TmF0aXZlUmVhc29uaW5nRWZmb3J0LCBSZWFzb25pbmdFZmZvcnQ+PiA9IHtcbiAgW05hdGl2ZVJlYXNvbmluZ0VmZm9ydC5Ob25lXTogXCJub25lXCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWluaW1hbF06IFwibWluaW1hbFwiLFxuICBbTmF0aXZlUmVhc29uaW5nRWZmb3J0Lkxvd106IFwibG93XCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWVkaXVtXTogXCJtZWRpdW1cIixcbiAgW05hdGl2ZVJlYXNvbmluZ0VmZm9ydC5IaWdoXTogXCJoaWdoXCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuWGhpZ2hdOiBcInhoaWdoXCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWF4XTogXCJtYXhcIixcbn07XG5cbmludGVyZmFjZSBOYXRpdmVSYW5raW5nT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGluY2x1ZGVEZXByZWNhdGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbW9kZWxDbGFzcz86IE1vZGVsQ2xhc3M7XG4gIHJlYWRvbmx5IHRhc2s/OiBzdHJpbmc7XG59XG5cbi8qKiBSYW5rIHB1YmxpYyBlbmRwb2ludCByZWNvcmRzIHRocm91Z2ggdGhlIFJ1c3Qtb3duZWQgbW9kZWwgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmtFbmRwb2ludHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBxdWVyeTogTW9kZWxRdWVyeSA9IHt9LFxuICBvcHRpb25zOiBOYXRpdmVSYW5raW5nT3B0aW9ucyA9IHt9LFxuKTogUmFua2VkTW9kZWxbXSB7XG4gIGNvbnN0IGVuZHBvaW50c0J5TmFtZSA9IG5ldyBNYXAoZW5kcG9pbnRzLm1hcCgoZW5kcG9pbnQpID0+IFtlbmRwb2ludC5uYW1lLCBlbmRwb2ludF0pKTtcbiAgcmV0dXJuIHJhbmtNb2RlbHNXaXRoUnVzdChcbiAgICBlbmRwb2ludHMubWFwKChlbmRwb2ludCkgPT4gdG9OYXRpdmVFbmRwb2ludChlbmRwb2ludCwgb3B0aW9ucykpLFxuICAgIHRvTmF0aXZlUXVlcnkocXVlcnksIG9wdGlvbnMuaW5jbHVkZURlcHJlY2F0ZWQgPz8gZmFsc2UpLFxuICApLm1hcCgocmFua2VkKSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBlbmRwb2ludHNCeU5hbWUuZ2V0KHJhbmtlZC5lbmRwb2ludC5uYW1lKTtcbiAgICBpZiAoIWVuZHBvaW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1c3QgbW9kZWwgcmFua2luZyByZXR1cm5lZCB1bmtub3duIGVuZHBvaW50IFwiJHtyYW5rZWQuZW5kcG9pbnQubmFtZX1cImApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZW5kcG9pbnQsXG4gICAgICBtb2RlbENsYXNzOiBmcm9tTmF0aXZlQ2xhc3MocmFua2VkLm1vZGVsQ2xhc3MpLFxuICAgICAgLi4uKHJhbmtlZC5zY29yZSAhPT0gdW5kZWZpbmVkID8geyBzY29yZTogcmFua2VkLnNjb3JlIH0gOiB7fSksXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKiBDbGFzc2lmeSBjaGF0IGFuZCBlbWJlZGRpbmcgZW5kcG9pbnRzIHRocm91Z2ggdGhlIFJ1c3Qtb3duZWQgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5RW5kcG9pbnRDbGFzc2VzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbik6IFJlYWRvbmx5TWFwPHN0cmluZywgTW9kZWxDbGFzcz4ge1xuICBjb25zdCBjaGF0ID0gcmFua0VuZHBvaW50cyhlbmRwb2ludHMsIHt9LCB7IGluY2x1ZGVEZXByZWNhdGVkOiB0cnVlIH0pO1xuICBjb25zdCBlbWJlZGRpbmdzID0gcmFua0VuZHBvaW50cyhcbiAgICBlbmRwb2ludHMsXG4gICAgeyBtb2RlbENsYXNzOiBtb2RlbC5Nb2RlbENsYXNzLkVtYmVkZGluZyB9LFxuICAgIHsgaW5jbHVkZURlcHJlY2F0ZWQ6IHRydWUgfSxcbiAgKTtcbiAgcmV0dXJuIG5ldyBNYXAoXG4gICAgWy4uLmNoYXQsIC4uLmVtYmVkZGluZ3NdLm1hcCgocmFua2VkKSA9PiBbcmFua2VkLmVuZHBvaW50Lm5hbWUsIHJhbmtlZC5tb2RlbENsYXNzXSksXG4gICk7XG59XG5cbi8qKiBOb3JtYWxpemUgc2VyaWFsaXplZCBTREsgZW5kcG9pbnQgcmVjb3JkcyB0aHJvdWdoIHRoZSBSdXN0LW93bmVkIGNhdGFsb2d1ZSBwb2xpY3kuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW5kcG9pbnRzKGVuZHBvaW50czogcmVhZG9ubHkgdW5rbm93bltdKTogU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVNlcnZpbmdFbmRwb2ludHNKc29uKEpTT04uc3RyaW5naWZ5KHsgZW5kcG9pbnRzIH0pKS5tYXAoZnJvbU5hdGl2ZUVuZHBvaW50KTtcbn1cblxuZnVuY3Rpb24gdG9OYXRpdmVRdWVyeShxdWVyeTogTW9kZWxRdWVyeSwgaW5jbHVkZURlcHJlY2F0ZWQ6IGJvb2xlYW4pOiBOYXRpdmVNb2RlbFF1ZXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBzZWFyY2g6IHF1ZXJ5LnNlYXJjaCxcbiAgICBtb2RlbENsYXNzOlxuICAgICAgcXVlcnkubW9kZWxDbGFzcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTU9ERUxfQ0xBU1NfVE9fTkFUSVZFW3F1ZXJ5Lm1vZGVsQ2xhc3NdLFxuICAgIHJlcXVpcmVzVG9vbHM6IHF1ZXJ5LnJlcXVpcmVzVG9vbHMsXG4gICAgaW5jbHVkZURlcHJlY2F0ZWQ6IGluY2x1ZGVEZXByZWNhdGVkIHx8IHVuZGVmaW5lZCxcbiAgICBsaW1pdDogcXVlcnkubGltaXQsXG4gICAgdGhyZXNob2xkOiBxdWVyeS50aHJlc2hvbGQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvTmF0aXZlRW5kcG9pbnQoXG4gIGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxuICBvcHRpb25zOiBOYXRpdmVSYW5raW5nT3B0aW9ucyxcbik6IE5hdGl2ZVNlcnZpbmdFbmRwb2ludFN1bW1hcnkge1xuICBjb25zdCBtb2RlbENsYXNzID0gb3B0aW9ucy5tb2RlbENsYXNzID8/IGVuZHBvaW50LmNsYXNzO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGVuZHBvaW50Lm5hbWUsXG4gICAgZGlzcGxheU5hbWU6IGVuZHBvaW50LmRpc3BsYXlOYW1lLFxuICAgIGZhbWlseTogZW5kcG9pbnQuZmFtaWx5LFxuICAgIHRhc2s6IG9wdGlvbnMudGFzayA/PyBlbmRwb2ludC50YXNrLFxuICAgIHN0YXRlOiBlbmRwb2ludC5zdGF0ZSxcbiAgICBkZXNjcmlwdGlvbjogZW5kcG9pbnQuZGVzY3JpcHRpb24sXG4gICAgc3VwcG9ydHNUb29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyxcbiAgICBwcm9maWxlOiBlbmRwb2ludC5wcm9maWxlLFxuICAgIG1vZGVsQ2xhc3M6IG1vZGVsQ2xhc3MgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IE1PREVMX0NMQVNTX1RPX05BVElWRVttb2RlbENsYXNzXSxcbiAgICBzZXJ2aWNlTmFtZXM6IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZW5kcG9pbnQuc2VydmljZU5hbWVzID8/IHt9KSksXG4gICAgbW9kZWxTZXJ2aWNlTmFtZTogZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZSxcbiAgICByZWFzb25pbmdFZmZvcnRzOiAoZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cyA/PyBbXSkubWFwKChlZmZvcnQpID0+IHtcbiAgICAgIGNvbnN0IG5hdGl2ZSA9IFJFQVNPTklOR19FRkZPUlRfVE9fTkFUSVZFW2VmZm9ydF07XG4gICAgICBpZiAobmF0aXZlID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWFzb25pbmcgZWZmb3J0IFwiJHtlZmZvcnR9XCJgKTtcbiAgICAgIHJldHVybiBuYXRpdmU7XG4gICAgfSksXG4gICAgc3RhdHVzOiB7IGRlcHJlY2F0ZWQ6IGVuZHBvaW50LnN0YXR1cz8uZGVwcmVjYXRlZCA/PyBmYWxzZSB9LFxuICAgIGRpbWVuc2lvbjogZW5kcG9pbnQuZGltZW5zaW9uLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tTmF0aXZlRW5kcG9pbnQoZW5kcG9pbnQ6IE5hdGl2ZVNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBlbmRwb2ludC5uYW1lLFxuICAgIC4uLihlbmRwb2ludC5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkID8geyBkaXNwbGF5TmFtZTogZW5kcG9pbnQuZGlzcGxheU5hbWUgfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQuZmFtaWx5ICE9PSB1bmRlZmluZWQgPyB7IGZhbWlseTogZW5kcG9pbnQuZmFtaWx5IH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnRhc2sgIT09IHVuZGVmaW5lZCA/IHsgdGFzazogZW5kcG9pbnQudGFzayB9IDoge30pLFxuICAgIC4uLihlbmRwb2ludC5zdGF0ZSAhPT0gdW5kZWZpbmVkID8geyBzdGF0ZTogZW5kcG9pbnQuc3RhdGUgfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCA/IHsgZGVzY3JpcHRpb246IGVuZHBvaW50LmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnN1cHBvcnRzVG9vbHMgIT09IHVuZGVmaW5lZCA/IHsgc3VwcG9ydHNUb29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyB9IDoge30pLFxuICAgIC4uLihlbmRwb2ludC5wcm9maWxlICE9PSB1bmRlZmluZWQgPyB7IHByb2ZpbGU6IGVuZHBvaW50LnByb2ZpbGUgfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkID8geyBjbGFzczogZnJvbU5hdGl2ZUNsYXNzKGVuZHBvaW50Lm1vZGVsQ2xhc3MpIH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnNlcnZpY2VOYW1lcy5zaXplID4gMFxuICAgICAgPyB7IHNlcnZpY2VOYW1lczogT2JqZWN0LmZyb21FbnRyaWVzKGVuZHBvaW50LnNlcnZpY2VOYW1lcykgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKGVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IG1vZGVsU2VydmljZU5hbWU6IGVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWUgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHMubGVuZ3RoID4gMFxuICAgICAgPyB7XG4gICAgICAgICAgcmVhc29uaW5nRWZmb3J0czogZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cy5tYXAoXG4gICAgICAgICAgICAoZWZmb3J0KSA9PiBSRUFTT05JTkdfRUZGT1JUX0ZST01fTkFUSVZFW2VmZm9ydF0sXG4gICAgICAgICAgKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gICAgc3RhdHVzOiB7IGRlcHJlY2F0ZWQ6IGVuZHBvaW50LnN0YXR1cy5kZXByZWNhdGVkIH0sXG4gICAgLi4uKGVuZHBvaW50LmRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkID8geyBkaW1lbnNpb246IGVuZHBvaW50LmRpbWVuc2lvbiB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tTmF0aXZlQ2xhc3MobW9kZWxDbGFzczogTmF0aXZlTW9kZWxDbGFzcyk6IE1vZGVsQ2xhc3Mge1xuICBzd2l0Y2ggKG1vZGVsQ2xhc3MpIHtcbiAgICBjYXNlIE5hdGl2ZU1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nOlxuICAgICAgcmV0dXJuIG1vZGVsLk1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nO1xuICAgIGNhc2UgTmF0aXZlTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQ6XG4gICAgICByZXR1cm4gbW9kZWwuTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQ7XG4gICAgY2FzZSBOYXRpdmVNb2RlbENsYXNzLkNoYXRGYXN0OlxuICAgICAgcmV0dXJuIG1vZGVsLk1vZGVsQ2xhc3MuQ2hhdEZhc3Q7XG4gICAgY2FzZSBOYXRpdmVNb2RlbENsYXNzLkVtYmVkZGluZzpcbiAgICAgIHJldHVybiBtb2RlbC5Nb2RlbENsYXNzLkVtYmVkZGluZztcbiAgfVxufVxuIl19
package/src/.__native.ts DELETED
Binary file
package/src/._classes.ts DELETED
Binary file
package/src/._fallback.ts DELETED
Binary file
package/src/._invoke.ts DELETED
Binary file
Binary file
package/src/._policy.ts DELETED
Binary file
package/src/._resolve.ts DELETED
Binary file