@dbx-tools/shared-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 +26 -132
- package/index.ts +3 -8
- package/lib/index.d.ts +3 -8
- package/lib/index.js +3 -6
- package/lib/src/display.js +4 -4
- package/lib/src/generated/_contracts.d.ts +142 -0
- package/lib/src/generated/_contracts.js +17 -0
- package/lib/src/generated/_schemas.d.ts +67 -0
- package/lib/src/generated/_schemas.js +130 -0
- package/lib/src/model.d.ts +110 -129
- package/lib/src/model.js +26 -150
- package/lib/src/openai-chat.d.ts +2 -2
- package/lib/src/openai-chat.js +3 -3
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/display.ts +3 -3
- package/src/generated/_contracts.ts +145 -0
- package/src/generated/_schemas.ts +136 -0
- package/src/model.ts +58 -183
- package/src/openai-chat.ts +2 -2
- package/lib/src/classify.d.ts +0 -122
- package/lib/src/classify.js +0 -305
- package/lib/src/openai-responses.d.ts +0 -210
- package/lib/src/openai-responses.js +0 -754
- package/src/classify.ts +0 -345
- package/src/openai-responses.ts +0 -841
package/lib/src/openai-chat.js
CHANGED
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
* in the case of `parallel_tool_calls` - a real setting Databricks has no way
|
|
27
27
|
* to accept, so dropping it is the only way the request can succeed at all.
|
|
28
28
|
*
|
|
29
|
-
* Callers that translate a request field-by-field
|
|
30
|
-
*
|
|
29
|
+
* Callers that translate a request field-by-field through an allowlist never
|
|
30
|
+
* need this; it exists for the
|
|
31
31
|
* paths that forward a client body largely as-is.
|
|
32
32
|
*/
|
|
33
33
|
export const UNSUPPORTED_CHAT_FIELDS = [
|
|
@@ -98,4 +98,4 @@ export function chatContentToText(content, options = {}) {
|
|
|
98
98
|
}
|
|
99
99
|
return parts.join(separator);
|
|
100
100
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFpLWNoYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBa0RIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQjtJQUN4RCw4RUFBOEU7SUFDOUUsOEJBQThCO0lBQzlCLHFCQUFxQjtJQUNyQix5RUFBeUU7SUFDekUsT0FBTztJQUNQLFVBQVU7SUFDVixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLG1CQUFtQjtDQUNwQixDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsSUFBNkIsRUFDN0IsUUFBMkIsRUFBRTtJQUU3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsdUJBQXVCLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7WUFBRSxTQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFrQkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZ0I7SUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDbkMsQ0FBQyxDQUFDLE9BQU87UUFDVCxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFDdEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBMkIsRUFBRSxDQUNyRCxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBZ0IsRUFDaEIsVUFBb0MsRUFBRTtJQUV0QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMxQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFFLFNBQVM7UUFDckYsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFJIENoYXQgQ29tcGxldGlvbnMgd2lyZSBzaGFwZXMsIGFzIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBzcGVha3MgdGhlbS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIHJlcXVlc3QvcmVwbHkgcGF5bG9hZCB0eXBlcyBmb3IgYC9jaGF0L2NvbXBsZXRpb25zYCBhbmQgYVxuICogc2VydmluZyBlbmRwb2ludCdzIGBpbnZvY2F0aW9uc2AgVVJMLiBUaGV5IGFyZSBkZWxpYmVyYXRlbHkgZGVjbGFyZWQgaGVyZVxuICogcmF0aGVyIHRoYW4gaW1wb3J0ZWQgZnJvbSB0aGUgT3BlbkFJIG9yIEFJIFNESyBwYWNrYWdlczogYm90aCBrZWVwIHRoZXNlXG4gKiBmaWVsZHMgdW5kZXIgaW50ZXJuYWwgbmFtZXNwYWNlcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGVpciBwdWJsaWMgQVBJLFxuICogd2hlcmVhcyB0aGUgd2lyZSBwYXlsb2FkIGl0c2VsZiBpcyB0aGUgc3RhYmxlIGNvbnRyYWN0IGV2ZXJ5IGNhbGxlciBpbiB0aGlzXG4gKiByZXBvIGFjdHVhbGx5IGNvZGVzIGFnYWluc3QuXG4gKlxuICogUHVyZSB0eXBlcyBwbHVzIG9uZSB0ZXh0LWZsYXR0ZW5pbmcgaGVscGVyIC0gbm8gem9kLCBubyBydW50aW1lIGRlcHMgLSBzbyBhXG4gKiBicm93c2VyIGNsaWVudCwgYSBOb2RlIHByb3h5LCBhbmQgYW4gQXBwS2l0IHBsdWdpbiBjYW4gYWxsIGFncmVlIG9uIHRoZSBzaGFwZVxuICogd2l0aG91dCBhbnkgb2YgdGhlbSBwdWxsaW5nIGluIHRoZSBvdGhlcnMnIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqXG4gKiBUaGUgcm9sZXMgT3BlbkFJIGRlZmluZXMgZm9yIGEgY2hhdCB0dXJuLiB7QGxpbmsgQ2hhdE1lc3NhZ2Uucm9sZX0gaXMgdHlwZWQgYXNcbiAqIGEgcGxhaW4gc3RyaW5nIHJhdGhlciB0aGFuIHRoaXMgdW5pb24sIGJlY2F1c2UgcHJvdmlkZXJzIGFkZCB0aGVpciBvd24gKGZvclxuICogZXhhbXBsZSBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGUgcmVwbGF5cyBhIGBcInJlYXNvbmluZ1wiYCB0dXJuKTsgdXNlIHRoaXMgd2hlblxuICogeW91IHdhbnQgdGhlIHN0YW5kYXJkIHNldCBuYW1lZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2hhdFJvbGUgPSBcInN5c3RlbVwiIHwgXCJkZXZlbG9wZXJcIiB8IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIiB8IFwidG9vbFwiO1xuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiBhIHN0cnVjdHVyZWQgYGNvbnRlbnRgIGFycmF5LiBPbmx5IGB0eXBlYCBhbmQgYHRleHRgIGFyZSByZWFkXG4gKiBoZXJlOyB0aGUgaW5kZXggc2lnbmF0dXJlIGtlZXBzIHByb3ZpZGVyLXNwZWNpZmljIHBhcnRzIChpbWFnZXMsIHRoaW5raW5nXG4gKiBibG9ja3MsIGNhY2hlIG1hcmtlcnMpIGludGFjdCB0aHJvdWdoIGEgcGFyc2Uvc2VyaWFsaXplIHJvdW5kIHRyaXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbnRlbnRQYXJ0IHtcbiAgdHlwZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqIFRoZSBmdW5jdGlvbiBhIHRvb2wgY2FsbCBpbnZva2VzLCB3aXRoIGl0cyBhcmd1bWVudHMgYXMgYSBKU09OIHN0cmluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFRvb2xDYWxsRnVuY3Rpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBKU09OLWVuY29kZWQgYXJndW1lbnQgb2JqZWN0LiBTdHJlYW1lZCBpbiBmcmFnbWVudHMsIHNvIGFzc2VtYmxlIGJlZm9yZSBwYXJzaW5nLiAqL1xuICBhcmd1bWVudHM6IHN0cmluZztcbn1cblxuLyoqIE9uZSB0b29sIGNhbGwgYXR0YWNoZWQgdG8gYW4gYXNzaXN0YW50IHR1cm4uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRUb29sQ2FsbCB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBgXCJmdW5jdGlvblwiYCBpbiBwcmFjdGljZTsgd2lkZW5lZCBzbyBhbiB1bnJlY29nbml6ZWQgdHlwZSByb3VuZC10cmlwcy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICBmdW5jdGlvbjogQ2hhdFRvb2xDYWxsRnVuY3Rpb247XG59XG5cbi8qKlxuICogQSBzaW5nbGUgY2hhdCBtZXNzYWdlLiBgY29udGVudGAgaXMgbnVsbGFibGUgYmVjYXVzZSBhbiBhc3Npc3RhbnQgdHVybiB0aGF0XG4gKiBvbmx5IGNhbGxzIHRvb2xzIGNhcnJpZXMgYGNvbnRlbnQ6IG51bGxgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRNZXNzYWdlIHtcbiAgLyoqIFNlZSB7QGxpbmsgQ2hhdFJvbGV9IGZvciB0aGUgc3RhbmRhcmQgdmFsdWVzOyB3aWRlbmVkIGZvciBwcm92aWRlciBleHRlbnNpb25zLiAqL1xuICByb2xlOiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBzdHJpbmcgfCBDaGF0Q29udGVudFBhcnQgfCBDaGF0Q29udGVudFBhcnRbXSB8IG51bGw7XG4gIHRvb2xfY2FsbHM/OiBDaGF0VG9vbENhbGxbXTtcbiAgLyoqIFNldCBvbiBhIGB0b29sYCB0dXJuLCBrZXlpbmcgaXQgYmFjayB0byB0aGUgY2FsbCBpdCBhbnN3ZXJzLiAqL1xuICB0b29sX2NhbGxfaWQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVG9wLWxldmVsIHJlcXVlc3QgZmllbGRzIGFuIE9wZW5BSSBjbGllbnQgbWF5IHNlbmQgdGhhdCBEYXRhYnJpY2tzIE1vZGVsXG4gKiBTZXJ2aW5nIHJlamVjdHMgb3V0cmlnaHQsIGZhaWxpbmcgdGhlIHdob2xlIHR1cm4gcmF0aGVyIHRoYW4gaWdub3JpbmcgdGhlbS5cbiAqXG4gKiBEYXRhYnJpY2tzIHZhbGlkYXRlcyB0aGUgY2hhdCBib2R5IHN0cmljdGx5LCBzbyBhbiB1bnJlY29nbml6ZWQga2V5IGNvbWVzXG4gKiBiYWNrIGFzIGBwYXJhbGxlbF90b29sX2NhbGxzOiBFeHRyYSBpbnB1dHMgYXJlIG5vdCBwZXJtaXR0ZWRgICh0aGVcbiAqIGdhdGV3YXkncyBweWRhbnRpYyB2YWxpZGF0aW9uKSBvciBganNvbjogdW5rbm93biBmaWVsZCBcInBhcmFsbGVsX3Rvb2xfY2FsbHNcImBcbiAqIChpdHMgc3RyaWN0IEpTT04gZGVjb2RlKSwgZGVwZW5kaW5nIG9uIHRoZSBlbmRwb2ludC4gRXZlcnl0aGluZyBsaXN0ZWQgaGVyZVxuICogaXMgZWl0aGVyIE9wZW5BSS1wbGF0Zm9ybSBib29ra2VlcGluZyB3aXRoIG5vIGJlYXJpbmcgb24gdGhlIGNvbXBsZXRpb24sIG9yIC1cbiAqIGluIHRoZSBjYXNlIG9mIGBwYXJhbGxlbF90b29sX2NhbGxzYCAtIGEgcmVhbCBzZXR0aW5nIERhdGFicmlja3MgaGFzIG5vIHdheVxuICogdG8gYWNjZXB0LCBzbyBkcm9wcGluZyBpdCBpcyB0aGUgb25seSB3YXkgdGhlIHJlcXVlc3QgY2FuIHN1Y2NlZWQgYXQgYWxsLlxuICpcbiAqIENhbGxlcnMgdGhhdCB0cmFuc2xhdGUgYSByZXF1ZXN0IGZpZWxkLWJ5LWZpZWxkIChhbiBhbGxvd2xpc3QsIGFzXG4gKiBgb3BlbmFpUmVzcG9uc2VzLnJlc3BvbnNlc1RvQ2hhdGAgZG9lcykgbmV2ZXIgbmVlZCB0aGlzOyBpdCBleGlzdHMgZm9yIHRoZVxuICogcGF0aHMgdGhhdCBmb3J3YXJkIGEgY2xpZW50IGJvZHkgbGFyZ2VseSBhcy1pcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFVOU1VQUE9SVEVEX0NIQVRfRklFTERTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgLy8gVG9vbC1jYWxsaW5nIGNvbmN1cnJlbmN5IGhpbnQuIERhdGFicmlja3MgcmVqZWN0cyBpdDsgdGhlIHVwc3RyZWFtIHByb3ZpZGVyXG4gIC8vIGRlY2lkZXMgcGFyYWxsZWxpc20gaXRzZWxmLlxuICBcInBhcmFsbGVsX3Rvb2xfY2FsbHNcIixcbiAgLy8gUmVzcG9uc2UtcGVyc2lzdGVuY2UgYW5kIGJvb2trZWVwaW5nIGZpZWxkcyBmb3IgT3BlbkFJJ3Mgb3duIHBsYXRmb3JtLlxuICBcInN0b3JlXCIsXG4gIFwibWV0YWRhdGFcIixcbiAgXCJzZXJ2aWNlX3RpZXJcIixcbiAgXCJwcm9tcHRfY2FjaGVfa2V5XCIsXG4gIFwic2FmZXR5X2lkZW50aWZpZXJcIixcbl07XG5cbi8qKlxuICogRGVsZXRlIHRoZSBmaWVsZHMgRGF0YWJyaWNrcyByZWplY3RzIGZyb20gYSBjaGF0IHJlcXVlc3QgYm9keSwgaW4gcGxhY2UuXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBhY3R1YWxseSByZW1vdmVkIHNvIGEgY2FsbGVyIGNhbiBsb2cgd2hhdCBpdCBkcm9wcGVkLlxuICpcbiAqIEBwYXJhbSBib2R5IC0gUGFyc2VkIGNoYXQgcmVxdWVzdCBib2R5LiBNdXRhdGVkLlxuICogQHBhcmFtIGV4dHJhIC0gQWRkaXRpb25hbCBmaWVsZCBuYW1lcyB0byBkcm9wLCBmb3IgYSB3b3Jrc3BhY2Ugb3IgZW5kcG9pbnRcbiAqICAgdGhhdCByZWplY3RzIHNvbWV0aGluZyBub3QgeWV0IGluIHtAbGluayBVTlNVUFBPUlRFRF9DSEFUX0ZJRUxEU30uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFVuc3VwcG9ydGVkQ2hhdEZpZWxkcyhcbiAgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGV4dHJhOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBkcm9wcGVkOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsuLi5VTlNVUFBPUlRFRF9DSEFUX0ZJRUxEUywgLi4uZXh0cmFdKSB7XG4gICAgaWYgKCEoZmllbGQgaW4gYm9keSkpIGNvbnRpbnVlO1xuICAgIGRlbGV0ZSBib2R5W2ZpZWxkXTtcbiAgICBkcm9wcGVkLnB1c2goZmllbGQpO1xuICB9XG4gIHJldHVybiBkcm9wcGVkO1xufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGNoYXRDb250ZW50VG9UZXh0fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbnRlbnRUb1RleHRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBsYWNlZCBiZXR3ZWVuIHBhcnRzLiBEZWZhdWx0cyB0byBgXCJcImAsIHdoaWNoIHJlYXNzZW1ibGVzIGEgbWVzc2FnZSB0aGF0IHdhc1xuICAgKiBzcGxpdCBwdXJlbHkgZm9yIHRyYW5zcG9ydDsgcGFzcyBgXCJcXG5cXG5cImAgd2hlbiB0aGUgcGFydHMgYXJlIHNlcGFyYXRlXG4gICAqIHBhcmFncmFwaHMgdGhhdCBhIGh1bWFuIHdpbGwgcmVhZC5cbiAgICovXG4gIHNlcGFyYXRvcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFJlc3RyaWN0IHRvIHRoZXNlIGB0eXBlYCB2YWx1ZXMuIERlZmF1bHRzIHRvIGFjY2VwdGluZyBhbnkgcGFydCBjYXJyeWluZ1xuICAgKiBgdGV4dGAsIHdoaWNoIGNvdmVycyB0aGUgYGlucHV0X3RleHRgIC8gYG91dHB1dF90ZXh0YCAvIGB0ZXh0YCBzcGVsbGluZ3NcbiAgICogZGlmZmVyZW50IEFQSXMgdXNlIGZvciB0aGUgc2FtZSB0aGluZy5cbiAgICovXG4gIHR5cGVzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHN0cnVjdHVyZWQgY2hhdCBjb250ZW50IHRvIGFuIGFycmF5LiBQcm92aWRlcnMgdXN1YWxseSBlbWl0IGFcbiAqIHBhcnRzIGFycmF5LCBidXQgc29tZSBjb21wYXRpYmlsaXR5IGxheWVycyBjb2xsYXBzZSBhIG9uZS1wYXJ0IGFycmF5IHRvIHRoZVxuICogb2JqZWN0IGl0c2VsZi4gUmV0dXJucyBgdW5kZWZpbmVkYCBmb3Igc3RyaW5ncywgbnVsbHMsIGFuZCBvdGhlciBzY2FsYXJcbiAqIHZhbHVlcyBzbyBjYWxsZXJzIGNhbiBkaXN0aW5ndWlzaCBzdHJ1Y3R1cmVkIGNvbnRlbnQgZnJvbSBwbGFpbiB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdENvbnRlbnRQYXJ0cyhjb250ZW50OiB1bmtub3duKTogQ2hhdENvbnRlbnRQYXJ0W10gfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGNvbnRlbnQpXG4gICAgPyBjb250ZW50XG4gICAgOiBjb250ZW50ICYmIHR5cGVvZiBjb250ZW50ID09PSBcIm9iamVjdFwiXG4gICAgICA/IFtjb250ZW50XVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmICghdmFsdWVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWVzLmZpbHRlcigocGFydCk6IHBhcnQgaXMgQ2hhdENvbnRlbnRQYXJ0ID0+XG4gICAgQm9vbGVhbihwYXJ0ICYmIHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgbWVzc2FnZSBgY29udGVudGAgdmFsdWUgdG8gcGxhaW4gdGV4dC4gQWNjZXB0cyB0aGUgc3RyaW5nIGZvcm0gYW5kXG4gKiBzdHJ1Y3R1cmVkIGNvbnRlbnQgYXMgZWl0aGVyIG9uZSB7QGxpbmsgQ2hhdENvbnRlbnRQYXJ0fSBvciBhbiBhcnJheSwgYW5kXG4gKiB5aWVsZHMgYFwiXCJgIGZvciBhbnl0aGluZyBlbHNlIChudWxsLCBhIGxvbmUgaW1hZ2UgcGFydCwgYSBtYWxmb3JtZWQgcGF5bG9hZCkuXG4gKiBUeXBlZCBhcyBgdW5rbm93bmAgYmVjYXVzZSBtb3N0IGNhbGxlcnMgYXJlIHJlYWRpbmcgYSBqdXN0LXBhcnNlZCBKU09OIGJvZHksXG4gKiBhbmQgdGhlIHBvaW50IG9mIHRoaXMgaGVscGVyIGlzIHRoYXQgdGhleSBkbyBub3QgaGF2ZSB0byBwcmUtY2hlY2sgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0Q29udGVudFRvVGV4dChcbiAgY29udGVudDogdW5rbm93bixcbiAgb3B0aW9uczogQ2hhdENvbnRlbnRUb1RleHRPcHRpb25zID0ge30sXG4pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBjb250ZW50O1xuICBjb25zdCBub3JtYWxpemVkID0gY2hhdENvbnRlbnRQYXJ0cyhjb250ZW50KTtcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gXCJcIjtcbiAgY29uc3QgeyBzZXBhcmF0b3IgPSBcIlwiLCB0eXBlcyB9ID0gb3B0aW9ucztcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcGFydCBvZiBub3JtYWxpemVkKSB7XG4gICAgaWYgKHR5cGVzICYmICh0eXBlb2YgcGFydC50eXBlICE9PSBcInN0cmluZ1wiIHx8ICF0eXBlcy5pbmNsdWRlcyhwYXJ0LnR5cGUpKSkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiBwYXJ0LnRleHQgPT09IFwic3RyaW5nXCIpIHBhcnRzLnB1c2gocGFydC50ZXh0KTtcbiAgfVxuICByZXR1cm4gcGFydHMuam9pbihzZXBhcmF0b3IpO1xufVxuIl19
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFpLWNoYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBa0RIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQjtJQUN4RCw4RUFBOEU7SUFDOUUsOEJBQThCO0lBQzlCLHFCQUFxQjtJQUNyQix5RUFBeUU7SUFDekUsT0FBTztJQUNQLFVBQVU7SUFDVixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLG1CQUFtQjtDQUNwQixDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsSUFBNkIsRUFDN0IsUUFBMkIsRUFBRTtJQUU3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsdUJBQXVCLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7WUFBRSxTQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFrQkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZ0I7SUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDbkMsQ0FBQyxDQUFDLE9BQU87UUFDVCxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFDdEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBMkIsRUFBRSxDQUNyRCxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBZ0IsRUFDaEIsVUFBb0MsRUFBRTtJQUV0QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMxQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFFLFNBQVM7UUFDckYsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFJIENoYXQgQ29tcGxldGlvbnMgd2lyZSBzaGFwZXMsIGFzIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBzcGVha3MgdGhlbS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIHJlcXVlc3QvcmVwbHkgcGF5bG9hZCB0eXBlcyBmb3IgYC9jaGF0L2NvbXBsZXRpb25zYCBhbmQgYVxuICogc2VydmluZyBlbmRwb2ludCdzIGBpbnZvY2F0aW9uc2AgVVJMLiBUaGV5IGFyZSBkZWxpYmVyYXRlbHkgZGVjbGFyZWQgaGVyZVxuICogcmF0aGVyIHRoYW4gaW1wb3J0ZWQgZnJvbSB0aGUgT3BlbkFJIG9yIEFJIFNESyBwYWNrYWdlczogYm90aCBrZWVwIHRoZXNlXG4gKiBmaWVsZHMgdW5kZXIgaW50ZXJuYWwgbmFtZXNwYWNlcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGVpciBwdWJsaWMgQVBJLFxuICogd2hlcmVhcyB0aGUgd2lyZSBwYXlsb2FkIGl0c2VsZiBpcyB0aGUgc3RhYmxlIGNvbnRyYWN0IGV2ZXJ5IGNhbGxlciBpbiB0aGlzXG4gKiByZXBvIGFjdHVhbGx5IGNvZGVzIGFnYWluc3QuXG4gKlxuICogUHVyZSB0eXBlcyBwbHVzIG9uZSB0ZXh0LWZsYXR0ZW5pbmcgaGVscGVyIC0gbm8gem9kLCBubyBydW50aW1lIGRlcHMgLSBzbyBhXG4gKiBicm93c2VyIGNsaWVudCwgYSBOb2RlIHByb3h5LCBhbmQgYW4gQXBwS2l0IHBsdWdpbiBjYW4gYWxsIGFncmVlIG9uIHRoZSBzaGFwZVxuICogd2l0aG91dCBhbnkgb2YgdGhlbSBwdWxsaW5nIGluIHRoZSBvdGhlcnMnIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqXG4gKiBUaGUgcm9sZXMgT3BlbkFJIGRlZmluZXMgZm9yIGEgY2hhdCB0dXJuLiB7QGxpbmsgQ2hhdE1lc3NhZ2Uucm9sZX0gaXMgdHlwZWQgYXNcbiAqIGEgcGxhaW4gc3RyaW5nIHJhdGhlciB0aGFuIHRoaXMgdW5pb24sIGJlY2F1c2UgcHJvdmlkZXJzIGFkZCB0aGVpciBvd24gKGZvclxuICogZXhhbXBsZSBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGUgcmVwbGF5cyBhIGBcInJlYXNvbmluZ1wiYCB0dXJuKTsgdXNlIHRoaXMgd2hlblxuICogeW91IHdhbnQgdGhlIHN0YW5kYXJkIHNldCBuYW1lZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2hhdFJvbGUgPSBcInN5c3RlbVwiIHwgXCJkZXZlbG9wZXJcIiB8IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIiB8IFwidG9vbFwiO1xuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiBhIHN0cnVjdHVyZWQgYGNvbnRlbnRgIGFycmF5LiBPbmx5IGB0eXBlYCBhbmQgYHRleHRgIGFyZSByZWFkXG4gKiBoZXJlOyB0aGUgaW5kZXggc2lnbmF0dXJlIGtlZXBzIHByb3ZpZGVyLXNwZWNpZmljIHBhcnRzIChpbWFnZXMsIHRoaW5raW5nXG4gKiBibG9ja3MsIGNhY2hlIG1hcmtlcnMpIGludGFjdCB0aHJvdWdoIGEgcGFyc2Uvc2VyaWFsaXplIHJvdW5kIHRyaXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbnRlbnRQYXJ0IHtcbiAgdHlwZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqIFRoZSBmdW5jdGlvbiBhIHRvb2wgY2FsbCBpbnZva2VzLCB3aXRoIGl0cyBhcmd1bWVudHMgYXMgYSBKU09OIHN0cmluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFRvb2xDYWxsRnVuY3Rpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBKU09OLWVuY29kZWQgYXJndW1lbnQgb2JqZWN0LiBTdHJlYW1lZCBpbiBmcmFnbWVudHMsIHNvIGFzc2VtYmxlIGJlZm9yZSBwYXJzaW5nLiAqL1xuICBhcmd1bWVudHM6IHN0cmluZztcbn1cblxuLyoqIE9uZSB0b29sIGNhbGwgYXR0YWNoZWQgdG8gYW4gYXNzaXN0YW50IHR1cm4uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRUb29sQ2FsbCB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBgXCJmdW5jdGlvblwiYCBpbiBwcmFjdGljZTsgd2lkZW5lZCBzbyBhbiB1bnJlY29nbml6ZWQgdHlwZSByb3VuZC10cmlwcy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICBmdW5jdGlvbjogQ2hhdFRvb2xDYWxsRnVuY3Rpb247XG59XG5cbi8qKlxuICogQSBzaW5nbGUgY2hhdCBtZXNzYWdlLiBgY29udGVudGAgaXMgbnVsbGFibGUgYmVjYXVzZSBhbiBhc3Npc3RhbnQgdHVybiB0aGF0XG4gKiBvbmx5IGNhbGxzIHRvb2xzIGNhcnJpZXMgYGNvbnRlbnQ6IG51bGxgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRNZXNzYWdlIHtcbiAgLyoqIFNlZSB7QGxpbmsgQ2hhdFJvbGV9IGZvciB0aGUgc3RhbmRhcmQgdmFsdWVzOyB3aWRlbmVkIGZvciBwcm92aWRlciBleHRlbnNpb25zLiAqL1xuICByb2xlOiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBzdHJpbmcgfCBDaGF0Q29udGVudFBhcnQgfCBDaGF0Q29udGVudFBhcnRbXSB8IG51bGw7XG4gIHRvb2xfY2FsbHM/OiBDaGF0VG9vbENhbGxbXTtcbiAgLyoqIFNldCBvbiBhIGB0b29sYCB0dXJuLCBrZXlpbmcgaXQgYmFjayB0byB0aGUgY2FsbCBpdCBhbnN3ZXJzLiAqL1xuICB0b29sX2NhbGxfaWQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVG9wLWxldmVsIHJlcXVlc3QgZmllbGRzIGFuIE9wZW5BSSBjbGllbnQgbWF5IHNlbmQgdGhhdCBEYXRhYnJpY2tzIE1vZGVsXG4gKiBTZXJ2aW5nIHJlamVjdHMgb3V0cmlnaHQsIGZhaWxpbmcgdGhlIHdob2xlIHR1cm4gcmF0aGVyIHRoYW4gaWdub3JpbmcgdGhlbS5cbiAqXG4gKiBEYXRhYnJpY2tzIHZhbGlkYXRlcyB0aGUgY2hhdCBib2R5IHN0cmljdGx5LCBzbyBhbiB1bnJlY29nbml6ZWQga2V5IGNvbWVzXG4gKiBiYWNrIGFzIGBwYXJhbGxlbF90b29sX2NhbGxzOiBFeHRyYSBpbnB1dHMgYXJlIG5vdCBwZXJtaXR0ZWRgICh0aGVcbiAqIGdhdGV3YXkncyBweWRhbnRpYyB2YWxpZGF0aW9uKSBvciBganNvbjogdW5rbm93biBmaWVsZCBcInBhcmFsbGVsX3Rvb2xfY2FsbHNcImBcbiAqIChpdHMgc3RyaWN0IEpTT04gZGVjb2RlKSwgZGVwZW5kaW5nIG9uIHRoZSBlbmRwb2ludC4gRXZlcnl0aGluZyBsaXN0ZWQgaGVyZVxuICogaXMgZWl0aGVyIE9wZW5BSS1wbGF0Zm9ybSBib29ra2VlcGluZyB3aXRoIG5vIGJlYXJpbmcgb24gdGhlIGNvbXBsZXRpb24sIG9yIC1cbiAqIGluIHRoZSBjYXNlIG9mIGBwYXJhbGxlbF90b29sX2NhbGxzYCAtIGEgcmVhbCBzZXR0aW5nIERhdGFicmlja3MgaGFzIG5vIHdheVxuICogdG8gYWNjZXB0LCBzbyBkcm9wcGluZyBpdCBpcyB0aGUgb25seSB3YXkgdGhlIHJlcXVlc3QgY2FuIHN1Y2NlZWQgYXQgYWxsLlxuICpcbiAqIENhbGxlcnMgdGhhdCB0cmFuc2xhdGUgYSByZXF1ZXN0IGZpZWxkLWJ5LWZpZWxkIHRocm91Z2ggYW4gYWxsb3dsaXN0IG5ldmVyXG4gKiBuZWVkIHRoaXM7IGl0IGV4aXN0cyBmb3IgdGhlXG4gKiBwYXRocyB0aGF0IGZvcndhcmQgYSBjbGllbnQgYm9keSBsYXJnZWx5IGFzLWlzLlxuICovXG5leHBvcnQgY29uc3QgVU5TVVBQT1JURURfQ0hBVF9GSUVMRFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAvLyBUb29sLWNhbGxpbmcgY29uY3VycmVuY3kgaGludC4gRGF0YWJyaWNrcyByZWplY3RzIGl0OyB0aGUgdXBzdHJlYW0gcHJvdmlkZXJcbiAgLy8gZGVjaWRlcyBwYXJhbGxlbGlzbSBpdHNlbGYuXG4gIFwicGFyYWxsZWxfdG9vbF9jYWxsc1wiLFxuICAvLyBSZXNwb25zZS1wZXJzaXN0ZW5jZSBhbmQgYm9va2tlZXBpbmcgZmllbGRzIGZvciBPcGVuQUkncyBvd24gcGxhdGZvcm0uXG4gIFwic3RvcmVcIixcbiAgXCJtZXRhZGF0YVwiLFxuICBcInNlcnZpY2VfdGllclwiLFxuICBcInByb21wdF9jYWNoZV9rZXlcIixcbiAgXCJzYWZldHlfaWRlbnRpZmllclwiLFxuXTtcblxuLyoqXG4gKiBEZWxldGUgdGhlIGZpZWxkcyBEYXRhYnJpY2tzIHJlamVjdHMgZnJvbSBhIGNoYXQgcmVxdWVzdCBib2R5LCBpbiBwbGFjZS5cbiAqIFJldHVybnMgdGhlIG5hbWVzIGFjdHVhbGx5IHJlbW92ZWQgc28gYSBjYWxsZXIgY2FuIGxvZyB3aGF0IGl0IGRyb3BwZWQuXG4gKlxuICogQHBhcmFtIGJvZHkgLSBQYXJzZWQgY2hhdCByZXF1ZXN0IGJvZHkuIE11dGF0ZWQuXG4gKiBAcGFyYW0gZXh0cmEgLSBBZGRpdGlvbmFsIGZpZWxkIG5hbWVzIHRvIGRyb3AsIGZvciBhIHdvcmtzcGFjZSBvciBlbmRwb2ludFxuICogICB0aGF0IHJlamVjdHMgc29tZXRoaW5nIG5vdCB5ZXQgaW4ge0BsaW5rIFVOU1VQUE9SVEVEX0NIQVRfRklFTERTfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVW5zdXBwb3J0ZWRDaGF0RmllbGRzKFxuICBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZXh0cmE6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGRyb3BwZWQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgWy4uLlVOU1VQUE9SVEVEX0NIQVRfRklFTERTLCAuLi5leHRyYV0pIHtcbiAgICBpZiAoIShmaWVsZCBpbiBib2R5KSkgY29udGludWU7XG4gICAgZGVsZXRlIGJvZHlbZmllbGRdO1xuICAgIGRyb3BwZWQucHVzaChmaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGRyb3BwZWQ7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY2hhdENvbnRlbnRUb1RleHR9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29udGVudFRvVGV4dE9wdGlvbnMge1xuICAvKipcbiAgICogUGxhY2VkIGJldHdlZW4gcGFydHMuIERlZmF1bHRzIHRvIGBcIlwiYCwgd2hpY2ggcmVhc3NlbWJsZXMgYSBtZXNzYWdlIHRoYXQgd2FzXG4gICAqIHNwbGl0IHB1cmVseSBmb3IgdHJhbnNwb3J0OyBwYXNzIGBcIlxcblxcblwiYCB3aGVuIHRoZSBwYXJ0cyBhcmUgc2VwYXJhdGVcbiAgICogcGFyYWdyYXBocyB0aGF0IGEgaHVtYW4gd2lsbCByZWFkLlxuICAgKi9cbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVzdHJpY3QgdG8gdGhlc2UgYHR5cGVgIHZhbHVlcy4gRGVmYXVsdHMgdG8gYWNjZXB0aW5nIGFueSBwYXJ0IGNhcnJ5aW5nXG4gICAqIGB0ZXh0YCwgd2hpY2ggY292ZXJzIHRoZSBgaW5wdXRfdGV4dGAgLyBgb3V0cHV0X3RleHRgIC8gYHRleHRgIHNwZWxsaW5nc1xuICAgKiBkaWZmZXJlbnQgQVBJcyB1c2UgZm9yIHRoZSBzYW1lIHRoaW5nLlxuICAgKi9cbiAgdHlwZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc3RydWN0dXJlZCBjaGF0IGNvbnRlbnQgdG8gYW4gYXJyYXkuIFByb3ZpZGVycyB1c3VhbGx5IGVtaXQgYVxuICogcGFydHMgYXJyYXksIGJ1dCBzb21lIGNvbXBhdGliaWxpdHkgbGF5ZXJzIGNvbGxhcHNlIGEgb25lLXBhcnQgYXJyYXkgdG8gdGhlXG4gKiBvYmplY3QgaXRzZWxmLiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBzdHJpbmdzLCBudWxscywgYW5kIG90aGVyIHNjYWxhclxuICogdmFsdWVzIHNvIGNhbGxlcnMgY2FuIGRpc3Rpbmd1aXNoIHN0cnVjdHVyZWQgY29udGVudCBmcm9tIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0Q29udGVudFBhcnRzKGNvbnRlbnQ6IHVua25vd24pOiBDaGF0Q29udGVudFBhcnRbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoY29udGVudClcbiAgICA/IGNvbnRlbnRcbiAgICA6IGNvbnRlbnQgJiYgdHlwZW9mIGNvbnRlbnQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gW2NvbnRlbnRdXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCF2YWx1ZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB2YWx1ZXMuZmlsdGVyKChwYXJ0KTogcGFydCBpcyBDaGF0Q29udGVudFBhcnQgPT5cbiAgICBCb29sZWFuKHBhcnQgJiYgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIpLFxuICApO1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBtZXNzYWdlIGBjb250ZW50YCB2YWx1ZSB0byBwbGFpbiB0ZXh0LiBBY2NlcHRzIHRoZSBzdHJpbmcgZm9ybSBhbmRcbiAqIHN0cnVjdHVyZWQgY29udGVudCBhcyBlaXRoZXIgb25lIHtAbGluayBDaGF0Q29udGVudFBhcnR9IG9yIGFuIGFycmF5LCBhbmRcbiAqIHlpZWxkcyBgXCJcImAgZm9yIGFueXRoaW5nIGVsc2UgKG51bGwsIGEgbG9uZSBpbWFnZSBwYXJ0LCBhIG1hbGZvcm1lZCBwYXlsb2FkKS5cbiAqIFR5cGVkIGFzIGB1bmtub3duYCBiZWNhdXNlIG1vc3QgY2FsbGVycyBhcmUgcmVhZGluZyBhIGp1c3QtcGFyc2VkIEpTT04gYm9keSxcbiAqIGFuZCB0aGUgcG9pbnQgb2YgdGhpcyBoZWxwZXIgaXMgdGhhdCB0aGV5IGRvIG5vdCBoYXZlIHRvIHByZS1jaGVjayBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXRDb250ZW50VG9UZXh0KFxuICBjb250ZW50OiB1bmtub3duLFxuICBvcHRpb25zOiBDaGF0Q29udGVudFRvVGV4dE9wdGlvbnMgPSB7fSxcbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnRlbnQ7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBjaGF0Q29udGVudFBhcnRzKGNvbnRlbnQpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiBcIlwiO1xuICBjb25zdCB7IHNlcGFyYXRvciA9IFwiXCIsIHR5cGVzIH0gPSBvcHRpb25zO1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIG5vcm1hbGl6ZWQpIHtcbiAgICBpZiAodHlwZXMgJiYgKHR5cGVvZiBwYXJ0LnR5cGUgIT09IFwic3RyaW5nXCIgfHwgIXR5cGVzLmluY2x1ZGVzKHBhcnQudHlwZSkpKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHBhcnQudGV4dCA9PT0gXCJzdHJpbmdcIikgcGFydHMucHVzaChwYXJ0LnRleHQpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKHNlcGFyYXRvcik7XG59XG4iXX0=
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/
|
|
1
|
+
{"root":["../src/display.ts","../src/model.ts","../src/openai-chat.ts","../src/generated/_contracts.ts","../src/generated/_schemas.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"typescript": "^5.9.3"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
27
|
+
"@dbx-tools/shared-core": "^0.9.6",
|
|
28
28
|
"zod": "4.3.6"
|
|
29
29
|
},
|
|
30
30
|
"main": "./lib/index.js",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"./package.json": "./package.json"
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
|
-
"version": "0.9.
|
|
44
|
+
"version": "0.9.6",
|
|
45
45
|
"types": "./lib/index.d.ts",
|
|
46
46
|
"type": "module",
|
|
47
47
|
"exports": {
|
package/src/display.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Vendor / namespace prefixes stripped from a tokenized endpoint name
|
|
@@ -56,7 +56,7 @@ const SEGMENT_SPLIT = /[-_.\s/]+/;
|
|
|
56
56
|
* toModelDisplayName("x", "Claude 4.6 (Preview)") // provided wins
|
|
57
57
|
*/
|
|
58
58
|
export function toModelDisplayName(name: string, provided?: string | null): string {
|
|
59
|
-
const providedTrimmed =
|
|
59
|
+
const providedTrimmed = stringUtils.trimToNull(provided);
|
|
60
60
|
if (providedTrimmed) return providedTrimmed;
|
|
61
61
|
|
|
62
62
|
const segments = name.split(SEGMENT_SPLIT).filter(Boolean);
|
|
@@ -97,7 +97,7 @@ export function toModelDisplayName(name: string, provided?: string | null): stri
|
|
|
97
97
|
|
|
98
98
|
/** Title-case one name segment, uppercasing acronyms and gluing size units. */
|
|
99
99
|
function renderSegment(segment: string): string {
|
|
100
|
-
const tokens = [...
|
|
100
|
+
const tokens = [...stringUtils.tokenizeWithOptions({ capitalize: true }, segment)];
|
|
101
101
|
const out: string[] = [];
|
|
102
102
|
for (let i = 0; i < tokens.length; i += 1) {
|
|
103
103
|
const token = tokens[i]!;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Generated from packages/rs/model. Do not edit.
|
|
2
|
+
|
|
3
|
+
export const ModelClass = {
|
|
4
|
+
ChatThinking: "chat-thinking",
|
|
5
|
+
ChatBalanced: "chat-balanced",
|
|
6
|
+
ChatFast: "chat-fast",
|
|
7
|
+
Embedding: "embedding",
|
|
8
|
+
} as const;
|
|
9
|
+
export type ModelClass = "chat-thinking" | "chat-balanced" | "chat-fast" | "embedding";
|
|
10
|
+
|
|
11
|
+
export const ReasoningEffort = {
|
|
12
|
+
None: "none",
|
|
13
|
+
Minimal: "minimal",
|
|
14
|
+
Low: "low",
|
|
15
|
+
Medium: "medium",
|
|
16
|
+
High: "high",
|
|
17
|
+
Xhigh: "xhigh",
|
|
18
|
+
Max: "max",
|
|
19
|
+
} as const;
|
|
20
|
+
export type ReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
21
|
+
|
|
22
|
+
export type ModelProfile = {
|
|
23
|
+
/**
|
|
24
|
+
* Relative model quality score.
|
|
25
|
+
*/
|
|
26
|
+
quality?: number,
|
|
27
|
+
/**
|
|
28
|
+
* Relative model speed score.
|
|
29
|
+
*/
|
|
30
|
+
speed?: number,
|
|
31
|
+
/**
|
|
32
|
+
* Relative model cost score.
|
|
33
|
+
*/
|
|
34
|
+
cost?: number, };
|
|
35
|
+
|
|
36
|
+
export type ModelStatus = {
|
|
37
|
+
/**
|
|
38
|
+
* Whether Databricks lists the model as retired or deprecated.
|
|
39
|
+
*
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
deprecated: boolean, };
|
|
43
|
+
|
|
44
|
+
export type ServingEndpointSummary = {
|
|
45
|
+
/**
|
|
46
|
+
* Model Serving endpoint name used for invocation.
|
|
47
|
+
*/
|
|
48
|
+
name: string,
|
|
49
|
+
/**
|
|
50
|
+
* Human-readable endpoint or model name.
|
|
51
|
+
*/
|
|
52
|
+
displayName?: string,
|
|
53
|
+
/**
|
|
54
|
+
* Normalized model family parsed from the endpoint identities.
|
|
55
|
+
*/
|
|
56
|
+
family?: string,
|
|
57
|
+
/**
|
|
58
|
+
* Endpoint task, such as chat or embeddings.
|
|
59
|
+
*/
|
|
60
|
+
task?: string,
|
|
61
|
+
/**
|
|
62
|
+
* Endpoint readiness state.
|
|
63
|
+
*/
|
|
64
|
+
state?: string,
|
|
65
|
+
/**
|
|
66
|
+
* Endpoint description supplied by Databricks.
|
|
67
|
+
*/
|
|
68
|
+
description?: string,
|
|
69
|
+
/**
|
|
70
|
+
* Whether the endpoint supports tool calling.
|
|
71
|
+
*/
|
|
72
|
+
supportsTools?: boolean,
|
|
73
|
+
/**
|
|
74
|
+
* AI Gateway model profile scores.
|
|
75
|
+
*/
|
|
76
|
+
profile?: ModelProfile,
|
|
77
|
+
/**
|
|
78
|
+
* Intent-oriented endpoint class.
|
|
79
|
+
*/
|
|
80
|
+
class?: ModelClass,
|
|
81
|
+
/**
|
|
82
|
+
* Provider names mapped to provider-specific model names.
|
|
83
|
+
*/
|
|
84
|
+
serviceNames?: Record<string, string>,
|
|
85
|
+
/**
|
|
86
|
+
* Foundation model name reported by the served entity.
|
|
87
|
+
*/
|
|
88
|
+
modelServiceName?: string,
|
|
89
|
+
/**
|
|
90
|
+
* Reasoning effort values accepted by the endpoint.
|
|
91
|
+
*/
|
|
92
|
+
reasoningEfforts?: Array<ReasoningEffort>,
|
|
93
|
+
/**
|
|
94
|
+
* Retirement status for the served model.
|
|
95
|
+
*/
|
|
96
|
+
status?: ModelStatus,
|
|
97
|
+
/**
|
|
98
|
+
* Embedding vector dimension measured by the caller, when available.
|
|
99
|
+
*/
|
|
100
|
+
dimension?: number, };
|
|
101
|
+
|
|
102
|
+
export type ModelQuery = {
|
|
103
|
+
/**
|
|
104
|
+
* Optional fuzzy model-name search.
|
|
105
|
+
*/
|
|
106
|
+
search?: string,
|
|
107
|
+
/**
|
|
108
|
+
* Requested model-class ceiling, or the exact embedding class.
|
|
109
|
+
*/
|
|
110
|
+
modelClass?: ModelClass,
|
|
111
|
+
/**
|
|
112
|
+
* Whether candidates must support tool calling.
|
|
113
|
+
*/
|
|
114
|
+
requiresTools?: boolean,
|
|
115
|
+
/**
|
|
116
|
+
* Whether retired models remain eligible.
|
|
117
|
+
*/
|
|
118
|
+
includeDeprecated?: boolean,
|
|
119
|
+
/**
|
|
120
|
+
* Maximum number of results.
|
|
121
|
+
*
|
|
122
|
+
* @schema number().int().min(1).max(50).optional()
|
|
123
|
+
*/
|
|
124
|
+
limit?: number,
|
|
125
|
+
/**
|
|
126
|
+
* Maximum fuzzy-match distance.
|
|
127
|
+
*
|
|
128
|
+
* @minimum 0
|
|
129
|
+
* @maximum 1
|
|
130
|
+
*/
|
|
131
|
+
threshold?: number, };
|
|
132
|
+
|
|
133
|
+
export type RankedModel = {
|
|
134
|
+
/**
|
|
135
|
+
* Matching endpoint metadata.
|
|
136
|
+
*/
|
|
137
|
+
endpoint: ServingEndpointSummary,
|
|
138
|
+
/**
|
|
139
|
+
* Intent-oriented endpoint class.
|
|
140
|
+
*/
|
|
141
|
+
modelClass: ModelClass,
|
|
142
|
+
/**
|
|
143
|
+
* Fuzzy-match distance, where lower values are closer.
|
|
144
|
+
*/
|
|
145
|
+
score?: number, };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Generated by ts-to-zod
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
export const modelClassSchema = z.union([z.literal("chat-thinking"), z.literal("chat-balanced"), z.literal("chat-fast"), z.literal("embedding")]);
|
|
5
|
+
|
|
6
|
+
export const reasoningEffortSchema = z.union([z.literal("none"), z.literal("minimal"), z.literal("low"), z.literal("medium"), z.literal("high"), z.literal("xhigh"), z.literal("max")]);
|
|
7
|
+
|
|
8
|
+
export const modelProfileSchema = z.object({
|
|
9
|
+
/**
|
|
10
|
+
* Relative model quality score.
|
|
11
|
+
*/
|
|
12
|
+
quality: z.number().optional(),
|
|
13
|
+
/**
|
|
14
|
+
* Relative model speed score.
|
|
15
|
+
*/
|
|
16
|
+
speed: z.number().optional(),
|
|
17
|
+
/**
|
|
18
|
+
* Relative model cost score.
|
|
19
|
+
*/
|
|
20
|
+
cost: z.number().optional()
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export const modelStatusSchema = z.object({
|
|
24
|
+
/**
|
|
25
|
+
* Whether Databricks lists the model as retired or deprecated.
|
|
26
|
+
*
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
deprecated: z.boolean().default(false)
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export const servingEndpointSummarySchema = z.object({
|
|
33
|
+
/**
|
|
34
|
+
* Model Serving endpoint name used for invocation.
|
|
35
|
+
*/
|
|
36
|
+
name: z.string(),
|
|
37
|
+
/**
|
|
38
|
+
* Human-readable endpoint or model name.
|
|
39
|
+
*/
|
|
40
|
+
displayName: z.string().optional(),
|
|
41
|
+
/**
|
|
42
|
+
* Normalized model family parsed from the endpoint identities.
|
|
43
|
+
*/
|
|
44
|
+
family: z.string().optional(),
|
|
45
|
+
/**
|
|
46
|
+
* Endpoint task, such as chat or embeddings.
|
|
47
|
+
*/
|
|
48
|
+
task: z.string().optional(),
|
|
49
|
+
/**
|
|
50
|
+
* Endpoint readiness state.
|
|
51
|
+
*/
|
|
52
|
+
state: z.string().optional(),
|
|
53
|
+
/**
|
|
54
|
+
* Endpoint description supplied by Databricks.
|
|
55
|
+
*/
|
|
56
|
+
description: z.string().optional(),
|
|
57
|
+
/**
|
|
58
|
+
* Whether the endpoint supports tool calling.
|
|
59
|
+
*/
|
|
60
|
+
supportsTools: z.boolean().optional(),
|
|
61
|
+
/**
|
|
62
|
+
* AI Gateway model profile scores.
|
|
63
|
+
*/
|
|
64
|
+
profile: modelProfileSchema.optional(),
|
|
65
|
+
/**
|
|
66
|
+
* Intent-oriented endpoint class.
|
|
67
|
+
*/
|
|
68
|
+
class: modelClassSchema.optional(),
|
|
69
|
+
/**
|
|
70
|
+
* Provider names mapped to provider-specific model names.
|
|
71
|
+
*/
|
|
72
|
+
serviceNames: z.record(z.string(), z.string()).optional(),
|
|
73
|
+
/**
|
|
74
|
+
* Foundation model name reported by the served entity.
|
|
75
|
+
*/
|
|
76
|
+
modelServiceName: z.string().optional(),
|
|
77
|
+
/**
|
|
78
|
+
* Reasoning effort values accepted by the endpoint.
|
|
79
|
+
*/
|
|
80
|
+
reasoningEfforts: z.array(reasoningEffortSchema).optional(),
|
|
81
|
+
/**
|
|
82
|
+
* Retirement status for the served model.
|
|
83
|
+
*/
|
|
84
|
+
status: modelStatusSchema.optional(),
|
|
85
|
+
/**
|
|
86
|
+
* Embedding vector dimension measured by the caller, when available.
|
|
87
|
+
*/
|
|
88
|
+
dimension: z.number().optional()
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
export const modelQuerySchema = z.object({
|
|
92
|
+
/**
|
|
93
|
+
* Optional fuzzy model-name search.
|
|
94
|
+
*/
|
|
95
|
+
search: z.string().optional(),
|
|
96
|
+
/**
|
|
97
|
+
* Requested model-class ceiling, or the exact embedding class.
|
|
98
|
+
*/
|
|
99
|
+
modelClass: modelClassSchema.optional(),
|
|
100
|
+
/**
|
|
101
|
+
* Whether candidates must support tool calling.
|
|
102
|
+
*/
|
|
103
|
+
requiresTools: z.boolean().optional(),
|
|
104
|
+
/**
|
|
105
|
+
* Whether retired models remain eligible.
|
|
106
|
+
*/
|
|
107
|
+
includeDeprecated: z.boolean().optional(),
|
|
108
|
+
/**
|
|
109
|
+
* Maximum number of results.
|
|
110
|
+
*
|
|
111
|
+
* @schema number().int().min(1).max(50).optional()
|
|
112
|
+
*/
|
|
113
|
+
limit: z.number().int().min(1).max(50).optional(),
|
|
114
|
+
/**
|
|
115
|
+
* Maximum fuzzy-match distance.
|
|
116
|
+
*
|
|
117
|
+
* @minimum 0
|
|
118
|
+
* @maximum 1
|
|
119
|
+
*/
|
|
120
|
+
threshold: z.number().min(0).max(1).optional()
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
export const rankedModelSchema = z.object({
|
|
124
|
+
/**
|
|
125
|
+
* Matching endpoint metadata.
|
|
126
|
+
*/
|
|
127
|
+
endpoint: servingEndpointSummarySchema,
|
|
128
|
+
/**
|
|
129
|
+
* Intent-oriented endpoint class.
|
|
130
|
+
*/
|
|
131
|
+
modelClass: modelClassSchema,
|
|
132
|
+
/**
|
|
133
|
+
* Fuzzy-match distance, where lower values are closer.
|
|
134
|
+
*/
|
|
135
|
+
score: z.number().optional()
|
|
136
|
+
});
|
package/src/model.ts
CHANGED
|
@@ -1,197 +1,72 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* request and type a ranked response without dragging in server
|
|
8
|
-
* dependencies.
|
|
2
|
+
* Browser-safe model contracts generated from the Rust model owner.
|
|
3
|
+
*
|
|
4
|
+
* Rust owns record fields, enum wire values, and field validation metadata.
|
|
5
|
+
* This module preserves the established public names while keeping native FFI
|
|
6
|
+
* initialization out of browser bundles.
|
|
9
7
|
*
|
|
10
8
|
* @module
|
|
11
9
|
*/
|
|
12
10
|
|
|
13
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
ModelClass as GeneratedModelClass,
|
|
13
|
+
ReasoningEffort as GeneratedReasoningEffort,
|
|
14
|
+
type ModelClass as GeneratedModelClassType,
|
|
15
|
+
type ModelProfile as GeneratedModelProfile,
|
|
16
|
+
type ModelQuery as GeneratedModelQuery,
|
|
17
|
+
type ModelStatus as GeneratedModelStatus,
|
|
18
|
+
type RankedModel as GeneratedRankedModel,
|
|
19
|
+
type ReasoningEffort as GeneratedReasoningEffortType,
|
|
20
|
+
type ServingEndpointSummary as GeneratedServingEndpointSummary,
|
|
21
|
+
} from "./generated/_contracts.ts";
|
|
22
|
+
import {
|
|
23
|
+
modelClassSchema,
|
|
24
|
+
modelProfileSchema,
|
|
25
|
+
modelQuerySchema,
|
|
26
|
+
modelStatusSchema,
|
|
27
|
+
rankedModelSchema,
|
|
28
|
+
reasoningEffortSchema,
|
|
29
|
+
servingEndpointSummarySchema,
|
|
30
|
+
} from "./generated/_schemas.ts";
|
|
14
31
|
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
/** Runtime values for the Rust-owned model class contract. */
|
|
33
|
+
export const ModelClass = GeneratedModelClass;
|
|
34
|
+
/** Class of a Databricks Model Serving endpoint. */
|
|
35
|
+
export type ModelClass = GeneratedModelClassType;
|
|
36
|
+
/** Runtime values for the Rust-owned reasoning effort contract. */
|
|
37
|
+
export const ReasoningEffortValues = GeneratedReasoningEffort;
|
|
38
|
+
/** Databricks AI Gateway profile scores. */
|
|
39
|
+
export type ModelProfile = GeneratedModelProfile;
|
|
40
|
+
/** Model catalogue query controls. */
|
|
41
|
+
export type ModelQuery = GeneratedModelQuery;
|
|
42
|
+
/** Model lifecycle status. */
|
|
43
|
+
export type ModelStatus = GeneratedModelStatus;
|
|
44
|
+
/** A Rust-ranked endpoint result. */
|
|
45
|
+
export type RankedModel = GeneratedRankedModel;
|
|
46
|
+
/** Provider wire value accepted as a reasoning effort. */
|
|
47
|
+
export type ReasoningEffort = GeneratedReasoningEffortType;
|
|
48
|
+
/** Normalized metadata for a Databricks Model Serving endpoint. */
|
|
49
|
+
export type ServingEndpointSummary = GeneratedServingEndpointSummary;
|
|
31
50
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
[ModelClass.ChatBalanced]:
|
|
36
|
-
"Good default for most chat and agent work; balances quality, speed, and cost.",
|
|
37
|
-
[ModelClass.ChatFast]:
|
|
38
|
-
"Fastest and cheapest; best for simple tasks like classification, routing, and short summaries.",
|
|
39
|
-
[ModelClass.Embedding]:
|
|
40
|
-
"Produces text embeddings (vectors), not chat replies; not interchangeable with chat models.",
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export const ModelClassSchema = z.enum(ModelClass).describe(
|
|
44
|
-
`Endpoint class slug: ${(Object.values(ModelClass) as ModelClass[])
|
|
45
|
-
.map((modelClass) => {
|
|
46
|
-
return `'${modelClass}' (${ModelClassDescriptions[modelClass]})`;
|
|
47
|
-
})
|
|
48
|
-
.join(", ")}.`,
|
|
51
|
+
/** Runtime schema for the Rust-owned model class wire values. */
|
|
52
|
+
export const ModelClassSchema = modelClassSchema.describe(
|
|
53
|
+
`Endpoint class slug: ${Object.values(GeneratedModelClass).join(", ")}.`,
|
|
49
54
|
);
|
|
50
55
|
|
|
51
|
-
/**
|
|
52
|
-
|
|
53
|
-
* publishes per pay-per-token endpoint (the bars shown in the AI
|
|
54
|
-
* Playground). Surfaced from the serving list under
|
|
55
|
-
* `config.served_entities[].foundation_model.ai_gateway_model_profile`
|
|
56
|
-
* so the class classifier can rank models from live, workspace-local
|
|
57
|
-
* numbers instead of a hand-maintained table. Scales are relative and
|
|
58
|
-
* unitless; all axes are absent for custom or brand-new endpoints that
|
|
59
|
-
* have no profile yet.
|
|
60
|
-
*/
|
|
61
|
-
export const ModelProfileSchema = z.object({
|
|
62
|
-
quality: z.number().optional().describe("Relative quality score; higher is better."),
|
|
63
|
-
speed: z.number().optional().describe("Relative throughput score; higher is faster."),
|
|
64
|
-
cost: z.number().optional().describe("Relative price score; lower is cheaper."),
|
|
65
|
-
});
|
|
66
|
-
export type ModelProfile = z.infer<typeof ModelProfileSchema>;
|
|
56
|
+
/** Runtime schema for Rust-owned Databricks AI Gateway profile scores. */
|
|
57
|
+
export const ModelProfileSchema = modelProfileSchema;
|
|
67
58
|
|
|
68
|
-
/**
|
|
69
|
-
export const ReasoningEffortSchema =
|
|
70
|
-
/** Reasoning-effort wire value published by the Rust model policy. */
|
|
71
|
-
export type ReasoningEffort = z.infer<typeof ReasoningEffortSchema>;
|
|
59
|
+
/** Runtime schema for Rust-owned reasoning effort wire values. */
|
|
60
|
+
export const ReasoningEffortSchema = reasoningEffortSchema;
|
|
72
61
|
|
|
73
|
-
/**
|
|
74
|
-
export const ModelStatusSchema =
|
|
75
|
-
deprecated: z.boolean().default(false),
|
|
76
|
-
});
|
|
77
|
-
export type ModelStatus = z.infer<typeof ModelStatusSchema>;
|
|
62
|
+
/** Runtime schema for Rust-owned model lifecycle status. */
|
|
63
|
+
export const ModelStatusSchema = modelStatusSchema;
|
|
78
64
|
|
|
79
|
-
/**
|
|
80
|
-
|
|
81
|
-
* stable subset of the SDK type so cache hits and `/models` responses
|
|
82
|
-
* never expose SDK internals.
|
|
83
|
-
*/
|
|
84
|
-
export const ServingEndpointSummarySchema = z.object({
|
|
85
|
-
name: z
|
|
86
|
-
.string()
|
|
87
|
-
.describe(
|
|
88
|
-
"Endpoint name as listed by the Model Serving REST API; the id used to invoke the model.",
|
|
89
|
-
),
|
|
90
|
-
displayName: z
|
|
91
|
-
.string()
|
|
92
|
-
.optional()
|
|
93
|
-
.describe(
|
|
94
|
-
"Human-readable label for the endpoint: a Databricks-provided name when present (a display-name tag or external-model name), else a title-cased rendering of `name` with vendor prefixes stripped. `name` remains the invoke id.",
|
|
95
|
-
),
|
|
96
|
-
family: z
|
|
97
|
-
.string()
|
|
98
|
-
.optional()
|
|
99
|
-
.describe(
|
|
100
|
-
"Normalized model family parsed by the Rust model policy, such as 'gpt' or 'claude'.",
|
|
101
|
-
),
|
|
102
|
-
task: z.string().optional().describe("Task hint, e.g. 'llm/v1/chat' or 'llm/v1/embeddings'."),
|
|
103
|
-
state: z.string().optional().describe("Deployment state, e.g. ready, updating, or failed."),
|
|
104
|
-
description: z.string().optional().describe("Free-form endpoint description; informational."),
|
|
105
|
-
supportsTools: z
|
|
106
|
-
.boolean()
|
|
107
|
-
.optional()
|
|
108
|
-
.describe(
|
|
109
|
-
"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.",
|
|
110
|
-
),
|
|
111
|
-
profile: ModelProfileSchema.optional().describe(
|
|
112
|
-
"Foundation Model API quality/speed/cost scores when the endpoint is a scored pay-per-token model; absent otherwise.",
|
|
113
|
-
),
|
|
114
|
-
class: ModelClassSchema.optional().describe(
|
|
115
|
-
"Class the endpoint was classified into; absent when the classifier doesn't recognize it.",
|
|
116
|
-
),
|
|
117
|
-
serviceNames: z
|
|
118
|
-
.record(z.string(), z.string())
|
|
119
|
-
.optional()
|
|
120
|
-
.describe("Provider-specific model service names derived from Databricks metadata."),
|
|
121
|
-
modelServiceName: z
|
|
122
|
-
.string()
|
|
123
|
-
.optional()
|
|
124
|
-
.describe("Preferred first-party model service name for Databricks AI Gateway calls."),
|
|
125
|
-
reasoningEfforts: z
|
|
126
|
-
.array(ReasoningEffortSchema)
|
|
127
|
-
.optional()
|
|
128
|
-
.describe("Reasoning effort levels accepted by the endpoint."),
|
|
129
|
-
status: ModelStatusSchema.optional().describe("Lifecycle status derived from model metadata."),
|
|
130
|
-
dimension: z
|
|
131
|
-
.number()
|
|
132
|
-
.optional()
|
|
133
|
-
.describe(
|
|
134
|
-
"Embedding vector length, measured by a best-effort server-side ping. Only set for embedding endpoints, and only when the probe succeeded.",
|
|
135
|
-
),
|
|
136
|
-
});
|
|
137
|
-
export type ServingEndpointSummary = z.infer<typeof ServingEndpointSummarySchema>;
|
|
65
|
+
/** Runtime schema for Rust-owned normalized endpoint metadata. */
|
|
66
|
+
export const ServingEndpointSummarySchema = servingEndpointSummarySchema;
|
|
138
67
|
|
|
139
|
-
/**
|
|
140
|
-
|
|
141
|
-
* nothing. This is the caller-facing query the `@dbx-tools/model`
|
|
142
|
-
* ranker reads - shaped as a zod schema (with per-field descriptions)
|
|
143
|
-
* so an agent tool can adopt it directly as its `inputSchema` and a
|
|
144
|
-
* browser client can validate args before calling the model service.
|
|
145
|
-
*
|
|
146
|
-
* Every field is optional: an empty query ranks the live catalogue by
|
|
147
|
-
* class alone. The "this class and below" ceiling semantics and the
|
|
148
|
-
* match-then-class ordering live in the service, not here - this
|
|
149
|
-
* surface is declarative.
|
|
150
|
-
*/
|
|
151
|
-
export const ModelQuerySchema = z.object({
|
|
152
|
-
search: z
|
|
153
|
-
.string()
|
|
154
|
-
.optional()
|
|
155
|
-
.describe(
|
|
156
|
-
"Loose name fuzzy-matched against endpoint names, e.g. 'claude sonnet'. Omit to rank by class alone.",
|
|
157
|
-
),
|
|
158
|
-
modelClass: ModelClassSchema.optional().describe(
|
|
159
|
-
"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.",
|
|
160
|
-
),
|
|
161
|
-
requiresTools: z
|
|
162
|
-
.boolean()
|
|
163
|
-
.optional()
|
|
164
|
-
.describe(
|
|
165
|
-
"When true, consider only endpoints that support a complete function-tool round-trip.",
|
|
166
|
-
),
|
|
167
|
-
limit: z
|
|
168
|
-
.number()
|
|
169
|
-
.int()
|
|
170
|
-
.positive()
|
|
171
|
-
.max(50)
|
|
172
|
-
.optional()
|
|
173
|
-
.describe("Maximum number of ranked results to return."),
|
|
174
|
-
threshold: z
|
|
175
|
-
.number()
|
|
176
|
-
.min(0)
|
|
177
|
-
.max(1)
|
|
178
|
-
.optional()
|
|
179
|
-
.describe("Fuzzy-match distance cutoff (0 = exact, 1 = match anything). Default 0.4."),
|
|
180
|
-
});
|
|
181
|
-
export type ModelQuery = z.infer<typeof ModelQuerySchema>;
|
|
68
|
+
/** Runtime schema for Rust-owned model catalogue query controls. */
|
|
69
|
+
export const ModelQuerySchema = modelQuerySchema;
|
|
182
70
|
|
|
183
|
-
/**
|
|
184
|
-
|
|
185
|
-
* `/models` ranked response.
|
|
186
|
-
*/
|
|
187
|
-
export const RankedModelSchema = z.object({
|
|
188
|
-
endpoint: ServingEndpointSummarySchema.describe("The matched serving endpoint."),
|
|
189
|
-
modelClass: ModelClassSchema.describe("Class the endpoint was classified into."),
|
|
190
|
-
score: z
|
|
191
|
-
.number()
|
|
192
|
-
.optional()
|
|
193
|
-
.describe(
|
|
194
|
-
"Fuzzy-match distance (0 = exact .. 1 = worst) when the query carried a search; absent for class-only ranking.",
|
|
195
|
-
),
|
|
196
|
-
});
|
|
197
|
-
export type RankedModel = z.infer<typeof RankedModelSchema>;
|
|
71
|
+
/** Runtime schema for a Rust-ranked endpoint result. */
|
|
72
|
+
export const RankedModelSchema = rankedModelSchema;
|
package/src/openai-chat.ts
CHANGED
|
@@ -75,8 +75,8 @@ export interface ChatMessage {
|
|
|
75
75
|
* in the case of `parallel_tool_calls` - a real setting Databricks has no way
|
|
76
76
|
* to accept, so dropping it is the only way the request can succeed at all.
|
|
77
77
|
*
|
|
78
|
-
* Callers that translate a request field-by-field
|
|
79
|
-
*
|
|
78
|
+
* Callers that translate a request field-by-field through an allowlist never
|
|
79
|
+
* need this; it exists for the
|
|
80
80
|
* paths that forward a client body largely as-is.
|
|
81
81
|
*/
|
|
82
82
|
export const UNSUPPORTED_CHAT_FIELDS: readonly string[] = [
|