@dbx-tools/model 0.9.5 → 0.9.6
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 +7 -7
- package/index.ts +4 -4
- package/lib/index.d.ts +4 -4
- package/lib/index.js +4 -4
- package/lib/src/_native.d.ts +14 -0
- package/lib/src/_native.js +124 -0
- package/lib/src/classes.d.ts +6 -1
- package/lib/src/fallback.d.ts +9 -6
- package/lib/src/fallback.js +14 -12
- package/lib/src/{serving.d.ts → model-catalog.d.ts} +25 -20
- package/lib/src/model-catalog.js +198 -0
- package/lib/src/policy.d.ts +5 -1
- package/lib/src/policy.js +14 -3
- package/lib/src/resolve.d.ts +8 -4
- package/lib/src/resolve.js +15 -71
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -6
- package/src/_native.ts +174 -0
- package/src/fallback.ts +15 -11
- package/src/{serving.ts → model-catalog.ts} +60 -156
- package/src/policy.ts +21 -2
- package/src/resolve.ts +19 -87
- package/lib/src/serving.js +0 -292
package/README.md
CHANGED
|
@@ -103,12 +103,12 @@ class policy.
|
|
|
103
103
|
## Work With A Held Catalogue
|
|
104
104
|
|
|
105
105
|
When you already have endpoint summaries, use the pure resolver functions from
|
|
106
|
-
`resolve` and `
|
|
106
|
+
`resolve` and `modelCatalog` without another workspace call:
|
|
107
107
|
|
|
108
108
|
```ts
|
|
109
|
-
import {
|
|
109
|
+
import { modelCatalog, resolve } from "@dbx-tools/model";
|
|
110
110
|
|
|
111
|
-
const endpoints = await
|
|
111
|
+
const endpoints = await modelCatalog.listServingEndpoints(client, host);
|
|
112
112
|
const ranked = resolve.lookupModels(endpoints, { search: "sonnet", limit: 3 });
|
|
113
113
|
const picked = resolve.resolveModel(endpoints, {
|
|
114
114
|
explicit: "claude sonnet",
|
|
@@ -124,14 +124,14 @@ when the requested class is `embedding`.
|
|
|
124
124
|
## List And Cache Serving Endpoints
|
|
125
125
|
|
|
126
126
|
```ts
|
|
127
|
-
import {
|
|
127
|
+
import { modelCatalog } from "@dbx-tools/model";
|
|
128
128
|
|
|
129
|
-
const endpoints = await
|
|
129
|
+
const endpoints = await modelCatalog.listServingEndpoints(client, host, {
|
|
130
130
|
ttlMs: 5 * 60_000,
|
|
131
131
|
});
|
|
132
132
|
|
|
133
|
-
const raw = await
|
|
134
|
-
await
|
|
133
|
+
const raw = await modelCatalog.listServingEndpointsUncached(client);
|
|
134
|
+
await modelCatalog.clearServingEndpointsCache(host);
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
`listServingEndpoints()` uses AppKit's `CacheManager`, enriches endpoints with
|
package/index.ts
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
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/model";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.6";
|
|
7
7
|
export * as classes from "./src/classes.ts";
|
|
8
8
|
export * as fallback from "./src/fallback.ts";
|
|
9
9
|
export * as invoke from "./src/invoke.ts";
|
|
10
|
+
export * as modelCatalog from "./src/model-catalog.ts";
|
|
10
11
|
export * as policy from "./src/policy.ts";
|
|
11
12
|
export * as resolve from "./src/resolve.ts";
|
|
12
|
-
export * as serving from "./src/serving.ts";
|
|
13
13
|
export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER } from "./src/classes.ts";
|
|
14
14
|
export { FALLBACK_MODEL_IDS } from "./src/fallback.ts";
|
|
15
15
|
export { INVOCATIONS_SUFFIX, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH } from "./src/invoke.ts";
|
|
16
16
|
export type { AuthenticatingClientLike } from "./src/invoke.ts";
|
|
17
|
+
export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/model-catalog.ts";
|
|
18
|
+
export type { WorkspaceClientLike, ListServingEndpointsOptions, ResolvedModel, ResolveModelOptions, ScoredEndpoint } from "./src/model-catalog.ts";
|
|
17
19
|
export type { ResolveModelInput, ResolvedModelSelection, SelectModelInput, SearchModelsInput } from "./src/resolve.ts";
|
|
18
|
-
export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/serving.ts";
|
|
19
|
-
export type { WorkspaceClientLike, ListServingEndpointsOptions, ResolvedModel, ResolveModelOptions, ScoredEndpoint } from "./src/serving.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/model";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.6";
|
|
3
3
|
export * as classes from "./src/classes.ts";
|
|
4
4
|
export * as fallback from "./src/fallback.ts";
|
|
5
5
|
export * as invoke from "./src/invoke.ts";
|
|
6
|
+
export * as modelCatalog from "./src/model-catalog.ts";
|
|
6
7
|
export * as policy from "./src/policy.ts";
|
|
7
8
|
export * as resolve from "./src/resolve.ts";
|
|
8
|
-
export * as serving from "./src/serving.ts";
|
|
9
9
|
export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER } from "./src/classes.ts";
|
|
10
10
|
export { FALLBACK_MODEL_IDS } from "./src/fallback.ts";
|
|
11
11
|
export { INVOCATIONS_SUFFIX, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH } from "./src/invoke.ts";
|
|
12
12
|
export type { AuthenticatingClientLike } from "./src/invoke.ts";
|
|
13
|
+
export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/model-catalog.ts";
|
|
14
|
+
export type { WorkspaceClientLike, ListServingEndpointsOptions, ResolvedModel, ResolveModelOptions, ScoredEndpoint } from "./src/model-catalog.ts";
|
|
13
15
|
export type { ResolveModelInput, ResolvedModelSelection, SelectModelInput, SearchModelsInput } from "./src/resolve.ts";
|
|
14
|
-
export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/serving.ts";
|
|
15
|
-
export type { WorkspaceClientLike, ListServingEndpointsOptions, ResolvedModel, ResolveModelOptions, ScoredEndpoint } from "./src/serving.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
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/model";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.6";
|
|
6
6
|
export * as classes from "./src/classes.js";
|
|
7
7
|
export * as fallback from "./src/fallback.js";
|
|
8
8
|
export * as invoke from "./src/invoke.js";
|
|
9
|
+
export * as modelCatalog from "./src/model-catalog.js";
|
|
9
10
|
export * as policy from "./src/policy.js";
|
|
10
11
|
export * as resolve from "./src/resolve.js";
|
|
11
|
-
export * as serving from "./src/serving.js";
|
|
12
12
|
export { CHAT_CLASS_ORDER, MODEL_CLASS_ORDER } from "./src/classes.js";
|
|
13
13
|
export { FALLBACK_MODEL_IDS } from "./src/fallback.js";
|
|
14
14
|
export { INVOCATIONS_SUFFIX, RESPONSES_PATH, OPEN_RESPONSES_PATH, CHAT_COMPLETIONS_PATH } from "./src/invoke.js";
|
|
15
|
-
export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/model-catalog.js";
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS42XCI7XG5leHBvcnQgKiBhcyBjbGFzc2VzIGZyb20gXCIuL3NyYy9jbGFzc2VzLnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENhdGFsb2cgZnJvbSBcIi4vc3JjL21vZGVsLWNhdGFsb2cudHNcIjtcbmV4cG9ydCAqIGFzIHBvbGljeSBmcm9tIFwiLi9zcmMvcG9saWN5LnRzXCI7XG5leHBvcnQgKiBhcyByZXNvbHZlIGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgeyBDSEFUX0NMQVNTX09SREVSLCBNT0RFTF9DTEFTU19PUkRFUiB9IGZyb20gXCIuL3NyYy9jbGFzc2VzLnRzXCI7XG5leHBvcnQgeyBGQUxMQkFDS19NT0RFTF9JRFMgfSBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCB7IElOVk9DQVRJT05TX1NVRkZJWCwgUkVTUE9OU0VTX1BBVEgsIE9QRU5fUkVTUE9OU0VTX1BBVEgsIENIQVRfQ09NUExFVElPTlNfUEFUSCB9IGZyb20gXCIuL3NyYy9pbnZva2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXV0aGVudGljYXRpbmdDbGllbnRMaWtlIH0gZnJvbSBcIi4vc3JjL2ludm9rZS50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9NT0RFTF9DQUNIRV9UVExfTVMsIERFRkFVTFRfRlVaWllfVEhSRVNIT0xEIH0gZnJvbSBcIi4vc3JjL21vZGVsLWNhdGFsb2cudHNcIjtcbmV4cG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50TGlrZSwgTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zLCBSZXNvbHZlZE1vZGVsLCBSZXNvbHZlTW9kZWxPcHRpb25zLCBTY29yZWRFbmRwb2ludCB9IGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVNb2RlbElucHV0LCBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uLCBTZWxlY3RNb2RlbElucHV0LCBTZWFyY2hNb2RlbHNJbnB1dCB9IGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
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 {};
|
|
@@ -0,0 +1,124 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX25hdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fbmF0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLElBQUksZ0JBQWdCLEVBQzlCLGVBQWUsSUFBSSxxQkFBcUIsRUFDeEMsNkJBQTZCLEVBQzdCLFVBQVUsSUFBSSxrQkFBa0IsR0FHakMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsS0FBSyxHQUtOLE1BQU0seUJBQXlCLENBQUM7QUFJakMsTUFBTSxxQkFBcUIsR0FBbUQ7SUFDNUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVk7SUFDOUQsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVk7SUFDOUQsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFFBQVE7SUFDdEQsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFNBQVM7Q0FDekQsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQW9EO0lBQ2xGLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO0lBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO0lBQ3RDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHO0lBQzlCLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxNQUFNO0lBQ3BDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO0lBQ2hDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxLQUFLO0lBQ2xDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHO0NBQy9CLENBQUM7QUFFRixNQUFNLDRCQUE0QixHQUE2RDtJQUM3RixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07SUFDcEMsQ0FBQyxxQkFBcUIs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RSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNsRCxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQy9FLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsVUFBNEI7SUFDbkQsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNuQixLQUFLLGdCQUFnQixDQUFDLFlBQVk7WUFDaEMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUN2QyxLQUFLLGdCQUFnQixDQUFDLFlBQVk7WUFDaEMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUN2QyxLQUFLLGdCQUFnQixDQUFDLFFBQVE7WUFDNUIsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxLQUFLLGdCQUFnQixDQUFDLFNBQVM7WUFDN0IsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1vZGVsQ2xhc3MgYXMgTmF0aXZlTW9kZWxDbGFzcyxcbiAgUmVhc29uaW5nRWZmb3J0IGFzIE5hdGl2ZVJlYXNvbmluZ0VmZm9ydCxcbiAgbm9ybWFsaXplU2VydmluZ0VuZHBvaW50c0pzb24sXG4gIHJhbmtNb2RlbHMgYXMgcmFua01vZGVsc1dpdGhSdXN0LFxuICB0eXBlIE1vZGVsUXVlcnkgYXMgTmF0aXZlTW9kZWxRdWVyeSxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IGFzIE5hdGl2ZVNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsLXJzXCI7XG5pbXBvcnQge1xuICBtb2RlbCxcbiAgdHlwZSBNb2RlbFF1ZXJ5LFxuICB0eXBlIFJhbmtlZE1vZGVsLFxuICB0eXBlIFJlYXNvbmluZ0VmZm9ydCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxudHlwZSBNb2RlbENsYXNzID0gbW9kZWwuTW9kZWxDbGFzcztcblxuY29uc3QgTU9ERUxfQ0xBU1NfVE9fTkFUSVZFOiBSZWFkb25seTxSZWNvcmQ8TW9kZWxDbGFzcywgTmF0aXZlTW9kZWxDbGFzcz4+ID0ge1xuICBbbW9kZWwuTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmddOiBOYXRpdmVNb2RlbENsYXNzLkNoYXRUaGlua2luZyxcbiAgW21vZGVsLk1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogTmF0aXZlTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQsXG4gIFttb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0XTogTmF0aXZlTW9kZWxDbGFzcy5DaGF0RmFzdCxcbiAgW21vZGVsLk1vZGVsQ2xhc3MuRW1iZWRkaW5nXTogTmF0aXZlTW9kZWxDbGFzcy5FbWJlZGRpbmcsXG59O1xuXG5jb25zdCBSRUFTT05JTkdfRUZGT1JUX1RPX05BVElWRTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgTmF0aXZlUmVhc29uaW5nRWZmb3J0Pj4gPSB7XG4gIG5vbmU6IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5Ob25lLFxuICBtaW5pbWFsOiBOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWluaW1hbCxcbiAgbG93OiBOYXRpdmVSZWFzb25pbmdFZmZvcnQuTG93LFxuICBtZWRpdW06IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5NZWRpdW0sXG4gIGhpZ2g6IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5IaWdoLFxuICB4aGlnaDogTmF0aXZlUmVhc29uaW5nRWZmb3J0LlhoaWdoLFxuICBtYXg6IE5hdGl2ZVJlYXNvbmluZ0VmZm9ydC5NYXgsXG59O1xuXG5jb25zdCBSRUFTT05JTkdfRUZGT1JUX0ZST01fTkFUSVZFOiBSZWFkb25seTxSZWNvcmQ8TmF0aXZlUmVhc29uaW5nRWZmb3J0LCBSZWFzb25pbmdFZmZvcnQ+PiA9IHtcbiAgW05hdGl2ZVJlYXNvbmluZ0VmZm9ydC5Ob25lXTogXCJub25lXCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWluaW1hbF06IFwibWluaW1hbFwiLFxuICBbTmF0aXZlUmVhc29uaW5nRWZmb3J0Lkxvd106IFwibG93XCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWVkaXVtXTogXCJtZWRpdW1cIixcbiAgW05hdGl2ZVJlYXNvbmluZ0VmZm9ydC5IaWdoXTogXCJoaWdoXCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuWGhpZ2hdOiBcInhoaWdoXCIsXG4gIFtOYXRpdmVSZWFzb25pbmdFZmZvcnQuTWF4XTogXCJtYXhcIixcbn07XG5cbmludGVyZmFjZSBOYXRpdmVSYW5raW5nT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGluY2x1ZGVEZXByZWNhdGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbW9kZWxDbGFzcz86IE1vZGVsQ2xhc3M7XG4gIHJlYWRvbmx5IHRhc2s/OiBzdHJpbmc7XG59XG5cbi8qKiBSYW5rIHB1YmxpYyBlbmRwb2ludCByZWNvcmRzIHRocm91Z2ggdGhlIFJ1c3Qtb3duZWQgbW9kZWwgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmtFbmRwb2ludHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBxdWVyeTogTW9kZWxRdWVyeSA9IHt9LFxuICBvcHRpb25zOiBOYXRpdmVSYW5raW5nT3B0aW9ucyA9IHt9LFxuKTogUmFua2VkTW9kZWxbXSB7XG4gIGNvbnN0IGVuZHBvaW50c0J5TmFtZSA9IG5ldyBNYXAoZW5kcG9pbnRzLm1hcCgoZW5kcG9pbnQpID0+IFtlbmRwb2ludC5uYW1lLCBlbmRwb2ludF0pKTtcbiAgcmV0dXJuIHJhbmtNb2RlbHNXaXRoUnVzdChcbiAgICBlbmRwb2ludHMubWFwKChlbmRwb2ludCkgPT4gdG9OYXRpdmVFbmRwb2ludChlbmRwb2ludCwgb3B0aW9ucykpLFxuICAgIHRvTmF0aXZlUXVlcnkocXVlcnksIG9wdGlvbnMuaW5jbHVkZURlcHJlY2F0ZWQgPz8gZmFsc2UpLFxuICApLm1hcCgocmFua2VkKSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBlbmRwb2ludHNCeU5hbWUuZ2V0KHJhbmtlZC5lbmRwb2ludC5uYW1lKTtcbiAgICBpZiAoIWVuZHBvaW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1c3QgbW9kZWwgcmFua2luZyByZXR1cm5lZCB1bmtub3duIGVuZHBvaW50IFwiJHtyYW5rZWQuZW5kcG9pbnQubmFtZX1cImApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZW5kcG9pbnQsXG4gICAgICBtb2RlbENsYXNzOiBmcm9tTmF0aXZlQ2xhc3MocmFua2VkLm1vZGVsQ2xhc3MpLFxuICAgICAgLi4uKHJhbmtlZC5zY29yZSAhPT0gdW5kZWZpbmVkID8geyBzY29yZTogcmFua2VkLnNjb3JlIH0gOiB7fSksXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKiBDbGFzc2lmeSBjaGF0IGFuZCBlbWJlZGRpbmcgZW5kcG9pbnRzIHRocm91Z2ggdGhlIFJ1c3Qtb3duZWQgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5RW5kcG9pbnRDbGFzc2VzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbik6IFJlYWRvbmx5TWFwPHN0cmluZywgTW9kZWxDbGFzcz4ge1xuICBjb25zdCBjaGF0ID0gcmFua0VuZHBvaW50cyhlbmRwb2ludHMsIHt9LCB7IGluY2x1ZGVEZXByZWNhdGVkOiB0cnVlIH0pO1xuICBjb25zdCBlbWJlZGRpbmdzID0gcmFua0VuZHBvaW50cyhcbiAgICBlbmRwb2ludHMsXG4gICAgeyBtb2RlbENsYXNzOiBtb2RlbC5Nb2RlbENsYXNzLkVtYmVkZGluZyB9LFxuICAgIHsgaW5jbHVkZURlcHJlY2F0ZWQ6IHRydWUgfSxcbiAgKTtcbiAgcmV0dXJuIG5ldyBNYXAoXG4gICAgWy4uLmNoYXQsIC4uLmVtYmVkZGluZ3NdLm1hcCgocmFua2VkKSA9PiBbcmFua2VkLmVuZHBvaW50Lm5hbWUsIHJhbmtlZC5tb2RlbENsYXNzXSksXG4gICk7XG59XG5cbi8qKiBOb3JtYWxpemUgc2VyaWFsaXplZCBTREsgZW5kcG9pbnQgcmVjb3JkcyB0aHJvdWdoIHRoZSBSdXN0LW93bmVkIGNhdGFsb2d1ZSBwb2xpY3kuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW5kcG9pbnRzKGVuZHBvaW50czogcmVhZG9ubHkgdW5rbm93bltdKTogU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVNlcnZpbmdFbmRwb2ludHNKc29uKEpTT04uc3RyaW5naWZ5KHsgZW5kcG9pbnRzIH0pKS5tYXAoZnJvbU5hdGl2ZUVuZHBvaW50KTtcbn1cblxuZnVuY3Rpb24gdG9OYXRpdmVRdWVyeShxdWVyeTogTW9kZWxRdWVyeSwgaW5jbHVkZURlcHJlY2F0ZWQ6IGJvb2xlYW4pOiBOYXRpdmVNb2RlbFF1ZXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBzZWFyY2g6IHF1ZXJ5LnNlYXJjaCxcbiAgICBtb2RlbENsYXNzOlxuICAgICAgcXVlcnkubW9kZWxDbGFzcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTU9ERUxfQ0xBU1NfVE9fTkFUSVZFW3F1ZXJ5Lm1vZGVsQ2xhc3NdLFxuICAgIHJlcXVpcmVzVG9vbHM6IHF1ZXJ5LnJlcXVpcmVzVG9vbHMsXG4gICAgaW5jbHVkZURlcHJlY2F0ZWQ6IGluY2x1ZGVEZXByZWNhdGVkIHx8IHVuZGVmaW5lZCxcbiAgICBsaW1pdDogcXVlcnkubGltaXQsXG4gICAgdGhyZXNob2xkOiBxdWVyeS50aHJlc2hvbGQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvTmF0aXZlRW5kcG9pbnQoXG4gIGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxuICBvcHRpb25zOiBOYXRpdmVSYW5raW5nT3B0aW9ucyxcbik6IE5hdGl2ZVNlcnZpbmdFbmRwb2ludFN1bW1hcnkge1xuICBjb25zdCBtb2RlbENsYXNzID0gb3B0aW9ucy5tb2RlbENsYXNzID8/IGVuZHBvaW50LmNsYXNzO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGVuZHBvaW50Lm5hbWUsXG4gICAgZGlzcGxheU5hbWU6IGVuZHBvaW50LmRpc3BsYXlOYW1lLFxuICAgIGZhbWlseTogZW5kcG9pbnQuZmFtaWx5LFxuICAgIHRhc2s6IG9wdGlvbnMudGFzayA/PyBlbmRwb2ludC50YXNrLFxuICAgIHN0YXRlOiBlbmRwb2ludC5zdGF0ZSxcbiAgICBkZXNjcmlwdGlvbjogZW5kcG9pbnQuZGVzY3JpcHRpb24sXG4gICAgc3VwcG9ydHNUb29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyxcbiAgICBwcm9maWxlOiBlbmRwb2ludC5wcm9maWxlLFxuICAgIG1vZGVsQ2xhc3M6IG1vZGVsQ2xhc3MgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IE1PREVMX0NMQVNTX1RPX05BVElWRVttb2RlbENsYXNzXSxcbiAgICBzZXJ2aWNlTmFtZXM6IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZW5kcG9pbnQuc2VydmljZU5hbWVzID8/IHt9KSksXG4gICAgbW9kZWxTZXJ2aWNlTmFtZTogZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZSxcbiAgICByZWFzb25pbmdFZmZvcnRzOiAoZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cyA/PyBbXSkubWFwKChlZmZvcnQpID0+IHtcbiAgICAgIGNvbnN0IG5hdGl2ZSA9IFJFQVNPTklOR19FRkZPUlRfVE9fTkFUSVZFW2VmZm9ydF07XG4gICAgICBpZiAobmF0aXZlID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWFzb25pbmcgZWZmb3J0IFwiJHtlZmZvcnR9XCJgKTtcbiAgICAgIHJldHVybiBuYXRpdmU7XG4gICAgfSksXG4gICAgc3RhdHVzOiB7IGRlcHJlY2F0ZWQ6IGVuZHBvaW50LnN0YXR1cz8uZGVwcmVjYXRlZCA/PyBmYWxzZSB9LFxuICAgIGRpbWVuc2lvbjogZW5kcG9pbnQuZGltZW5zaW9uLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tTmF0aXZlRW5kcG9pbnQoZW5kcG9pbnQ6IE5hdGl2ZVNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBlbmRwb2ludC5uYW1lLFxuICAgIC4uLihlbmRwb2ludC5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkID8geyBkaXNwbGF5TmFtZTogZW5kcG9pbnQuZGlzcGxheU5hbWUgfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQuZmFtaWx5ICE9PSB1bmRlZmluZWQgPyB7IGZhbWlseTogZW5kcG9pbnQuZmFtaWx5IH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnRhc2sgIT09IHVuZGVmaW5lZCA/IHsgdGFzazogZW5kcG9pbnQudGFzayB9IDoge30pLFxuICAgIC4uLihlbmRwb2ludC5zdGF0ZSAhPT0gdW5kZWZpbmVkID8geyBzdGF0ZTogZW5kcG9pbnQuc3RhdGUgfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCA/IHsgZGVzY3JpcHRpb246IGVuZHBvaW50LmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnN1cHBvcnRzVG9vbHMgIT09IHVuZGVmaW5lZCA/IHsgc3VwcG9ydHNUb29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyB9IDoge30pLFxuICAgIC4uLihlbmRwb2ludC5wcm9maWxlICE9PSB1bmRlZmluZWQgPyB7IHByb2ZpbGU6IGVuZHBvaW50LnByb2ZpbGUgfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkID8geyBjbGFzczogZnJvbU5hdGl2ZUNsYXNzKGVuZHBvaW50Lm1vZGVsQ2xhc3MpIH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnNlcnZpY2VOYW1lcy5zaXplID4gMFxuICAgICAgPyB7IHNlcnZpY2VOYW1lczogT2JqZWN0LmZyb21FbnRyaWVzKGVuZHBvaW50LnNlcnZpY2VOYW1lcykgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKGVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IG1vZGVsU2VydmljZU5hbWU6IGVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWUgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHMubGVuZ3RoID4gMFxuICAgICAgPyB7XG4gICAgICAgICAgcmVhc29uaW5nRWZmb3J0czogZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cy5tYXAoXG4gICAgICAgICAgICAoZWZmb3J0KSA9PiBSRUFTT05JTkdfRUZGT1JUX0ZST01fTkFUSVZFW2VmZm9ydF0sXG4gICAgICAgICAgKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gICAgc3RhdHVzOiB7IGRlcHJlY2F0ZWQ6IGVuZHBvaW50LnN0YXR1cy5kZXByZWNhdGVkIH0sXG4gICAgLi4uKGVuZHBvaW50LmRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkID8geyBkaW1lbnNpb246IGVuZHBvaW50LmRpbWVuc2lvbiB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tTmF0aXZlQ2xhc3MobW9kZWxDbGFzczogTmF0aXZlTW9kZWxDbGFzcyk6IE1vZGVsQ2xhc3Mge1xuICBzd2l0Y2ggKG1vZGVsQ2xhc3MpIHtcbiAgICBjYXNlIE5hdGl2ZU1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nOlxuICAgICAgcmV0dXJuIG1vZGVsLk1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nO1xuICAgIGNhc2UgTmF0aXZlTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQ6XG4gICAgICByZXR1cm4gbW9kZWwuTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQ7XG4gICAgY2FzZSBOYXRpdmVNb2RlbENsYXNzLkNoYXRGYXN0OlxuICAgICAgcmV0dXJuIG1vZGVsLk1vZGVsQ2xhc3MuQ2hhdEZhc3Q7XG4gICAgY2FzZSBOYXRpdmVNb2RlbENsYXNzLkVtYmVkZGluZzpcbiAgICAgIHJldHVybiBtb2RlbC5Nb2RlbENsYXNzLkVtYmVkZGluZztcbiAgfVxufVxuIl19
|
package/lib/src/classes.d.ts
CHANGED
|
@@ -11,7 +11,12 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { model } from "@dbx-tools/shared-model";
|
|
13
13
|
type ModelClass = model.ModelClass;
|
|
14
|
-
declare const ModelClass:
|
|
14
|
+
declare const ModelClass: {
|
|
15
|
+
readonly ChatThinking: "chat-thinking";
|
|
16
|
+
readonly ChatBalanced: "chat-balanced";
|
|
17
|
+
readonly ChatFast: "chat-fast";
|
|
18
|
+
readonly Embedding: "embedding";
|
|
19
|
+
};
|
|
15
20
|
/**
|
|
16
21
|
* Chat capability ladder in descending order - most capable
|
|
17
22
|
* ({@link ModelClass.ChatThinking}) first, least ({@link ModelClass.ChatFast})
|
package/lib/src/fallback.d.ts
CHANGED
|
@@ -5,27 +5,30 @@
|
|
|
5
5
|
* token, the service principal can't list, or the workspace is unreachable -
|
|
6
6
|
* the resolver still has to name *some* endpoint. This module holds that floor:
|
|
7
7
|
* a small, hard-coded set of well-known Foundation Model API endpoint names,
|
|
8
|
-
* each bucketed into a chat {@link ModelClass} by the
|
|
9
|
-
* {@link classify.classifyByFamily} heuristic (no classes are hard-coded here)
|
|
8
|
+
* each bucketed into a chat {@link ModelClass} by the Rust family policy
|
|
10
9
|
* and ordered best-first.
|
|
11
10
|
*
|
|
12
11
|
* This is deliberately *server-only*. A browser client never talks to
|
|
13
12
|
* Databricks directly - it always goes through this server - so it has nothing
|
|
14
13
|
* to fall back to and must not assume a stale, baked-in model list; it consumes
|
|
15
|
-
* the live `/models` response instead.
|
|
16
|
-
* ({@link classify.classifyEndpoints}) is what the client shares.
|
|
14
|
+
* the classified live `/models` response instead.
|
|
17
15
|
*
|
|
18
16
|
* @module
|
|
19
17
|
*/
|
|
20
18
|
import { model } from "@dbx-tools/shared-model";
|
|
21
19
|
type ModelClass = model.ModelClass;
|
|
22
|
-
declare const ModelClass:
|
|
20
|
+
declare const ModelClass: {
|
|
21
|
+
readonly ChatThinking: "chat-thinking";
|
|
22
|
+
readonly ChatBalanced: "chat-balanced";
|
|
23
|
+
readonly ChatFast: "chat-fast";
|
|
24
|
+
readonly Embedding: "embedding";
|
|
25
|
+
};
|
|
23
26
|
/**
|
|
24
27
|
* Static fallback model ids for a chat class, drawn from the small built-in
|
|
25
28
|
* {@link FALLBACK_MODEL_NAMES} list and ordered best-first by family rank. Sync
|
|
26
29
|
* and workspace-independent: this is the *fallback opinion* used to seed default
|
|
27
30
|
* lists or when the live catalogue is unreachable - live resolution prefers
|
|
28
|
-
*
|
|
31
|
+
* the Rust-classified workspace catalogue. Returns `[]` for
|
|
29
32
|
* {@link ModelClass.Embedding} (the floor is chat-only).
|
|
30
33
|
*/
|
|
31
34
|
export declare function modelsForClass(cls: ModelClass): readonly string[];
|
package/lib/src/fallback.js
CHANGED
|
@@ -5,23 +5,22 @@
|
|
|
5
5
|
* token, the service principal can't list, or the workspace is unreachable -
|
|
6
6
|
* the resolver still has to name *some* endpoint. This module holds that floor:
|
|
7
7
|
* a small, hard-coded set of well-known Foundation Model API endpoint names,
|
|
8
|
-
* each bucketed into a chat {@link ModelClass} by the
|
|
9
|
-
* {@link classify.classifyByFamily} heuristic (no classes are hard-coded here)
|
|
8
|
+
* each bucketed into a chat {@link ModelClass} by the Rust family policy
|
|
10
9
|
* and ordered best-first.
|
|
11
10
|
*
|
|
12
11
|
* This is deliberately *server-only*. A browser client never talks to
|
|
13
12
|
* Databricks directly - it always goes through this server - so it has nothing
|
|
14
13
|
* to fall back to and must not assume a stale, baked-in model list; it consumes
|
|
15
|
-
* the live `/models` response instead.
|
|
16
|
-
* ({@link classify.classifyEndpoints}) is what the client shares.
|
|
14
|
+
* the classified live `/models` response instead.
|
|
17
15
|
*
|
|
18
16
|
* @module
|
|
19
17
|
*/
|
|
20
|
-
import {
|
|
18
|
+
import { model } from "@dbx-tools/shared-model";
|
|
19
|
+
import { rankEndpoints } from "./_native.js";
|
|
21
20
|
const { ModelClass } = model;
|
|
22
21
|
/**
|
|
23
22
|
* Small, last-resort set of well-known Foundation Model API endpoint names,
|
|
24
|
-
* ordered best-first within each class by
|
|
23
|
+
* ordered best-first within each class by the Rust model ranker.
|
|
25
24
|
* Used only as the floor when the live `/serving-endpoints` catalogue can't be
|
|
26
25
|
* read at resolve time; the live, score-driven classification supersedes it
|
|
27
26
|
* whenever the workspace listing is available. Classes are not hard-coded here
|
|
@@ -38,19 +37,22 @@ const FALLBACK_MODEL_NAMES = [
|
|
|
38
37
|
"databricks-gpt-5-nano",
|
|
39
38
|
"databricks-meta-llama-3-1-8b-instruct",
|
|
40
39
|
];
|
|
40
|
+
const FALLBACK_ENDPOINTS = FALLBACK_MODEL_NAMES.map((name) => ({
|
|
41
|
+
name,
|
|
42
|
+
task: "llm/v1/chat",
|
|
43
|
+
}));
|
|
41
44
|
/**
|
|
42
45
|
* Static fallback model ids for a chat class, drawn from the small built-in
|
|
43
46
|
* {@link FALLBACK_MODEL_NAMES} list and ordered best-first by family rank. Sync
|
|
44
47
|
* and workspace-independent: this is the *fallback opinion* used to seed default
|
|
45
48
|
* lists or when the live catalogue is unreachable - live resolution prefers
|
|
46
|
-
*
|
|
49
|
+
* the Rust-classified workspace catalogue. Returns `[]` for
|
|
47
50
|
* {@link ModelClass.Embedding} (the floor is chat-only).
|
|
48
51
|
*/
|
|
49
52
|
export function modelsForClass(cls) {
|
|
50
|
-
return
|
|
51
|
-
.filter((
|
|
52
|
-
.
|
|
53
|
-
.map((x) => x.name);
|
|
53
|
+
return rankEndpoints(FALLBACK_ENDPOINTS, { modelClass: cls })
|
|
54
|
+
.filter((ranked) => ranked.modelClass === cls)
|
|
55
|
+
.map((ranked) => ranked.endpoint.name);
|
|
54
56
|
}
|
|
55
57
|
/** Top static fallback model id for a chat class. */
|
|
56
58
|
export function modelForClass(cls) {
|
|
@@ -66,4 +68,4 @@ export const FALLBACK_MODEL_IDS = [
|
|
|
66
68
|
...modelsForClass(ModelClass.ChatBalanced),
|
|
67
69
|
...modelsForClass(ModelClass.ChatFast),
|
|
68
70
|
];
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsbGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFsbGJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUErQixNQUFNLHlCQUF5QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHN0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUU3Qjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBc0I7SUFDOUMsNEJBQTRCO0lBQzVCLHdCQUF3QjtJQUN4QiwyQkFBMkI7SUFDM0IsOEJBQThCO0lBQzlCLG9CQUFvQjtJQUNwQix3Q0FBd0M7SUFDeEMsNkJBQTZCO0lBQzdCLHVCQUF1QjtJQUN2Qix1Q0FBdUM7Q0FDeEMsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQXNDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRyxJQUFJO0lBQ0osSUFBSSxFQUFFLGFBQWE7Q0FDcEIsQ0FBQyxDQUFDLENBQUM7QUFFSjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFlO0lBQzVDLE9BQU8sYUFBYSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQzFELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUM7U0FDN0MsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFlO0lBQzNDLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNCO0lBQ25ELEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7SUFDMUMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUMxQyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO0NBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcnZlci1zaWRlIG9mZmxpbmUgZmFsbGJhY2sgb3BpbmlvbiBmb3IgbW9kZWwgc2VsZWN0aW9uLlxuICpcbiAqIFdoZW4gdGhlIGxpdmUgYC9zZXJ2aW5nLWVuZHBvaW50c2AgY2F0YWxvZ3VlIGNhbid0IGJlIHJlYWQgYXQgYWxsIC0gbm8gdXNlclxuICogdG9rZW4sIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBjYW4ndCBsaXN0LCBvciB0aGUgd29ya3NwYWNlIGlzIHVucmVhY2hhYmxlIC1cbiAqIHRoZSByZXNvbHZlciBzdGlsbCBoYXMgdG8gbmFtZSAqc29tZSogZW5kcG9pbnQuIFRoaXMgbW9kdWxlIGhvbGRzIHRoYXQgZmxvb3I6XG4gKiBhIHNtYWxsLCBoYXJkLWNvZGVkIHNldCBvZiB3ZWxsLWtub3duIEZvdW5kYXRpb24gTW9kZWwgQVBJIGVuZHBvaW50IG5hbWVzLFxuICogZWFjaCBidWNrZXRlZCBpbnRvIGEgY2hhdCB7QGxpbmsgTW9kZWxDbGFzc30gYnkgdGhlIFJ1c3QgZmFtaWx5IHBvbGljeVxuICogYW5kIG9yZGVyZWQgYmVzdC1maXJzdC5cbiAqXG4gKiBUaGlzIGlzIGRlbGliZXJhdGVseSAqc2VydmVyLW9ubHkqLiBBIGJyb3dzZXIgY2xpZW50IG5ldmVyIHRhbGtzIHRvXG4gKiBEYXRhYnJpY2tzIGRpcmVjdGx5IC0gaXQgYWx3YXlzIGdvZXMgdGhyb3VnaCB0aGlzIHNlcnZlciAtIHNvIGl0IGhhcyBub3RoaW5nXG4gKiB0byBmYWxsIGJhY2sgdG8gYW5kIG11c3Qgbm90IGFzc3VtZSBhIHN0YWxlLCBiYWtlZC1pbiBtb2RlbCBsaXN0OyBpdCBjb25zdW1lc1xuICogdGhlIGNsYXNzaWZpZWQgbGl2ZSBgL21vZGVsc2AgcmVzcG9uc2UgaW5zdGVhZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbW9kZWwsIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuXG5pbXBvcnQgeyByYW5rRW5kcG9pbnRzIH0gZnJvbSBcIi4vX25hdGl2ZS50c1wiO1xuXG50eXBlIE1vZGVsQ2xhc3MgPSBtb2RlbC5Nb2RlbENsYXNzO1xuY29uc3QgeyBNb2RlbENsYXNzIH0gPSBtb2RlbDtcblxuLyoqXG4gKiBTbWFsbCwgbGFzdC1yZXNvcnQgc2V0IG9mIHdlbGwta25vd24gRm91bmRhdGlvbiBNb2RlbCBBUEkgZW5kcG9pbnQgbmFtZXMsXG4gKiBvcmRlcmVkIGJlc3QtZmlyc3Qgd2l0aGluIGVhY2ggY2xhc3MgYnkgdGhlIFJ1c3QgbW9kZWwgcmFua2VyLlxuICogVXNlZCBvbmx5IGFzIHRoZSBmbG9vciB3aGVuIHRoZSBsaXZlIGAvc2VydmluZy1lbmRwb2ludHNgIGNhdGFsb2d1ZSBjYW4ndCBiZVxuICogcmVhZCBhdCByZXNvbHZlIHRpbWU7IHRoZSBsaXZlLCBzY29yZS1kcml2ZW4gY2xhc3NpZmljYXRpb24gc3VwZXJzZWRlcyBpdFxuICogd2hlbmV2ZXIgdGhlIHdvcmtzcGFjZSBsaXN0aW5nIGlzIGF2YWlsYWJsZS4gQ2xhc3NlcyBhcmUgbm90IGhhcmQtY29kZWQgaGVyZVxuICogLSBlYWNoIG5hbWUgaXMgY2xhc3NpZmllZCBieSBmYW1pbHkgaGV1cmlzdGljLlxuICovXG5jb25zdCBGQUxMQkFDS19NT0RFTF9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIFwiZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LThcIixcbiAgXCJkYXRhYnJpY2tzLWdwdC01LTUtcHJvXCIsXG4gIFwiZGF0YWJyaWNrcy1nZW1pbmktMy0xLXByb1wiLFxuICBcImRhdGFicmlja3MtY2xhdWRlLXNvbm5ldC00LTZcIixcbiAgXCJkYXRhYnJpY2tzLWdwdC01LTVcIixcbiAgXCJkYXRhYnJpY2tzLW1ldGEtbGxhbWEtMy0zLTcwYi1pbnN0cnVjdFwiLFxuICBcImRhdGFicmlja3MtY2xhdWRlLWhhaWt1LTQtNVwiLFxuICBcImRhdGFicmlja3MtZ3B0LTUtbmFub1wiLFxuICBcImRhdGFicmlja3MtbWV0YS1sbGFtYS0zLTEtOGItaW5zdHJ1Y3RcIixcbl07XG5cbmNvbnN0IEZBTExCQUNLX0VORFBPSU5UUzogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdID0gRkFMTEJBQ0tfTU9ERUxfTkFNRVMubWFwKChuYW1lKSA9PiAoe1xuICBuYW1lLFxuICB0YXNrOiBcImxsbS92MS9jaGF0XCIsXG59KSk7XG5cbi8qKlxuICogU3RhdGljIGZhbGxiYWNrIG1vZGVsIGlkcyBmb3IgYSBjaGF0IGNsYXNzLCBkcmF3biBmcm9tIHRoZSBzbWFsbCBidWlsdC1pblxuICoge0BsaW5rIEZBTExCQUNLX01PREVMX05BTUVTfSBsaXN0IGFuZCBvcmRlcmVkIGJlc3QtZmlyc3QgYnkgZmFtaWx5IHJhbmsuIFN5bmNcbiAqIGFuZCB3b3Jrc3BhY2UtaW5kZXBlbmRlbnQ6IHRoaXMgaXMgdGhlICpmYWxsYmFjayBvcGluaW9uKiB1c2VkIHRvIHNlZWQgZGVmYXVsdFxuICogbGlzdHMgb3Igd2hlbiB0aGUgbGl2ZSBjYXRhbG9ndWUgaXMgdW5yZWFjaGFibGUgLSBsaXZlIHJlc29sdXRpb24gcHJlZmVyc1xuICogdGhlIFJ1c3QtY2xhc3NpZmllZCB3b3Jrc3BhY2UgY2F0YWxvZ3VlLiBSZXR1cm5zIGBbXWAgZm9yXG4gKiB7QGxpbmsgTW9kZWxDbGFzcy5FbWJlZGRpbmd9ICh0aGUgZmxvb3IgaXMgY2hhdC1vbmx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsc0ZvckNsYXNzKGNsczogTW9kZWxDbGFzcyk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHJhbmtFbmRwb2ludHMoRkFMTEJBQ0tfRU5EUE9JTlRTLCB7IG1vZGVsQ2xhc3M6IGNscyB9KVxuICAgIC5maWx0ZXIoKHJhbmtlZCkgPT4gcmFua2VkLm1vZGVsQ2xhc3MgPT09IGNscylcbiAgICAubWFwKChyYW5rZWQpID0+IHJhbmtlZC5lbmRwb2ludC5uYW1lKTtcbn1cblxuLyoqIFRvcCBzdGF0aWMgZmFsbGJhY2sgbW9kZWwgaWQgZm9yIGEgY2hhdCBjbGFzcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbEZvckNsYXNzKGNsczogTW9kZWxDbGFzcyk6IHN0cmluZyB7XG4gIHJldHVybiBtb2RlbHNGb3JDbGFzcyhjbHMpWzBdITtcbn1cblxuLyoqXG4gKiBQcmlvcml0eS1vcmRlcmVkIGZhbGxiYWNrIGNoYWluIChDaGF0VGhpbmtpbmcgLT4gQ2hhdEJhbGFuY2VkIC0+IENoYXRGYXN0KVxuICogb3ZlciB0aGUgc21hbGwgYnVpbHQtaW4gbGlzdC4gVGhlIGZsb29yIHdhbGtlZCBhdCByZXNvbHZlIHRpbWUgd2hlbiBubyBhZ2VudFxuICogLyBwbHVnaW4gLyBlbnYgLyByZXF1ZXN0IG1vZGVsIGlzIHNldCAqYW5kKiB0aGUgbGl2ZSBjYXRhbG9ndWUgeWllbGRzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBGQUxMQkFDS19NT0RFTF9JRFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAuLi5tb2RlbHNGb3JDbGFzcyhNb2RlbENsYXNzLkNoYXRUaGlua2luZyksXG4gIC4uLm1vZGVsc0ZvckNsYXNzKE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKSxcbiAgLi4ubW9kZWxzRm9yQ2xhc3MoTW9kZWxDbGFzcy5DaGF0RmFzdCksXG5dO1xuIl19
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Live Databricks Model Serving catalogue access.
|
|
3
3
|
*
|
|
4
|
-
* Lists the workspace's `/serving-endpoints`
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Lists the workspace's `/serving-endpoints` and, when the caller supplies a
|
|
5
|
+
* trusted credential identity, caches the result per host and identity with a
|
|
6
|
+
* TTL via AppKit's `CacheManager`. Concurrent callers in the same scope share
|
|
7
|
+
* one in-flight promise. Surfaces each endpoint as a stable
|
|
8
8
|
* {@link ServingEndpointSummary} - including the Foundation Model API
|
|
9
9
|
* `quality` / `speed` / `cost` profile when present, the classified
|
|
10
10
|
* {@link ModelClass}, and (for embedding endpoints) the measured vector
|
|
11
11
|
* `dimension` - and snaps loose, human-typed names to real endpoint ids
|
|
12
|
-
* through
|
|
12
|
+
* through the Rust model ranker so tokens like `"claude sonnet"` resolve to
|
|
13
13
|
* `databricks-claude-sonnet-4-6`.
|
|
14
14
|
*
|
|
15
15
|
* The class stamp and embedding dimension are computed once per cache load:
|
|
@@ -30,7 +30,7 @@ import { type ServingEndpointSummary } from "@dbx-tools/shared-model";
|
|
|
30
30
|
export type WorkspaceClientLike = Pick<appkit.WorkspaceClientLike, "servingEndpoints">;
|
|
31
31
|
/** Default TTL for the in-memory endpoint cache. Matches the Databricks SDK's session lifetime budget. */
|
|
32
32
|
export declare const DEFAULT_MODEL_CACHE_TTL_MS: number;
|
|
33
|
-
/** Default
|
|
33
|
+
/** Default Rust distance threshold below which a fuzzy match is accepted. */
|
|
34
34
|
export declare const DEFAULT_FUZZY_THRESHOLD = 0.4;
|
|
35
35
|
/** Options for {@link listServingEndpoints}. */
|
|
36
36
|
export interface ListServingEndpointsOptions {
|
|
@@ -39,6 +39,15 @@ export interface ListServingEndpointsOptions {
|
|
|
39
39
|
* `CacheManager` as seconds.
|
|
40
40
|
*/
|
|
41
41
|
ttlMs?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Trusted identity of the credential used by `client`.
|
|
44
|
+
*
|
|
45
|
+
* The value is hashed before it enters the cache key and is never logged.
|
|
46
|
+
* Omit it when the caller cannot prove the credential identity; that call
|
|
47
|
+
* bypasses shared caching so one principal can never read another's
|
|
48
|
+
* catalogue.
|
|
49
|
+
*/
|
|
50
|
+
cacheIdentity?: string;
|
|
42
51
|
}
|
|
43
52
|
/**
|
|
44
53
|
* List Model Serving endpoints for the workspace owning `client`, routed
|
|
@@ -73,16 +82,15 @@ export declare function listServingEndpoints(client: WorkspaceClientLike, host:
|
|
|
73
82
|
*/
|
|
74
83
|
export declare function listServingEndpointsUncached(client: WorkspaceClientLike): Promise<ServingEndpointSummary[]>;
|
|
75
84
|
/**
|
|
76
|
-
* Force-evict cached endpoint listings via AppKit's `CacheManager`.
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* code).
|
|
85
|
+
* Force-evict cached endpoint listings via AppKit's `CacheManager`. A host and
|
|
86
|
+
* identity delete only that principal's workspace entry. Because CacheManager
|
|
87
|
+
* cannot enumerate a namespace, omitting either value clears the complete
|
|
88
|
+
* manager and should be reserved for tests or administrative refreshes.
|
|
81
89
|
*/
|
|
82
|
-
export declare function clearServingEndpointsCache(host?: string): Promise<void>;
|
|
90
|
+
export declare function clearServingEndpointsCache(host?: string, cacheIdentity?: string): Promise<void>;
|
|
83
91
|
/**
|
|
84
92
|
* Result of fuzzy-resolving a user-supplied model name against the live
|
|
85
|
-
* endpoint list. `score` is
|
|
93
|
+
* endpoint list. `score` is the Rust ranker's distance (`0` is exact, `1` is no match);
|
|
86
94
|
* `matched` is `false` when the score exceeds the configured threshold so
|
|
87
95
|
* callers can fall back to the original input (Databricks will then return a
|
|
88
96
|
* clean 404).
|
|
@@ -94,7 +102,7 @@ export interface ResolvedModel {
|
|
|
94
102
|
}
|
|
95
103
|
/** Options accepted by {@link resolveModelId} / {@link searchServingEndpoints}. */
|
|
96
104
|
export interface ResolveModelOptions {
|
|
97
|
-
/**
|
|
105
|
+
/** Fuzzy distance threshold (0 = exact, 1 = anything). Default `0.4`. */
|
|
98
106
|
threshold?: number;
|
|
99
107
|
/** Require a model verified for a complete function-tool round-trip. */
|
|
100
108
|
requiresTools?: boolean;
|
|
@@ -102,7 +110,7 @@ export interface ResolveModelOptions {
|
|
|
102
110
|
/** A serving endpoint paired with its fuzzy-match distance for a query. */
|
|
103
111
|
export interface ScoredEndpoint {
|
|
104
112
|
endpoint: ServingEndpointSummary;
|
|
105
|
-
/**
|
|
113
|
+
/** Fuzzy distance: `0` is exact, `1` is no match. */
|
|
106
114
|
score: number;
|
|
107
115
|
}
|
|
108
116
|
/**
|
|
@@ -110,11 +118,8 @@ export interface ScoredEndpoint {
|
|
|
110
118
|
* (lowest score) first, keeping only those within `threshold`:
|
|
111
119
|
*
|
|
112
120
|
* 1. An exact name match short-circuits to a single `score: 0` result.
|
|
113
|
-
* 2. Otherwise the input
|
|
114
|
-
*
|
|
115
|
-
* token with fuzzy matching enabled - the "tokenized fuzzy match" a caller
|
|
116
|
-
* reaches for when they type `"claude sonnet"` instead of the full endpoint
|
|
117
|
-
* name.
|
|
121
|
+
* 2. Otherwise Rust tokenizes the input and scores every endpoint through the
|
|
122
|
+
* same fuzzy-distance policy used by {@link lookupModels}.
|
|
118
123
|
*
|
|
119
124
|
* Returns `[]` for an empty endpoint list or when `input` tokenizes to nothing,
|
|
120
125
|
* so callers fall back to the raw input and let Databricks surface a clean 404.
|