@dbx-tools/appkit-model-gateway 0.9.131 → 0.9.132

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 CHANGED
@@ -1,11 +1,18 @@
1
1
  # @dbx-tools/appkit-model-gateway
2
2
 
3
- Give OpenAI-, Anthropic-, and Codex-compatible clients one endpoint for the
4
- models available in a Databricks workspace. The AppKit plugin discovers the
5
- workspace catalogue, exposes familiar model APIs, and chooses a compatible
6
- Databricks route for each request.
3
+ Expose models in a Databricks workspace through OpenAI Responses, OpenAI Chat
4
+ Completions, Anthropic Messages, embeddings, and Codex-compatible APIs. The
5
+ gateway discovers the workspace catalogue and selects a compatible Databricks
6
+ route for each request.
7
7
 
8
- ## Register The AppKit Plugin
8
+ ## Choose embedded, foreground, or service mode
9
+
10
+ Register the AppKit plugin when model routes belong to an existing application.
11
+ Run `dbx model-gateway` for a foreground loopback endpoint used by local tools.
12
+ Use `dbx model-gateway service install` when that local endpoint must continue
13
+ after the terminal closes.
14
+
15
+ ## Register the AppKit plugin
9
16
 
10
17
  ```ts
11
18
  import { createApp, server } from "@databricks/appkit";
@@ -17,15 +24,15 @@ await createApp({
17
24
  ```
18
25
 
19
26
  AppKit mounts the plugin routes under `/api/model-gateway/v1/*`. The
20
- `@dbx-tools/cli/model-gateway` provides foreground server construction and
21
- standard root compatibility paths.
27
+ [@dbx-tools/cli](../../cli/dbx-tools) provides foreground server construction,
28
+ current-user service management, and standard root compatibility paths.
22
29
 
23
- ## Connect A Client
30
+ ## Connect a client
24
31
 
25
32
  Use the standalone CLI when a tool expects an OpenAI-compatible base URL:
26
33
 
27
34
  ```sh
28
- dbx model-gateway --profile PROFILE --port 4000
35
+ dbx model-gateway --profile PROFILE --listen tcp://127.0.0.1:4000
29
36
  ```
30
37
 
31
38
  Add `--prefer-system-models` to route non-exact Responses requests, including
@@ -33,17 +40,18 @@ Codex traffic, through `system.ai.*` AI Gateway services instead of workspace
33
40
  serving endpoints. Codex model slugs follow the same choice. The flag defaults to
34
41
  off, and an exact endpoint id or `system.ai.*` name always wins.
35
42
 
36
- Configure the client with `http://127.0.0.1:4000/v1`. For an embedded AppKit
43
+ Configure the client with
44
+ [http://127.0.0.1:4000/v1](http://127.0.0.1:4000/v1). For an embedded AppKit
37
45
  route, use the app origin plus `/api/model-gateway/v1`.
38
46
 
39
47
  The gateway supports:
40
48
 
41
- - OpenAI Responses and Chat Completions;
42
- - Anthropic Messages;
43
- - OpenAI-compatible embeddings;
49
+ - OpenAI Responses and Chat Completions.
50
+ - Anthropic Messages.
51
+ - OpenAI-compatible embeddings.
44
52
  - Codex model discovery and Responses traffic.
45
53
 
46
- ## Discover Models
54
+ ## Discover models
47
55
 
48
56
  ```ts
49
57
  import { createModelGatewayClient } from "@dbx-tools/shared-model-gateway";
@@ -54,15 +62,22 @@ const models = await client.listModels({ search: "sonnet" });
54
62
 
55
63
  Use `{ codex: true }` when a Codex client needs its native catalogue shape.
56
64
 
57
- ## Request Compatibility
65
+ ## Request compatibility
58
66
 
59
67
  Requests stay on a native streaming path when the selected model supports the
60
68
  client protocol. When protocols differ, the gateway translates the request and
61
- response while preserving streaming and cancellation behavior.
69
+ response through Vercel AI SDK messages while preserving text, function tools,
70
+ reasoning, usage, finish reasons, streaming, and cancellation. Embeddings use a
71
+ direct Databricks embeddings route and are not translated.
62
72
 
63
73
  The gateway rejects stateful Responses options it cannot preserve, including
64
74
  `previous_response_id`, `store: true`, and `background: true`.
65
75
 
76
+ Web-search and custom-tool requests use a direct route only when the discovered
77
+ model advertises the required capability. OpenAI model-list
78
+ `capabilities.web_search` and Codex `supports_search_tool` use that same
79
+ discovered value.
80
+
66
81
  ## Configure Codex
67
82
 
68
83
  `GET /v1/models` includes Codex metadata when the request carries
@@ -77,6 +92,31 @@ http://127.0.0.1:4000/v1
77
92
 
78
93
  Use `wire_api = "responses"` and `supports_websockets = false`.
79
94
 
95
+ ## Configure model policy
96
+
97
+ `model` and `modelClass` set the default selection. `preferSystemModels` selects
98
+ `system.ai.*` AI Gateway services for non-exact eligible requests. An exact
99
+ serving endpoint or `system.ai.*` name still wins.
100
+
101
+ Use `overrides` when workspace metadata must be corrected for a specific model.
102
+ For example, disable an advertised capability that the selected gateway route
103
+ cannot use:
104
+
105
+ ```ts
106
+ import { modelGateway } from "@dbx-tools/appkit-model-gateway";
107
+
108
+ modelGateway({
109
+ overrides: [
110
+ {
111
+ model: "databricks-gpt-example",
112
+ capabilities: { webSearch: false },
113
+ },
114
+ ],
115
+ });
116
+ ```
117
+
118
+ Overrides affect routing and the OpenAI and Codex model catalogues.
119
+
80
120
  ## Package API
81
121
 
82
122
  - `modelGateway()` registers the AppKit plugin.
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-model-gateway";
6
- export const PACKAGE_VERSION = "0.9.131";
6
+ export const PACKAGE_VERSION = "0.9.132";
7
7
  export * as gateway from "./src/gateway.ts";
8
8
  export * as models from "./src/models.ts";
9
9
  export * as plugin from "./src/plugin.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-model-gateway";
2
- export declare const PACKAGE_VERSION = "0.9.131";
2
+ export declare const PACKAGE_VERSION = "0.9.132";
3
3
  export * as gateway from "./src/gateway.ts";
4
4
  export * as models from "./src/models.ts";
5
5
  export * as plugin from "./src/plugin.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-model-gateway";
5
- export const PACKAGE_VERSION = "0.9.131";
5
+ export const PACKAGE_VERSION = "0.9.132";
6
6
  export * as gateway from "./src/gateway.js";
7
7
  export * as models from "./src/models.js";
8
8
  export * as plugin from "./src/plugin.js";
@@ -16,4 +16,4 @@ export { ModelGatewayError, ModelGateway } from "./src/gateway.js";
16
16
  export { ModelGatewayPlugin, modelGateway } from "./src/plugin.js";
17
17
  export { DatabricksModelRegistry } from "./src/registry.js";
18
18
  export { UnsupportedGatewayFeatureError } from "./src/router.js";
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTMxXCI7XG5leHBvcnQgKiBhcyBnYXRld2F5IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHJlYXNvbmluZ0FkYXB0IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCAqIGFzIHJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9yZWdpc3RyeS50c1wiO1xuZXhwb3J0ICogYXMgcm91dGVyIGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvdXRlcyBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHRyYW5zcG9ydCBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlFcnJvciwgTW9kZWxHYXRld2F5IH0gZnJvbSBcIi4vc3JjL2dhdGV3YXkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlQbHVnaW4sIG1vZGVsR2F0ZXdheSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5UGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkSW5mZXJlbmNlQm9keSB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NNb2RlbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL3JlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucywgTW9kZWxSZWdpc3RyeSwgTW9kZWxSZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcmVnaXN0cnkudHNcIjtcbmV4cG9ydCB7IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciB9IGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTMyXCI7XG5leHBvcnQgKiBhcyBnYXRld2F5IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHJlYXNvbmluZ0FkYXB0IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCAqIGFzIHJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9yZWdpc3RyeS50c1wiO1xuZXhwb3J0ICogYXMgcm91dGVyIGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvdXRlcyBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHRyYW5zcG9ydCBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlFcnJvciwgTW9kZWxHYXRld2F5IH0gZnJvbSBcIi4vc3JjL2dhdGV3YXkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlQbHVnaW4sIG1vZGVsR2F0ZXdheSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5UGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkSW5mZXJlbmNlQm9keSB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NNb2RlbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL3JlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucywgTW9kZWxSZWdpc3RyeSwgTW9kZWxSZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcmVnaXN0cnkudHNcIjtcbmV4cG9ydCB7IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciB9IGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG4iXX0=
package/package.json CHANGED
@@ -27,12 +27,12 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@databricks/appkit": "0.81.0",
30
- "@dbx-tools/databricks": "^0.9.131",
31
- "@dbx-tools/model": "^0.9.131",
32
- "@dbx-tools/model-protocol": "^0.9.131",
33
- "@dbx-tools/shared-core": "^0.9.131",
34
- "@dbx-tools/shared-model": "^0.9.131",
35
- "@dbx-tools/shared-model-gateway": "^0.9.131",
30
+ "@dbx-tools/databricks": "^0.9.132",
31
+ "@dbx-tools/model": "^0.9.132",
32
+ "@dbx-tools/model-protocol": "^0.9.132",
33
+ "@dbx-tools/shared-core": "^0.9.132",
34
+ "@dbx-tools/shared-model": "^0.9.132",
35
+ "@dbx-tools/shared-model-gateway": "^0.9.132",
36
36
  "ai": "^7.0.0",
37
37
  "zod": "4.3.6"
38
38
  },
@@ -90,7 +90,7 @@
90
90
  "./package.json": "./package.json"
91
91
  }
92
92
  },
93
- "version": "0.9.131",
93
+ "version": "0.9.132",
94
94
  "types": "./lib/index.d.ts",
95
95
  "dbxToolsConfig": {
96
96
  "tags": [