@code-yeongyu/senpi 2026.9.28-2 → 2026.9.28-3
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/CHANGELOG.md +14 -0
- package/dist/bundle/chunks/{app-server-command-H6LFICZ2.js → app-server-command-JTHJ2U7J.js} +1 -1
- package/dist/bundle/chunks/{chunk-LSW7QSLV.js → chunk-6XBT6OGS.js} +36 -34
- package/dist/bundle/chunks/chunk-OP3QMR6B.js +8 -0
- package/dist/bundle/chunks/{cli-main-GYRTYPMG.js → cli-main-Z2Y55XHU.js} +1 -1
- package/dist/bundle/chunks/{interactive-mode-LX665HTP.js → interactive-mode-A3EYB6DW.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-MFTUM6XQ.js → multi-session-host-HM2UJ4ER.js} +2 -2
- package/dist/bundle/chunks/{package-manager-cli-6IAE5WG3.js → package-manager-cli-T7Q4AZKX.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-XN3HNZMH.js → rpc-mode-ROB6IG6J.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +140 -138
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/core/webview/bun-chrome.d.ts +15 -0
- package/dist/core/webview/bun-chrome.d.ts.map +1 -0
- package/dist/core/webview/bun-chrome.js +91 -0
- package/dist/core/webview/bun-chrome.js.map +1 -0
- package/dist/core/webview/native-webview.d.ts +16 -0
- package/dist/core/webview/native-webview.d.ts.map +1 -0
- package/dist/core/webview/native-webview.js +15 -0
- package/dist/core/webview/native-webview.js.map +1 -0
- package/dist/core/webview/webview-broker.d.ts +27 -0
- package/dist/core/webview/webview-broker.d.ts.map +1 -0
- package/dist/core/webview/webview-broker.js +120 -0
- package/dist/core/webview/webview-broker.js.map +1 -0
- package/dist/core/webview/webview-client.d.ts +19 -0
- package/dist/core/webview/webview-client.d.ts.map +1 -0
- package/dist/core/webview/webview-client.js +135 -0
- package/dist/core/webview/webview-client.js.map +1 -0
- package/dist/core/webview/webview-service.d.ts +26 -0
- package/dist/core/webview/webview-service.d.ts.map +1 -0
- package/dist/core/webview/webview-service.js +102 -0
- package/dist/core/webview/webview-service.js.map +1 -0
- package/dist/core/webview/webview-wire.d.ts +76 -0
- package/dist/core/webview/webview-wire.d.ts.map +1 -0
- package/dist/core/webview/webview-wire.js +57 -0
- package/dist/core/webview/webview-wire.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/rpc/session-worker-client.d.ts +2 -0
- package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
- package/dist/modes/rpc/session-worker-client.js +7 -1
- package/dist/modes/rpc/session-worker-client.js.map +1 -1
- package/dist/modes/rpc/session-worker.js +3 -1
- package/dist/modes/rpc/session-worker.js.map +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +14 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +14 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/inline-worker.ts +2 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/local-module-loader.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/webview-host.ts +59 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-core.js +17 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-host.ts +2 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-runtime.js +2 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-slot.ts +14 -5
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-webview-client.js +79 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-webview.js +204 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-queue.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/runtime-apis.md +1 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
- package/dist/bundle/chunks/chunk-KOPTADA3.js +0 -8
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { DELIVER_EVENT, WebViewPortClient, webViewError } from "./worker-webview-client.js";
|
|
2
|
+
|
|
3
|
+
// Bun constructs "chrome"-backend WebViews only on the process main thread, and this kernel runs in
|
|
4
|
+
// a worker where `globalThis.Bun` and `Bun.WebView` are non-writable. Cells therefore run with a
|
|
5
|
+
// `Bun` parameter bound to a stand-in whose `WebView` forwards Chrome-backed views to the
|
|
6
|
+
// main-thread service over a private port; every other `Bun.*` member is the real one.
|
|
7
|
+
const KERNEL_BUN = Symbol.for("senpi.kernel.bun");
|
|
8
|
+
|
|
9
|
+
export function bindKernelBun(source) {
|
|
10
|
+
if (!globalThis[KERNEL_BUN]) return source;
|
|
11
|
+
return `((Bun) => ${source})(globalThis[Symbol.for("senpi.kernel.bun")])`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function installKernelWebView(requestPort) {
|
|
15
|
+
const bun = globalThis.Bun;
|
|
16
|
+
if (typeof bun !== "object" || bun === null || typeof bun.WebView !== "function") return;
|
|
17
|
+
globalThis[KERNEL_BUN] = shadowBun(bun, createKernelWebView(bun.WebView, requestPort));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function shadowBun(real, WebView) {
|
|
21
|
+
return new Proxy(
|
|
22
|
+
{},
|
|
23
|
+
{
|
|
24
|
+
get: (_target, key) => (key === "WebView" ? WebView : Reflect.get(real, key)),
|
|
25
|
+
set: (_target, key, value) => Reflect.set(real, key, value),
|
|
26
|
+
has: (_target, key) => key === "WebView" || Reflect.has(real, key),
|
|
27
|
+
ownKeys: () => Reflect.ownKeys(real),
|
|
28
|
+
getOwnPropertyDescriptor: (_target, key) => {
|
|
29
|
+
if (key === "WebView") return { value: WebView, writable: false, enumerable: true, configurable: true };
|
|
30
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(real, key);
|
|
31
|
+
return descriptor && { ...descriptor, configurable: true };
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// The macOS default (WebKit) stays a native worker view: its host process serves any thread.
|
|
38
|
+
function needsMainThread(options) {
|
|
39
|
+
const backend = options?.backend;
|
|
40
|
+
if (backend === undefined) return process.platform !== "darwin";
|
|
41
|
+
return backend === "chrome" || (typeof backend === "object" && backend !== null && backend.type === "chrome");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function closedError(method) {
|
|
45
|
+
const error = new Error(`Invalid state: WebView.${method}: view is closed`);
|
|
46
|
+
error.code = "ERR_INVALID_STATE";
|
|
47
|
+
return error;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function createKernelWebView(NativeWebView, requestPort) {
|
|
51
|
+
let connecting = null;
|
|
52
|
+
const proxied = new WeakSet();
|
|
53
|
+
const live = new Set();
|
|
54
|
+
const natives = new Set();
|
|
55
|
+
const finalizer = new FinalizationRegistry(({ client, viewId }) => client.post({ kind: "close", viewId }));
|
|
56
|
+
|
|
57
|
+
function connect() {
|
|
58
|
+
if (!connecting) {
|
|
59
|
+
const attempt = requestPort().then(port => new WebViewPortClient(port, () => (connecting = null)));
|
|
60
|
+
attempt.catch(() => {
|
|
61
|
+
if (connecting === attempt) connecting = null;
|
|
62
|
+
});
|
|
63
|
+
connecting = attempt;
|
|
64
|
+
}
|
|
65
|
+
return connecting;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
class WebView extends EventTarget {
|
|
69
|
+
static closeAll() {
|
|
70
|
+
for (const view of [...live]) view.close();
|
|
71
|
+
for (const ref of [...natives]) ref.deref()?.close();
|
|
72
|
+
natives.clear();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
static [Symbol.hasInstance](value) {
|
|
76
|
+
return value instanceof NativeWebView || proxied.has(value);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#viewId = crypto.randomUUID();
|
|
80
|
+
#state = { url: "", title: "", loading: false };
|
|
81
|
+
#listening = new Set();
|
|
82
|
+
#console;
|
|
83
|
+
#ready;
|
|
84
|
+
#closed = false;
|
|
85
|
+
onNavigated = null;
|
|
86
|
+
onNavigationFailed = null;
|
|
87
|
+
|
|
88
|
+
constructor(options = {}) {
|
|
89
|
+
if (!needsMainThread(options)) {
|
|
90
|
+
const view = new NativeWebView(options);
|
|
91
|
+
natives.add(new WeakRef(view));
|
|
92
|
+
return view;
|
|
93
|
+
}
|
|
94
|
+
super();
|
|
95
|
+
const { console: capture, ...rest } = options;
|
|
96
|
+
this.#console = capture;
|
|
97
|
+
proxied.add(this);
|
|
98
|
+
live.add(this);
|
|
99
|
+
const viewId = this.#viewId;
|
|
100
|
+
this.#ready = connect().then(async client => {
|
|
101
|
+
client.register(viewId, this);
|
|
102
|
+
finalizer.register(this, { client, viewId }, this);
|
|
103
|
+
const reply = await client.request({ kind: "create", viewId, options: rest, captureConsole: capture !== undefined });
|
|
104
|
+
this.#apply(reply.state);
|
|
105
|
+
return client;
|
|
106
|
+
});
|
|
107
|
+
this.#ready.catch(() => {});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
get url() {
|
|
111
|
+
return this.#state.url;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
get title() {
|
|
115
|
+
return this.#state.title;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
get loading() {
|
|
119
|
+
return this.#state.loading;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
navigate(url) { return this.#call("navigate", [url]); }
|
|
123
|
+
evaluate(script) { return this.#call("evaluate", [script]); }
|
|
124
|
+
click(...args) { return this.#call("click", args); }
|
|
125
|
+
type(text) { return this.#call("type", [text]); }
|
|
126
|
+
press(...args) { return this.#call("press", args); }
|
|
127
|
+
scroll(dx, dy) { return this.#call("scroll", [dx, dy]); }
|
|
128
|
+
scrollTo(...args) { return this.#call("scrollTo", args); }
|
|
129
|
+
resize(width, height) { return this.#call("resize", [width, height]); }
|
|
130
|
+
back() { return this.#call("back", []); }
|
|
131
|
+
forward() { return this.#call("forward", []); }
|
|
132
|
+
reload() { return this.#call("reload", []); }
|
|
133
|
+
cdp(...args) { return this.#call("cdp", args); }
|
|
134
|
+
|
|
135
|
+
async screenshot(options) {
|
|
136
|
+
const value = await this.#call("screenshot", [options]);
|
|
137
|
+
if (options?.encoding === "buffer" && value instanceof Uint8Array) return Buffer.from(value.buffer, value.byteOffset, value.byteLength);
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
addEventListener(type, listener, options) {
|
|
142
|
+
super.addEventListener(type, listener, options);
|
|
143
|
+
if (this.#closed || this.#listening.has(type)) return;
|
|
144
|
+
this.#listening.add(type);
|
|
145
|
+
const viewId = this.#viewId;
|
|
146
|
+
this.#ready.then(client => client.post({ kind: "listen", viewId, event: type }), () => {});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
close() {
|
|
150
|
+
if (this.#closed) return;
|
|
151
|
+
this.#closed = true;
|
|
152
|
+
live.delete(this);
|
|
153
|
+
const viewId = this.#viewId;
|
|
154
|
+
this.#ready.then(
|
|
155
|
+
client => {
|
|
156
|
+
client.post({ kind: "close", viewId });
|
|
157
|
+
client.forget(viewId);
|
|
158
|
+
finalizer.unregister(this);
|
|
159
|
+
},
|
|
160
|
+
() => {},
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
[Symbol.dispose]() {
|
|
165
|
+
this.close();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
[Symbol.asyncDispose]() {
|
|
169
|
+
this.close();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
[DELIVER_EVENT](event) {
|
|
173
|
+
if (event.type === "console") {
|
|
174
|
+
const [type, ...args] = event.args;
|
|
175
|
+
if (typeof this.#console === "function") this.#console(type, ...args);
|
|
176
|
+
else this.#console?.[type]?.(...args);
|
|
177
|
+
} else if (event.type === "navigated") {
|
|
178
|
+
this.#state = { ...this.#state, url: event.url, title: event.title };
|
|
179
|
+
this.onNavigated?.(event.url, event.title);
|
|
180
|
+
} else if (event.type === "navigation-failed") {
|
|
181
|
+
this.onNavigationFailed?.(webViewError(event.error));
|
|
182
|
+
} else if (event.type === "dom") {
|
|
183
|
+
this.dispatchEvent(new MessageEvent(event.name, { data: event.data }));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
async #call(method, args) {
|
|
188
|
+
if (this.#closed) throw closedError(method);
|
|
189
|
+
const client = await this.#ready;
|
|
190
|
+
if (this.#closed) throw closedError(method);
|
|
191
|
+
const trimmed = [...args];
|
|
192
|
+
while (trimmed.length > 0 && trimmed.at(-1) === undefined) trimmed.pop();
|
|
193
|
+
const reply = await client.request({ kind: "call", viewId: this.#viewId, method, args: trimmed });
|
|
194
|
+
this.#apply(reply.state);
|
|
195
|
+
return reply.value;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
#apply(state) {
|
|
199
|
+
if (state) this.#state = state;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return WebView;
|
|
204
|
+
}
|
package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/runtime-apis.md
CHANGED
|
@@ -34,6 +34,7 @@ await Bun.write("page.png", await view.screenshot());
|
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
- macOS: system WebKit, nothing to install. macOS/Linux/Windows: can drive installed Chrome/Chromium/Edge.
|
|
37
|
+
- In the eval js kernel, Chrome-backed views (the default off macOS, or `backend: "chrome"`) are served by the process main thread; the API is the same, a constructor error surfaces on the first awaited call, and `Bun.WebView.closeAll()` closes only this kernel's views. A kernel reset closes every view the kernel left open.
|
|
37
38
|
- Clicks/scrolls are trusted user input (`event.isTrusted === true`).
|
|
38
39
|
- Extends `EventTarget`; screenshots are `Blob`s; `.cdp(method, params?)` escape hatch for raw Chrome DevTools Protocol.
|
|
39
40
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@earendil-works/pi-agent-core",
|
|
3
|
-
"version": "2026.9.28-
|
|
3
|
+
"version": "2026.9.28-3",
|
|
4
4
|
"description": "General-purpose agent with transport abstraction, state management, and attachment support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@earendil-works/chord": "0.85.1",
|
|
60
|
-
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.28-
|
|
61
|
-
"@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.28-
|
|
60
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.28-3",
|
|
61
|
+
"@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.28-3",
|
|
62
62
|
"diff": "9.0.0",
|
|
63
63
|
"ignore": "7.0.9",
|
|
64
64
|
"typebox": "1.3.34",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":3,"generatedAt":"2026-09-
|
|
1
|
+
{"schemaVersion":3,"generatedAt":"2026-09-28T03:11:42.374Z","structureHash":"f043cc876d79405c6048c3a9e48e953ef4b8c0f1cfc4ee8cf88d78fcebf412f1","files":{"alibaba-token-plan.json":"3a9c1be76d47459371e9fa2feeffc31e7edbbfec65fa9cc41236988efc4cf6d9","amazon-bedrock.json":"848e38fd1ade9c6e94c3037c1c6104ac515809a6f190d264eafd9f48ab0ae1ae","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"f9db437d92449fb860a2d457a6019cdfd51c11180c08df2b5f14d75ade773953","azure-openai-responses.json":"d97b98b63595dd30c138a5bcba724017f5c09c489b56be254828a298cfa087e1","bai.json":"2b12b15bd43462e60711944dd7283db8676611d9d76c82c2a01f64913e16a67e","baseten.json":"d155c434294b5167244cffb6dea6793f9669e91e8ab65b564f9510d81b330e37","cerebras.json":"3be228c613905c215c9da3d0b3535e10cc594ff2351b05390744c7c34de89b6c","chatgpt-subscription.json":"421c6ad932de4259c8f0c08589da278bed99ec80c042f2490d8ffd2a86f4da99","cloudflare-ai-gateway.json":"b64cc5c7c0df4bfce0c3c2b14fe5290636553914b09718634668ad98276a9bc5","cloudflare-workers-ai.json":"8ee15540a01cf79d0e4063c493ae3c436af2fc1d456f9faf1b066418247183e9","deepseek.json":"b5f9693ec641e9a957dc5f7a22042b3bb928bac3d7268406619b6f18e21c4b83","fireworks.json":"bbb8149854a2658f221afa47ae8e2617e6b58a8e2784aa822faaf54f0c0f18c3","github-copilot.json":"5c9fc5b1b553a26aa7bc843a3e36fa14cf220d528ecd89528c601c5090c88a2d","google-vertex.json":"97d80ac909d256cc1bf19ac54d9d8131c492e7c0c102ad89f68ade528544e0ad","google.json":"68f6cf6283cc0d69b77b0fa79e9c94774e96524f61ebba616319f05d5c9db56c","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"2f93082144a7b2a1cbf79148244ce7559e0428d6310c5eb0648bca89b15a8b4b","minimax-cn.json":"4f636b47b28a507ad33b5eaba33fc4889e5956504d10f2a0d9c61167ae01ff1d","minimax.json":"9fd1764ffeefebded8579039cf0c48854a43e4c5b724f62361fc2ac54f705aa1","mistral.json":"be522597b22bceeb0bb9a0ba1781647649ffd19637d0c8e67b056d7b0ec33d52","moonshotai-cn.json":"326de79b46f6fdbf0879f005b3040d1b14049e81fa678de407b73ed1bd3bce9c","moonshotai.json":"4b917a375e9c880b903927cf5fe1ae1052c74b64d5027a007bb1e67ad0410755","nvidia.json":"6493e09b5db8b8fe9c8fae5bc15dc287645f37f83a4ed3a1ad1181e5830b5ff7","openai.json":"1856254ecf9b016193c34c9081e2fd87b95bfb837d9ee6dbf6c0e30c94044fd5","opencode-go.json":"00b2c0154285829e8db1e7b9ad492771b098cb88a61b036e51a6861b2f2f6dc1","opencode.json":"1655e248e76f919fd14ca4b8a6201d1dd89b2190b295028c5d7a4a2a03809946","opengateway.json":"121f544154757cfbccd3bc3d7344986a5822886c12e1c00b39ebf20ef609f239","openrouter.json":"916bf276018cfdef66903fd6442749ecd407022990f5e8a6a21b30ff26054bb7","qwen-token-plan-cn.json":"4bf520ed38e5c3045680d2ec2816fa8a69079dbe97f7b929767a63172288da6b","qwen-token-plan-individual.json":"eb040e78595853e980011308b1bf9caacae6dc8a91abbac5ffebd402515dd2a6","qwen-token-plan.json":"a5c67213745329ec3ba79f712f31c1c32a781d7ffb8c04f9819f36c27672531f","together.json":"200fa2cc0b4666e3818c260e41b9925b925180e2d0931d7c900e16494b2314b4","venice.json":"d34b566ee6e7a2ed31abd9099a1c0448f1d521fc696382d03d86c90634270cf1","vercel-ai-gateway.json":"95a697cd6f9eba46972dbfa301e80f18f45c701e6068c0326d2f36da10b7ce7e","xai.json":"9b23faa5218e966a17108c05d2498a617ade1eae9b0d0684284c77d67949a3f1","xiaomi-token-plan-ams.json":"7df74a255259fc1d5be8e682c3ffb0908eaaf0af711f6433dedcf345ce3e8393","xiaomi-token-plan-cn.json":"7dc672723d5b37e5b92605752f74f46f44eba10be2b0cb959790260b9e0c2a4e","xiaomi-token-plan-sgp.json":"69b333b158be038459a511a673f4536a5b03d4931c3119339f1ac741bc03d502","xiaomi.json":"333299657f211ad9edac0f3d4298b7e5776626914c9c80e22305a87533f23966","zai-coding-cn.json":"69c572aa75104f16ccbddbaace60c267f4bcc74f86d34891ca43110d312fb1ad","zai.json":"15c8182a88e58bdc1b1c3eb0603c690475342c8a826ceddfe9af1b36b28345ee"}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"azure-openai-responses":{"gpt-4":{"id":"gpt-4","name":"GPT-4","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text"],"cost":{"input":30,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":8192,"maxTokens":8192},"gpt-4-turbo":{"id":"gpt-4-turbo","name":"GPT-4 Turbo","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":10,"output":30,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0.5,"cacheWrite":0},"contextWindow":1047576,"maxTokens":32768},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":0.4,"output":1.6,"cacheRead":0.1,"cacheWrite":0},"contextWindow":1047576,"maxTokens":32768},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 nano","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":0.1,"output":0.4,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1047576,"maxTokens":32768},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":1.25,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-4o-2024-05-13":{"id":"gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},"gpt-4o-2024-08-06":{"id":"gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":1.25,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-4o-2024-11-20":{"id":"gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":1.25,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.075,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-5":{"id":"gpt-5","name":"GPT-5","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-chat-latest":{"id":"gpt-5-chat-latest","name":"GPT-5 Chat Latest","api":"azure-openai-responses","baseUrl":"","provider":"azure-openai-responses","reasoning":false,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":2,"cacheRead":0.025,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.05,"output":0.4,"cacheRead":0.005,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":15,"output":120,"cacheRead":0,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.2-chat-latest":{"id":"gpt-5.2-chat-latest","name":"GPT-5.2 Chat","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.2-pro":{"id":"gpt-5.2-pro","name":"GPT-5.2 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.3-chat-latest":{"id":"gpt-5.3-chat-latest","name":"GPT-5.3 Chat (latest)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.3-codex-spark":{"id":"gpt-5.3-codex-spark","name":"GPT-5.3 Codex Spark","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":128000,"maxTokens":32000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0.25,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":4.5,"cacheRead":0.075,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.2,"output":1.25,"cacheRead":0.02,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":30,"cacheRead":0.5,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","minimal":null,"low":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.2,"output":1.2,"cacheRead":0.02,"cacheWrite":0.25},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.4,"cacheWrite":5},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":2.5},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":10,"output":50,"cacheRead":1,"cacheWrite":12.5},"contextWindow":600000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.5,"cacheRead":0.01,"cacheWrite":0.125},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"xhigh":"xhigh","max":"max","minimal":null,"low":"low","medium":"medium","high":"high"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0.2,"cacheWrite":2.5},"contextWindow":400000,"maxTokens":128000,"thinkingLevelMap":{"xhigh":"xhigh","max":"max","minimal":null,"low":"low","medium":"medium","high":"high"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-realtime-2.1":{"id":"gpt-realtime-2.1","name":"GPT-Realtime-2.1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":24,"cacheRead":0.4,"cacheWrite":0},"contextWindow":128000,"maxTokens":32000},"o1":{"id":"o1","name":"o1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":15,"output":60,"cacheRead":7.5,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o1-pro":{"id":"o1-pro","name":"o1-pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":150,"output":600,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o3":{"id":"o3","name":"o3","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0.5,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o3-mini":{"id":"o3-mini","name":"o3-mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0.55,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o3-pro":{"id":"o3-pro","name":"o3-pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":20,"output":80,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o4-mini":{"id":"o4-mini","name":"o4-mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.1,"output":4.4,"cacheRead":0.275,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000}}}
|
|
1
|
+
{"azure-openai-responses":{"gpt-4":{"id":"gpt-4","name":"GPT-4","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text"],"cost":{"input":30,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":8192,"maxTokens":8192},"gpt-4-turbo":{"id":"gpt-4-turbo","name":"GPT-4 Turbo","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":10,"output":30,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0.5,"cacheWrite":0},"contextWindow":1047576,"maxTokens":32768},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":0.4,"output":1.6,"cacheRead":0.1,"cacheWrite":0},"contextWindow":1047576,"maxTokens":32768},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 nano","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":0.1,"output":0.4,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1047576,"maxTokens":32768},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":1.25,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-4o-2024-05-13":{"id":"gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},"gpt-4o-2024-08-06":{"id":"gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":1.25,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-4o-2024-11-20":{"id":"gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":1.25,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.075,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"gpt-5":{"id":"gpt-5","name":"GPT-5","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-chat-latest":{"id":"gpt-5-chat-latest","name":"GPT-5 Chat Latest","api":"azure-openai-responses","baseUrl":"","provider":"azure-openai-responses","reasoning":false,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":2,"cacheRead":0.025,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.05,"output":0.4,"cacheRead":0.005,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":15,"output":120,"cacheRead":0,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.2-chat-latest":{"id":"gpt-5.2-chat-latest","name":"GPT-5.2 Chat","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.2-pro":{"id":"gpt-5.2-pro","name":"GPT-5.2 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.3-chat-latest":{"id":"gpt-5.3-chat-latest","name":"GPT-5.3 Chat (latest)","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":false,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.3-codex-spark":{"id":"gpt-5.3-codex-spark","name":"GPT-5.3 Codex Spark","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0.175,"cacheWrite":0},"contextWindow":128000,"maxTokens":32000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0.25,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":4.5,"cacheRead":0.075,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.2,"output":1.25,"cacheRead":0.02,"cacheWrite":0},"contextWindow":272000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":30,"cacheRead":0.5,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","minimal":null,"low":null},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.2,"output":1.2,"cacheRead":0.02,"cacheWrite":0.25},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.4,"cacheWrite":5},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":2.5},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":10,"output":50,"cacheRead":1,"cacheWrite":12.5},"contextWindow":600000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.5,"cacheRead":0.01,"cacheWrite":0.125},"contextWindow":922000,"maxTokens":128000,"thinkingLevelMap":{"xhigh":"xhigh","max":"max","minimal":null,"low":"low","medium":"medium","high":"high"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0.2,"cacheWrite":2.5},"contextWindow":400000,"maxTokens":128000,"thinkingLevelMap":{"xhigh":"xhigh","max":"max","minimal":null,"low":"low","medium":"medium","high":"high"},"compat":{"supportsOpenAIGrammarTools":true}},"gpt-daybreak-blue-latest":{"id":"gpt-daybreak-blue-latest","name":"Daybreak Blue","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.4,"cacheWrite":5},"contextWindow":1050000,"maxTokens":128000},"gpt-daybreak-red-latest":{"id":"gpt-daybreak-red-latest","name":"Daybreak Red","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":12.5,"output":75,"cacheRead":1.25,"cacheWrite":15.625},"contextWindow":400000,"maxTokens":128000},"gpt-realtime-2.1":{"id":"gpt-realtime-2.1","name":"GPT-Realtime-2.1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":24,"cacheRead":0.4,"cacheWrite":0},"contextWindow":128000,"maxTokens":32000},"o1":{"id":"o1","name":"o1","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":15,"output":60,"cacheRead":7.5,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o1-pro":{"id":"o1-pro","name":"o1-pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":150,"output":600,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o3":{"id":"o3","name":"o3","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0.5,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o3-mini":{"id":"o3-mini","name":"o3-mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0.55,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o3-pro":{"id":"o3-pro","name":"o3-pro","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":20,"output":80,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},"o4-mini":{"id":"o4-mini","name":"o4-mini","api":"azure-openai-responses","provider":"azure-openai-responses","baseUrl":"","reasoning":true,"input":["text","image"],"cost":{"input":1.1,"output":4.4,"cacheRead":0.275,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000}}}
|