@dbx-tools/shared-model 0.6.62 → 0.6.64
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 +12 -1
- package/lib/src/classify.d.ts +12 -1
- package/lib/src/classify.js +23 -2
- package/lib/src/model.d.ts +3 -0
- package/lib/src/model.js +9 -1
- package/package.json +2 -2
- package/src/classify.ts +25 -2
- package/src/model.ts +12 -0
package/README.md
CHANGED
|
@@ -49,6 +49,7 @@ import { model } from "@dbx-tools/shared-model";
|
|
|
49
49
|
const query = model.ModelQuerySchema.parse({
|
|
50
50
|
search: "claude sonnet",
|
|
51
51
|
modelClass: "chat-balanced",
|
|
52
|
+
requiresTools: true,
|
|
52
53
|
limit: 5,
|
|
53
54
|
});
|
|
54
55
|
```
|
|
@@ -67,7 +68,9 @@ const ranked: RankedModel = model.RankedModelSchema.parse(response);
|
|
|
67
68
|
|
|
68
69
|
`model.ServingEndpointSummarySchema` describes the stable endpoint fields exposed
|
|
69
70
|
to clients: endpoint name, task, state, optional profile scores, classified
|
|
70
|
-
class, and embedding dimension.
|
|
71
|
+
class, `supportsTools`, and embedding dimension. `requiresTools: true` filters
|
|
72
|
+
search/ranking to endpoints that can complete both a function call and the
|
|
73
|
+
subsequent `function_call_output` replay.
|
|
71
74
|
|
|
72
75
|
## Classify Endpoint Catalogues
|
|
73
76
|
|
|
@@ -76,8 +79,16 @@ import { classify, model } from "@dbx-tools/shared-model";
|
|
|
76
79
|
|
|
77
80
|
const byClass = classify.classifyEndpoints(endpoints);
|
|
78
81
|
const fast = byClass[model.ModelClass.ChatFast];
|
|
82
|
+
const agentModels = endpoints.filter((endpoint) => classify.endpointCapabilities(endpoint).tools);
|
|
79
83
|
```
|
|
80
84
|
|
|
85
|
+
Databricks currently exposes no tool-capability attribute in the endpoint list
|
|
86
|
+
or OpenAPI schema. `supportsTools` therefore uses a conservative, live-verified
|
|
87
|
+
provider-family policy: GPT (except GPT-OSS), Claude, Qwen, GLM, and Llama.
|
|
88
|
+
Gemini is excluded because its Open Responses tool-result replay requires a
|
|
89
|
+
thought signature the wire does not currently accept; GPT-OSS rejects Responses
|
|
90
|
+
passthrough. An explicit `supportsTools` stamp overrides the family fallback.
|
|
91
|
+
|
|
81
92
|
The classifier uses Foundation Model API quality/speed/cost scores when present
|
|
82
93
|
and family-name heuristics when scores are missing. This is useful for client
|
|
83
94
|
grouping, tests, and offline catalogue analysis.
|
package/lib/src/classify.d.ts
CHANGED
|
@@ -32,9 +32,20 @@ export interface EndpointCapabilities {
|
|
|
32
32
|
chat: boolean;
|
|
33
33
|
/** Embedding (vector) endpoint. */
|
|
34
34
|
embedding: boolean;
|
|
35
|
-
/**
|
|
35
|
+
/** Complete function-tool round-trip (call plus function_call_output replay). */
|
|
36
36
|
tools: boolean;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Provider families verified against Databricks Responses/Open Responses with
|
|
40
|
+
* both a forced function call and a stateless `function_call_output` replay.
|
|
41
|
+
*
|
|
42
|
+
* Databricks' endpoint list/OpenAPI currently exposes no tools capability bit.
|
|
43
|
+
* Keep this conservative: an unknown chat family is not agent-safe until it is
|
|
44
|
+
* verified. Gemini is excluded because it emits a call but Open Responses
|
|
45
|
+
* cannot replay the required thought signature; GPT-OSS rejects Responses
|
|
46
|
+
* passthrough entirely.
|
|
47
|
+
*/
|
|
48
|
+
export declare function supportsToolsByFamily(name: string): boolean;
|
|
38
49
|
/**
|
|
39
50
|
* Derive an endpoint's capabilities from its Databricks task hint and its
|
|
40
51
|
* classified {@link ModelClass}, so consumers filter on capability instead of
|
package/lib/src/classify.js
CHANGED
|
@@ -30,6 +30,26 @@ import { ModelClass } from "./model.js";
|
|
|
30
30
|
const CHAT_TASK = "llm/v1/chat";
|
|
31
31
|
/** Task hint Databricks stamps on embedding endpoints. */
|
|
32
32
|
const EMBEDDING_TASK = "llm/v1/embeddings";
|
|
33
|
+
/**
|
|
34
|
+
* Provider families verified against Databricks Responses/Open Responses with
|
|
35
|
+
* both a forced function call and a stateless `function_call_output` replay.
|
|
36
|
+
*
|
|
37
|
+
* Databricks' endpoint list/OpenAPI currently exposes no tools capability bit.
|
|
38
|
+
* Keep this conservative: an unknown chat family is not agent-safe until it is
|
|
39
|
+
* verified. Gemini is excluded because it emits a call but Open Responses
|
|
40
|
+
* cannot replay the required thought signature; GPT-OSS rejects Responses
|
|
41
|
+
* passthrough entirely.
|
|
42
|
+
*/
|
|
43
|
+
export function supportsToolsByFamily(name) {
|
|
44
|
+
const n = name.toLowerCase();
|
|
45
|
+
if (n.includes("gemini") || n.includes("gpt-oss"))
|
|
46
|
+
return false;
|
|
47
|
+
return (n.includes("claude") ||
|
|
48
|
+
n.includes("gpt") ||
|
|
49
|
+
n.includes("qwen") ||
|
|
50
|
+
n.includes("glm") ||
|
|
51
|
+
n.includes("llama"));
|
|
52
|
+
}
|
|
33
53
|
/**
|
|
34
54
|
* Derive an endpoint's capabilities from its Databricks task hint and its
|
|
35
55
|
* classified {@link ModelClass}, so consumers filter on capability instead of
|
|
@@ -45,7 +65,8 @@ export function endpointCapabilities(endpoint) {
|
|
|
45
65
|
// Every non-embedding class is a chat band, so "classified but not embedding"
|
|
46
66
|
// is the class-side test for chat capability.
|
|
47
67
|
const chat = !embedding && (endpoint.task === CHAT_TASK || endpoint.class !== undefined);
|
|
48
|
-
|
|
68
|
+
const tools = chat && (endpoint.supportsTools ?? supportsToolsByFamily(endpoint.name));
|
|
69
|
+
return { chat, embedding, tools };
|
|
49
70
|
}
|
|
50
71
|
/**
|
|
51
72
|
* Numeric `[major, minor, patch]` version parsed from an endpoint
|
|
@@ -258,4 +279,4 @@ export function classifyEndpoints(endpoints) {
|
|
|
258
279
|
[ModelClass.Embedding]: embeddings,
|
|
259
280
|
};
|
|
260
281
|
}
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xhc3NpZnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBK0IsTUFBTSxZQUFZLENBQUM7QUFFckUsZ0VBQWdFO0FBQ2hFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUVoQywwREFBMEQ7QUFDMUQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUM7QUFZM0M7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWdDO0lBQ25FLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5Riw4RUFBOEU7SUFDOUUsOENBQThDO0lBQzlDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQVVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUk7U0FDZCxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ1osS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUNwQixHQUFHLENBQUMs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TSxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxTQUFTLFFBQVEsQ0FBQyxTQUE0QixFQUFFLENBQVM7SUFDdkQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDOUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBRSxDQUFDO0lBQ3JDLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFlRCxTQUFTLFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNyQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxPQUFPO1FBQUUsT0FBTyxDQUFDLENBQUMsT0FB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QUFJO1lBQ2pCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7WUFDakMsUUFBUSxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDO0lBRXRFLE9BQU87UUFDTCxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUYsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVGLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVO0tBQ25DLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2RlbC1jbGFzcyBjbGFzc2lmaWNhdGlvbiBmb3IgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50cy5cbiAqXG4gKiBDaGF0IGNhcGFiaWxpdHkgYmFuZHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbGl2ZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlXG4gKiByYXRoZXIgdGhhbiBhIGhhbmQtbWFpbnRhaW5lZCB0YWJsZS4gRGF0YWJyaWNrcyBwdWJsaXNoZXNcbiAqIHBlci1lbmRwb2ludCBgcXVhbGl0eWAgLyBgc3BlZWRgIC8gYGNvc3RgIHNjb3JlcyAodGhlIEFJIFBsYXlncm91bmRcbiAqIGJhcnMpIG9uIHRoZSBzZXJ2aW5nIGxpc3Q7IHtAbGluayBjbGFzc2lmeUVuZHBvaW50c30gYnVja2V0cyBzY29yZWRcbiAqIGNoYXQgbW9kZWxzIGludG8gdGhlIGNoYXQge0BsaW5rIE1vZGVsQ2xhc3N9IGJhbmRzIGJ5IHRoZSAqcmVsYXRpdmUqXG4gKiBkaXN0cmlidXRpb24gb2YgdGhvc2Ugc2NvcmVzIChxdWFudGlsZXMsIG5vdCBmaXhlZCBjdXQtb2Zmcykgc28gYVxuICogYnJhbmQtbmV3IG1vZGVsIHRoYXQgbGFuZHMgb3V0c2lkZSB0b2RheSdzIHNjb3JlIHJhbmdlIHN0aWxsIHNsb3RzIGluXG4gKiBuZXh0IHRvIGl0cyBwZWVycy4gRW1iZWRkaW5nIGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcImApXG4gKiBhcmUgYnVja2V0ZWQgaW50byB7QGxpbmsgTW9kZWxDbGFzcy5FbWJlZGRpbmd9IGJ5IHRhc2ssIGluZGVwZW5kZW50IG9mXG4gKiBhbnkgc2NvcmUuXG4gKlxuICogVW5zY29yZWQtYnV0LXJlY29nbml6YWJsZSBjaGF0IGVuZHBvaW50cyBhcmUgc3RpbGwgcGxhY2VkIGJ5IGEgc21hbGxcbiAqIGZhbWlseSBoZXVyaXN0aWMgKHtAbGluayBjbGFzc2lmeUJ5RmFtaWx5fSkgc28gYSB3b3Jrc3BhY2Ugd2hvc2VcbiAqIG1vZGVscyBwcmVkYXRlIEZvdW5kYXRpb24gTW9kZWwgQVBJIHNjb3Jpbmcga2VlcHMgd29ya2luZy4gVGhlXG4gKiBvZmZsaW5lIGZhbGxiYWNrIGZsb29yIC0gdGhlIGhhcmQtY29kZWQgbW9kZWwgbGlzdCByZWFjaGVkIGZvciB3aGVuXG4gKiB0aGUgbGl2ZSBjYXRhbG9ndWUgY2FuJ3QgYmUgcmVhZCBhdCBhbGwgLSBpcyBhIHNlcnZlciBjb25jZXJuIGFuZFxuICogbGl2ZXMgaW4gYEBkYngtdG9vbHMvbW9kZWxgLCBub3QgaGVyZTogYSBicm93c2VyIGNsaWVudCBuZXZlciB0YWxrc1xuICogdG8gRGF0YWJyaWNrcyBkaXJlY3RseSwgc28gaXQgaGFzIG5vdGhpbmcgdG8gZmFsbCBiYWNrIHRvLlxuICpcbiAqIFB1cmUgKG5vIE5vZGUtb25seSBpbXBvcnRzKSwgc28gYSBjbGllbnQgY2FuIGNsYXNzaWZ5IGEgYC9tb2RlbHNgXG4gKiByZXNwb25zZSB3aXRob3V0IHNlcnZlciBkZXBlbmRlbmNpZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IE1vZGVsQ2xhc3MsIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSB9IGZyb20gXCIuL21vZGVsLnRzXCI7XG5cbi8qKiBUYXNrIGhpbnQgRGF0YWJyaWNrcyBzdGFtcHMgb24gY2hhdCBjb21wbGV0aW9uIGVuZHBvaW50cy4gKi9cbmNvbnN0IENIQVRfVEFTSyA9IFwibGxtL3YxL2NoYXRcIjtcblxuLyoqIFRhc2sgaGludCBEYXRhYnJpY2tzIHN0YW1wcyBvbiBlbWJlZGRpbmcgZW5kcG9pbnRzLiAqL1xuY29uc3QgRU1CRURESU5HX1RBU0sgPSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG5cbi8qKiBXaGF0IGFuIGVuZHBvaW50IGNhbiBiZSBhc2tlZCB0byBkbywgYXMgZGVyaXZlZCBieSB7QGxpbmsgZW5kcG9pbnRDYXBhYmlsaXRpZXN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludENhcGFiaWxpdGllcyB7XG4gIC8qKiBPcGVuQUkgY2hhdC9jb21wbGV0aW9ucyArIFJlc3BvbnNlczogdGhlIHN1cmZhY2UgYSBjaGF0IGFnZW50IG5lZWRzLiAqL1xuICBjaGF0OiBib29sZWFuO1xuICAvKiogRW1iZWRkaW5nICh2ZWN0b3IpIGVuZHBvaW50LiAqL1xuICBlbWJlZGRpbmc6IGJvb2xlYW47XG4gIC8qKiBGdW5jdGlvbiAvIHRvb2wgY2FsbGluZy4gRXZlcnkgY2hhdCBlbmRwb2ludCBvbiBEYXRhYnJpY2tzIHN1cHBvcnRzIGl0LiAqL1xuICB0b29sczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXJpdmUgYW4gZW5kcG9pbnQncyBjYXBhYmlsaXRpZXMgZnJvbSBpdHMgRGF0YWJyaWNrcyB0YXNrIGhpbnQgYW5kIGl0c1xuICogY2xhc3NpZmllZCB7QGxpbmsgTW9kZWxDbGFzc30sIHNvIGNvbnN1bWVycyBmaWx0ZXIgb24gY2FwYWJpbGl0eSBpbnN0ZWFkIG9mXG4gKiByZS1kZXJpdmluZyBpdCBmcm9tIHJhdyBgdGFza2AgLyBgY2xhc3NgIHN0cmluZ3MuXG4gKlxuICogRWl0aGVyIHNpZ25hbCBhbG9uZSBpcyBlbm91Z2g6IHRoZSB0YXNrIGhpbnQgaXMgYXV0aG9yaXRhdGl2ZSB3aGVuIHByZXNlbnQsXG4gKiBhbmQgdGhlIGNsYXNzIGNvdmVycyBlbmRwb2ludHMgRGF0YWJyaWNrcyBsZWZ0IHVudGFza2VkIGJ1dCB0aGUgY2xhc3NpZmllclxuICogcmVjb2duaXplZC4gRW1iZWRkaW5nIHdpbnMgb3ZlciBjaGF0IHdoZW4gYm90aCBwb2ludCBhdCBpdCwgc2luY2UgdGhlIHR3byBhcmVcbiAqIG5vdCBpbnRlcmNoYW5nZWFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludENhcGFiaWxpdGllcyhlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IEVuZHBvaW50Q2FwYWJpbGl0aWVzIHtcbiAgY29uc3QgZW1iZWRkaW5nID0gZW5kcG9pbnQudGFzayA9PT0gRU1CRURESU5HX1RBU0sgfHwgZW5kcG9pbnQuY2xhc3MgPT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nO1xuICAvLyBFdmVyeSBub24tZW1iZWRkaW5nIGNsYXNzIGlzIGEgY2hhdCBiYW5kLCBzbyBcImNsYXNzaWZpZWQgYnV0IG5vdCBlbWJlZGRpbmdcIlxuICAvLyBpcyB0aGUgY2xhc3Mtc2lkZSB0ZXN0IGZvciBjaGF0IGNhcGFiaWxpdHkuXG4gIGNvbnN0IGNoYXQgPSAhZW1iZWRkaW5nICYmIChlbmRwb2ludC50YXNrID09PSBDSEFUX1RBU0sgfHwgZW5kcG9pbnQuY2xhc3MgIT09IHVuZGVmaW5lZCk7XG4gIHJldHVybiB7IGNoYXQsIGVtYmVkZGluZywgdG9vbHM6IGNoYXQgfTtcbn1cblxuLyoqIEZhbWlseS1oZXVyaXN0aWMgY2xhc3NpZmljYXRpb24gb2YgYSBzaW5nbGUgZW5kcG9pbnQgbmFtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5Q2xhc3Mge1xuICAvKiogQ2hhdCBjYXBhYmlsaXR5IGJhbmQgdGhlIGZhbWlseSBtYXBzIHRvIChuZXZlciBlbWJlZGRpbmcpLiAqL1xuICBjbGFzczogTW9kZWxDbGFzcztcbiAgLyoqIEludHJhLWZhbWlseSBvcmRlcmluZyBoaW50IChoaWdoZXIgaXMgbmV3ZXIgLyBtb3JlIGNhcGFibGUpLiAqL1xuICByYW5rOiBudW1iZXI7XG59XG5cbi8qKlxuICogTnVtZXJpYyBgW21ham9yLCBtaW5vciwgcGF0Y2hdYCB2ZXJzaW9uIHBhcnNlZCBmcm9tIGFuIGVuZHBvaW50XG4gKiBuYW1lLCB1c2VkIHRvIG9yZGVyIHNpYmxpbmdzIHdpdGhpbiBhIGZhbWlseS90aWVyLiBTdGFydHMgYXQgdGhlXG4gKiBmaXJzdCBkaWdpdCBpbiB0aGUgbmFtZSwgdGhlbiByZWFkcyBzdWNjZXNzaXZlIHNlcGFyYXRvci1kZWxpbWl0ZWQsXG4gKiBkaWdpdC1wcmVmaXhlZCBjaHVua3MgYXMgdGhlIHRocmVlIGNvbXBvbmVudHMgKG1pc3Npbmcgb25lcyBkZWZhdWx0XG4gKiB0byBgMGApOlxuICpcbiAqICAgLSBgZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LThgICAgLT4gYFs0LCA4LCAwXWBcbiAqICAgLSBgZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LTEwYCAgLT4gYFs0LCAxMCwgMF1gIChzb3J0cyBhYm92ZSA0LTgpXG4gKiAgIC0gYGRhdGFicmlja3MtbWV0YS1sbGFtYS0zLTMtNzBiYC0+IGBbMywgMywgNzBdYFxuICogICAtIGBkYXRhYnJpY2tzLWJnZS1sYXJnZS1lbmAgICAgICAtPiBgWzAsIDAsIDBdYCAobm8gZGlnaXRzKVxuICpcbiAqIENvbXBvbmVudC13aXNlIGNvbXBhcmlzb24gKG5vdCBhIGRlY2ltYWwgY29sbGFwc2UpIHNvIGA0LjEwYCBiZWF0c1xuICogYDQuOGAgLSB0aGUgYnVnIGEgYG1ham9yICsgbWlub3IvMTBgIHNjb3JlIHdvdWxkIGhpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25UdXBsZShuYW1lOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBzdGFydCA9IG5hbWUuc2VhcmNoKC9cXGQvKTtcbiAgaWYgKHN0YXJ0IDwgMCkgcmV0dXJuIFswLCAwLCAwXTtcbiAgY29uc3QgbnVtcyA9IG5hbWVcbiAgICAuc2xpY2Uoc3RhcnQpXG4gICAgLnNwbGl0KC9bXmEtejAtOV0rL2kpXG4gICAgLm1hcCgoY2h1bmspID0+IGNodW5rLm1hdGNoKC9eXFxkKy8pPy5bMF0pXG4gICAgLmZpbHRlcigoZGlnaXRzKTogZGlnaXRzIGlzIHN0cmluZyA9PiBkaWdpdHMgIT09IHVuZGVmaW5lZClcbiAgICAubWFwKE51bWJlcik7XG4gIHJldHVybiBbbnVtc1swXSA/PyAwLCBudW1zWzFdID8/IDAsIG51bXNbMl0gPz8gMF07XG59XG5cbi8qKiBDb21wYXJlIHR3byB2ZXJzaW9uIHR1cGxlcyBzbyB0aGUgaGlnaGVyIHZlcnNpb24gc29ydHMgZmlyc3QgKGRlc2NlbmRpbmcpLiAqL1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25EZXNjKGE6IHJlYWRvbmx5IG51bWJlcltdLCBiOiByZWFkb25seSBudW1iZXJbXSk6IG51bWJlciB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgY29uc3QgZGlmZiA9IChiW2ldID8/IDApIC0gKGFbaV0gPz8gMCk7XG4gICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIE1vbm90b25pYyB2ZXJzaW9uIGtleSBmb3Igb3JkZXJpbmcgc2libGluZ3Mgd2l0aGluIGEgZmFtaWx5L3RpZXJcbiAqIChlLmcuIGBvcHVzLTQtOGAgb3ZlciBgb3B1cy00LTdgKS4gRW5jb2RlcyB0aGUge0BsaW5rIHZlcnNpb25UdXBsZX1cbiAqIGFzIGEgc2luZ2xlIG51bWJlciBzbyBjYWxsZXJzIHRoYXQgbmVlZCBhIHNjYWxhciByYW5rICh0aGUgZmFtaWx5XG4gKiBoZXVyaXN0aWMsIHRoZSBzdGF0aWMgZmFsbGJhY2sgb3JkZXJpbmcpIGtlZXAgd29ya2luZzsgdGhlIGVuY29kaW5nXG4gKiBwcmVzZXJ2ZXMgY29tcG9uZW50IG9yZGVyIHdpdGhvdXQgdGhlIGRlY2ltYWwtY29sbGFwc2UgYnVnLlxuICovXG5mdW5jdGlvbiB2ZXJzaW9uU2NvcmUobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gdmVyc2lvblR1cGxlKG5hbWUpO1xuICByZXR1cm4gbWFqb3IgKiAxXzAwMF8wMDAgKyBtaW5vciAqIDFfMDAwICsgcGF0Y2g7XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgY2hhdCBjYXBhYmlsaXR5IGJhbmQgZm9yIGFuIGVuZHBvaW50IHdlIGhhdmUgbm8gbGl2ZVxuICogc2NvcmUgZm9yLCBrZXllZCBvZmYgcHJvdmlkZXIgZmFtaWx5IGFuZCB0aGUgd2VsbC1rbm93biB2YXJpYW50IHdvcmRzXG4gKiBpbiB0aGUgbmFtZSAoYG9wdXNgL2Bzb25uZXRgL2BoYWlrdWAsIGBwcm9gL2BtaW5pYC9gbmFub2AsXG4gKiBgZmxhc2hgL2BmbGFzaC1saXRlYCwgTGxhbWEgcGFyYW1ldGVyIHNpemVzLCBldGMpLiBSZXR1cm5zIGBudWxsYCBmb3JcbiAqIG5hbWVzIHdlIGRvbid0IHJlY29nbml6ZSBzbyB1bmtub3duIGN1c3RvbSBlbmRwb2ludHMgYXJlIG5ldmVyXG4gKiBhdXRvLXNlbGVjdGVkIGFzIGEgZGVmYXVsdC4gVGhlIGFjY29tcGFueWluZyBgcmFua2Agb3JkZXJzIHNpYmxpbmdzXG4gKiB3aXRoaW4gYSBjbGFzcy4gT25seSBldmVyIHJldHVybnMgYSBjaGF0IGJhbmQgLSBlbWJlZGRpbmcgZW5kcG9pbnRzXG4gKiBhcmUgY2xhc3NpZmllZCBieSB0YXNrLCBub3QgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5QnlGYW1pbHkobmFtZTogc3RyaW5nKTogRmFtaWx5Q2xhc3MgfCBudWxsIHtcbiAgY29uc3QgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgYXQgPSAoY2xzOiBNb2RlbENsYXNzKTogRmFtaWx5Q2xhc3MgPT4gKHsgY2xhc3M6IGNscywgcmFuazogdmVyc2lvblNjb3JlKG4pIH0pO1xuXG4gIC8vIEFudGhyb3BpYyBDbGF1ZGVcbiAgaWYgKG4uaW5jbHVkZXMoXCJvcHVzXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmcpO1xuICBpZiAobi5pbmNsdWRlcyhcInNvbm5ldFwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgaWYgKG4uaW5jbHVkZXMoXCJoYWlrdVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuXG4gIC8vIE9wZW5BSSBvcGVuLXdlaWdodHMgKGNoZWNrIGJlZm9yZSB0aGUgZ2VuZXJpYyBncHQgYnJhbmNoKVxuICBpZiAobi5pbmNsdWRlcyhcImdwdC1vc3NcIikpIHtcbiAgICByZXR1cm4gYXQobi5pbmNsdWRlcyhcIjEyMGJcIikgPyBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCA6IE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuICB9XG4gIC8vIE9wZW5BSSBHUFQgZmFtaWx5XG4gIGlmIChuLmluY2x1ZGVzKFwiZ3B0XCIpKSB7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJwcm9cIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJtaW5pXCIpIHx8IG4uaW5jbHVkZXMoXCJuYW5vXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0RmFzdCk7XG4gICAgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgfVxuXG4gIC8vIEdvb2dsZSBHZW1pbmkgLyBHZW1tYVxuICBpZiAobi5pbmNsdWRlcyhcImdlbWluaVwiKSkge1xuICAgIGlmIChuLmluY2x1ZGVzKFwiZmxhc2gtbGl0ZVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuICAgIGlmIChuLmluY2x1ZGVzKFwicHJvXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmcpO1xuICAgIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCk7XG4gIH1cbiAgaWYgKG4uaW5jbHVkZXMoXCJnZW1tYVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuXG4gIC8vIE1ldGEgTGxhbWFcbiAgaWYgKG4uaW5jbHVkZXMoXCJsbGFtYVwiKSkge1xuICAgIGlmIChuLmluY2x1ZGVzKFwibWF2ZXJpY2tcIikgfHwgbi5pbmNsdWRlcyhcIjQwNWJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCI3MGJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCI4YlwiKSB8fCBuLmluY2x1ZGVzKFwiMWJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRGYXN0KTtcbiAgICByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQpO1xuICB9XG5cbiAgLy8gQWxpYmFiYSBRd2VuXG4gIGlmIChuLmluY2x1ZGVzKFwicXdlblwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIExpbmVhci1pbnRlcnBvbGF0ZWQgcXVhbnRpbGUgb2YgYW4gYXNjZW5kaW5nLXNvcnRlZCBudW1lcmljIGFycmF5LiAqL1xuZnVuY3Rpb24gcXVhbnRpbGUoc29ydGVkQXNjOiByZWFkb25seSBudW1iZXJbXSwgcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHNvcnRlZEFzYy5sZW5ndGggPT09IDApIHJldHVybiBOdW1iZXIuTmFOO1xuICBjb25zdCBpZHggPSAoc29ydGVkQXNjLmxlbmd0aCAtIDEpICogcDtcbiAgY29uc3QgbG8gPSBNYXRoLmZsb29yKGlkeCk7XG4gIGNvbnN0IGhpID0gTWF0aC5jZWlsKGlkeCk7XG4gIGlmIChsbyA9PT0gaGkpIHJldHVybiBzb3J0ZWRBc2NbbG9dITtcbiAgcmV0dXJuIHNvcnRlZEFzY1tsb10hICsgKHNvcnRlZEFzY1toaV0hIC0gc29ydGVkQXNjW2xvXSEpICogKGlkeCAtIGxvKTtcbn1cblxuLyoqIEludGVybmFsIHNvcnRhYmxlIHdyYXBwZXIgY2FycnlpbmcgdGhlIG9yZGVyaW5nIGtleXMgZm9yIGEgYnVja2V0IGVudHJ5LiAqL1xuaW50ZXJmYWNlIFJhbmtlZCB7XG4gIGVwOiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5O1xuICAvKiogUXVhbGl0eSAoc2NvcmVkKSBvciBmYW1pbHkgdmVyc2lvbiAodW5zY29yZWQpIC0gaGlnaGVyIGZpcnN0LiAqL1xuICBzb3J0OiBudW1iZXI7XG4gIC8qKiBTY29yZWQgZW5kcG9pbnRzIHJhbmsgYWhlYWQgb2YgZmFtaWx5LW9ubHkgZ3Vlc3Nlcy4gKi9cbiAgc2NvcmVkOiBib29sZWFuO1xuICB0aWVDb3N0OiBudW1iZXI7XG4gIHRpZVNwZWVkOiBudW1iZXI7XG4gIC8qKiBQYXJzZWQgbmFtZSB2ZXJzaW9uLCB0aGUgZmluYWwgdGllLWJyZWFrZXIgKG5ld2VyIHNpYmxpbmcgZmlyc3QpLiAqL1xuICB2ZXJzaW9uOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuZnVuY3Rpb24gcmFua09yZGVyKGE6IFJhbmtlZCwgYjogUmFua2VkKTogbnVtYmVyIHtcbiAgaWYgKGEuc2NvcmVkICE9PSBiLnNjb3JlZCkgcmV0dXJuIGEuc2NvcmVkID8gLTEgOiAxO1xuICBpZiAoYi5zb3J0ICE9PSBhLnNvcnQpIHJldHVybiBiLnNvcnQgLSBhLnNvcnQ7XG4gIGlmIChhLnRpZUNvc3QgIT09IGIudGllQ29zdCkgcmV0dXJuIGEudGllQ29zdCAtIGIudGllQ29zdDtcbiAgaWYgKGIudGllU3BlZWQgIT09IGEudGllU3BlZWQpIHJldHVybiBiLnRpZVNwZWVkIC0gYS50aWVTcGVlZDtcbiAgLy8gU2FtZSBzY29yZWQtbmVzcywgcXVhbGl0eSwgY29zdCwgYW5kIHNwZWVkIChlLmcuIHNldmVyYWwgQ2xhdWRlXG4gIC8vIE9wdXMgcG9pbnQgcmVsZWFzZXMpOiBwcmVmZXIgdGhlIG5ld2VyIHBhcnNlZCB2ZXJzaW9uIHNvXG4gIC8vIGBvcHVzLTQtOGAgYmVhdHMgYG9wdXMtNC03YC5cbiAgcmV0dXJuIGNvbXBhcmVWZXJzaW9uRGVzYyhhLnZlcnNpb24sIGIudmVyc2lvbik7XG59XG5cbi8qKlxuICogQnVja2V0IGxpdmUgZW5kcG9pbnRzIGludG8ge0BsaW5rIE1vZGVsQ2xhc3N9ZXMsIHJhbmtlZCBiZXN0LWZpcnN0XG4gKiB3aXRoaW4gZWFjaCBjaGF0IGJhbmQuXG4gKlxuICogRW1iZWRkaW5nIGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcImApIGdvIGludG9cbiAqIHtAbGluayBNb2RlbENsYXNzLkVtYmVkZGluZ30gYnkgdGFzaywgaW4gbGlzdGluZyBvcmRlciAodGhleSBjYXJyeSBub1xuICogY2FwYWJpbGl0eSBzY29yZSB0byByYW5rIG9uKS5cbiAqXG4gKiBDaGF0IGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2NoYXRcImApIHNwbGl0IGludG8gdGhlIHRocmVlIGNoYXRcbiAqIGJhbmRzLiBTY29yZWQgZW5kcG9pbnRzICh0aG9zZSBjYXJyeWluZyBhIGBwcm9maWxlLnF1YWxpdHlgKSBkcml2ZVxuICogdGhlIGJhbmRpbmc6IHRoZSBvYnNlcnZlZCBxdWFsaXR5IGRpc3RyaWJ1dGlvbiBpcyBzcGxpdCBhdCBpdHMgMS8zXG4gKiBhbmQgMi8zIHF1YW50aWxlcywgc28gdGhlIHRvcCB0aGlyZCBpcyB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmd9LFxuICogdGhlIGJvdHRvbSB0aGlyZCB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0RmFzdH0sIGFuZCB0aGUgbWlkZGxlXG4gKiB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWR9LiBCZWNhdXNlIHRoZSB0aHJlc2hvbGRzIGNvbWUgZnJvbSB0aGVcbiAqIGRhdGEsIHRoZSBzcGxpdCBhZGFwdHMgYXMgRGF0YWJyaWNrcyBhZGRzIG9yIHJlc2NvcmVzIG1vZGVscyAtXG4gKiBub3RoaW5nIGlzIHBpbm5lZCB0byBhIGZpeGVkIHNjb3JlIGJhbmQuXG4gKlxuICogVW5zY29yZWQgY2hhdCBlbmRwb2ludHMgYXJlIHBsYWNlZCBieSB7QGxpbmsgY2xhc3NpZnlCeUZhbWlseX0gYW5kXG4gKiByYW5rZWQgYWZ0ZXIgdGhlIHNjb3JlZCBvbmVzIGluIHRoZWlyIGJhbmQ7IHVucmVjb2duaXplZCwgdW5zY29yZWRcbiAqIGVuZHBvaW50cyAoZS5nLiBjdXN0b20gZXh0ZXJuYWwgbW9kZWxzKSBhcmUgb21pdHRlZCBlbnRpcmVseSBzbyB0aGV5XG4gKiBhcmUgbmV2ZXIgcGlja2VkIGFzIGFuIGF1dG9tYXRpYyBkZWZhdWx0LlxuICpcbiAqIFdpdGhpbiBhIGNoYXQgYmFuZCwgc2NvcmVkIG1vZGVscyBzb3J0IGJ5IGBxdWFsaXR5YCBkZXNjLCB0aGVuIGBjb3N0YFxuICogYXNjLCB0aGVuIGBzcGVlZGAgZGVzYywgdGhlbiBwYXJzZWQgbmFtZSB2ZXJzaW9uIGRlc2M7IGZhbWlseS1vbmx5XG4gKiBtb2RlbHMgc29ydCBieSB2ZXJzaW9uIHJhbmsgdGhlbiBwYXJzZWQgdmVyc2lvbi4gVGhlIHZlcnNpb25cbiAqIHRpZS1icmVhayAoe0BsaW5rIHZlcnNpb25UdXBsZX0pIGlzIHdoYXQgc2VwYXJhdGVzIHBvaW50IHJlbGVhc2VzXG4gKiB0aGF0IHNoYXJlIGEgc2NvcmUgcHJvZmlsZSAoZS5nLiBgb3B1cy00LThgIGFoZWFkIG9mIGBvcHVzLTQtN2ApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlFbmRwb2ludHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuKTogUmVjb3JkPE1vZGVsQ2xhc3MsIFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT4ge1xuICBjb25zdCBjaGF0ID0gZW5kcG9pbnRzLmZpbHRlcigoZSkgPT4gZS50YXNrID09PSBDSEFUX1RBU0spO1xuICBjb25zdCBxdWFsaXRpZXMgPSBjaGF0XG4gICAgLm1hcCgoZSkgPT4gZS5wcm9maWxlPy5xdWFsaXR5KVxuICAgIC5maWx0ZXIoKHEpOiBxIGlzIG51bWJlciA9PiBOdW1iZXIuaXNGaW5pdGUocSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgY29uc3QgbG93ID0gcXVhbnRpbGUocXVhbGl0aWVzLCAxIC8gMyk7XG4gIGNvbnN0IGhpZ2ggPSBxdWFudGlsZShxdWFsaXRpZXMsIDIgLyAzKTtcblxuICBjb25zdCBidWNrZXRzOiBSZWNvcmQ8TW9kZWxDbGFzcywgUmFua2VkW10+ID0ge1xuICAgIFtNb2RlbENsYXNzLkNoYXRUaGlua2luZ106IFtdLFxuICAgIFtNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF06IFtdLFxuICAgIFtNb2RlbENsYXNzLkNoYXRGYXN0XTogW10sXG4gICAgW01vZGVsQ2xhc3MuRW1iZWRkaW5nXTogW10sXG4gIH07XG5cbiAgZm9yIChjb25zdCBlcCBvZiBjaGF0KSB7XG4gICAgY29uc3QgcSA9IGVwLnByb2ZpbGU/LnF1YWxpdHk7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShxKSkge1xuICAgICAgY29uc3QgcXVhbGl0eSA9IHEgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgY2xzID1cbiAgICAgICAgcXVhbGl0eSA+PSBoaWdoXG4gICAgICAgICAgPyBNb2RlbENsYXNzLkNoYXRUaGlua2luZ1xuICAgICAgICAgIDogcXVhbGl0eSA8PSBsb3dcbiAgICAgICAgICAgID8gTW9kZWxDbGFzcy5DaGF0RmFzdFxuICAgICAgICAgICAgOiBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZDtcbiAgICAgIGJ1Y2tldHNbY2xzXS5wdXNoKHtcbiAgICAgICAgZXAsXG4gICAgICAgIHNvcnQ6IHF1YWxpdHksXG4gICAgICAgIHNjb3JlZDogdHJ1ZSxcbiAgICAgICAgdGllQ29zdDogZXAucHJvZmlsZT8uY29zdCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgICAgIHRpZVNwZWVkOiBlcC5wcm9maWxlPy5zcGVlZCA/PyAwLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uVHVwbGUoZXAubmFtZSksXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmYW1pbHkgPSBjbGFzc2lmeUJ5RmFtaWx5KGVwLm5hbWUpO1xuICAgIGlmICghZmFtaWx5KSBjb250aW51ZTtcbiAgICBidWNrZXRzW2ZhbWlseS5jbGFzc10ucHVzaCh7XG4gICAgICBlcCxcbiAgICAgIHNvcnQ6IGZhbWlseS5yYW5rLFxuICAgICAgc2NvcmVkOiBmYWxzZSxcbiAgICAgIHRpZUNvc3Q6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgIHRpZVNwZWVkOiAwLFxuICAgICAgdmVyc2lvbjogdmVyc2lvblR1cGxlKGVwLm5hbWUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gRW1iZWRkaW5ncyBhcmUgYnVja2V0ZWQgYnkgdGFzayBpbiBsaXN0aW5nIG9yZGVyIC0gbm8gc2NvcmUgdG8gcmFuay5cbiAgY29uc3QgZW1iZWRkaW5ncyA9IGVuZHBvaW50cy5maWx0ZXIoKGUpID0+IGUudGFzayA9PT0gRU1CRURESU5HX1RBU0spO1xuXG4gIHJldHVybiB7XG4gICAgW01vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXTogYnVja2V0c1tNb2RlbENsYXNzLkNoYXRUaGlua2luZ10uc29ydChyYW5rT3JkZXIpLm1hcCgoeCkgPT4geC5lcCksXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogYnVja2V0c1tNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF0uc29ydChyYW5rT3JkZXIpLm1hcCgoeCkgPT4geC5lcCksXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEZhc3RdOiBidWNrZXRzW01vZGVsQ2xhc3MuQ2hhdEZhc3RdLnNvcnQocmFua09yZGVyKS5tYXAoKHgpID0+IHguZXApLFxuICAgIFtNb2RlbENsYXNzLkVtYmVkZGluZ106IGVtYmVkZGluZ3MsXG4gIH07XG59XG4iXX0=
|
|
282
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xhc3NpZnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBK0IsTUFBTSxZQUFZLENBQUM7QUFFckUsZ0VBQWdFO0FBQ2hFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUVoQywwREFBMEQ7QUFDMUQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUM7QUFZM0M7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQVk7SUFDaEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hFLE9BQU8sQ0FDTCxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNwQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUNwQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxRQUFnQztJQUNuRSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDOUYsOEVBQThFO0lBQzlFLDhDQUE4QztJQUM5QyxNQUFNLElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJ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QUFDLEVBQUUsQ0FBQztRQUM1RixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUYsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BGLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVU7S0FDbkMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZGVsLWNsYXNzIGNsYXNzaWZpY2F0aW9uIGZvciBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnRzLlxuICpcbiAqIENoYXQgY2FwYWJpbGl0eSBiYW5kcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBsaXZlIHdvcmtzcGFjZSBjYXRhbG9ndWVcbiAqIHJhdGhlciB0aGFuIGEgaGFuZC1tYWludGFpbmVkIHRhYmxlLiBEYXRhYnJpY2tzIHB1Ymxpc2hlc1xuICogcGVyLWVuZHBvaW50IGBxdWFsaXR5YCAvIGBzcGVlZGAgLyBgY29zdGAgc2NvcmVzICh0aGUgQUkgUGxheWdyb3VuZFxuICogYmFycykgb24gdGhlIHNlcnZpbmcgbGlzdDsge0BsaW5rIGNsYXNzaWZ5RW5kcG9pbnRzfSBidWNrZXRzIHNjb3JlZFxuICogY2hhdCBtb2RlbHMgaW50byB0aGUgY2hhdCB7QGxpbmsgTW9kZWxDbGFzc30gYmFuZHMgYnkgdGhlICpyZWxhdGl2ZSpcbiAqIGRpc3RyaWJ1dGlvbiBvZiB0aG9zZSBzY29yZXMgKHF1YW50aWxlcywgbm90IGZpeGVkIGN1dC1vZmZzKSBzbyBhXG4gKiBicmFuZC1uZXcgbW9kZWwgdGhhdCBsYW5kcyBvdXRzaWRlIHRvZGF5J3Mgc2NvcmUgcmFuZ2Ugc3RpbGwgc2xvdHMgaW5cbiAqIG5leHQgdG8gaXRzIHBlZXJzLiBFbWJlZGRpbmcgZW5kcG9pbnRzIChgdGFzayA9PT0gXCJsbG0vdjEvZW1iZWRkaW5nc1wiYClcbiAqIGFyZSBidWNrZXRlZCBpbnRvIHtAbGluayBNb2RlbENsYXNzLkVtYmVkZGluZ30gYnkgdGFzaywgaW5kZXBlbmRlbnQgb2ZcbiAqIGFueSBzY29yZS5cbiAqXG4gKiBVbnNjb3JlZC1idXQtcmVjb2duaXphYmxlIGNoYXQgZW5kcG9pbnRzIGFyZSBzdGlsbCBwbGFjZWQgYnkgYSBzbWFsbFxuICogZmFtaWx5IGhldXJpc3RpYyAoe0BsaW5rIGNsYXNzaWZ5QnlGYW1pbHl9KSBzbyBhIHdvcmtzcGFjZSB3aG9zZVxuICogbW9kZWxzIHByZWRhdGUgRm91bmRhdGlvbiBNb2RlbCBBUEkgc2NvcmluZyBrZWVwcyB3b3JraW5nLiBUaGVcbiAqIG9mZmxpbmUgZmFsbGJhY2sgZmxvb3IgLSB0aGUgaGFyZC1jb2RlZCBtb2RlbCBsaXN0IHJlYWNoZWQgZm9yIHdoZW5cbiAqIHRoZSBsaXZlIGNhdGFsb2d1ZSBjYW4ndCBiZSByZWFkIGF0IGFsbCAtIGlzIGEgc2VydmVyIGNvbmNlcm4gYW5kXG4gKiBsaXZlcyBpbiBgQGRieC10b29scy9tb2RlbGAsIG5vdCBoZXJlOiBhIGJyb3dzZXIgY2xpZW50IG5ldmVyIHRhbGtzXG4gKiB0byBEYXRhYnJpY2tzIGRpcmVjdGx5LCBzbyBpdCBoYXMgbm90aGluZyB0byBmYWxsIGJhY2sgdG8uXG4gKlxuICogUHVyZSAobm8gTm9kZS1vbmx5IGltcG9ydHMpLCBzbyBhIGNsaWVudCBjYW4gY2xhc3NpZnkgYSBgL21vZGVsc2BcbiAqIHJlc3BvbnNlIHdpdGhvdXQgc2VydmVyIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgTW9kZWxDbGFzcywgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IH0gZnJvbSBcIi4vbW9kZWwudHNcIjtcblxuLyoqIFRhc2sgaGludCBEYXRhYnJpY2tzIHN0YW1wcyBvbiBjaGF0IGNvbXBsZXRpb24gZW5kcG9pbnRzLiAqL1xuY29uc3QgQ0hBVF9UQVNLID0gXCJsbG0vdjEvY2hhdFwiO1xuXG4vKiogVGFzayBoaW50IERhdGFicmlja3Mgc3RhbXBzIG9uIGVtYmVkZGluZyBlbmRwb2ludHMuICovXG5jb25zdCBFTUJFRERJTkdfVEFTSyA9IFwibGxtL3YxL2VtYmVkZGluZ3NcIjtcblxuLyoqIFdoYXQgYW4gZW5kcG9pbnQgY2FuIGJlIGFza2VkIHRvIGRvLCBhcyBkZXJpdmVkIGJ5IHtAbGluayBlbmRwb2ludENhcGFiaWxpdGllc30uICovXG5leHBvcnQgaW50ZXJmYWNlIEVuZHBvaW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqIE9wZW5BSSBjaGF0L2NvbXBsZXRpb25zICsgUmVzcG9uc2VzOiB0aGUgc3VyZmFjZSBhIGNoYXQgYWdlbnQgbmVlZHMuICovXG4gIGNoYXQ6IGJvb2xlYW47XG4gIC8qKiBFbWJlZGRpbmcgKHZlY3RvcikgZW5kcG9pbnQuICovXG4gIGVtYmVkZGluZzogYm9vbGVhbjtcbiAgLyoqIENvbXBsZXRlIGZ1bmN0aW9uLXRvb2wgcm91bmQtdHJpcCAoY2FsbCBwbHVzIGZ1bmN0aW9uX2NhbGxfb3V0cHV0IHJlcGxheSkuICovXG4gIHRvb2xzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGZhbWlsaWVzIHZlcmlmaWVkIGFnYWluc3QgRGF0YWJyaWNrcyBSZXNwb25zZXMvT3BlbiBSZXNwb25zZXMgd2l0aFxuICogYm90aCBhIGZvcmNlZCBmdW5jdGlvbiBjYWxsIGFuZCBhIHN0YXRlbGVzcyBgZnVuY3Rpb25fY2FsbF9vdXRwdXRgIHJlcGxheS5cbiAqXG4gKiBEYXRhYnJpY2tzJyBlbmRwb2ludCBsaXN0L09wZW5BUEkgY3VycmVudGx5IGV4cG9zZXMgbm8gdG9vbHMgY2FwYWJpbGl0eSBiaXQuXG4gKiBLZWVwIHRoaXMgY29uc2VydmF0aXZlOiBhbiB1bmtub3duIGNoYXQgZmFtaWx5IGlzIG5vdCBhZ2VudC1zYWZlIHVudGlsIGl0IGlzXG4gKiB2ZXJpZmllZC4gR2VtaW5pIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgZW1pdHMgYSBjYWxsIGJ1dCBPcGVuIFJlc3BvbnNlc1xuICogY2Fubm90IHJlcGxheSB0aGUgcmVxdWlyZWQgdGhvdWdodCBzaWduYXR1cmU7IEdQVC1PU1MgcmVqZWN0cyBSZXNwb25zZXNcbiAqIHBhc3N0aHJvdWdoIGVudGlyZWx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNUb29sc0J5RmFtaWx5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAobi5pbmNsdWRlcyhcImdlbWluaVwiKSB8fCBuLmluY2x1ZGVzKFwiZ3B0LW9zc1wiKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKFxuICAgIG4uaW5jbHVkZXMoXCJjbGF1ZGVcIikgfHxcbiAgICBuLmluY2x1ZGVzKFwiZ3B0XCIpIHx8XG4gICAgbi5pbmNsdWRlcyhcInF3ZW5cIikgfHxcbiAgICBuLmluY2x1ZGVzKFwiZ2xtXCIpIHx8XG4gICAgbi5pbmNsdWRlcyhcImxsYW1hXCIpXG4gICk7XG59XG5cbi8qKlxuICogRGVyaXZlIGFuIGVuZHBvaW50J3MgY2FwYWJpbGl0aWVzIGZyb20gaXRzIERhdGFicmlja3MgdGFzayBoaW50IGFuZCBpdHNcbiAqIGNsYXNzaWZpZWQge0BsaW5rIE1vZGVsQ2xhc3N9LCBzbyBjb25zdW1lcnMgZmlsdGVyIG9uIGNhcGFiaWxpdHkgaW5zdGVhZCBvZlxuICogcmUtZGVyaXZpbmcgaXQgZnJvbSByYXcgYHRhc2tgIC8gYGNsYXNzYCBzdHJpbmdzLlxuICpcbiAqIEVpdGhlciBzaWduYWwgYWxvbmUgaXMgZW5vdWdoOiB0aGUgdGFzayBoaW50IGlzIGF1dGhvcml0YXRpdmUgd2hlbiBwcmVzZW50LFxuICogYW5kIHRoZSBjbGFzcyBjb3ZlcnMgZW5kcG9pbnRzIERhdGFicmlja3MgbGVmdCB1bnRhc2tlZCBidXQgdGhlIGNsYXNzaWZpZXJcbiAqIHJlY29nbml6ZWQuIEVtYmVkZGluZyB3aW5zIG92ZXIgY2hhdCB3aGVuIGJvdGggcG9pbnQgYXQgaXQsIHNpbmNlIHRoZSB0d28gYXJlXG4gKiBub3QgaW50ZXJjaGFuZ2VhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBFbmRwb2ludENhcGFiaWxpdGllcyB7XG4gIGNvbnN0IGVtYmVkZGluZyA9IGVuZHBvaW50LnRhc2sgPT09IEVNQkVERElOR19UQVNLIHx8IGVuZHBvaW50LmNsYXNzID09PSBNb2RlbENsYXNzLkVtYmVkZGluZztcbiAgLy8gRXZlcnkgbm9uLWVtYmVkZGluZyBjbGFzcyBpcyBhIGNoYXQgYmFuZCwgc28gXCJjbGFzc2lmaWVkIGJ1dCBub3QgZW1iZWRkaW5nXCJcbiAgLy8gaXMgdGhlIGNsYXNzLXNpZGUgdGVzdCBmb3IgY2hhdCBjYXBhYmlsaXR5LlxuICBjb25zdCBjaGF0ID0gIWVtYmVkZGluZyAmJiAoZW5kcG9pbnQudGFzayA9PT0gQ0hBVF9UQVNLIHx8IGVuZHBvaW50LmNsYXNzICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCB0b29scyA9IGNoYXQgJiYgKGVuZHBvaW50LnN1cHBvcnRzVG9vbHMgPz8gc3VwcG9ydHNUb29sc0J5RmFtaWx5KGVuZHBvaW50Lm5hbWUpKTtcbiAgcmV0dXJuIHsgY2hhdCwgZW1iZWRkaW5nLCB0b29scyB9O1xufVxuXG4vKiogRmFtaWx5LWhldXJpc3RpYyBjbGFzc2lmaWNhdGlvbiBvZiBhIHNpbmdsZSBlbmRwb2ludCBuYW1lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlDbGFzcyB7XG4gIC8qKiBDaGF0IGNhcGFiaWxpdHkgYmFuZCB0aGUgZmFtaWx5IG1hcHMgdG8gKG5ldmVyIGVtYmVkZGluZykuICovXG4gIGNsYXNzOiBNb2RlbENsYXNzO1xuICAvKiogSW50cmEtZmFtaWx5IG9yZGVyaW5nIGhpbnQgKGhpZ2hlciBpcyBuZXdlciAvIG1vcmUgY2FwYWJsZSkuICovXG4gIHJhbms6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBOdW1lcmljIGBbbWFqb3IsIG1pbm9yLCBwYXRjaF1gIHZlcnNpb24gcGFyc2VkIGZyb20gYW4gZW5kcG9pbnRcbiAqIG5hbWUsIHVzZWQgdG8gb3JkZXIgc2libGluZ3Mgd2l0aGluIGEgZmFtaWx5L3RpZXIuIFN0YXJ0cyBhdCB0aGVcbiAqIGZpcnN0IGRpZ2l0IGluIHRoZSBuYW1lLCB0aGVuIHJlYWRzIHN1Y2Nlc3NpdmUgc2VwYXJhdG9yLWRlbGltaXRlZCxcbiAqIGRpZ2l0LXByZWZpeGVkIGNodW5rcyBhcyB0aGUgdGhyZWUgY29tcG9uZW50cyAobWlzc2luZyBvbmVzIGRlZmF1bHRcbiAqIHRvIGAwYCk6XG4gKlxuICogICAtIGBkYXRhYnJpY2tzLWNsYXVkZS1vcHVzLTQtOGAgICAtPiBgWzQsIDgsIDBdYFxuICogICAtIGBkYXRhYnJpY2tzLWNsYXVkZS1vcHVzLTQtMTBgICAtPiBgWzQsIDEwLCAwXWAgKHNvcnRzIGFib3ZlIDQtOClcbiAqICAgLSBgZGF0YWJyaWNrcy1tZXRhLWxsYW1hLTMtMy03MGJgLT4gYFszLCAzLCA3MF1gXG4gKiAgIC0gYGRhdGFicmlja3MtYmdlLWxhcmdlLWVuYCAgICAgIC0+IGBbMCwgMCwgMF1gIChubyBkaWdpdHMpXG4gKlxuICogQ29tcG9uZW50LXdpc2UgY29tcGFyaXNvbiAobm90IGEgZGVjaW1hbCBjb2xsYXBzZSkgc28gYDQuMTBgIGJlYXRzXG4gKiBgNC44YCAtIHRoZSBidWcgYSBgbWFqb3IgKyBtaW5vci8xMGAgc2NvcmUgd291bGQgaGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvblR1cGxlKG5hbWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHN0YXJ0ID0gbmFtZS5zZWFyY2goL1xcZC8pO1xuICBpZiAoc3RhcnQgPCAwKSByZXR1cm4gWzAsIDAsIDBdO1xuICBjb25zdCBudW1zID0gbmFtZVxuICAgIC5zbGljZShzdGFydClcbiAgICAuc3BsaXQoL1teYS16MC05XSsvaSlcbiAgICAubWFwKChjaHVuaykgPT4gY2h1bmsubWF0Y2goL15cXGQrLyk/LlswXSlcbiAgICAuZmlsdGVyKChkaWdpdHMpOiBkaWdpdHMgaXMgc3RyaW5nID0+IGRpZ2l0cyAhPT0gdW5kZWZpbmVkKVxuICAgIC5tYXAoTnVtYmVyKTtcbiAgcmV0dXJuIFtudW1zWzBdID8/IDAsIG51bXNbMV0gPz8gMCwgbnVtc1syXSA/PyAwXTtcbn1cblxuLyoqIENvbXBhcmUgdHdvIHZlcnNpb24gdHVwbGVzIHNvIHRoZSBoaWdoZXIgdmVyc2lvbiBzb3J0cyBmaXJzdCAoZGVzY2VuZGluZykuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbkRlc2MoYTogcmVhZG9ubHkgbnVtYmVyW10sIGI6IHJlYWRvbmx5IG51bWJlcltdKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBjb25zdCBkaWZmID0gKGJbaV0gPz8gMCkgLSAoYVtpXSA/PyAwKTtcbiAgICBpZiAoZGlmZiAhPT0gMCkgcmV0dXJuIGRpZmY7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8qKlxuICogTW9ub3RvbmljIHZlcnNpb24ga2V5IGZvciBvcmRlcmluZyBzaWJsaW5ncyB3aXRoaW4gYSBmYW1pbHkvdGllclxuICogKGUuZy4gYG9wdXMtNC04YCBvdmVyIGBvcHVzLTQtN2ApLiBFbmNvZGVzIHRoZSB7QGxpbmsgdmVyc2lvblR1cGxlfVxuICogYXMgYSBzaW5nbGUgbnVtYmVyIHNvIGNhbGxlcnMgdGhhdCBuZWVkIGEgc2NhbGFyIHJhbmsgKHRoZSBmYW1pbHlcbiAqIGhldXJpc3RpYywgdGhlIHN0YXRpYyBmYWxsYmFjayBvcmRlcmluZykga2VlcCB3b3JraW5nOyB0aGUgZW5jb2RpbmdcbiAqIHByZXNlcnZlcyBjb21wb25lbnQgb3JkZXIgd2l0aG91dCB0aGUgZGVjaW1hbC1jb2xsYXBzZSBidWcuXG4gKi9cbmZ1bmN0aW9uIHZlcnNpb25TY29yZShuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSB2ZXJzaW9uVHVwbGUobmFtZSk7XG4gIHJldHVybiBtYWpvciAqIDFfMDAwXzAwMCArIG1pbm9yICogMV8wMDAgKyBwYXRjaDtcbn1cblxuLyoqXG4gKiBCZXN0LWVmZm9ydCBjaGF0IGNhcGFiaWxpdHkgYmFuZCBmb3IgYW4gZW5kcG9pbnQgd2UgaGF2ZSBubyBsaXZlXG4gKiBzY29yZSBmb3IsIGtleWVkIG9mZiBwcm92aWRlciBmYW1pbHkgYW5kIHRoZSB3ZWxsLWtub3duIHZhcmlhbnQgd29yZHNcbiAqIGluIHRoZSBuYW1lIChgb3B1c2AvYHNvbm5ldGAvYGhhaWt1YCwgYHByb2AvYG1pbmlgL2BuYW5vYCxcbiAqIGBmbGFzaGAvYGZsYXNoLWxpdGVgLCBMbGFtYSBwYXJhbWV0ZXIgc2l6ZXMsIGV0YykuIFJldHVybnMgYG51bGxgIGZvclxuICogbmFtZXMgd2UgZG9uJ3QgcmVjb2duaXplIHNvIHVua25vd24gY3VzdG9tIGVuZHBvaW50cyBhcmUgbmV2ZXJcbiAqIGF1dG8tc2VsZWN0ZWQgYXMgYSBkZWZhdWx0LiBUaGUgYWNjb21wYW55aW5nIGByYW5rYCBvcmRlcnMgc2libGluZ3NcbiAqIHdpdGhpbiBhIGNsYXNzLiBPbmx5IGV2ZXIgcmV0dXJucyBhIGNoYXQgYmFuZCAtIGVtYmVkZGluZyBlbmRwb2ludHNcbiAqIGFyZSBjbGFzc2lmaWVkIGJ5IHRhc2ssIG5vdCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlCeUZhbWlseShuYW1lOiBzdHJpbmcpOiBGYW1pbHlDbGFzcyB8IG51bGwge1xuICBjb25zdCBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBhdCA9IChjbHM6IE1vZGVsQ2xhc3MpOiBGYW1pbHlDbGFzcyA9PiAoeyBjbGFzczogY2xzLCByYW5rOiB2ZXJzaW9uU2NvcmUobikgfSk7XG5cbiAgLy8gQW50aHJvcGljIENsYXVkZVxuICBpZiAobi5pbmNsdWRlcyhcIm9wdXNcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gIGlmIChuLmluY2x1ZGVzKFwic29ubmV0XCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQpO1xuICBpZiAobi5pbmNsdWRlcyhcImhhaWt1XCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0RmFzdCk7XG5cbiAgLy8gT3BlbkFJIG9wZW4td2VpZ2h0cyAoY2hlY2sgYmVmb3JlIHRoZSBnZW5lcmljIGdwdCBicmFuY2gpXG4gIGlmIChuLmluY2x1ZGVzKFwiZ3B0LW9zc1wiKSkge1xuICAgIHJldHVybiBhdChuLmluY2x1ZGVzKFwiMTIwYlwiKSA/IE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkIDogTW9kZWxDbGFzcy5DaGF0RmFzdCk7XG4gIH1cbiAgLy8gT3BlbkFJIEdQVCBmYW1pbHlcbiAgaWYgKG4uaW5jbHVkZXMoXCJncHRcIikpIHtcbiAgICBpZiAobi5pbmNsdWRlcyhcInByb1wiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nKTtcbiAgICBpZiAobi5pbmNsdWRlcyhcIm1pbmlcIikgfHwgbi5pbmNsdWRlcyhcIm5hbm9cIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRGYXN0KTtcbiAgICByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQpO1xuICB9XG5cbiAgLy8gR29vZ2xlIEdlbWluaSAvIEdlbW1hXG4gIGlmIChuLmluY2x1ZGVzKFwiZ2VtaW5pXCIpKSB7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJmbGFzaC1saXRlXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0RmFzdCk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJwcm9cIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gICAgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgfVxuICBpZiAobi5pbmNsdWRlcyhcImdlbW1hXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0RmFzdCk7XG5cbiAgLy8gTWV0YSBMbGFtYVxuICBpZiAobi5pbmNsdWRlcyhcImxsYW1hXCIpKSB7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJtYXZlcmlja1wiKSB8fCBuLmluY2x1ZGVzKFwiNDA1YlwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nKTtcbiAgICBpZiAobi5pbmNsdWRlcyhcIjcwYlwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgICBpZiAobi5pbmNsdWRlcyhcIjhiXCIpIHx8IG4uaW5jbHVkZXMoXCIxYlwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuICAgIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCk7XG4gIH1cblxuICAvLyBBbGliYWJhIFF3ZW5cbiAgaWYgKG4uaW5jbHVkZXMoXCJxd2VuXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQpO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogTGluZWFyLWludGVycG9sYXRlZCBxdWFudGlsZSBvZiBhbiBhc2NlbmRpbmctc29ydGVkIG51bWVyaWMgYXJyYXkuICovXG5mdW5jdGlvbiBxdWFudGlsZShzb3J0ZWRBc2M6IHJlYWRvbmx5IG51bWJlcltdLCBwOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoc29ydGVkQXNjLmxlbmd0aCA9PT0gMCkgcmV0dXJuIE51bWJlci5OYU47XG4gIGNvbnN0IGlkeCA9IChzb3J0ZWRBc2MubGVuZ3RoIC0gMSkgKiBwO1xuICBjb25zdCBsbyA9IE1hdGguZmxvb3IoaWR4KTtcbiAgY29uc3QgaGkgPSBNYXRoLmNlaWwoaWR4KTtcbiAgaWYgKGxvID09PSBoaSkgcmV0dXJuIHNvcnRlZEFzY1tsb10hO1xuICByZXR1cm4gc29ydGVkQXNjW2xvXSEgKyAoc29ydGVkQXNjW2hpXSEgLSBzb3J0ZWRBc2NbbG9dISkgKiAoaWR4IC0gbG8pO1xufVxuXG4vKiogSW50ZXJuYWwgc29ydGFibGUgd3JhcHBlciBjYXJyeWluZyB0aGUgb3JkZXJpbmcga2V5cyBmb3IgYSBidWNrZXQgZW50cnkuICovXG5pbnRlcmZhY2UgUmFua2VkIHtcbiAgZXA6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnk7XG4gIC8qKiBRdWFsaXR5IChzY29yZWQpIG9yIGZhbWlseSB2ZXJzaW9uICh1bnNjb3JlZCkgLSBoaWdoZXIgZmlyc3QuICovXG4gIHNvcnQ6IG51bWJlcjtcbiAgLyoqIFNjb3JlZCBlbmRwb2ludHMgcmFuayBhaGVhZCBvZiBmYW1pbHktb25seSBndWVzc2VzLiAqL1xuICBzY29yZWQ6IGJvb2xlYW47XG4gIHRpZUNvc3Q6IG51bWJlcjtcbiAgdGllU3BlZWQ6IG51bWJlcjtcbiAgLyoqIFBhcnNlZCBuYW1lIHZlcnNpb24sIHRoZSBmaW5hbCB0aWUtYnJlYWtlciAobmV3ZXIgc2libGluZyBmaXJzdCkuICovXG4gIHZlcnNpb246IHJlYWRvbmx5IG51bWJlcltdO1xufVxuXG5mdW5jdGlvbiByYW5rT3JkZXIoYTogUmFua2VkLCBiOiBSYW5rZWQpOiBudW1iZXIge1xuICBpZiAoYS5zY29yZWQgIT09IGIuc2NvcmVkKSByZXR1cm4gYS5zY29yZWQgPyAtMSA6IDE7XG4gIGlmIChiLnNvcnQgIT09IGEuc29ydCkgcmV0dXJuIGIuc29ydCAtIGEuc29ydDtcbiAgaWYgKGEudGllQ29zdCAhPT0gYi50aWVDb3N0KSByZXR1cm4gYS50aWVDb3N0IC0gYi50aWVDb3N0O1xuICBpZiAoYi50aWVTcGVlZCAhPT0gYS50aWVTcGVlZCkgcmV0dXJuIGIudGllU3BlZWQgLSBhLnRpZVNwZWVkO1xuICAvLyBTYW1lIHNjb3JlZC1uZXNzLCBxdWFsaXR5LCBjb3N0LCBhbmQgc3BlZWQgKGUuZy4gc2V2ZXJhbCBDbGF1ZGVcbiAgLy8gT3B1cyBwb2ludCByZWxlYXNlcyk6IHByZWZlciB0aGUgbmV3ZXIgcGFyc2VkIHZlcnNpb24gc29cbiAgLy8gYG9wdXMtNC04YCBiZWF0cyBgb3B1cy00LTdgLlxuICByZXR1cm4gY29tcGFyZVZlcnNpb25EZXNjKGEudmVyc2lvbiwgYi52ZXJzaW9uKTtcbn1cblxuLyoqXG4gKiBCdWNrZXQgbGl2ZSBlbmRwb2ludHMgaW50byB7QGxpbmsgTW9kZWxDbGFzc31lcywgcmFua2VkIGJlc3QtZmlyc3RcbiAqIHdpdGhpbiBlYWNoIGNoYXQgYmFuZC5cbiAqXG4gKiBFbWJlZGRpbmcgZW5kcG9pbnRzIChgdGFzayA9PT0gXCJsbG0vdjEvZW1iZWRkaW5nc1wiYCkgZ28gaW50b1xuICoge0BsaW5rIE1vZGVsQ2xhc3MuRW1iZWRkaW5nfSBieSB0YXNrLCBpbiBsaXN0aW5nIG9yZGVyICh0aGV5IGNhcnJ5IG5vXG4gKiBjYXBhYmlsaXR5IHNjb3JlIHRvIHJhbmsgb24pLlxuICpcbiAqIENoYXQgZW5kcG9pbnRzIChgdGFzayA9PT0gXCJsbG0vdjEvY2hhdFwiYCkgc3BsaXQgaW50byB0aGUgdGhyZWUgY2hhdFxuICogYmFuZHMuIFNjb3JlZCBlbmRwb2ludHMgKHRob3NlIGNhcnJ5aW5nIGEgYHByb2ZpbGUucXVhbGl0eWApIGRyaXZlXG4gKiB0aGUgYmFuZGluZzogdGhlIG9ic2VydmVkIHF1YWxpdHkgZGlzdHJpYnV0aW9uIGlzIHNwbGl0IGF0IGl0cyAxLzNcbiAqIGFuZCAyLzMgcXVhbnRpbGVzLCBzbyB0aGUgdG9wIHRoaXJkIGlzIHtAbGluayBNb2RlbENsYXNzLkNoYXRUaGlua2luZ30sXG4gKiB0aGUgYm90dG9tIHRoaXJkIHtAbGluayBNb2RlbENsYXNzLkNoYXRGYXN0fSwgYW5kIHRoZSBtaWRkbGVcbiAqIHtAbGluayBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZH0uIEJlY2F1c2UgdGhlIHRocmVzaG9sZHMgY29tZSBmcm9tIHRoZVxuICogZGF0YSwgdGhlIHNwbGl0IGFkYXB0cyBhcyBEYXRhYnJpY2tzIGFkZHMgb3IgcmVzY29yZXMgbW9kZWxzIC1cbiAqIG5vdGhpbmcgaXMgcGlubmVkIHRvIGEgZml4ZWQgc2NvcmUgYmFuZC5cbiAqXG4gKiBVbnNjb3JlZCBjaGF0IGVuZHBvaW50cyBhcmUgcGxhY2VkIGJ5IHtAbGluayBjbGFzc2lmeUJ5RmFtaWx5fSBhbmRcbiAqIHJhbmtlZCBhZnRlciB0aGUgc2NvcmVkIG9uZXMgaW4gdGhlaXIgYmFuZDsgdW5yZWNvZ25pemVkLCB1bnNjb3JlZFxuICogZW5kcG9pbnRzIChlLmcuIGN1c3RvbSBleHRlcm5hbCBtb2RlbHMpIGFyZSBvbWl0dGVkIGVudGlyZWx5IHNvIHRoZXlcbiAqIGFyZSBuZXZlciBwaWNrZWQgYXMgYW4gYXV0b21hdGljIGRlZmF1bHQuXG4gKlxuICogV2l0aGluIGEgY2hhdCBiYW5kLCBzY29yZWQgbW9kZWxzIHNvcnQgYnkgYHF1YWxpdHlgIGRlc2MsIHRoZW4gYGNvc3RgXG4gKiBhc2MsIHRoZW4gYHNwZWVkYCBkZXNjLCB0aGVuIHBhcnNlZCBuYW1lIHZlcnNpb24gZGVzYzsgZmFtaWx5LW9ubHlcbiAqIG1vZGVscyBzb3J0IGJ5IHZlcnNpb24gcmFuayB0aGVuIHBhcnNlZCB2ZXJzaW9uLiBUaGUgdmVyc2lvblxuICogdGllLWJyZWFrICh7QGxpbmsgdmVyc2lvblR1cGxlfSkgaXMgd2hhdCBzZXBhcmF0ZXMgcG9pbnQgcmVsZWFzZXNcbiAqIHRoYXQgc2hhcmUgYSBzY29yZSBwcm9maWxlIChlLmcuIGBvcHVzLTQtOGAgYWhlYWQgb2YgYG9wdXMtNC03YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUVuZHBvaW50cyhcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBSZWNvcmQ8TW9kZWxDbGFzcywgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gIGNvbnN0IGNoYXQgPSBlbmRwb2ludHMuZmlsdGVyKChlKSA9PiBlLnRhc2sgPT09IENIQVRfVEFTSyk7XG4gIGNvbnN0IHF1YWxpdGllcyA9IGNoYXRcbiAgICAubWFwKChlKSA9PiBlLnByb2ZpbGU/LnF1YWxpdHkpXG4gICAgLmZpbHRlcigocSk6IHEgaXMgbnVtYmVyID0+IE51bWJlci5pc0Zpbml0ZShxKSlcbiAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICBjb25zdCBsb3cgPSBxdWFudGlsZShxdWFsaXRpZXMsIDEgLyAzKTtcbiAgY29uc3QgaGlnaCA9IHF1YW50aWxlKHF1YWxpdGllcywgMiAvIDMpO1xuXG4gIGNvbnN0IGJ1Y2tldHM6IFJlY29yZDxNb2RlbENsYXNzLCBSYW5rZWRbXT4gPSB7XG4gICAgW01vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXTogW10sXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogW10sXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEZhc3RdOiBbXSxcbiAgICBbTW9kZWxDbGFzcy5FbWJlZGRpbmddOiBbXSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IGVwIG9mIGNoYXQpIHtcbiAgICBjb25zdCBxID0gZXAucHJvZmlsZT8ucXVhbGl0eTtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHEpKSB7XG4gICAgICBjb25zdCBxdWFsaXR5ID0gcSBhcyBudW1iZXI7XG4gICAgICBjb25zdCBjbHMgPVxuICAgICAgICBxdWFsaXR5ID49IGhpZ2hcbiAgICAgICAgICA/IE1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXG4gICAgICAgICAgOiBxdWFsaXR5IDw9IGxvd1xuICAgICAgICAgICAgPyBNb2RlbENsYXNzLkNoYXRGYXN0XG4gICAgICAgICAgICA6IE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkO1xuICAgICAgYnVja2V0c1tjbHNdLnB1c2goe1xuICAgICAgICBlcCxcbiAgICAgICAgc29ydDogcXVhbGl0eSxcbiAgICAgICAgc2NvcmVkOiB0cnVlLFxuICAgICAgICB0aWVDb3N0OiBlcC5wcm9maWxlPy5jb3N0ID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgICAgdGllU3BlZWQ6IGVwLnByb2ZpbGU/LnNwZWVkID8/IDAsXG4gICAgICAgIHZlcnNpb246IHZlcnNpb25UdXBsZShlcC5uYW1lKSxcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGZhbWlseSA9IGNsYXNzaWZ5QnlGYW1pbHkoZXAubmFtZSk7XG4gICAgaWYgKCFmYW1pbHkpIGNvbnRpbnVlO1xuICAgIGJ1Y2tldHNbZmFtaWx5LmNsYXNzXS5wdXNoKHtcbiAgICAgIGVwLFxuICAgICAgc29ydDogZmFtaWx5LnJhbmssXG4gICAgICBzY29yZWQ6IGZhbHNlLFxuICAgICAgdGllQ29zdDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgdGllU3BlZWQ6IDAsXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uVHVwbGUoZXAubmFtZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBFbWJlZGRpbmdzIGFyZSBidWNrZXRlZCBieSB0YXNrIGluIGxpc3Rpbmcgb3JkZXIgLSBubyBzY29yZSB0byByYW5rLlxuICBjb25zdCBlbWJlZGRpbmdzID0gZW5kcG9pbnRzLmZpbHRlcigoZSkgPT4gZS50YXNrID09PSBFTUJFRERJTkdfVEFTSyk7XG5cbiAgcmV0dXJuIHtcbiAgICBbTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmddOiBidWNrZXRzW01vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXS5zb3J0KHJhbmtPcmRlcikubWFwKCh4KSA9PiB4LmVwKSxcbiAgICBbTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWRdOiBidWNrZXRzW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXS5zb3J0KHJhbmtPcmRlcikubWFwKCh4KSA9PiB4LmVwKSxcbiAgICBbTW9kZWxDbGFzcy5DaGF0RmFzdF06IGJ1Y2tldHNbTW9kZWxDbGFzcy5DaGF0RmFzdF0uc29ydChyYW5rT3JkZXIpLm1hcCgoeCkgPT4geC5lcCksXG4gICAgW01vZGVsQ2xhc3MuRW1iZWRkaW5nXTogZW1iZWRkaW5ncyxcbiAgfTtcbn1cbiJdfQ==
|
package/lib/src/model.d.ts
CHANGED
|
@@ -54,6 +54,7 @@ export declare const ServingEndpointSummarySchema: z.ZodObject<{
|
|
|
54
54
|
task: z.ZodOptional<z.ZodString>;
|
|
55
55
|
state: z.ZodOptional<z.ZodString>;
|
|
56
56
|
description: z.ZodOptional<z.ZodString>;
|
|
57
|
+
supportsTools: z.ZodOptional<z.ZodBoolean>;
|
|
57
58
|
profile: z.ZodOptional<z.ZodObject<{
|
|
58
59
|
quality: z.ZodOptional<z.ZodNumber>;
|
|
59
60
|
speed: z.ZodOptional<z.ZodNumber>;
|
|
@@ -78,6 +79,7 @@ export type ServingEndpointSummary = z.infer<typeof ServingEndpointSummarySchema
|
|
|
78
79
|
export declare const ModelQuerySchema: z.ZodObject<{
|
|
79
80
|
search: z.ZodOptional<z.ZodString>;
|
|
80
81
|
modelClass: z.ZodOptional<z.ZodEnum<typeof ModelClass>>;
|
|
82
|
+
requiresTools: z.ZodOptional<z.ZodBoolean>;
|
|
81
83
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
82
84
|
threshold: z.ZodOptional<z.ZodNumber>;
|
|
83
85
|
}, z.core.$strip>;
|
|
@@ -93,6 +95,7 @@ export declare const RankedModelSchema: z.ZodObject<{
|
|
|
93
95
|
task: z.ZodOptional<z.ZodString>;
|
|
94
96
|
state: z.ZodOptional<z.ZodString>;
|
|
95
97
|
description: z.ZodOptional<z.ZodString>;
|
|
98
|
+
supportsTools: z.ZodOptional<z.ZodBoolean>;
|
|
96
99
|
profile: z.ZodOptional<z.ZodObject<{
|
|
97
100
|
quality: z.ZodOptional<z.ZodNumber>;
|
|
98
101
|
speed: z.ZodOptional<z.ZodNumber>;
|
package/lib/src/model.js
CHANGED
|
@@ -69,6 +69,10 @@ export const ServingEndpointSummarySchema = z.object({
|
|
|
69
69
|
task: z.string().optional().describe("Task hint, e.g. 'llm/v1/chat' or 'llm/v1/embeddings'."),
|
|
70
70
|
state: z.string().optional().describe("Deployment state, e.g. ready, updating, or failed."),
|
|
71
71
|
description: z.string().optional().describe("Free-form endpoint description; informational."),
|
|
72
|
+
supportsTools: z
|
|
73
|
+
.boolean()
|
|
74
|
+
.optional()
|
|
75
|
+
.describe("Whether this endpoint supports a complete function-tool round-trip (call plus function_call_output replay). Derived from verified provider-family policy when Databricks exposes no capability attribute."),
|
|
72
76
|
profile: ModelProfileSchema.optional().describe("Foundation Model API quality/speed/cost scores when the endpoint is a scored pay-per-token model; absent otherwise."),
|
|
73
77
|
class: ModelClassSchema.optional().describe("Class the endpoint was classified into; absent when the classifier doesn't recognize it."),
|
|
74
78
|
dimension: z
|
|
@@ -94,6 +98,10 @@ export const ModelQuerySchema = z.object({
|
|
|
94
98
|
.optional()
|
|
95
99
|
.describe("Loose name fuzzy-matched against endpoint names, e.g. 'claude sonnet'. Omit to rank by class alone."),
|
|
96
100
|
modelClass: ModelClassSchema.optional().describe("Capability ceiling: a chat class restricts to that band and the less-capable chat bands below it; 'embedding' restricts to embedding endpoints. Omit to consider every chat band."),
|
|
101
|
+
requiresTools: z
|
|
102
|
+
.boolean()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe("When true, consider only endpoints that support a complete function-tool round-trip."),
|
|
97
105
|
limit: z
|
|
98
106
|
.number()
|
|
99
107
|
.int()
|
|
@@ -120,4 +128,4 @@ export const RankedModelSchema = z.object({
|
|
|
120
128
|
.optional()
|
|
121
129
|
.describe("Fuzzy-match distance (0 = exact .. 1 = worst) when the query carried a search; absent for class-only ranking."),
|
|
122
130
|
});
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiw0Q0FBOEIsQ0FBQTtJQUM5Qiw0Q0FBOEIsQ0FBQTtJQUM5QixvQ0FBc0IsQ0FBQTtJQUN0QixxQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFFRCxNQUFNLHNCQUFzQixHQUErQjtJQUN6RCxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFDdkIsZ0ZBQWdGO0lBQ2xGLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUN2QiwrRUFBK0U7SUFDakYsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ25CLGdHQUFnRztJQUNsRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFDcEIsNkZBQTZGO0NBQ2hHLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FDekQsd0JBQXlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFrQjtLQUNoRSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUNsQixPQUFPLElBQUksVUFBVSxNQUFNLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0tBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2pCLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLDJDQUEyQyxDQUFDO0lBQ3BGLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxDQUFDO0lBQ3JGLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHlDQUF5QyxDQUFDO0NBQ2hGLENBQUMsQ0FBQztBQUdIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25ELElBQUksRUFBRSxDQUFDO1NBQ0osTUFBTSxFQUFFO1NBQ1IsUUFBUSxDQUNQLHlGQUF5RixDQUMxRjtJQUNILFdBQVcsRUFBRSxDQUFDO1NBQ1gsTUFBTSxFQUFFO1NBQ1IsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUNQLGlPQUFpTyxDQUNsTztJQUNILElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHVEQUF1RCxDQUFDO0lBQzdGLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLG9EQUFvRCxDQUFDO0lBQzNGLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGdEQUFnRCxDQUFDO0lBQzdGLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQzdDLHFIQUFxSCxDQUN0SDtJQUNELEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQ3pDLDBGQUEwRixDQUMzRjtJQUNELFNBQVMsRUFBRSxDQUFDO1NBQ1QsTUFBTSxFQUFFO1NBQ1IsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUNQLDJJQUEySSxDQUM1STtDQUNKLENBQUMsQ0FBQztBQUdIOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxNQUFNLEVBQUUsQ0FBQztTQUNOLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FDUCxxR0FBcUcsQ0FDdEc7SUFDSCxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUM5QyxtTEFBbUwsQ0FDcEw7SUFDRCxLQUFLLEVBQUUsQ0FBQztTQUNMLE1BQU0sRUFBRTtTQUNSLEdBQUcsRUFBRTtTQUNMLFFBQVEsRUFBRTtTQUNWLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDUCxRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsNkNBQTZDLENBQUM7SUFDMUQsU0FBUyxFQUFFLENBQUM7U0FDVCxNQUFNLEVBQUU7U0FDUixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNOLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQywyRUFBMkUsQ0FBQztDQUN6RixDQUFDLENBQUM7QUFHSDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hDLFFBQVEsRUFBRSw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUM7SUFDaEYsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyx5Q0FBeUMsQ0FBQztJQUNoRixLQUFLLEVBQUUsQ0FBQztTQUNMLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FDUCwrR0FBK0csQ0FDaEg7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IHR5cGVzIGZvciB0aGUgbW9kZWwgdG9vbGtpdDogdGhlIG1vZGVsIGNsYXNzIHRheG9ub215LFxuICogdGhlIEZvdW5kYXRpb24gTW9kZWwgQVBJIHNjb3JlIHByb2ZpbGUsIHRoZSBtaW5pbWFsIHNlcnZpbmctZW5kcG9pbnRcbiAqIGRlc2NyaXB0b3IsIGFuZCB0aGUgbW9kZWwtbG9va3VwIHJlcXVlc3QgLyByYW5rZWQtcmVzdWx0IGNvbnRyYWN0LlxuICogUHVyZSB0eXBlcyBhbmQgem9kIHNjaGVtYXMgLSBubyBOb2RlLW9ubHkgaW1wb3J0cyAtIHNvIGEgYnJvd3NlclxuICogY2xpZW50IChvciBhbiBhZ2VudCB0b29sJ3MgYGlucHV0U2NoZW1hYCkgY2FuIHZhbGlkYXRlIGEgbG9va3VwXG4gKiByZXF1ZXN0IGFuZCB0eXBlIGEgcmFua2VkIHJlc3BvbnNlIHdpdGhvdXQgZHJhZ2dpbmcgaW4gc2VydmVyXG4gKiBkZXBlbmRlbmNpZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKlxuICogQ2xhc3Mgb2YgYSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgLSBpdHMgbW9kYWxpdHkgcGx1cyxcbiAqIGZvciBjaGF0IG1vZGVscywgYSBjYXBhYmlsaXR5IGJhbmQuIENoYXQgZW5kcG9pbnRzIHNwbGl0IGJ5IG1lYXN1cmVkXG4gKiBgcXVhbGl0eWAgaW50byBhIHRocmVlLXJ1bmcgbGFkZGVyOyBlbWJlZGRpbmdzIGFyZSBhIHNlcGFyYXRlXG4gKiBtb2RhbGl0eSwgbm90IGEgcnVuZyBvbiB0aGF0IGxhZGRlci5cbiAqXG4gKiBTdHJpbmcgZW51bSBzbyB0aGUgdmFsdWUgaXMgdGhlIHNsdWcgdXNlZCBpbiBjYWNoZSBrZXlzLCBsb2dzLCBxdWVyeVxuICogc3RyaW5ncywgYW5kIHNlcmlhbGl6ZWQgY29uZmlncyAtIGFuZCBpcyB3aGF0IGEgY2xpZW50IHNlbmRzIHRvXG4gKiByZXF1ZXN0IGEgY2xhc3MuXG4gKi9cbmV4cG9ydCBlbnVtIE1vZGVsQ2xhc3Mge1xuICBDaGF0VGhpbmtpbmcgPSBcImNoYXQtdGhpbmtpbmdcIixcbiAgQ2hhdEJhbGFuY2VkID0gXCJjaGF0LWJhbGFuY2VkXCIsXG4gIENoYXRGYXN0ID0gXCJjaGF0LWZhc3RcIixcbiAgRW1iZWRkaW5nID0gXCJlbWJlZGRpbmdcIixcbn1cblxuY29uc3QgTW9kZWxDbGFzc0Rlc2NyaXB0aW9uczogUmVjb3JkPE1vZGVsQ2xhc3MsIHN0cmluZz4gPSB7XG4gIFtNb2RlbENsYXNzLkNoYXRUaGlua2luZ106XG4gICAgXCJNb3N0IGNhcGFibGUgcmVhc29uaW5nIGZvciBoYXJkLCBtdWx0aS1zdGVwIHRhc2tzOyBzbG93ZXN0IGFuZCBtb3N0IGV4cGVuc2l2ZS5cIixcbiAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTpcbiAgICBcIkdvb2QgZGVmYXVsdCBmb3IgbW9zdCBjaGF0IGFuZCBhZ2VudCB3b3JrOyBiYWxhbmNlcyBxdWFsaXR5LCBzcGVlZCwgYW5kIGNvc3QuXCIsXG4gIFtNb2RlbENsYXNzLkNoYXRGYXN0XTpcbiAgICBcIkZhc3Rlc3QgYW5kIGNoZWFwZXN0OyBiZXN0IGZvciBzaW1wbGUgdGFza3MgbGlrZSBjbGFzc2lmaWNhdGlvbiwgcm91dGluZywgYW5kIHNob3J0IHN1bW1hcmllcy5cIixcbiAgW01vZGVsQ2xhc3MuRW1iZWRkaW5nXTpcbiAgICBcIlByb2R1Y2VzIHRleHQgZW1iZWRkaW5ncyAodmVjdG9ycyksIG5vdCBjaGF0IHJlcGxpZXM7IG5vdCBpbnRlcmNoYW5nZWFibGUgd2l0aCBjaGF0IG1vZGVscy5cIixcbn07XG5cbmV4cG9ydCBjb25zdCBNb2RlbENsYXNzU2NoZW1hID0gei5lbnVtKE1vZGVsQ2xhc3MpLmRlc2NyaWJlKFxuICBgRW5kcG9pbnQgY2xhc3Mgc2x1ZzogJHsoT2JqZWN0LnZhbHVlcyhNb2RlbENsYXNzKSBhcyBNb2RlbENsYXNzW10pXG4gICAgLm1hcCgobW9kZWxDbGFzcykgPT4ge1xuICAgICAgcmV0dXJuIGAnJHttb2RlbENsYXNzfScgKCR7TW9kZWxDbGFzc0Rlc2NyaXB0aW9uc1ttb2RlbENsYXNzXX0pYDtcbiAgICB9KVxuICAgIC5qb2luKFwiLCBcIil9LmAsXG4pO1xuXG4vKipcbiAqIEZvdW5kYXRpb24gTW9kZWwgQVBJIHF1YWxpdHkgLyBzcGVlZCAvIGNvc3Qgc2NvcmVzIERhdGFicmlja3NcbiAqIHB1Ymxpc2hlcyBwZXIgcGF5LXBlci10b2tlbiBlbmRwb2ludCAodGhlIGJhcnMgc2hvd24gaW4gdGhlIEFJXG4gKiBQbGF5Z3JvdW5kKS4gU3VyZmFjZWQgZnJvbSB0aGUgc2VydmluZyBsaXN0IHVuZGVyXG4gKiBgY29uZmlnLnNlcnZlZF9lbnRpdGllc1tdLmZvdW5kYXRpb25fbW9kZWwuYWlfZ2F0ZXdheV9tb2RlbF9wcm9maWxlYFxuICogc28gdGhlIGNsYXNzIGNsYXNzaWZpZXIgY2FuIHJhbmsgbW9kZWxzIGZyb20gbGl2ZSwgd29ya3NwYWNlLWxvY2FsXG4gKiBudW1iZXJzIGluc3RlYWQgb2YgYSBoYW5kLW1haW50YWluZWQgdGFibGUuIFNjYWxlcyBhcmUgcmVsYXRpdmUgYW5kXG4gKiB1bml0bGVzczsgYWxsIGF4ZXMgYXJlIGFic2VudCBmb3IgY3VzdG9tIG9yIGJyYW5kLW5ldyBlbmRwb2ludHMgdGhhdFxuICogaGF2ZSBubyBwcm9maWxlIHlldC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsUHJvZmlsZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVsYXRpdmUgcXVhbGl0eSBzY29yZTsgaGlnaGVyIGlzIGJldHRlci5cIiksXG4gIHNwZWVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJSZWxhdGl2ZSB0aHJvdWdocHV0IHNjb3JlOyBoaWdoZXIgaXMgZmFzdGVyLlwiKSxcbiAgY29zdDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVsYXRpdmUgcHJpY2Ugc2NvcmU7IGxvd2VyIGlzIGNoZWFwZXIuXCIpLFxufSk7XG5leHBvcnQgdHlwZSBNb2RlbFByb2ZpbGUgPSB6LmluZmVyPHR5cGVvZiBNb2RlbFByb2ZpbGVTY2hlbWE+O1xuXG4vKipcbiAqIE1pbmltYWwgZGVzY3JpcHRvciBmb3IgYSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgLSBhXG4gKiBzdGFibGUgc3Vic2V0IG9mIHRoZSBTREsgdHlwZSBzbyBjYWNoZSBoaXRzIGFuZCBgL21vZGVsc2AgcmVzcG9uc2VzXG4gKiBuZXZlciBleHBvc2UgU0RLIGludGVybmFscy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkVuZHBvaW50IG5hbWUgYXMgbGlzdGVkIGJ5IHRoZSBNb2RlbCBTZXJ2aW5nIFJFU1QgQVBJOyB0aGUgaWQgdXNlZCB0byBpbnZva2UgdGhlIG1vZGVsLlwiLFxuICAgICksXG4gIGRpc3BsYXlOYW1lOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgZW5kcG9pbnQ6IGEgRGF0YWJyaWNrcy1wcm92aWRlZCBuYW1lIHdoZW4gcHJlc2VudCAoYSBkaXNwbGF5LW5hbWUgdGFnIG9yIGV4dGVybmFsLW1vZGVsIG5hbWUpLCBlbHNlIGEgdGl0bGUtY2FzZWQgcmVuZGVyaW5nIG9mIGBuYW1lYCB3aXRoIHZlbmRvciBwcmVmaXhlcyBzdHJpcHBlZC4gYG5hbWVgIHJlbWFpbnMgdGhlIGludm9rZSBpZC5cIixcbiAgICApLFxuICB0YXNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUYXNrIGhpbnQsIGUuZy4gJ2xsbS92MS9jaGF0JyBvciAnbGxtL3YxL2VtYmVkZGluZ3MnLlwiKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkRlcGxveW1lbnQgc3RhdGUsIGUuZy4gcmVhZHksIHVwZGF0aW5nLCBvciBmYWlsZWQuXCIpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRnJlZS1mb3JtIGVuZHBvaW50IGRlc2NyaXB0aW9uOyBpbmZvcm1hdGlvbmFsLlwiKSxcbiAgcHJvZmlsZTogTW9kZWxQcm9maWxlU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJGb3VuZGF0aW9uIE1vZGVsIEFQSSBxdWFsaXR5L3NwZWVkL2Nvc3Qgc2NvcmVzIHdoZW4gdGhlIGVuZHBvaW50IGlzIGEgc2NvcmVkIHBheS1wZXItdG9rZW4gbW9kZWw7IGFic2VudCBvdGhlcndpc2UuXCIsXG4gICksXG4gIGNsYXNzOiBNb2RlbENsYXNzU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJDbGFzcyB0aGUgZW5kcG9pbnQgd2FzIGNsYXNzaWZpZWQgaW50bzsgYWJzZW50IHdoZW4gdGhlIGNsYXNzaWZpZXIgZG9lc24ndCByZWNvZ25pemUgaXQuXCIsXG4gICksXG4gIGRpbWVuc2lvbjogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFbWJlZGRpbmcgdmVjdG9yIGxlbmd0aCwgbWVhc3VyZWQgYnkgYSBiZXN0LWVmZm9ydCBzZXJ2ZXItc2lkZSBwaW5nLiBPbmx5IHNldCBmb3IgZW1iZWRkaW5nIGVuZHBvaW50cywgYW5kIG9ubHkgd2hlbiB0aGUgcHJvYmUgc3VjY2VlZGVkLlwiLFxuICAgICksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hPjtcblxuLyoqXG4gKiBBIG1vZGVsLWxvb2t1cCByZXF1ZXN0OiBzZWFyY2ggc3RyaW5nLCBjYXBhYmlsaXR5IGNlaWxpbmcsIGJvdGgsIG9yXG4gKiBub3RoaW5nLiBUaGlzIGlzIHRoZSBjYWxsZXItZmFjaW5nIHF1ZXJ5IHRoZSBgQGRieC10b29scy9tb2RlbGBcbiAqIHJhbmtlciByZWFkcyAtIHNoYXBlZCBhcyBhIHpvZCBzY2hlbWEgKHdpdGggcGVyLWZpZWxkIGRlc2NyaXB0aW9ucylcbiAqIHNvIGFuIGFnZW50IHRvb2wgY2FuIGFkb3B0IGl0IGRpcmVjdGx5IGFzIGl0cyBgaW5wdXRTY2hlbWFgIGFuZCBhXG4gKiBicm93c2VyIGNsaWVudCBjYW4gdmFsaWRhdGUgYXJncyBiZWZvcmUgY2FsbGluZyB0aGUgbW9kZWwgc2VydmljZS5cbiAqXG4gKiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbDogYW4gZW1wdHkgcXVlcnkgcmFua3MgdGhlIGxpdmUgY2F0YWxvZ3VlIGJ5XG4gKiBjbGFzcyBhbG9uZS4gVGhlIFwidGhpcyBjbGFzcyBhbmQgYmVsb3dcIiBjZWlsaW5nIHNlbWFudGljcyBhbmQgdGhlXG4gKiBtYXRjaC10aGVuLWNsYXNzIG9yZGVyaW5nIGxpdmUgaW4gdGhlIHNlcnZpY2UsIG5vdCBoZXJlIC0gdGhpc1xuICogc3VyZmFjZSBpcyBkZWNsYXJhdGl2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsUXVlcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlYXJjaDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJMb29zZSBuYW1lIGZ1enp5LW1hdGNoZWQgYWdhaW5zdCBlbmRwb2ludCBuYW1lcywgZS5nLiAnY2xhdWRlIHNvbm5ldCcuIE9taXQgdG8gcmFuayBieSBjbGFzcyBhbG9uZS5cIixcbiAgICApLFxuICBtb2RlbENsYXNzOiBNb2RlbENsYXNzU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJDYXBhYmlsaXR5IGNlaWxpbmc6IGEgY2hhdCBjbGFzcyByZXN0cmljdHMgdG8gdGhhdCBiYW5kIGFuZCB0aGUgbGVzcy1jYXBhYmxlIGNoYXQgYmFuZHMgYmVsb3cgaXQ7ICdlbWJlZGRpbmcnIHJlc3RyaWN0cyB0byBlbWJlZGRpbmcgZW5kcG9pbnRzLiBPbWl0IHRvIGNvbnNpZGVyIGV2ZXJ5IGNoYXQgYmFuZC5cIixcbiAgKSxcbiAgbGltaXQ6IHpcbiAgICAubnVtYmVyKClcbiAgICAuaW50KClcbiAgICAucG9zaXRpdmUoKVxuICAgIC5tYXgoNTApXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIG51bWJlciBvZiByYW5rZWQgcmVzdWx0cyB0byByZXR1cm4uXCIpLFxuICB0aHJlc2hvbGQ6IHpcbiAgICAubnVtYmVyKClcbiAgICAubWluKDApXG4gICAgLm1heCgxKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiRnV6enktbWF0Y2ggZGlzdGFuY2UgY3V0b2ZmICgwID0gZXhhY3QsIDEgPSBtYXRjaCBhbnl0aGluZykuIERlZmF1bHQgMC40LlwiKSxcbn0pO1xuZXhwb3J0IHR5cGUgTW9kZWxRdWVyeSA9IHouaW5mZXI8dHlwZW9mIE1vZGVsUXVlcnlTY2hlbWE+O1xuXG4vKipcbiAqIE9uZSByYW5rZWQgbG9va3VwIHJlc3VsdC4gQmFja3MgYW4gYWdlbnQgdG9vbCdzIGBvdXRwdXRTY2hlbWFgIGFuZCBhXG4gKiBgL21vZGVsc2AgcmFua2VkIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY29uc3QgUmFua2VkTW9kZWxTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hLmRlc2NyaWJlKFwiVGhlIG1hdGNoZWQgc2VydmluZyBlbmRwb2ludC5cIiksXG4gIG1vZGVsQ2xhc3M6IE1vZGVsQ2xhc3NTY2hlbWEuZGVzY3JpYmUoXCJDbGFzcyB0aGUgZW5kcG9pbnQgd2FzIGNsYXNzaWZpZWQgaW50by5cIiksXG4gIHNjb3JlOiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkZ1enp5LW1hdGNoIGRpc3RhbmNlICgwID0gZXhhY3QgLi4gMSA9IHdvcnN0KSB3aGVuIHRoZSBxdWVyeSBjYXJyaWVkIGEgc2VhcmNoOyBhYnNlbnQgZm9yIGNsYXNzLW9ubHkgcmFua2luZy5cIixcbiAgICApLFxufSk7XG5leHBvcnQgdHlwZSBSYW5rZWRNb2RlbCA9IHouaW5mZXI8dHlwZW9mIFJhbmtlZE1vZGVsU2NoZW1hPjtcbiJdfQ==
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiw0Q0FBOEIsQ0FBQTtJQUM5Qiw0Q0FBOEIsQ0FBQTtJQUM5QixvQ0FBc0IsQ0FBQTtJQUN0QixxQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFFRCxNQUFNLHNCQUFzQixHQUErQjtJQUN6RCxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFDdkIsZ0ZBQWdGO0lBQ2xGLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUN2QiwrRUFBK0U7SUFDakYsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ25CLGdHQUFnRztJQUNsRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFDcEIsNkZBQTZGO0NBQ2hHLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FDekQsd0JBQXlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFrQjtLQUNoRSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUNsQixPQUFPLElBQUksVUFBVSxNQUFNLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0tBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2pCLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE9BQU8sRUFBRSxDQUFDLENB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LCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IHR5cGVzIGZvciB0aGUgbW9kZWwgdG9vbGtpdDogdGhlIG1vZGVsIGNsYXNzIHRheG9ub215LFxuICogdGhlIEZvdW5kYXRpb24gTW9kZWwgQVBJIHNjb3JlIHByb2ZpbGUsIHRoZSBtaW5pbWFsIHNlcnZpbmctZW5kcG9pbnRcbiAqIGRlc2NyaXB0b3IsIGFuZCB0aGUgbW9kZWwtbG9va3VwIHJlcXVlc3QgLyByYW5rZWQtcmVzdWx0IGNvbnRyYWN0LlxuICogUHVyZSB0eXBlcyBhbmQgem9kIHNjaGVtYXMgLSBubyBOb2RlLW9ubHkgaW1wb3J0cyAtIHNvIGEgYnJvd3NlclxuICogY2xpZW50IChvciBhbiBhZ2VudCB0b29sJ3MgYGlucHV0U2NoZW1hYCkgY2FuIHZhbGlkYXRlIGEgbG9va3VwXG4gKiByZXF1ZXN0IGFuZCB0eXBlIGEgcmFua2VkIHJlc3BvbnNlIHdpdGhvdXQgZHJhZ2dpbmcgaW4gc2VydmVyXG4gKiBkZXBlbmRlbmNpZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKlxuICogQ2xhc3Mgb2YgYSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgLSBpdHMgbW9kYWxpdHkgcGx1cyxcbiAqIGZvciBjaGF0IG1vZGVscywgYSBjYXBhYmlsaXR5IGJhbmQuIENoYXQgZW5kcG9pbnRzIHNwbGl0IGJ5IG1lYXN1cmVkXG4gKiBgcXVhbGl0eWAgaW50byBhIHRocmVlLXJ1bmcgbGFkZGVyOyBlbWJlZGRpbmdzIGFyZSBhIHNlcGFyYXRlXG4gKiBtb2RhbGl0eSwgbm90IGEgcnVuZyBvbiB0aGF0IGxhZGRlci5cbiAqXG4gKiBTdHJpbmcgZW51bSBzbyB0aGUgdmFsdWUgaXMgdGhlIHNsdWcgdXNlZCBpbiBjYWNoZSBrZXlzLCBsb2dzLCBxdWVyeVxuICogc3RyaW5ncywgYW5kIHNlcmlhbGl6ZWQgY29uZmlncyAtIGFuZCBpcyB3aGF0IGEgY2xpZW50IHNlbmRzIHRvXG4gKiByZXF1ZXN0IGEgY2xhc3MuXG4gKi9cbmV4cG9ydCBlbnVtIE1vZGVsQ2xhc3Mge1xuICBDaGF0VGhpbmtpbmcgPSBcImNoYXQtdGhpbmtpbmdcIixcbiAgQ2hhdEJhbGFuY2VkID0gXCJjaGF0LWJhbGFuY2VkXCIsXG4gIENoYXRGYXN0ID0gXCJjaGF0LWZhc3RcIixcbiAgRW1iZWRkaW5nID0gXCJlbWJlZGRpbmdcIixcbn1cblxuY29uc3QgTW9kZWxDbGFzc0Rlc2NyaXB0aW9uczogUmVjb3JkPE1vZGVsQ2xhc3MsIHN0cmluZz4gPSB7XG4gIFtNb2RlbENsYXNzLkNoYXRUaGlua2luZ106XG4gICAgXCJNb3N0IGNhcGFibGUgcmVhc29uaW5nIGZvciBoYXJkLCBtdWx0aS1zdGVwIHRhc2tzOyBzbG93ZXN0IGFuZCBtb3N0IGV4cGVuc2l2ZS5cIixcbiAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTpcbiAgICBcIkdvb2QgZGVmYXVsdCBmb3IgbW9zdCBjaGF0IGFuZCBhZ2VudCB3b3JrOyBiYWxhbmNlcyBxdWFsaXR5LCBzcGVlZCwgYW5kIGNvc3QuXCIsXG4gIFtNb2RlbENsYXNzLkNoYXRGYXN0XTpcbiAgICBcIkZhc3Rlc3QgYW5kIGNoZWFwZXN0OyBiZXN0IGZvciBzaW1wbGUgdGFza3MgbGlrZSBjbGFzc2lmaWNhdGlvbiwgcm91dGluZywgYW5kIHNob3J0IHN1bW1hcmllcy5cIixcbiAgW01vZGVsQ2xhc3MuRW1iZWRkaW5nXTpcbiAgICBcIlByb2R1Y2VzIHRleHQgZW1iZWRkaW5ncyAodmVjdG9ycyksIG5vdCBjaGF0IHJlcGxpZXM7IG5vdCBpbnRlcmNoYW5nZWFibGUgd2l0aCBjaGF0IG1vZGVscy5cIixcbn07XG5cbmV4cG9ydCBjb25zdCBNb2RlbENsYXNzU2NoZW1hID0gei5lbnVtKE1vZGVsQ2xhc3MpLmRlc2NyaWJlKFxuICBgRW5kcG9pbnQgY2xhc3Mgc2x1ZzogJHsoT2JqZWN0LnZhbHVlcyhNb2RlbENsYXNzKSBhcyBNb2RlbENsYXNzW10pXG4gICAgLm1hcCgobW9kZWxDbGFzcykgPT4ge1xuICAgICAgcmV0dXJuIGAnJHttb2RlbENsYXNzfScgKCR7TW9kZWxDbGFzc0Rlc2NyaXB0aW9uc1ttb2RlbENsYXNzXX0pYDtcbiAgICB9KVxuICAgIC5qb2luKFwiLCBcIil9LmAsXG4pO1xuXG4vKipcbiAqIEZvdW5kYXRpb24gTW9kZWwgQVBJIHF1YWxpdHkgLyBzcGVlZCAvIGNvc3Qgc2NvcmVzIERhdGFicmlja3NcbiAqIHB1Ymxpc2hlcyBwZXIgcGF5LXBlci10b2tlbiBlbmRwb2ludCAodGhlIGJhcnMgc2hvd24gaW4gdGhlIEFJXG4gKiBQbGF5Z3JvdW5kKS4gU3VyZmFjZWQgZnJvbSB0aGUgc2VydmluZyBsaXN0IHVuZGVyXG4gKiBgY29uZmlnLnNlcnZlZF9lbnRpdGllc1tdLmZvdW5kYXRpb25fbW9kZWwuYWlfZ2F0ZXdheV9tb2RlbF9wcm9maWxlYFxuICogc28gdGhlIGNsYXNzIGNsYXNzaWZpZXIgY2FuIHJhbmsgbW9kZWxzIGZyb20gbGl2ZSwgd29ya3NwYWNlLWxvY2FsXG4gKiBudW1iZXJzIGluc3RlYWQgb2YgYSBoYW5kLW1haW50YWluZWQgdGFibGUuIFNjYWxlcyBhcmUgcmVsYXRpdmUgYW5kXG4gKiB1bml0bGVzczsgYWxsIGF4ZXMgYXJlIGFic2VudCBmb3IgY3VzdG9tIG9yIGJyYW5kLW5ldyBlbmRwb2ludHMgdGhhdFxuICogaGF2ZSBubyBwcm9maWxlIHlldC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsUHJvZmlsZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVsYXRpdmUgcXVhbGl0eSBzY29yZTsgaGlnaGVyIGlzIGJldHRlci5cIiksXG4gIHNwZWVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJSZWxhdGl2ZSB0aHJvdWdocHV0IHNjb3JlOyBoaWdoZXIgaXMgZmFzdGVyLlwiKSxcbiAgY29zdDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVsYXRpdmUgcHJpY2Ugc2NvcmU7IGxvd2VyIGlzIGNoZWFwZXIuXCIpLFxufSk7XG5leHBvcnQgdHlwZSBNb2RlbFByb2ZpbGUgPSB6LmluZmVyPHR5cGVvZiBNb2RlbFByb2ZpbGVTY2hlbWE+O1xuXG4vKipcbiAqIE1pbmltYWwgZGVzY3JpcHRvciBmb3IgYSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgLSBhXG4gKiBzdGFibGUgc3Vic2V0IG9mIHRoZSBTREsgdHlwZSBzbyBjYWNoZSBoaXRzIGFuZCBgL21vZGVsc2AgcmVzcG9uc2VzXG4gKiBuZXZlciBleHBvc2UgU0RLIGludGVybmFscy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkVuZHBvaW50IG5hbWUgYXMgbGlzdGVkIGJ5IHRoZSBNb2RlbCBTZXJ2aW5nIFJFU1QgQVBJOyB0aGUgaWQgdXNlZCB0byBpbnZva2UgdGhlIG1vZGVsLlwiLFxuICAgICksXG4gIGRpc3BsYXlOYW1lOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgZW5kcG9pbnQ6IGEgRGF0YWJyaWNrcy1wcm92aWRlZCBuYW1lIHdoZW4gcHJlc2VudCAoYSBkaXNwbGF5LW5hbWUgdGFnIG9yIGV4dGVybmFsLW1vZGVsIG5hbWUpLCBlbHNlIGEgdGl0bGUtY2FzZWQgcmVuZGVyaW5nIG9mIGBuYW1lYCB3aXRoIHZlbmRvciBwcmVmaXhlcyBzdHJpcHBlZC4gYG5hbWVgIHJlbWFpbnMgdGhlIGludm9rZSBpZC5cIixcbiAgICApLFxuICB0YXNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUYXNrIGhpbnQsIGUuZy4gJ2xsbS92MS9jaGF0JyBvciAnbGxtL3YxL2VtYmVkZGluZ3MnLlwiKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkRlcGxveW1lbnQgc3RhdGUsIGUuZy4gcmVhZHksIHVwZGF0aW5nLCBvciBmYWlsZWQuXCIpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRnJlZS1mb3JtIGVuZHBvaW50IGRlc2NyaXB0aW9uOyBpbmZvcm1hdGlvbmFsLlwiKSxcbiAgc3VwcG9ydHNUb29sczogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiV2hldGhlciB0aGlzIGVuZHBvaW50IHN1cHBvcnRzIGEgY29tcGxldGUgZnVuY3Rpb24tdG9vbCByb3VuZC10cmlwIChjYWxsIHBsdXMgZnVuY3Rpb25fY2FsbF9vdXRwdXQgcmVwbGF5KS4gRGVyaXZlZCBmcm9tIHZlcmlmaWVkIHByb3ZpZGVyLWZhbWlseSBwb2xpY3kgd2hlbiBEYXRhYnJpY2tzIGV4cG9zZXMgbm8gY2FwYWJpbGl0eSBhdHRyaWJ1dGUuXCIsXG4gICAgKSxcbiAgcHJvZmlsZTogTW9kZWxQcm9maWxlU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJGb3VuZGF0aW9uIE1vZGVsIEFQSSBxdWFsaXR5L3NwZWVkL2Nvc3Qgc2NvcmVzIHdoZW4gdGhlIGVuZHBvaW50IGlzIGEgc2NvcmVkIHBheS1wZXItdG9rZW4gbW9kZWw7IGFic2VudCBvdGhlcndpc2UuXCIsXG4gICksXG4gIGNsYXNzOiBNb2RlbENsYXNzU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJDbGFzcyB0aGUgZW5kcG9pbnQgd2FzIGNsYXNzaWZpZWQgaW50bzsgYWJzZW50IHdoZW4gdGhlIGNsYXNzaWZpZXIgZG9lc24ndCByZWNvZ25pemUgaXQuXCIsXG4gICksXG4gIGRpbWVuc2lvbjogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFbWJlZGRpbmcgdmVjdG9yIGxlbmd0aCwgbWVhc3VyZWQgYnkgYSBiZXN0LWVmZm9ydCBzZXJ2ZXItc2lkZSBwaW5nLiBPbmx5IHNldCBmb3IgZW1iZWRkaW5nIGVuZHBvaW50cywgYW5kIG9ubHkgd2hlbiB0aGUgcHJvYmUgc3VjY2VlZGVkLlwiLFxuICAgICksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hPjtcblxuLyoqXG4gKiBBIG1vZGVsLWxvb2t1cCByZXF1ZXN0OiBzZWFyY2ggc3RyaW5nLCBjYXBhYmlsaXR5IGNlaWxpbmcsIGJvdGgsIG9yXG4gKiBub3RoaW5nLiBUaGlzIGlzIHRoZSBjYWxsZXItZmFjaW5nIHF1ZXJ5IHRoZSBgQGRieC10b29scy9tb2RlbGBcbiAqIHJhbmtlciByZWFkcyAtIHNoYXBlZCBhcyBhIHpvZCBzY2hlbWEgKHdpdGggcGVyLWZpZWxkIGRlc2NyaXB0aW9ucylcbiAqIHNvIGFuIGFnZW50IHRvb2wgY2FuIGFkb3B0IGl0IGRpcmVjdGx5IGFzIGl0cyBgaW5wdXRTY2hlbWFgIGFuZCBhXG4gKiBicm93c2VyIGNsaWVudCBjYW4gdmFsaWRhdGUgYXJncyBiZWZvcmUgY2FsbGluZyB0aGUgbW9kZWwgc2VydmljZS5cbiAqXG4gKiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbDogYW4gZW1wdHkgcXVlcnkgcmFua3MgdGhlIGxpdmUgY2F0YWxvZ3VlIGJ5XG4gKiBjbGFzcyBhbG9uZS4gVGhlIFwidGhpcyBjbGFzcyBhbmQgYmVsb3dcIiBjZWlsaW5nIHNlbWFudGljcyBhbmQgdGhlXG4gKiBtYXRjaC10aGVuLWNsYXNzIG9yZGVyaW5nIGxpdmUgaW4gdGhlIHNlcnZpY2UsIG5vdCBoZXJlIC0gdGhpc1xuICogc3VyZmFjZSBpcyBkZWNsYXJhdGl2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsUXVlcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlYXJjaDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJMb29zZSBuYW1lIGZ1enp5LW1hdGNoZWQgYWdhaW5zdCBlbmRwb2ludCBuYW1lcywgZS5nLiAnY2xhdWRlIHNvbm5ldCcuIE9taXQgdG8gcmFuayBieSBjbGFzcyBhbG9uZS5cIixcbiAgICApLFxuICBtb2RlbENsYXNzOiBNb2RlbENsYXNzU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJDYXBhYmlsaXR5IGNlaWxpbmc6IGEgY2hhdCBjbGFzcyByZXN0cmljdHMgdG8gdGhhdCBiYW5kIGFuZCB0aGUgbGVzcy1jYXBhYmxlIGNoYXQgYmFuZHMgYmVsb3cgaXQ7ICdlbWJlZGRpbmcnIHJlc3RyaWN0cyB0byBlbWJlZGRpbmcgZW5kcG9pbnRzLiBPbWl0IHRvIGNvbnNpZGVyIGV2ZXJ5IGNoYXQgYmFuZC5cIixcbiAgKSxcbiAgcmVxdWlyZXNUb29sczogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiV2hlbiB0cnVlLCBjb25zaWRlciBvbmx5IGVuZHBvaW50cyB0aGF0IHN1cHBvcnQgYSBjb21wbGV0ZSBmdW5jdGlvbi10b29sIHJvdW5kLXRyaXAuXCIsXG4gICAgKSxcbiAgbGltaXQ6IHpcbiAgICAubnVtYmVyKClcbiAgICAuaW50KClcbiAgICAucG9zaXRpdmUoKVxuICAgIC5tYXgoNTApXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIG51bWJlciBvZiByYW5rZWQgcmVzdWx0cyB0byByZXR1cm4uXCIpLFxuICB0aHJlc2hvbGQ6IHpcbiAgICAubnVtYmVyKClcbiAgICAubWluKDApXG4gICAgLm1heCgxKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiRnV6enktbWF0Y2ggZGlzdGFuY2UgY3V0b2ZmICgwID0gZXhhY3QsIDEgPSBtYXRjaCBhbnl0aGluZykuIERlZmF1bHQgMC40LlwiKSxcbn0pO1xuZXhwb3J0IHR5cGUgTW9kZWxRdWVyeSA9IHouaW5mZXI8dHlwZW9mIE1vZGVsUXVlcnlTY2hlbWE+O1xuXG4vKipcbiAqIE9uZSByYW5rZWQgbG9va3VwIHJlc3VsdC4gQmFja3MgYW4gYWdlbnQgdG9vbCdzIGBvdXRwdXRTY2hlbWFgIGFuZCBhXG4gKiBgL21vZGVsc2AgcmFua2VkIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY29uc3QgUmFua2VkTW9kZWxTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hLmRlc2NyaWJlKFwiVGhlIG1hdGNoZWQgc2VydmluZyBlbmRwb2ludC5cIiksXG4gIG1vZGVsQ2xhc3M6IE1vZGVsQ2xhc3NTY2hlbWEuZGVzY3JpYmUoXCJDbGFzcyB0aGUgZW5kcG9pbnQgd2FzIGNsYXNzaWZpZWQgaW50by5cIiksXG4gIHNjb3JlOiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkZ1enp5LW1hdGNoIGRpc3RhbmNlICgwID0gZXhhY3QgLi4gMSA9IHdvcnN0KSB3aGVuIHRoZSBxdWVyeSBjYXJyaWVkIGEgc2VhcmNoOyBhYnNlbnQgZm9yIGNsYXNzLW9ubHkgcmFua2luZy5cIixcbiAgICApLFxufSk7XG5leHBvcnQgdHlwZSBSYW5rZWRNb2RlbCA9IHouaW5mZXI8dHlwZW9mIFJhbmtlZE1vZGVsU2NoZW1hPjtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"typescript": "^5.9.3"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@dbx-tools/shared-core": "0.6.
|
|
26
|
+
"@dbx-tools/shared-core": "0.6.64",
|
|
27
27
|
"zod": "4.3.6"
|
|
28
28
|
},
|
|
29
29
|
"main": "./lib/index.js",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"./package.json": "./package.json"
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"version": "0.6.
|
|
43
|
+
"version": "0.6.64",
|
|
44
44
|
"types": "./lib/index.d.ts",
|
|
45
45
|
"type": "module",
|
|
46
46
|
"exports": {
|
package/src/classify.ts
CHANGED
|
@@ -40,10 +40,32 @@ export interface EndpointCapabilities {
|
|
|
40
40
|
chat: boolean;
|
|
41
41
|
/** Embedding (vector) endpoint. */
|
|
42
42
|
embedding: boolean;
|
|
43
|
-
/**
|
|
43
|
+
/** Complete function-tool round-trip (call plus function_call_output replay). */
|
|
44
44
|
tools: boolean;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Provider families verified against Databricks Responses/Open Responses with
|
|
49
|
+
* both a forced function call and a stateless `function_call_output` replay.
|
|
50
|
+
*
|
|
51
|
+
* Databricks' endpoint list/OpenAPI currently exposes no tools capability bit.
|
|
52
|
+
* Keep this conservative: an unknown chat family is not agent-safe until it is
|
|
53
|
+
* verified. Gemini is excluded because it emits a call but Open Responses
|
|
54
|
+
* cannot replay the required thought signature; GPT-OSS rejects Responses
|
|
55
|
+
* passthrough entirely.
|
|
56
|
+
*/
|
|
57
|
+
export function supportsToolsByFamily(name: string): boolean {
|
|
58
|
+
const n = name.toLowerCase();
|
|
59
|
+
if (n.includes("gemini") || n.includes("gpt-oss")) return false;
|
|
60
|
+
return (
|
|
61
|
+
n.includes("claude") ||
|
|
62
|
+
n.includes("gpt") ||
|
|
63
|
+
n.includes("qwen") ||
|
|
64
|
+
n.includes("glm") ||
|
|
65
|
+
n.includes("llama")
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
47
69
|
/**
|
|
48
70
|
* Derive an endpoint's capabilities from its Databricks task hint and its
|
|
49
71
|
* classified {@link ModelClass}, so consumers filter on capability instead of
|
|
@@ -59,7 +81,8 @@ export function endpointCapabilities(endpoint: ServingEndpointSummary): Endpoint
|
|
|
59
81
|
// Every non-embedding class is a chat band, so "classified but not embedding"
|
|
60
82
|
// is the class-side test for chat capability.
|
|
61
83
|
const chat = !embedding && (endpoint.task === CHAT_TASK || endpoint.class !== undefined);
|
|
62
|
-
|
|
84
|
+
const tools = chat && (endpoint.supportsTools ?? supportsToolsByFamily(endpoint.name));
|
|
85
|
+
return { chat, embedding, tools };
|
|
63
86
|
}
|
|
64
87
|
|
|
65
88
|
/** Family-heuristic classification of a single endpoint name. */
|
package/src/model.ts
CHANGED
|
@@ -85,6 +85,12 @@ export const ServingEndpointSummarySchema = z.object({
|
|
|
85
85
|
task: z.string().optional().describe("Task hint, e.g. 'llm/v1/chat' or 'llm/v1/embeddings'."),
|
|
86
86
|
state: z.string().optional().describe("Deployment state, e.g. ready, updating, or failed."),
|
|
87
87
|
description: z.string().optional().describe("Free-form endpoint description; informational."),
|
|
88
|
+
supportsTools: z
|
|
89
|
+
.boolean()
|
|
90
|
+
.optional()
|
|
91
|
+
.describe(
|
|
92
|
+
"Whether this endpoint supports a complete function-tool round-trip (call plus function_call_output replay). Derived from verified provider-family policy when Databricks exposes no capability attribute.",
|
|
93
|
+
),
|
|
88
94
|
profile: ModelProfileSchema.optional().describe(
|
|
89
95
|
"Foundation Model API quality/speed/cost scores when the endpoint is a scored pay-per-token model; absent otherwise.",
|
|
90
96
|
),
|
|
@@ -122,6 +128,12 @@ export const ModelQuerySchema = z.object({
|
|
|
122
128
|
modelClass: ModelClassSchema.optional().describe(
|
|
123
129
|
"Capability ceiling: a chat class restricts to that band and the less-capable chat bands below it; 'embedding' restricts to embedding endpoints. Omit to consider every chat band.",
|
|
124
130
|
),
|
|
131
|
+
requiresTools: z
|
|
132
|
+
.boolean()
|
|
133
|
+
.optional()
|
|
134
|
+
.describe(
|
|
135
|
+
"When true, consider only endpoints that support a complete function-tool round-trip.",
|
|
136
|
+
),
|
|
125
137
|
limit: z
|
|
126
138
|
.number()
|
|
127
139
|
.int()
|