forked from router-for-me/CLIProxyAPI
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathprovider-quickstarts.html
More file actions
419 lines (417 loc) · 267 KB
/
provider-quickstarts.html
File metadata and controls
419 lines (417 loc) · 267 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Provider Quickstarts | cliproxy++</title>
<meta name="description" content="cliproxyapi-plusplus documentation">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.Cv8KQT_A.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.DAWI9Mei.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.npqyt1PR.js">
<link rel="modulepreload" href="/assets/chunks/framework.DM0yugQT.js">
<link rel="modulepreload" href="/assets/provider-quickstarts.md.C051m4Fo.lean.js">
<link rel="icon" href="/favicon.ico">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-fcbfc0e0></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-fcbfc0e0>Skip to content</a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-9f43907a><a class="title" href="/" data-v-9f43907a><!--[--><!--]--><!----><span data-v-9f43907a>cliproxy++</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Home</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/start-here" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Start Here</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tutorials/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Tutorials</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/how-to/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>How-to</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/explanation/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Explanation</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/getting-started" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Getting Started</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/provider-usage" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Providers</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/provider-catalog" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Provider Catalog</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/operations/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Operations</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/routing-reference" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Reference</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/api/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docsets/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Docsets</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/kooshapari/cliproxyapi-plusplus" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bfe7971f><span class="vpi-more-horizontal icon" data-v-bfe7971f></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><!----><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/kooshapari/cliproxyapi-plusplus" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-6b867909><button data-v-6b867909>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-42c4c606><div class="curtain" data-v-42c4c606></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42c4c606><span class="visually-hidden" id="sidebar-aria-label" data-v-42c4c606> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Guide</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/getting-started" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/install" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Install</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/provider-usage" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Provider Usage</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/provider-catalog" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Provider Catalog</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/provider-operations" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Provider Operations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/troubleshooting" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Troubleshooting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/planning/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Planning Boards</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Reference</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/routing-reference" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Routing and Models</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/features/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Feature Guides</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/docsets/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Docsets</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>API</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>API Index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/openai-compatible" data-v-0009425e><!--[--><p class="text" data-v-0009425e>OpenAI-Compatible API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/management" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Management API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/operations" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Operations API</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _provider-quickstarts" data-v-e6f2a212><div><h1 id="provider-quickstarts" tabindex="-1">Provider Quickstarts <a class="header-anchor" href="#provider-quickstarts" aria-label="Permalink to "Provider Quickstarts""></a></h1><p>Use this page for fast, provider-specific <code>config.yaml</code> setups with a single request success check.</p><h2 id="prerequisites" tabindex="-1">Prerequisites <a class="header-anchor" href="#prerequisites" aria-label="Permalink to "Prerequisites""></a></h2><ul><li>Service running and reachable on <code>http://localhost:8317</code>.</li><li>Client API key configured in <code>api-keys</code> (or management endpoint auth in your deployment model).</li><li><code>jq</code> installed for response inspection.</li></ul><h2 id="model-combo-support-alias-routing-quickstart" tabindex="-1">Model Combo Support (Alias Routing Quickstart) <a class="header-anchor" href="#model-combo-support-alias-routing-quickstart" aria-label="Permalink to "Model Combo Support (Alias Routing Quickstart)""></a></h2><p>Use this when a client requests a model ID you want to remap to a supported provider/model combination.</p><p><code>config.yaml</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">ampcode</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> force-model-mappings</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> model-mappings</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"claude-opus-4-5-20251101"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> to</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"gemini-claude-opus-4-5-thinking"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"claude-sonnet-4-5-20250929"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> to</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"gemini-claude-sonnet-4-5-thinking"</span></span></code></pre></div><p>Sanity checks:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 1) Confirm target mapped model is exposed</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'gemini-claude-opus-4-5-thinking|gemini-claude-sonnet-4-5-thinking'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 2) Send request using source model id and verify success</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude-opus-4-5-20251101","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected:</p><ul><li>Request succeeds even if the source model is not natively available.</li><li>Response model metadata reflects routing behavior from <code>model-mappings</code>.</li><li>If request still fails with model-not-found, verify <code>from</code>/<code>to</code> names match exactly and restart with updated config.</li></ul><h2 id="_1-claude" tabindex="-1">1) Claude <a class="header-anchor" href="#_1-claude" aria-label="Permalink to "1) Claude""></a></h2><p><code>config.yaml</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">claude-api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"sk-ant-..."</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> prefix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"claude"</span></span></code></pre></div><p>Validation:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-3-5-sonnet-20241022","messages":[{"role":"user","content":"ping"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Sonnet 4.6 compatibility check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-sonnet-4-6","messages":[{"role":"user","content":"ping"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>If your existing <code>claude-sonnet-4-5</code> route starts failing, switch aliases to <code>claude-sonnet-4-6</code> and confirm with <code>GET /v1/models</code> before rollout.</p><p>Opus 4.6 quickstart sanity check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-opus-4-6","messages":[{"role":"user","content":"reply with ok"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message.content'</span></span></code></pre></div><p>Opus 4.6 streaming parity check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-opus-4-6","messages":[{"role":"user","content":"stream test"}],"stream":true}'</span></span></code></pre></div><p>If Opus 4.6 is missing from <code>/v1/models</code>, verify provider alias mapping and prefix ownership before routing production traffic.</p><p>Opus 4.5 quickstart sanity check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-opus-4-5-20251101","messages":[{"role":"user","content":"ping opus 4.5"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message.content'</span></span></code></pre></div><p>Opus 4.5 streaming parity check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-opus-4-5","messages":[{"role":"user","content":"stream opus 4.5"}],"stream":true}'</span></span></code></pre></div><p>If Opus 4.5 is missing from <code>/v1/models</code>, confirm alias routing is active (<code>ampcode.model-mappings</code>) and use a mapped model that is visible for the current API key.</p><h3 id="nano-banana-probe-cpb-0786" tabindex="-1">Nano Banana probe (<code>CPB-0786</code>) <a class="header-anchor" href="#nano-banana-probe-cpb-0786" aria-label="Permalink to "Nano Banana probe (`CPB-0786`)""></a></h3><p>Use this to validate Nano Banana alias/model visibility and request flow before enabling broad rollout.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'banana|nano|nano-banana|nanobanana'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-nano-banana","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>If the model list does not expose Nano Banana in your account, re-check prefix ownership and mapped aliases in <code>v1/models</code> first.</p><h2 id="_2-codex" tabindex="-1">2) Codex <a class="header-anchor" href="#_2-codex" aria-label="Permalink to "2) Codex""></a></h2><p><code>config.yaml</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">codex-api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"codex-key-a"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> prefix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"codex"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"codex-key-b"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> prefix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"codex"</span></span></code></pre></div><p>Validation:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","reasoning_effort":"low","messages":[{"role":"user","content":"hello"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><h3 id="codex-responses-compact-sanity-check" tabindex="-1">Codex <code>/responses/compact</code> sanity check <a class="header-anchor" href="#codex-responses-compact-sanity-check" aria-label="Permalink to "Codex `/responses/compact` sanity check""></a></h3><p>Use this when validating codex translator compatibility for compaction payloads:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses/compact</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","input":[{"role":"user","content":[{"type":"input_text","text":"compress this session"}]}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{object,usage}'</span></span></code></pre></div><p>Expected: <code>object</code> is <code>response.compaction</code> and <code>usage</code> is present.</p><h3 id="codex-responses-load-balancing-quickstart-two-accounts" tabindex="-1">Codex Responses load-balancing quickstart (two accounts) <a class="header-anchor" href="#codex-responses-load-balancing-quickstart-two-accounts" aria-label="Permalink to "Codex Responses load-balancing quickstart (two accounts)""></a></h3><p>Use two Codex credentials with the same <code>prefix</code> and validate with repeated <code>/v1/responses</code> calls:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">seq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 6</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">); </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">do</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","stream":false,"input":[{"role":"user","content":[{"type":"input_text","text":"lb check"}]}]}'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '"req=\($i) id=\(.id</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // "none") usage=\(.usage.total_tokens</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // 0)"'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">done</span></span></code></pre></div><p>Sanity checks:</p><ul><li><code>/v1/models</code> should include your target Codex model for this client key.</li><li>Requests should complete consistently across repeated calls (no account-level 403 bursts).</li><li>If one account is invalid, remove or repair that entry first; do not keep partial credentials in active rotation.</li></ul><p>Troubleshooting (<code>Question: Does load balancing work with 2 Codex accounts for the Responses API?</code>):</p><ol><li><code>403</code>/<code>401</code> on every request: <ul><li>Validate both credentials independently (temporarily keep one <code>codex-api-key</code> entry at a time).</li></ul></li><li>Mixed success/failure: <ul><li>One credential is unhealthy or suspended; re-auth that entry and retry the loop.</li></ul></li><li><code>404 model_not_found</code>: <ul><li>Check model exposure via <code>/v1/models</code> for the same client key and switch to an exposed Codex model.</li></ul></li><li>Stream works but non-stream fails: <ul><li>Compare <code>/v1/responses</code> payload shape and avoid legacy chat-only fields in Responses requests.</li></ul></li></ol><h3 id="codex-404-triage-provider-agnostic" tabindex="-1">Codex <code>404</code> triage (provider-agnostic) <a class="header-anchor" href="#codex-404-triage-provider-agnostic" aria-label="Permalink to "Codex `404` triage (provider-agnostic)""></a></h3><p>Use this when clients report <code>404</code> against codex-family routes and you need a deterministic isolate flow independent of client/runtime.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 1) Confirm codex models are exposed for this API key</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'codex|gpt-5'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 2) Non-stream probe</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gpt-5.3-codex","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>If model exposure is missing, switch to one that is present in <code>/v1/models</code> before retrying and do not rely on guessed aliases.</p><h3 id="codex-conversation-tracking-alias-conversation-id" tabindex="-1">Codex conversation-tracking alias (<code>conversation_id</code>) <a class="header-anchor" href="#codex-conversation-tracking-alias-conversation-id" aria-label="Permalink to "Codex conversation-tracking alias (`conversation_id`)""></a></h3><p>For <code>/v1/responses</code>, <code>conversation_id</code> is accepted as a DX alias and normalized to <code>previous_response_id</code>:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","input":"continue","conversation_id":"resp_prev_123"}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected behavior:</p><ul><li>Upstream payload uses <code>previous_response_id=resp_prev_123</code>.</li><li>If both are sent, explicit <code>previous_response_id</code> wins.</li></ul><h3 id="v1-embeddings-quickstart-openai-compatible-path" tabindex="-1"><code>/v1/embeddings</code> quickstart (OpenAI-compatible path) <a class="header-anchor" href="#v1-embeddings-quickstart-openai-compatible-path" aria-label="Permalink to "`/v1/embeddings` quickstart (OpenAI-compatible path)""></a></h3><p>For embedding-enabled providers, validate the endpoint directly:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/embeddings</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"text-embedding-3-small","input":"embedding probe"}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{object,model,data_count:(.data|length)}'</span></span></code></pre></div><p>Expected:</p><ul><li><code>object</code> equals <code>list</code></li><li><code>data_count >= 1</code></li><li><code>model</code> matches the selected embedding model alias</li></ul><h2 id="_3-gemini" tabindex="-1">3) Gemini <a class="header-anchor" href="#_3-gemini" aria-label="Permalink to "3) Gemini""></a></h2><p><code>config.yaml</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">gemini-api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"AIza..."</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> prefix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"gemini"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> models</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"gemini-2.5-flash"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> alias</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"flash"</span></span></code></pre></div><p>Validation:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini/flash","messages":[{"role":"user","content":"ping"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Strict tool schema note:</p><ul><li>Function tools with <code>strict: true</code> are normalized to Gemini-safe schema with root <code>type: "OBJECT"</code>, explicit <code>properties</code>, and <code>additionalProperties: false</code>.</li></ul><p>Gemini 3 Flash <code>includeThoughts</code> quickstart:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"gemini/flash",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "messages":[{"role":"user","content":"ping"}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "reasoning_effort":"high",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "stream":false</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>If you pass <code>generationConfig.thinkingConfig.include_thoughts</code>, the proxy normalizes it to <code>includeThoughts</code> before upstream calls.</p><p>ToolSearch compatibility quick check (<code>defer_loading</code>):</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"gemini/flash",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "messages":[{"role":"user","content":"search latest docs"}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "tools":[{"google_search":{"defer_loading":true,"lat":"1"}}]</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p><code>defer_loading</code>/<code>deferLoading</code> fields are removed in Gemini-family outbound payloads to avoid Gemini <code>400</code> validation failures.</p><h3 id="gemini-cli-404-quickstart-error-404-requested-entity-was-not-found" tabindex="-1">Gemini CLI 404 quickstart (<code>Error 404: Requested entity was not found</code>) <a class="header-anchor" href="#gemini-cli-404-quickstart-error-404-requested-entity-was-not-found" aria-label="Permalink to "Gemini CLI 404 quickstart (`Error 404: Requested entity was not found`)""></a></h3><p>Use this path when Gemini CLI/Gemini 3 requests return provider-side <code>404</code> and you need a deterministic isolate flow.</p><ol><li>Verify model is exposed to the same client key:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'gemini|gemini-2\.5|gemini-3'</span></span></code></pre></div><ol start="2"><li>Run non-stream check first:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini/flash","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><ol start="3"><li>Run stream parity check immediately after:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini/flash","messages":[{"role":"user","content":"ping"}],"stream":true}'</span></span></code></pre></div><p>If non-stream succeeds but stream fails, treat it as stream transport/proxy compatibility first. If both fail with <code>404</code>, fix alias/model mapping before retry.</p><h3 id="force-model-prefix-with-gemini-model-list-parity" tabindex="-1"><code>force-model-prefix</code> with Gemini model-list parity <a class="header-anchor" href="#force-model-prefix-with-gemini-model-list-parity" aria-label="Permalink to "`force-model-prefix` with Gemini model-list parity""></a></h3><p>When <code>force-model-prefix: true</code> is enabled, verify prefixed aliases are still returned as client-visible IDs:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '^gemini/'</span></span></code></pre></div><p>If prefixed aliases are missing, avoid rollout and reconcile alias registration before enabling strict prefix enforcement.</p><h3 id="macos-homebrew-install-where-is-the-config-file" tabindex="-1">macOS Homebrew install: where is the config file? <a class="header-anchor" href="#macos-homebrew-install-where-is-the-config-file" aria-label="Permalink to "macOS Homebrew install: where is the config file?""></a></h3><p>Common default paths:</p><ul><li>Intel macOS: <code>/usr/local/etc/cliproxyapi/config.yaml</code></li><li>Apple Silicon macOS: <code>/opt/homebrew/etc/cliproxyapi/config.yaml</code></li></ul><p>Quick check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> p </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /usr/local/etc/cliproxyapi/config.yaml</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /opt/homebrew/etc/cliproxyapi/config.yaml</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">do</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ] && </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "found: </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">done</span></span></code></pre></div><h3 id="nvidia-openai-compat-qa-scenarios-stream-non-stream-parity" tabindex="-1">NVIDIA OpenAI-compat QA scenarios (stream/non-stream parity) <a class="header-anchor" href="#nvidia-openai-compat-qa-scenarios-stream-non-stream-parity" aria-label="Permalink to "NVIDIA OpenAI-compat QA scenarios (stream/non-stream parity)""></a></h3><p>Use these checks when an OpenAI-compatible NVIDIA upstream reports connect failures.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Non-stream baseline</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"openai-compat/nvidia-model","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Stream parity</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"openai-compat/nvidia-model","messages":[{"role":"user","content":"ping"}],"stream":true}'</span></span></code></pre></div><p>Edge-case payload checks:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Empty content guard</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"openai-compat/nvidia-model","messages":[{"role":"user","content":""}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Tool payload surface</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"openai-compat/nvidia-model","messages":[{"role":"user","content":"return ok"}],"tools":[{"type":"function","function":{"name":"noop","description":"noop","parameters":{"type":"object","properties":{}}}}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><h3 id="disabled-project-button-qa-scenarios-cpb-0367" tabindex="-1">Disabled project button QA scenarios (CPB-0367) <a class="header-anchor" href="#disabled-project-button-qa-scenarios-cpb-0367" aria-label="Permalink to "Disabled project button QA scenarios (CPB-0367)""></a></h3><p>Operators and QA teams rely on stream/non-stream parity to validate the disabled-project toggle introduced for priority workflows. The following commands keep the metadata payload constant while flipping the stream flag so you can confirm the translator emits the <code>project_control.disable_button</code> flag for every transport.</p><ol><li>Non-stream baseline (low priority + disabled button):</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"antigravity/opus-2",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "messages":[{"role":"user","content":"please disable the project button"}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "stream":false,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "metadata":{"project_control":{"disable_button":true,"priority":"low"}}</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><ol start="2"><li>Stream parity check (same payload, <code>stream=true</code>):</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"antigravity/opus-2",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "messages":[{"role":"user","content":"please disable the project button"}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "stream":true,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "metadata":{"project_control":{"disable_button":true,"priority":"low"}}</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span></span></code></pre></div><ol start="3"><li>Edge-case payload (empty prompt + high priority) to exercise fallback paths:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"antigravity/opus-2",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "messages":[{"role":"user","content":""}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "stream":false,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "metadata":{"project_control":{"disable_button":true,"priority":"high"}}</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Watch the service logs for entries referencing <code>project_control.disable_button</code>. The translated payload should deliver the same metadata regardless of stream mode. Cherry Studio and CLI both look up the alias exposed in <code>/v1/models</code>, so make sure the alias referenced by the UI is still registered in the same workspace filter.</p><h3 id="gemini-3-aspect-ratio-quickstart-cpb-0374" tabindex="-1">Gemini 3 Aspect Ratio Quickstart (CPB-0374) <a class="header-anchor" href="#gemini-3-aspect-ratio-quickstart-cpb-0374" aria-label="Permalink to "Gemini 3 Aspect Ratio Quickstart (CPB-0374)""></a></h3><p>Gemini 3 rejects malformed <code>imageConfig.aspect_ratio</code> pairs with a <code>Google API 400 (INVALID_IMAGE_CONFIG)</code> error. Use this deterministic quickstart to prove the config is sane and the ratio is passed through the translator.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/images/generate</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"gemini/flash",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "prompt":"Futuristic rooftop skyline at sunset",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "imageConfig":{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "aspect_ratio":"16:9",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "width":1024,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "height":576</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>If the request still emits <code>400 Invalid Image Config</code>, inspect the translator logs to confirm the <code>aspect_ratio</code>, <code>width</code>, and <code>height</code> values survive normalization. The Gemini CLI translator only preserves ratios that match the numeric ratio embedded in the same payload, so make sure the dimensions are consistent (for example, <code>1024x576</code> for <code>16:9</code>). When in doubt, recompute <code>height = width / ratio</code> and re-run the sample above.</p><h2 id="_4-github-copilot" tabindex="-1">4) GitHub Copilot <a class="header-anchor" href="#_4-github-copilot" aria-label="Permalink to "4) GitHub Copilot""></a></h2><p><code>config.yaml</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">github-copilot</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"copilot-gpt-5"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> prefix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"copilot"</span></span></code></pre></div><p>Validation:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"copilot-gpt-5","messages":[{"role":"user","content":"help me draft a shell command"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Model availability guardrail (plus/team mismatch cases):</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'gpt-5.3-codex|gpt-5.3-codex-spark'</span></span></code></pre></div><p>Only route traffic to models that appear in <code>/v1/models</code>. If <code>gpt-5.3-codex-spark</code> is missing for your account tier, use <code>gpt-5.3-codex</code>.</p><h2 id="_5-kiro" tabindex="-1">5) Kiro <a class="header-anchor" href="#_5-kiro" aria-label="Permalink to "5) Kiro""></a></h2><p><code>config.yaml</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">kiro</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">token-file</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"~/.aws/sso/cache/kiro-auth-token.json"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> prefix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"kiro"</span></span></code></pre></div><p>Validation:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"kiro/claude-opus-4-5","messages":[{"role":"user","content":"ping"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Large-payload sanity checks (to catch truncation/write failures early):</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">python</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> -</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <<</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'PY'</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">print("A"*120000)</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">PY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /tmp/kiro-large.txt</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> @<(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --rawfile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> p /tmp/kiro-large.txt '{model:"kiro/claude-opus-4-5",messages:[{role:"user",content:$p}],stream:false}')</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].finish_reason'</span></span></code></pre></div><p>Kiro IAM login hints:</p><ul><li>Prefer AWS login/authcode flows when social login is unstable.</li><li>Keep one auth file per account to avoid accidental overwrite during relogin.</li><li>If you rotate accounts often, run browser login in incognito mode.</li></ul><h2 id="_7-iflow" tabindex="-1">7) iFlow <a class="header-anchor" href="#_7-iflow" aria-label="Permalink to "7) iFlow""></a></h2><p>OAuth + model visibility quickstart:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 1) Ensure iFlow auth exists and is loaded</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '^iflow/'</span></span></code></pre></div><p>If only non-CLI iFlow models are visible after OAuth login, route requests strictly to the model IDs returned by <code>/v1/models</code> and avoid hardcoding upstream-only aliases.</p><p>Validation (<code>glm-4.7</code>):</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"iflow/glm-4.7","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>If you see <code>406</code>, verify model exposure in <code>/v1/models</code>, retry non-stream, and then compare headers/payload shape against known-good requests.</p><p>Stream/non-stream parity probe (for usage and request counting):</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Non-stream</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"iflow/glm-4.7","messages":[{"role":"user","content":"usage parity non-stream"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.usage'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Stream (expects usage in final stream summary or server-side request accounting)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"iflow/glm-4.7","messages":[{"role":"user","content":"usage parity stream"}],"stream":true}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tail</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 5</span></span></code></pre></div><h2 id="_8-minimax" tabindex="-1">8) MiniMax <a class="header-anchor" href="#_8-minimax" aria-label="Permalink to "8) MiniMax""></a></h2><p><code>config.yaml</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">minimax</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">token-file</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"~/.minimax/oauth-token.json"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> base-url</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"https://api.minimax.io/anthropic"</span></span></code></pre></div><p>Validation:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"minimax/abab6.5s","messages":[{"role":"user","content":"ping"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><h2 id="_9-mcp-server-memory-operations" tabindex="-1">9) MCP Server (Memory Operations) <a class="header-anchor" href="#_9-mcp-server-memory-operations" aria-label="Permalink to "9) MCP Server (Memory Operations)""></a></h2><p>Use this quickstart to validate an MCP server that exposes memory operations before wiring it into your agent/client runtime.</p><p>MCP <code>tools/list</code> sanity check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:9000/mcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"jsonrpc":"2.0","id":"list-1","method":"tools/list","params":{}}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: at least one memory tool (for example names containing <code>memory</code> like <code>memory_search</code>, <code>memory_write</code>, <code>memory_delete</code>).</p><p>MCP <code>tools/call</code> sanity check:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:9000/mcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"jsonrpc":"2.0","id":"call-1","method":"tools/call","params":{"name":"memory_search","arguments":{"query":"release notes"}}}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: valid JSON-RPC result payload (or explicit MCP error payload with a concrete code/message pair).</p><h2 id="_7-openai-compatible-providers" tabindex="-1">7) OpenAI-Compatible Providers <a class="header-anchor" href="#_7-openai-compatible-providers" aria-label="Permalink to "7) OpenAI-Compatible Providers""></a></h2><p>For local tools like MLX/vLLM-MLX, use <code>openai-compatibility</code>:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-keys</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">openai-compatibility</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"mlx-local"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> prefix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"mlx"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> base-url</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"http://127.0.0.1:8000/v1"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> api-key-entries</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">api-key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"dummy-key"</span></span></code></pre></div><p>Validation:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"mlx/your-local-model","messages":[{"role":"user","content":"hello"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><h2 id="_10-amp-routing-through-cliproxyapi" tabindex="-1">10) Amp Routing Through CLIProxyAPI <a class="header-anchor" href="#_10-amp-routing-through-cliproxyapi" aria-label="Permalink to "10) Amp Routing Through CLIProxyAPI""></a></h2><p>Use explicit base URL and key so Amp traffic does not bypass the proxy:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OPENAI_API_BASE</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"http://127.0.0.1:8317/v1"</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OPENAI_API_KEY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"demo-client-key"</span></span></code></pre></div><p>Sanity check before Amp requests:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> head</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 20</span></span></code></pre></div><p>If Amp still does not route through CLIProxyAPI, run one direct canary call to verify the same env is active in the Amp process:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gpt-5.3-codex","messages":[{"role":"user","content":"amp-route-check"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.id,.model'</span></span></code></pre></div><h2 id="related" tabindex="-1">Related <a class="header-anchor" href="#related" aria-label="Permalink to "Related""></a></h2><ul><li><a href="/getting-started">Getting Started</a></li><li><a href="/provider-usage">Provider Usage</a></li><li><a href="/provider-catalog">Provider Catalog</a></li><li><a href="/provider-operations">Provider Operations</a></li></ul><h2 id="kiro-copilot-endpoint-compatibility" tabindex="-1">Kiro + Copilot Endpoint Compatibility <a class="header-anchor" href="#kiro-copilot-endpoint-compatibility" aria-label="Permalink to "Kiro + Copilot Endpoint Compatibility""></a></h2><ul><li>For Copilot Codex-family models (for example <code>gpt-5.1-codex-mini</code>), prefer <code>/v1/responses</code>.</li><li><code>/v1/chat/completions</code> is still valid for non-Codex Copilot traffic and most non-Copilot providers.</li><li>If a Codex-family request fails on <code>/v1/chat/completions</code>, retry the same request on <code>/v1/responses</code> first.</li></ul><h2 id="qwen-model-visibility-check" tabindex="-1">Qwen Model Visibility Check <a class="header-anchor" href="#qwen-model-visibility-check" aria-label="Permalink to "Qwen Model Visibility Check""></a></h2><p>If auth succeeds but clients cannot see expected Qwen models (for example <code>qwen3.5</code>), verify in this order:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 1) Confirm models exposed to your client key</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'qwen|qwen3.5'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 2) Confirm provider-side model listing from management</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/config</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer <management-secret>"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.providers[] | select(.provider=="qwen")'</span></span></code></pre></div><p>If (1) is empty while auth is valid, check prefix rules and alias mapping first, then restart and re-read <code>/v1/models</code>.</p><h2 id="copilot-unlimited-mode-compatibility-cpb-0691" tabindex="-1">Copilot Unlimited Mode Compatibility (<code>CPB-0691</code>) <a class="header-anchor" href="#copilot-unlimited-mode-compatibility-cpb-0691" aria-label="Permalink to "Copilot Unlimited Mode Compatibility (`CPB-0691`)""></a></h2><p>Use this validation when enabling <code>copilot-unlimited-mode</code> for Copilot API compatibility:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"copilot/gpt-5.1-copilot","input":[{"role":"user","content":[{"type":"input_text","text":"compat probe"}]}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{id,model,usage}'</span></span></code></pre></div><p>Expected:</p><ul><li>Response completes without chat/responses shape mismatch.</li><li><code>usage</code> is populated for rate/alert instrumentation.</li></ul><h2 id="openai-anthropic-event-ordering-guard-cpb-0692-cpb-0694" tabindex="-1">OpenAI->Anthropic Event Ordering Guard (<code>CPB-0692</code>, <code>CPB-0694</code>) <a class="header-anchor" href="#openai-anthropic-event-ordering-guard-cpb-0692-cpb-0694" aria-label="Permalink to "OpenAI->Anthropic Event Ordering Guard (`CPB-0692`, `CPB-0694`)""></a></h2><p>Streaming translation now enforces <code>message_start</code> before any <code>content_block_start</code> event. Use this focused test command when validating event ordering regressions:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">go</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./pkg/llmproxy/translator/openai/claude</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'TestEnsureMessageStartBeforeContentBlocks'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -count=1</span></span></code></pre></div><h2 id="gemini-long-output-429-observability-runtime-refresh-cpb-0693-cpb-0696" tabindex="-1">Gemini Long-Output 429 Observability + Runtime Refresh (<code>CPB-0693</code>, <code>CPB-0696</code>) <a class="header-anchor" href="#gemini-long-output-429-observability-runtime-refresh-cpb-0693-cpb-0696" aria-label="Permalink to "Gemini Long-Output 429 Observability + Runtime Refresh (`CPB-0693`, `CPB-0696`)""></a></h2><p>For long-output Gemini runs that intermittently return <code>429</code>, collect these probes in order:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># non-stream probe</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini/flash","messages":[{"role":"user","content":"long output observability probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># stream parity probe</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini/flash","messages":[{"role":"user","content":"long output streaming probe"}],"stream":true}'</span></span></code></pre></div><p>If config or model aliases were changed, restart only the affected service process and re-run both probes before broad rollout.</p><h2 id="aistudio-error-dx-triage-cpb-0695" tabindex="-1">AiStudio Error DX Triage (<code>CPB-0695</code>) <a class="header-anchor" href="#aistudio-error-dx-triage-cpb-0695" aria-label="Permalink to "AiStudio Error DX Triage (`CPB-0695`)""></a></h2><p>When users report AiStudio-facing errors, run a deterministic triage:</p><ol><li>Verify model exposure with <code>/v1/models</code>.</li><li>Run one non-stream call.</li><li>Run one stream call using identical model and prompt.</li><li>Capture HTTP status plus upstream provider error payload.</li></ol><p>Keep this flow provider-agnostic so the same checklist works for Gemini/Codex/OpenAI-compatible paths.</p><h2 id="roocode-alias-t-match-quick-probe-cpb-0784-cpb-0785" tabindex="-1">RooCode alias + <code>T.match</code> quick probe (<code>CPB-0784</code>, <code>CPB-0785</code>) <a class="header-anchor" href="#roocode-alias-t-match-quick-probe-cpb-0784-cpb-0785" aria-label="Permalink to "RooCode alias + `T.match` quick probe (`CPB-0784`, `CPB-0785`)""></a></h2><p>Use this when RooCode-style clients fail fast with frontend-side <code>undefined is not an object (evaluating 'T.match')</code>.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Ensure RooCode aliases normalize to the Roo provider</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> login</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --provider</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> roocode</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --json</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./config.yaml</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{ok,provider:.details.provider,provider_input:.details.provider_input}'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Verify Roo models are visible to the same client key used by the failing UI</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer <client-key>"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '^roo/'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Run one non-stream canary before retrying the UI flow</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer <client-key>"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"roo/roo-cline-v3.7-thinking","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected:</p><ul><li><code>provider</code> resolves to <code>roo</code> even when input is <code>roocode</code> or <code>roo-code</code>.</li><li>At least one <code>roo/*</code> model appears from <code>/v1/models</code>.</li><li>Non-stream canary succeeds before stream/UI retries.</li></ul><h2 id="global-alias-model-capability-safety-cpb-0698-cpb-0699" tabindex="-1">Global Alias + Model Capability Safety (<code>CPB-0698</code>, <code>CPB-0699</code>) <a class="header-anchor" href="#global-alias-model-capability-safety-cpb-0698-cpb-0699" aria-label="Permalink to "Global Alias + Model Capability Safety (`CPB-0698`, `CPB-0699`)""></a></h2><p>Before shipping a global alias change:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[] | {id,capabilities}'</span></span></code></pre></div><p>Expected:</p><ul><li>Aliases resolve to concrete model IDs.</li><li>Capability metadata stays visible (<code>capabilities</code> field remains populated for discovery clients).</li></ul><h2 id="load-balance-naming-distribution-check-cpb-0700" tabindex="-1">Load-Balance Naming + Distribution Check (<code>CPB-0700</code>) <a class="header-anchor" href="#load-balance-naming-distribution-check-cpb-0700" aria-label="Permalink to "Load-Balance Naming + Distribution Check (`CPB-0700`)""></a></h2><p>Use consistent account labels/prefix names and verify distribution with repeated calls:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">seq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 12</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">); </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">do</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","stream":false,"input":[{"role":"user","content":[{"type":"input_text","text":"distribution probe"}]}]}'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '"req=\($i) id=\(.id</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // "none") total=\(.usage.total_tokens</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // 0)"'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">done</span></span></code></pre></div><p>If calls cluster on one account, inspect credential health and prefix ownership before introducing retry/failover policy changes.</p><h2 id="mac-logs-visibility-cpb-0711" tabindex="-1">Mac Logs Visibility (<code>CPB-0711</code>) <a class="header-anchor" href="#mac-logs-visibility-cpb-0711" aria-label="Permalink to "Mac Logs Visibility (`CPB-0711`)""></a></h2><p>When users report <code>Issue with enabling logs in Mac settings</code>, validate log emission first:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-sonnet-4-6","messages":[{"role":"user","content":"ping"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message.content'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ls</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -lah</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> logs</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sed</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '1,20p'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">tail</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 40</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> logs/server.log</span></span></code></pre></div><p>Expected: request appears in <code>logs/server.log</code> and no OS-level permission errors are present. If permission is denied, re-run install with a writable logs directory.</p><h2 id="thinking-configuration-cpb-0712" tabindex="-1">Thinking configuration (<code>CPB-0712</code>) <a class="header-anchor" href="#thinking-configuration-cpb-0712" aria-label="Permalink to "Thinking configuration (`CPB-0712`)""></a></h2><p>For Claude and Codex parity checks, use explicit reasoning controls:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-opus-4-6-thinking","messages":[{"role":"user","content":"solve this"}],"stream":false,"reasoning_effort":"high"}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message.content'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","input":[{"role":"user","content":[{"type":"input_text","text":"solve this"}]}],"reasoning_effort":"high"}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.output_text'</span></span></code></pre></div><p>Expected: reasoning fields are accepted, and the reply completes without switching clients.</p><h2 id="gpt-5-codex-model-discovery-cpb-0713" tabindex="-1">gpt-5 Codex model discovery (<code>CPB-0713</code>) <a class="header-anchor" href="#gpt-5-codex-model-discovery-cpb-0713" aria-label="Permalink to "gpt-5 Codex model discovery (`CPB-0713`)""></a></h2><p>Verify the low/medium/high variants are exposed before rollout:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '^gpt-5-codex-(low|medium|high)$'</span></span></code></pre></div><p>If any IDs are missing, reload auth/profile config and confirm provider key scope.</p><h2 id="mac-gui-gemini-privilege-flow-cpb-0714" tabindex="-1">Mac/GUI Gemini privilege flow (<code>CPB-0714</code>) <a class="header-anchor" href="#mac-gui-gemini-privilege-flow-cpb-0714" aria-label="Permalink to "Mac/GUI Gemini privilege flow (`CPB-0714`)""></a></h2><p>For the <code>CLI settings privilege</code> repro in Gemini flows, confirm end-to-end with the same payload used by the client:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini/flash","messages":[{"role":"user","content":"permission check"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message.content'</span></span></code></pre></div><p>Expected: no interactive browser auth is required during normal request path.</p><h2 id="images-with-antigravity-cpb-0715" tabindex="-1">Images with Antigravity (<code>CPB-0715</code>) <a class="header-anchor" href="#images-with-antigravity-cpb-0715" aria-label="Permalink to "Images with Antigravity (`CPB-0715`)""></a></h2><p>When validating image requests, include a one-shot probe:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/antigravity-gpt-5-2","messages":[{"role":"user","content":[{"type":"text","text":"analyze image"},{"type":"image","source":{"type":"url","url":"https://example.com/sample.png"}}]}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message.content'</span></span></code></pre></div><p>Expected: image bytes are normalized and request succeeds or returns provider-specific validation with actionable details.</p><h2 id="explore-tool-workflow-cpb-0716" tabindex="-1"><code>explore</code> tool workflow (<code>CPB-0716</code>) <a class="header-anchor" href="#explore-tool-workflow-cpb-0716" aria-label="Permalink to "`explore` tool workflow (`CPB-0716`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude/claude-opus-4-5-thinking","messages":[{"role":"user","content":"what files changed"}],"tools":[{"type":"function","function":{"name":"explore","description":"check project files","parameters":{"type":"object","properties":{}}}}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message'</span></span></code></pre></div><p>Expected: tool invocation path preserves request shape and returns tool payloads (or structured errors) consistently.</p><h2 id="antigravity-status-and-error-parity-cpb-0717-cpb-0719" tabindex="-1">Antigravity status and error parity (<code>CPB-0717</code>, <code>CPB-0719</code>) <a class="header-anchor" href="#antigravity-status-and-error-parity-cpb-0717-cpb-0719" aria-label="Permalink to "Antigravity status and error parity (`CPB-0717`, `CPB-0719`)""></a></h2><p>Use a paired probe set for API 400 class failures:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"antigravity/gpt-5","messages":[{"role":"user","content":"quick parity probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.error.status_code?</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // .error.type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // .'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{data_count:(.data|length),data:(.data|map(.id))}'</span></span></code></pre></div><p>Expected: malformed/unsupported payloads return deterministic messages and no silent fallback.</p><h2 id="functionresponse-tool-use-stability-cpb-0718-cpb-0720" tabindex="-1"><code>functionResponse</code>/<code>tool_use</code> stability (<code>CPB-0718</code>, <code>CPB-0720</code>) <a class="header-anchor" href="#functionresponse-tool-use-stability-cpb-0718-cpb-0720" aria-label="Permalink to "`functionResponse`/`tool_use` stability (`CPB-0718`, `CPB-0720`)""></a></h2><p>Run translator-focused regression checks after code changes:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">go</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./pkg/llmproxy/translator/antigravity/gemini</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'TestParseFunctionResponseRawSkipsEmpty|TestFixCLIToolResponseSkipsEmptyFunctionResponse|TestFixCLIToolResponse'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -count=1</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">go</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./pkg/llmproxy/translator/antigravity/claude</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'TestConvertClaudeRequestToAntigravity_ToolUsePreservesMalformedInput'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -count=1</span></span></code></pre></div><p>Expected: empty <code>functionResponse</code> content is not propagated as invalid JSON, and malformed tool args retain the <code>functionCall</code> block instead of dropping the tool interaction.</p><h2 id="dynamic-model-provider-quick-probe-cpb-0796" tabindex="-1">Dynamic model provider quick probe (<code>CPB-0796</code>) <a class="header-anchor" href="#dynamic-model-provider-quick-probe-cpb-0796" aria-label="Permalink to "Dynamic model provider quick probe (`CPB-0796`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> head</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 40</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"auto","messages":[{"role":"user","content":"provider probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: selected provider/model is visible in logs and response is OpenAI-compatible.</p><h2 id="auth-not-using-proxy-path-cpb-0799" tabindex="-1">Auth not using proxy path (<code>CPB-0799</code>) <a class="header-anchor" href="#auth-not-using-proxy-path-cpb-0799" aria-label="Permalink to "Auth not using proxy path (`CPB-0799`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data|length'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> login</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --provider</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> gemini</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --json</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./config.yaml</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{ok,details}'</span></span></code></pre></div><p>Expected: login output and runtime both resolve the same <code>auth-dir</code>; avoid mixed config paths between shells/containers.</p><h2 id="gemini-3-pro-no-response-in-roo-cpb-0802-cpb-0811" tabindex="-1">Gemini 3 Pro no response in Roo (<code>CPB-0802</code>, <code>CPB-0811</code>) <a class="header-anchor" href="#gemini-3-pro-no-response-in-roo-cpb-0802-cpb-0811" aria-label="Permalink to "Gemini 3 Pro no response in Roo (`CPB-0802`, `CPB-0811`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'gemini-3-pro-preview|gemini-3-pro'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-3-pro-preview","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: model is present in <code>/v1/models</code> before Roo-side routing; if missing, refresh auth inventory first.</p><h2 id="gemini-thinking-budget-normalization-cpb-0806" tabindex="-1">Gemini thinking budget normalization (<code>CPB-0806</code>) <a class="header-anchor" href="#gemini-thinking-budget-normalization-cpb-0806" aria-label="Permalink to "Gemini thinking budget normalization (`CPB-0806`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-3-pro-preview","messages":[{"role":"user","content":"thinking budget check"}],"reasoning":{"effort":"high"},"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: translator normalizes thinking budget fields and returns stable non-stream response shape.</p><h2 id="scoped-auto-model-routing-cpb-0826" tabindex="-1">Scoped <code>auto</code> model routing (<code>CPB-0826</code>) <a class="header-anchor" href="#scoped-auto-model-routing-cpb-0826" aria-label="Permalink to "Scoped `auto` model routing (`CPB-0826`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"auto:gemini","messages":[{"role":"user","content":"scoped auto"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: scoped provider hint is honored and final routed model appears in response metadata/logs.</p><h2 id="candidate-count-rollout-guard-cpb-0829" tabindex="-1"><code>candidate_count</code> rollout guard (<code>CPB-0829</code>) <a class="header-anchor" href="#candidate-count-rollout-guard-cpb-0829" aria-label="Permalink to "`candidate_count` rollout guard (`CPB-0829`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-2.5-pro","messages":[{"role":"user","content":"multi candidate check"}],"candidate_count":2,"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: if multi-candidate fanout is unsupported in current provider path, service responds with deterministic guidance instead of silent single-candidate fallback.</p><h2 id="antigravity-thinking-block-tool-schema-guardrails-cpb-0731-cpb-0735-cpb-0742-cpb-0746" tabindex="-1">Antigravity thinking-block + tool schema guardrails (<code>CPB-0731</code>, <code>CPB-0735</code>, <code>CPB-0742</code>, <code>CPB-0746</code>) <a class="header-anchor" href="#antigravity-thinking-block-tool-schema-guardrails-cpb-0731-cpb-0735-cpb-0742-cpb-0746" aria-label="Permalink to "Antigravity thinking-block + tool schema guardrails (`CPB-0731`, `CPB-0735`, `CPB-0742`, `CPB-0746`)""></a></h2><p>Use this when Claude/Antigravity returns <code>400</code> with <code>thinking</code> or <code>input_schema</code> complaints.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"claude/claude-opus-4-5-thinking",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "messages":[{"role":"user","content":"ping"}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "tools":[{"type":"function","function":{"name":"read_file","description":"read","parameters":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]}}}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "thinking":{"type":"enabled","budget_tokens":1024},</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "max_tokens":2048,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "stream":false</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected:</p><ul><li>Request succeeds without <code>max_tokens must be greater than thinking.budget_tokens</code>.</li><li>Tool schema is accepted without <code>tools.0.custom.input_schema: Field required</code>.</li><li>If failure persists, lower <code>thinking.budget_tokens</code> and re-check <code>/v1/models</code> for thinking-capable alias.</li></ul><h2 id="antigravity-parity-model-mapping-cpb-0743-cpb-0744" tabindex="-1">Antigravity parity + model mapping (<code>CPB-0743</code>, <code>CPB-0744</code>) <a class="header-anchor" href="#antigravity-parity-model-mapping-cpb-0743-cpb-0744" aria-label="Permalink to "Antigravity parity + model mapping (`CPB-0743`, `CPB-0744`)""></a></h2><p>Use this when Antigravity traffic is inconsistent between CLI tooling and API clients.</p><ol><li>Validate CLI coverage matrix:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '^antigravity/'</span></span></code></pre></div><ol start="2"><li>Run CLI parity request for a model you expect to work:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"antigravity/gpt-5","messages":[{"role":"user","content":"ping"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.id,.model,.choices[0].message.content'</span></span></code></pre></div><ol start="3"><li>Add or update Amp model mappings for deterministic fallback:</li></ol><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">ampcode</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> force-model-mappings</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> model-mappings</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"claude-opus-4-5-thinking"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> to</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"gemini-claude-opus-4-5-thinking"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> custom_model</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"iflow/tab"</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> enable_search</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span></code></pre></div><ol start="4"><li>Confirm params are injected and preserved:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"claude-opus-4-5-thinking","messages":[{"role":"user","content":"mapping probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected:</p><ul><li><code>/v1/models</code> includes expected Antigravity IDs.</li><li>Mapping request succeeds even if source model has no local providers.</li><li>Injected params appear in debug/trace payloads (or equivalent internal request logs) when verbose/request logging is enabled.</li></ul><h2 id="gemini-openai-compat-parser-probe-cpb-0748" tabindex="-1">Gemini OpenAI-compat parser probe (<code>CPB-0748</code>) <a class="header-anchor" href="#gemini-openai-compat-parser-probe-cpb-0748" aria-label="Permalink to "Gemini OpenAI-compat parser probe (`CPB-0748`)""></a></h2><p>Use this quick probe when clients fail parsing Gemini responses due to non-standard fields:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini/flash","messages":[{"role":"user","content":"return a short answer"}],"stream":false}'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{id,object,model,choices,usage,error}'</span></span></code></pre></div><p>Expected: payload shape is OpenAI-compatible (<code>choices[0].message.content</code>) and does not require provider-specific fields in downstream parsers.</p><h2 id="codex-reasoning-effort-normalization-cpb-0764" tabindex="-1">Codex reasoning effort normalization (<code>CPB-0764</code>) <a class="header-anchor" href="#codex-reasoning-effort-normalization-cpb-0764" aria-label="Permalink to "Codex reasoning effort normalization (`CPB-0764`)""></a></h2><p>Validate <code>xhigh</code> behavior and nested <code>reasoning.effort</code> compatibility:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","messages":[{"role":"user","content":"reasoning check"}],"reasoning":{"effort":"x-high"},"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: reasoning config is accepted; no fallback parse errors from nested/variant effort fields.</p><h2 id="structured-output-quick-probe-cpb-0778" tabindex="-1">Structured output quick probe (<code>CPB-0778</code>) <a class="header-anchor" href="#structured-output-quick-probe-cpb-0778" aria-label="Permalink to "Structured output quick probe (`CPB-0778`)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "model":"codex/codex-latest",</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "messages":[{"role":"user","content":"Return JSON with status"}],</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "response_format":{"type":"json_schema","json_schema":{"name":"status_reply","strict":true,"schema":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"]}}},</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "stream":false</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> }'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: translated request preserves <code>text.format.schema</code> and response remains JSON-compatible.</p><h2 id="wave-batch-2-quick-probes-cpb-0783-cpb-0808" tabindex="-1">Wave Batch 2 quick probes (<code>CPB-0783..CPB-0808</code>) <a class="header-anchor" href="#wave-batch-2-quick-probes-cpb-0783-cpb-0808" aria-label="Permalink to "Wave Batch 2 quick probes (`CPB-0783..CPB-0808`)""></a></h2><p>Use this block to close the next 20-item execution set with deterministic checks.</p><h3 id="dev-refresh-roo-alias-stream-parity-cpb-0783-cpb-0784-cpb-0785-cpb-0787" tabindex="-1">Dev refresh + Roo alias + stream parity (<code>CPB-0783</code>, <code>CPB-0784</code>, <code>CPB-0785</code>, <code>CPB-0787</code>) <a class="header-anchor" href="#dev-refresh-roo-alias-stream-parity-cpb-0783-cpb-0784-cpb-0785-cpb-0787" aria-label="Permalink to "Dev refresh + Roo alias + stream parity (`CPB-0783`, `CPB-0784`, `CPB-0785`, `CPB-0787`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --json</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{mode,config_path,hints}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "roo|roocode|roo-code"</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"roo/auto","messages":[{"role":"user","content":"T.match probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.choices[0].message.content,.error'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"roo/auto","messages":[{"role":"user","content":"stream parity probe"}],"stream":true}'</span></span></code></pre></div><p>Expected: <code>dev</code> output includes refresh guidance, Roo aliases resolve to one provider identity, and stream/non-stream parity stays consistent.</p><h3 id="antigravity-stream-rollout-flag-sonnet-mapping-cpb-0788-cpb-0789-cpb-0790" tabindex="-1">Antigravity stream + rollout flag + Sonnet mapping (<code>CPB-0788</code>, <code>CPB-0789</code>, <code>CPB-0790</code>) <a class="header-anchor" href="#antigravity-stream-rollout-flag-sonnet-mapping-cpb-0788-cpb-0789-cpb-0790" aria-label="Permalink to "Antigravity stream + rollout flag + Sonnet mapping (`CPB-0788`, `CPB-0789`, `CPB-0790`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"antigravity/claude-sonnet-4-5-thinking","messages":[{"role":"user","content":"request isolation probe"}],"stream":true}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> doctor</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --json</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.config.feature_flags,.models,.warnings'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[] | select(.id|test("gemini-claude-sonnet-4-5")) | {id,owned_by,description}'</span></span></code></pre></div><p>Expected: no cross-request leakage in stream translation, feature-flag state is explicit, and Sonnet 4.5 model metadata is consistent.</p><h3 id="reasoning-cache-compose-checks-cpb-0791-cpb-0792-cpb-0793" tabindex="-1">Reasoning/cache/compose checks (<code>CPB-0791</code>, <code>CPB-0792</code>, <code>CPB-0793</code>) <a class="header-anchor" href="#reasoning-cache-compose-checks-cpb-0791-cpb-0792-cpb-0793" aria-label="Permalink to "Reasoning/cache/compose checks (`CPB-0791`, `CPB-0792`, `CPB-0793`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-2.5-pro","messages":[{"role":"user","content":"reasoning normalization probe"}],"reasoning":{"effort":"x-high"},"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{model,usage,error}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/chat/completions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-2.5-pro","messages":[{"role":"user","content":"cache token probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{usage,error}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ps</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/health</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span></code></pre></div><p>Expected: reasoning normalization is accepted, cache token fields are coherent, and docker-compose startup failures are visible via service state + health checks.</p><h3 id="proxy-auth-usage-checks-cpb-0794-cpb-0795-cpb-0797" tabindex="-1">Proxy/auth/usage checks (<code>CPB-0794</code>, <code>CPB-0795</code>, <code>CPB-0797</code>) <a class="header-anchor" href="#proxy-auth-usage-checks-cpb-0794-cpb-0795-cpb-0797" aria-label="Permalink to "Proxy/auth/usage checks (`CPB-0794`, `CPB-0795`, `CPB-0797`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> doctor</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --json</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.auth,.routing,.warnings'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/auth-files</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.[] | select(.type=="aistudio") | {name,type,disabled}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> PATCH</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/auth-files/status</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"name":"aistudio-default","enabled":true}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-2.5-pro","input":[{"role":"user","content":"usage parity probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.usage,.error'</span></span></code></pre></div><p>Expected: per-provider proxy/auth behavior is inspectable, AI Studio auth toggle is controllable, and usage/token metadata is present in non-stream probes.</p><h3 id="setup-manual-callback-huggingface-checks-cpb-0798-cpb-0800-cpb-0803" tabindex="-1">Setup/manual callback/huggingface checks (<code>CPB-0798</code>, <code>CPB-0800</code>, <code>CPB-0803</code>) <a class="header-anchor" href="#setup-manual-callback-huggingface-checks-cpb-0798-cpb-0800-cpb-0803" aria-label="Permalink to "Setup/manual callback/huggingface checks (`CPB-0798`, `CPB-0800`, `CPB-0803`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> setup</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "cursor|antigravity|manual|callback"</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> login</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --provider</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> openai</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --manual-callback</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/logs</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.entries[]? | select((.provider</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // "")=="huggingface" or (.message</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // "" | test("huggingface"; "i")))'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/usage</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.providers.huggingface</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // .'</span></span></code></pre></div><p>Expected: setup/login surfaces include manual callback support, and huggingface failures are visible in management logs/usage.</p><h3 id="codex-gemini-integration-parity-cpb-0804-cpb-0805-cpb-0807-cpb-0808" tabindex="-1">Codex/Gemini integration parity (<code>CPB-0804</code>, <code>CPB-0805</code>, <code>CPB-0807</code>, <code>CPB-0808</code>) <a class="header-anchor" href="#codex-gemini-integration-parity-cpb-0804-cpb-0805-cpb-0807-cpb-0808" aria-label="Permalink to "Codex/Gemini integration parity (`CPB-0804`, `CPB-0805`, `CPB-0807`, `CPB-0808`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"codex/codex-latest","input":[{"role":"user","content":"codex responses path probe"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{id,model,output,error}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-3-pro-preview","input":[{"role":"user","content":"stream parity check"}],"stream":true}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-3-pro-preview","input":[{"role":"user","content":"non-stream parity check"}],"stream":false}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{usage,error}'</span></span></code></pre></div><p>Expected: codex responses path remains provider-agnostic, Gemini 3 Pro preview stream/non-stream are both healthy, and cache-sensitive paths remain deterministic.</p><h2 id="wave-batch-3-quick-probes-cpb-0809-cpb-0830-remaining-17" tabindex="-1">Wave Batch 3 quick probes (<code>CPB-0809..CPB-0830</code> remaining 17) <a class="header-anchor" href="#wave-batch-3-quick-probes-cpb-0809-cpb-0830-remaining-17" aria-label="Permalink to "Wave Batch 3 quick probes (`CPB-0809..CPB-0830` remaining 17)""></a></h2><h3 id="rollout-flags-metadata-normalization-cpb-0809-cpb-0810-cpb-0818-cpb-0819-cpb-0820-cpb-0830" tabindex="-1">Rollout flags + metadata normalization (<code>CPB-0809</code>, <code>CPB-0810</code>, <code>CPB-0818</code>, <code>CPB-0819</code>, <code>CPB-0820</code>, <code>CPB-0830</code>) <a class="header-anchor" href="#rollout-flags-metadata-normalization-cpb-0809-cpb-0810-cpb-0818-cpb-0819-cpb-0820-cpb-0830" aria-label="Permalink to "Rollout flags + metadata normalization (`CPB-0809`, `CPB-0810`, `CPB-0818`, `CPB-0819`, `CPB-0820`, `CPB-0830`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> doctor</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --json</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{feature_flags,models,warnings}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[] | select(.id|test("gpt-5|copilot|gemini-claude-sonnet-4-5")) | {id,owned_by,description}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/responses/compact</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"model":"gemini-2.5-pro","input":[{"role":"user","content":"compact contract probe"}]}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{id,output,error}'</span></span></code></pre></div><p>Expected: rollout flags are visible, model metadata stays canonical, and <code>/responses/compact</code> behavior is deterministic under staged toggles.</p><h3 id="dev-hmr-oauth-provider-flows-cpb-0812-cpb-0816-cpb-0817-cpb-0821" tabindex="-1">Dev/HMR + OAuth provider flows (<code>CPB-0812</code>, <code>CPB-0816</code>, <code>CPB-0817</code>, <code>CPB-0821</code>) <a class="header-anchor" href="#dev-hmr-oauth-provider-flows-cpb-0812-cpb-0816-cpb-0817-cpb-0821" aria-label="Permalink to "Dev/HMR + OAuth provider flows (`CPB-0812`, `CPB-0816`, `CPB-0817`, `CPB-0821`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker-compose.yml</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> config</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> examples/process-compose.yaml</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> config</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> login</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --provider</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> gemini</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxyctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> login</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --provider</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> droid-cli</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v1/models</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Authorization: Bearer demo-client-key"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.data[].id'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "gemini|droid|claude"</span></span></code></pre></div><p>Expected: compose-based refresh workflow is valid, Gemini OAuth flow is documented/reproducible, and droid provider alias resolves to a supported login path.</p><h3 id="management-sync-auth-controls-observability-cpb-0813-cpb-0822-cpb-0823-cpb-0824-cpb-0825-cpb-0827-cpb-0828" tabindex="-1">Management sync + auth controls + observability (<code>CPB-0813</code>, <code>CPB-0822</code>, <code>CPB-0823</code>, <code>CPB-0824</code>, <code>CPB-0825</code>, <code>CPB-0827</code>, <code>CPB-0828</code>) <a class="header-anchor" href="#management-sync-auth-controls-observability-cpb-0813-cpb-0822-cpb-0823-cpb-0824-cpb-0825-cpb-0827-cpb-0828" aria-label="Permalink to "Management sync + auth controls + observability (`CPB-0813`, `CPB-0822`, `CPB-0823`, `CPB-0824`, `CPB-0825`, `CPB-0827`, `CPB-0828`)""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/auth-files</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.[] | {name,type,disabled}'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> PATCH</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/auth-files/status</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{"name":"aistudio-default","enabled":true}'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/logs</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.entries[]? | select((.provider</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> // "")|test("kimi|nanobanana|aistudio|management";"i"))'</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://localhost:8317/v0/management/usage</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "X-Management-Secret: ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MANAGEMENT_SECRET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jq</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '.providers'</span></span></code></pre></div><p>Expected: management ban/auth/sync events are inspectable, AI Studio and non-subprocess integration controls are visible, and provider-specific observability signals are queryable.</p></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><div class="edit-info" data-v-1bcd8184><div class="edit-link" data-v-1bcd8184><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/kooshapari/cliproxyapi-plusplus/edit/main/docs/provider-quickstarts.md" target="_blank" rel="noreferrer" data-v-1bcd8184><!--[--><span class="vpi-square-pen edit-link-icon" data-v-1bcd8184></span> Edit this page on GitHub<!--]--></a></div><div class="last-updated" data-v-1bcd8184><p class="VPLastUpdated" data-v-1bcd8184 data-v-1bb0c8a8>Last updated: <time datetime="2026-02-23T21:21:59.000Z" data-v-1bb0c8a8></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1bcd8184><span class="visually-hidden" id="doc-footer-aria-label" data-v-1bcd8184>Pager</span><div class="pager" data-v-1bcd8184><!----></div><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link next" href="/" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Next page</span><span class="title" data-v-1bcd8184>Overview</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-d8b57b2d data-v-566314d4><div class="container" data-v-566314d4><p class="message" data-v-566314d4>MIT Licensed</p><p class="copyright" data-v-566314d4>Copyright © KooshaPari</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_index.md\":\"ImrqiJgr\",\"api_management.md\":\"lGGkN-0C\",\"api_openai-compatible.md\":\"Dhu44ytv\",\"api_operations.md\":\"9Qla852d\",\"changelog.md\":\"Cc6QY3br\",\"docsets_agent_index.md\":\"CxN-_8SL\",\"docsets_agent_operating-model.md\":\"CYYY60ot\",\"docsets_developer_external_index.md\":\"B69TCsc8\",\"docsets_developer_external_integration-quickstart.md\":\"BGItAi6b\",\"docsets_developer_internal_architecture.md\":\"BwBu7YTK\",\"docsets_developer_internal_index.md\":\"C2tqXsI_\",\"docsets_index.md\":\"CU2OxJch\",\"docsets_user_index.md\":\"vyTQrykk\",\"docsets_user_quickstart.md\":\"BFPqrbuL\",\"explanation_index.md\":\"BEHIMD2E\",\"fa-latn_index.md\":\"D-x2KJWe\",\"fa_index.md\":\"CKTYSxdB\",\"feature_changes_plusplus.md\":\"Upjze_uT\",\"features_architecture_dev.md\":\"BleYaY8C\",\"features_architecture_fragemented_dev.md\":\"FClrr7kh\",\"features_architecture_fragemented_explanation.md\":\"CqMvGe1x\",\"features_architecture_fragemented_index.md\":\"BZSwbl5P\",\"features_architecture_fragemented_merged.md\":\"9Fe0IB0f\",\"features_architecture_fragemented_readme.md\":\"BaeSeE74\",\"features_architecture_fragemented_spec.md\":\"Dj96mGpc\",\"features_architecture_fragemented_user.md\":\"DiIY5f3S\",\"features_architecture_spec.md\":\"FkdurEmc\",\"features_architecture_user.md\":\"DrFQnjSR\",\"features_auth_dev.md\":\"6KaG4NWf\",\"features_auth_index.md\":\"CIWeGGHR\",\"features_auth_spec.md\":\"BWcPcd5W\",\"features_auth_user.md\":\"D-T6l7qu\",\"features_index.md\":\"CBCLnxOR\",\"features_operations_index.md\":\"1ZyZSTPT\",\"features_operations_spec.md\":\"DjgJMF_x\",\"features_operations_user.md\":\"DCjF3cjx\",\"features_providers_cpb-0782-opus-4-5-quickstart.md\":\"TBbi64Hn\",\"features_providers_cpb-0786-nano-banana-quickstart.md\":\"DSgIfjjW\",\"features_providers_fragemented_explanation.md\":\"C8Ic-hm-\",\"features_providers_fragemented_index.md\":\"CzWjP81k\",\"features_providers_fragemented_merged.md\":\"D6JUiY_n\",\"features_providers_fragemented_readme.md\":\"OrNypMgw\",\"features_providers_fragemented_spec.md\":\"YXL6s0P2\",\"features_providers_fragemented_user.md\":\"DZlqq6tE\",\"features_providers_spec.md\":\"nziW2bAK\",\"features_providers_user.md\":\"BgI_CAAo\",\"features_security_index.md\":\"txR9tRVd\",\"features_security_spec.md\":\"uSw1u2Ag\",\"features_security_user.md\":\"t3NIHGY9\",\"getting-started.md\":\"PuI7pHY9\",\"guides_changelog_entry_template.md\":\"BCmLEHv7\",\"guides_changelog_process.md\":\"D3GQPR-S\",\"guides_cpb-0701-0710-lane-e3-notes.md\":\"YXsbmv0a\",\"guides_cpb-0711-0720-lane-e4-notes.md\":\"DZ31y_fG\",\"guides_cpb-0721-0730-lane-d4-notes.md\":\"BHXHCmF_\",\"guides_cpb-0721-0730-lane-e5-notes.md\":\"Ttx_2FI0\",\"guides_project_setup_style.md\":\"Cll19vtq\",\"guides_quick-start_arm64_docker_provider_quickstart.md\":\"DfhW8tk6\",\"guides_release-batching.md\":\"CvbSAiVR\",\"how-to_index.md\":\"B6zNMS4d\",\"index.md\":\"CS04zCJ3\",\"install.md\":\"jl1-fBL5\",\"operations_auth-refresh-failure-symptom-fix.md\":\"BNffTl5J\",\"operations_checks-owner-responder-map.md\":\"C4JcFFgR\",\"operations_cpb-0783-gemini-3-pro-preview-hmr.md\":\"IMVbKucA\",\"operations_critical-endpoints-curl-pack.md\":\"BPbXRuul\",\"operations_distributed-fs-compute-status.md\":\"DPDO7Pb4\",\"operations_index.md\":\"mulfDN8D\",\"operations_kiro-idc-refresh-rollout.md\":\"BD3bRH7i\",\"operations_provider-outage-triage-quick-guide.md\":\"DL2H-TPt\",\"operations_release-governance.md\":\"BL3o7W1p\",\"operations_required-branch-check-ownership.md\":\"ByL2VfAw\",\"optimization_plan_2026-02-23.md\":\"Dk6KdPbt\",\"planning_agentapi-cliproxy-integration-research-2026-02-22.md\":\"B-06U1N3\",\"planning_board-workflow.md\":\"VnaMui1z\",\"planning_cliproxyapi_1000_item_board_2026-02-22.md\":\"DSlp_J8R\",\"planning_cliproxyapi_2000_item_execution_board_2026-02-22.md\":\"D0xvUGu3\",\"planning_coder-org-plus-relative-300-inventory-2026-02-22.md\":\"DvvIl2qT\",\"planning_coverage-gaps.md\":\"C_glORxB\",\"planning_docs_parity_p1_p2_plan_2026-02-23.md\":\"C2RDN_jr\",\"planning_index.md\":\"DTXn_2gw\",\"planning_issue-lanes-cliproxy-1000-2026-02-22.md\":\"BQy14v_o\",\"planning_issue-wave-codescan-0139-2026-02-23.md\":\"6oC46oFM\",\"planning_issue-wave-codescan-progress-2026-02-23.md\":\"BpfVFz9F\",\"planning_issue-wave-cpb-0001-0035-2026-02-22.md\":\"cytXPgg7\",\"planning_issue-wave-cpb-0036-0105-2026-02-22.md\":\"CtA7w5v_\",\"planning_issue-wave-cpb-0106-0175-2026-02-22.md\":\"BwnDAVVy\",\"planning_issue-wave-cpb-0176-0245-2026-02-22.md\":\"Ta48Sh7j\",\"planning_issue-wave-cpb-0246-0280-2026-02-22.md\":\"CD-k7yja\",\"planning_issue-wave-cpb-0281-0315-2026-02-22.md\":\"-u1qmiFk\",\"planning_issue-wave-cpb-0316-0350-2026-02-22.md\":\"CZhBsAaT\",\"planning_issue-wave-cpb-0351-0385-2026-02-22.md\":\"p0KR3l_L\",\"planning_issue-wave-cpb-0386-0420-2026-02-22.md\":\"DFol-ERm\",\"planning_issue-wave-cpb-0421-0455-2026-02-22.md\":\"CB_xFU0u\",\"planning_issue-wave-cpb-0456-0490-2026-02-22.md\":\"Ij0XRnk9\",\"planning_issue-wave-gh-35-2026-02-22.md\":\"BhNy4Jp1\",\"planning_issue-wave-gh-next21-2026-02-22.md\":\"DZJFfVyE\",\"planning_issue-wave-gh-next32-2026-02-22.md\":\"DIkXmxpU\",\"planning_readme.md\":\"BOzIPdcE\",\"planning_reports_fragemented_explanation.md\":\"CgCUuHzD\",\"planning_reports_fragemented_index.md\":\"BaweTIi6\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-1.md\":\"BaCA2Dn4\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-2.md\":\"DY5tGqIC\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-3.md\":\"BTCj0flT\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-4.md\":\"DEUUlEsl\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-5.md\":\"DHA_vryO\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-6.md\":\"HDh7asA5\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-7.md\":\"DL65VYVI\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-1.md\":\"1--JMXis\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-2.md\":\"C1NEkcty\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-3.md\":\"9qaH7GY_\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-4.md\":\"DVwKtv96\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-5.md\":\"CIJ3jwoI\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-6.md\":\"633STijE\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-7.md\":\"hlcrB-gZ\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-next-70-summary.md\":\"DFzY_O-F\",\"planning_reports_fragemented_issue-wave-gh-35-integration-summary-2026-02-22.md\":\"Bxq01nm4\",\"planning_reports_fragemented_issue-wave-gh-35-lane-1-self.md\":\"B_QVcMyq\",\"planning_reports_fragemented_issue-wave-gh-35-lane-1.md\":\"CVlXGf8o\",\"planning_reports_fragemented_issue-wave-gh-35-lane-2.md\":\"BrBTKj1L\",\"planning_reports_fragemented_issue-wave-gh-35-lane-3.md\":\"K_mYFfeW\",\"planning_reports_fragemented_issue-wave-gh-35-lane-4.md\":\"kTMNTfI6\",\"planning_reports_fragemented_issue-wave-gh-35-lane-5.md\":\"Qhut3FI4\",\"planning_reports_fragemented_issue-wave-gh-35-lane-6.md\":\"Nc9tQ9lP\",\"planning_reports_fragemented_issue-wave-gh-35-lane-7.md\":\"DOMMXX6r\",\"planning_reports_fragemented_merged.md\":\"CfzJZ6Ul\",\"planning_reports_fragemented_readme.md\":\"DfMtEHU8\",\"planning_reports_issue-wave-cp2k-0040-0050-lane-4-2026-02-23.md\":\"DhW5GZjA\",\"planning_reports_issue-wave-cp2k-next30-execution-summary-2026-02-23.md\":\"B3gIvzD0\",\"planning_reports_issue-wave-cp2k-next50-lane-2-2026-02-23.md\":\"CkmYfdvj\",\"planning_reports_issue-wave-cpb-0001-0035-lane-1.md\":\"Cp3Y1aHQ\",\"planning_reports_issue-wave-cpb-0001-0035-lane-2.md\":\"BmDYfEqO\",\"planning_reports_issue-wave-cpb-0001-0035-lane-3.md\":\"BIgKyIxp\",\"planning_reports_issue-wave-cpb-0001-0035-lane-4.md\":\"DrWUPi4A\",\"planning_reports_issue-wave-cpb-0001-0035-lane-5.md\":\"CUI7OxMy\",\"planning_reports_issue-wave-cpb-0001-0035-lane-6.md\":\"WIjHaO-h\",\"planning_reports_issue-wave-cpb-0001-0035-lane-7.md\":\"DDfJZp0H\",\"planning_reports_issue-wave-cpb-0036-0105-lane-1.md\":\"Bnkxfjzg\",\"planning_reports_issue-wave-cpb-0036-0105-lane-2.md\":\"jCPRg-fp\",\"planning_reports_issue-wave-cpb-0036-0105-lane-3.md\":\"CrXU1bR-\",\"planning_reports_issue-wave-cpb-0036-0105-lane-4.md\":\"CTbJxC6G\",\"planning_reports_issue-wave-cpb-0036-0105-lane-5.md\":\"DrtvrKSZ\",\"planning_reports_issue-wave-cpb-0036-0105-lane-6.md\":\"y5xfHXhM\",\"planning_reports_issue-wave-cpb-0036-0105-lane-7.md\":\"DoNtnN-F\",\"planning_reports_issue-wave-cpb-0036-0105-next-70-summary.md\":\"ZkbaBJg2\",\"planning_reports_issue-wave-cpb-0106-0175-lane-1.md\":\"BBxJ9y4y\",\"planning_reports_issue-wave-cpb-0106-0175-lane-2.md\":\"CnHehFRj\",\"planning_reports_issue-wave-cpb-0106-0175-lane-3.md\":\"CBx9LBJa\",\"planning_reports_issue-wave-cpb-0106-0175-lane-4.md\":\"pgwSsqgF\",\"planning_reports_issue-wave-cpb-0106-0175-lane-5.md\":\"QkeyKfUL\",\"planning_reports_issue-wave-cpb-0106-0175-lane-6.md\":\"xHfEiA96\",\"planning_reports_issue-wave-cpb-0106-0175-lane-7.md\":\"CjcqWjrn\",\"planning_reports_issue-wave-cpb-0106-0175-next-70-summary.md\":\"D4H_AsX4\",\"planning_reports_issue-wave-cpb-0138-0147-lane-1.md\":\"kkMP98GU\",\"planning_reports_issue-wave-cpb-0176-0245-lane-1.md\":\"bCreyPO7\",\"planning_reports_issue-wave-cpb-0176-0245-lane-2.md\":\"CUmP9Nux\",\"planning_reports_issue-wave-cpb-0176-0245-lane-3.md\":\"DvOdqrVe\",\"planning_reports_issue-wave-cpb-0176-0245-lane-4.md\":\"BV-_COVF\",\"planning_reports_issue-wave-cpb-0176-0245-lane-5.md\":\"DmMCfLyF\",\"planning_reports_issue-wave-cpb-0176-0245-lane-6.md\":\"C_jS6iez\",\"planning_reports_issue-wave-cpb-0176-0245-lane-7.md\":\"Diq-_qg8\",\"planning_reports_issue-wave-cpb-0176-0245-next-70-summary.md\":\"B-wwwLqS\",\"planning_reports_issue-wave-cpb-0246-0280-lane-1.md\":\"987gMsNB\",\"planning_reports_issue-wave-cpb-0246-0280-lane-2.md\":\"CiqwdfBK\",\"planning_reports_issue-wave-cpb-0246-0280-lane-3.md\":\"SNATAYxC\",\"planning_reports_issue-wave-cpb-0246-0280-lane-4.md\":\"BfO9yUSO\",\"planning_reports_issue-wave-cpb-0246-0280-lane-5.md\":\"d6uf1Ubc\",\"planning_reports_issue-wave-cpb-0246-0280-lane-6.md\":\"bJT_bGPi\",\"planning_reports_issue-wave-cpb-0246-0280-lane-7.md\":\"DXkDqLIH\",\"planning_reports_issue-wave-cpb-0246-0280-next-35-summary.md\":\"C23BTF6R\",\"planning_reports_issue-wave-cpb-0281-0315-lane-1.md\":\"CkpmkoC6\",\"planning_reports_issue-wave-cpb-0281-0315-lane-2.md\":\"CL8LE50h\",\"planning_reports_issue-wave-cpb-0281-0315-lane-3.md\":\"m1uri2TJ\",\"planning_reports_issue-wave-cpb-0281-0315-lane-4.md\":\"CDhi2Gt0\",\"planning_reports_issue-wave-cpb-0281-0315-lane-5.md\":\"Q9V8Pt1y\",\"planning_reports_issue-wave-cpb-0281-0315-lane-6.md\":\"DH38F4k0\",\"planning_reports_issue-wave-cpb-0281-0315-lane-7.md\":\"BnbNNy0M\",\"planning_reports_issue-wave-cpb-0281-0315-next-35-summary.md\":\"Cy5kcWX-\",\"planning_reports_issue-wave-cpb-0316-0350-lane-1.md\":\"DWkYQ3H1\",\"planning_reports_issue-wave-cpb-0316-0350-lane-2.md\":\"BzMzQdOB\",\"planning_reports_issue-wave-cpb-0316-0350-lane-3.md\":\"DgxDo7Lk\",\"planning_reports_issue-wave-cpb-0316-0350-lane-4.md\":\"BvEyJ096\",\"planning_reports_issue-wave-cpb-0316-0350-lane-5.md\":\"DfV0iijL\",\"planning_reports_issue-wave-cpb-0316-0350-lane-6.md\":\"Bsku0T-T\",\"planning_reports_issue-wave-cpb-0316-0350-lane-7.md\":\"BS3z-J5X\",\"planning_reports_issue-wave-cpb-0316-0350-next-35-summary.md\":\"CjiS80zK\",\"planning_reports_issue-wave-cpb-0327-0376-next-50-summary.md\":\"410jfk_2\",\"planning_reports_issue-wave-cpb-0351-0385-lane-1.md\":\"8RFbd2tO\",\"planning_reports_issue-wave-cpb-0351-0385-lane-2.md\":\"CUhUA8VV\",\"planning_reports_issue-wave-cpb-0351-0385-lane-3.md\":\"DCYCG9LE\",\"planning_reports_issue-wave-cpb-0351-0385-lane-4.md\":\"C5fEESOx\",\"planning_reports_issue-wave-cpb-0351-0385-lane-5.md\":\"DfA-s6Mx\",\"planning_reports_issue-wave-cpb-0351-0385-lane-6.md\":\"EgUYUHwF\",\"planning_reports_issue-wave-cpb-0351-0385-lane-7.md\":\"CtQ7ypdg\",\"planning_reports_issue-wave-cpb-0351-0385-next-35-summary.md\":\"UDHE_2hj\",\"planning_reports_issue-wave-cpb-0386-0420-lane-1.md\":\"OYzfmNfE\",\"planning_reports_issue-wave-cpb-0386-0420-lane-2.md\":\"3IPRnkwc\",\"planning_reports_issue-wave-cpb-0386-0420-lane-3.md\":\"BRc5k_5h\",\"planning_reports_issue-wave-cpb-0386-0420-lane-4.md\":\"xwLTvuIn\",\"planning_reports_issue-wave-cpb-0386-0420-lane-5.md\":\"CFEkMCVB\",\"planning_reports_issue-wave-cpb-0386-0420-lane-6.md\":\"C8PoPDJa\",\"planning_reports_issue-wave-cpb-0386-0420-lane-7.md\":\"atWmURZk\",\"planning_reports_issue-wave-cpb-0386-0420-next-35-summary.md\":\"C2ARgQ25\",\"planning_reports_issue-wave-cpb-0421-0455-lane-1.md\":\"jzg0BXrF\",\"planning_reports_issue-wave-cpb-0421-0455-lane-2.md\":\"D3QjYlSO\",\"planning_reports_issue-wave-cpb-0421-0455-lane-3.md\":\"CxvDqouL\",\"planning_reports_issue-wave-cpb-0421-0455-lane-4.md\":\"Da58bRsN\",\"planning_reports_issue-wave-cpb-0421-0455-lane-5.md\":\"CjXnkBjq\",\"planning_reports_issue-wave-cpb-0421-0455-lane-6.md\":\"CSq6llN5\",\"planning_reports_issue-wave-cpb-0421-0455-lane-7.md\":\"DEta9zTo\",\"planning_reports_issue-wave-cpb-0421-0455-next-35-summary.md\":\"DdshkDjI\",\"planning_reports_issue-wave-cpb-0456-0490-lane-1.md\":\"BhW57VVL\",\"planning_reports_issue-wave-cpb-0456-0490-lane-2.md\":\"DkOXnuCf\",\"planning_reports_issue-wave-cpb-0456-0490-lane-3.md\":\"KSVgTNmT\",\"planning_reports_issue-wave-cpb-0456-0490-lane-4.md\":\"CIM2izXS\",\"planning_reports_issue-wave-cpb-0456-0490-lane-5.md\":\"Cdes0-kt\",\"planning_reports_issue-wave-cpb-0456-0490-lane-6.md\":\"BOsCLWDM\",\"planning_reports_issue-wave-cpb-0456-0490-lane-7.md\":\"DcOgXSUc\",\"planning_reports_issue-wave-cpb-0456-0490-next-35-summary.md\":\"UgHJJK9v\",\"planning_reports_issue-wave-cpb-0491-0540-lane-1.md\":\"vEQ3xC8q\",\"planning_reports_issue-wave-cpb-0491-0540-lane-2.md\":\"Bp8RKAiq\",\"planning_reports_issue-wave-cpb-0491-0540-lane-3.md\":\"DupmSEoV\",\"planning_reports_issue-wave-cpb-0491-0540-lane-4.md\":\"BlvFGfC9\",\"planning_reports_issue-wave-cpb-0491-0540-lane-5.md\":\"BPAUSI6J\",\"planning_reports_issue-wave-cpb-0491-0540-lane-6.md\":\"XAg7Kbaw\",\"planning_reports_issue-wave-cpb-0491-0540-lane-7.md\":\"BOtIWc5I\",\"planning_reports_issue-wave-cpb-0491-0540-lane-8.md\":\"C85Dq_XV\",\"planning_reports_issue-wave-cpb-0541-0590-lane-1.md\":\"UisJnuG-\",\"planning_reports_issue-wave-cpb-0541-0590-lane-10.md\":\"DtxVQvFu\",\"planning_reports_issue-wave-cpb-0541-0590-lane-2.md\":\"i8SFguNH\",\"planning_reports_issue-wave-cpb-0541-0590-lane-3.md\":\"BigPN3CX\",\"planning_reports_issue-wave-cpb-0541-0590-lane-4.md\":\"D3LuPTk9\",\"planning_reports_issue-wave-cpb-0541-0590-lane-5.md\":\"BbmJmKar\",\"planning_reports_issue-wave-cpb-0541-0590-lane-6.md\":\"kW1gYw0q\",\"planning_reports_issue-wave-cpb-0541-0590-lane-7.md\":\"B6ibyz7N\",\"planning_reports_issue-wave-cpb-0541-0590-lane-8.md\":\"CqgVz_gC\",\"planning_reports_issue-wave-cpb-0541-0590-lane-9.md\":\"vEwHKO3T\",\"planning_reports_issue-wave-cpb-0541-0590-next-50-summary.md\":\"CwNHocVt\",\"planning_reports_issue-wave-cpb-0546-0555-lane-f-implementation-2026-02-23.md\":\"qHkbsbsI\",\"planning_reports_issue-wave-cpb-0556-0610-lane-d-implementation-2026-02-23.md\":\"CsIUkBV6\",\"planning_reports_issue-wave-cpb-0581-0590-lane-e-implementation-2026-02-23.md\":\"RoArpSmD\",\"planning_reports_issue-wave-cpb-0591-0640-lane-1.md\":\"CUei2vrs\",\"planning_reports_issue-wave-cpb-0591-0640-lane-10.md\":\"A7qkaf-w\",\"planning_reports_issue-wave-cpb-0591-0640-lane-2.md\":\"iVprr5_q\",\"planning_reports_issue-wave-cpb-0591-0640-lane-3.md\":\"B7OskrYl\",\"planning_reports_issue-wave-cpb-0591-0640-lane-4.md\":\"DDIHp0s5\",\"planning_reports_issue-wave-cpb-0591-0640-lane-5.md\":\"D4bBval6\",\"planning_reports_issue-wave-cpb-0591-0640-lane-6.md\":\"1qrTUwQ_\",\"planning_reports_issue-wave-cpb-0591-0640-lane-7.md\":\"D1Za5qQN\",\"planning_reports_issue-wave-cpb-0591-0640-lane-8.md\":\"Di4pPXat\",\"planning_reports_issue-wave-cpb-0591-0640-lane-9.md\":\"D5M8sKYB\",\"planning_reports_issue-wave-cpb-0591-0640-next-50-summary.md\":\"GfclWLN2\",\"planning_reports_issue-wave-cpb-0641-0690-lane-1.md\":\"BWjIgRJW\",\"planning_reports_issue-wave-cpb-0641-0690-lane-10.md\":\"CsadUCw0\",\"planning_reports_issue-wave-cpb-0641-0690-lane-2.md\":\"DyvTYSdP\",\"planning_reports_issue-wave-cpb-0641-0690-lane-3.md\":\"CgMw2pAu\",\"planning_reports_issue-wave-cpb-0641-0690-lane-4.md\":\"BAHF6v4B\",\"planning_reports_issue-wave-cpb-0641-0690-lane-5.md\":\"tJhXbhXA\",\"planning_reports_issue-wave-cpb-0641-0690-lane-6.md\":\"BNnXFS6h\",\"planning_reports_issue-wave-cpb-0641-0690-lane-7.md\":\"DGPhH1ti\",\"planning_reports_issue-wave-cpb-0641-0690-lane-8.md\":\"Bargda68\",\"planning_reports_issue-wave-cpb-0641-0690-lane-9.md\":\"CtXRcDrr\",\"planning_reports_issue-wave-cpb-0641-0690-next-50-summary.md\":\"DNQGhQdt\",\"planning_reports_issue-wave-cpb-0691-0700-lane-f2-implementation-2026-02-23.md\":\"7awOpRaH\",\"planning_reports_issue-wave-cpb-0701-0710-lane-e3.md\":\"C_Q9VSoO\",\"planning_reports_issue-wave-cpb-0711-0720-lane-e4.md\":\"dhztHtT_\",\"planning_reports_issue-wave-cpb-0721-0730-lane-e5.md\":\"6MmY3TpF\",\"planning_reports_issue-wave-cpb-0731-0780-lane-a.md\":\"CDg9mtRM\",\"planning_reports_issue-wave-cpb-0731-0780-lane-b.md\":\"BhLeRGoL\",\"planning_reports_issue-wave-cpb-0731-0780-lane-c.md\":\"-Q9J5hbo\",\"planning_reports_issue-wave-cpb-0731-0780-lane-d.md\":\"dP996xjD\",\"planning_reports_issue-wave-cpb-0731-0780-lane-e.md\":\"EfWrVuU7\",\"planning_reports_issue-wave-cpb-0731-0780-lane-f.md\":\"D96QriwK\",\"planning_reports_issue-wave-cpb-0731-0780-next-50-summary.md\":\"CAaGmIIR\",\"planning_reports_issue-wave-cpb-0741-0750-lane-d8.md\":\"B0-P1WCe\",\"planning_reports_issue-wave-cpb-0745-0754-lane-d7.md\":\"SwMiKzpN\",\"planning_reports_issue-wave-cpb-0781-0790-lane-d9.md\":\"wt0jgaF-\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-1.md\":\"BUxNw-mA\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-2.md\":\"CkXCV3sW\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-3.md\":\"jmjsPnW5\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-4-code.md\":\"BV5gU6XA\",\"planning_reports_issue-wave-cpb-0781-0830-lane-a.md\":\"d0IIl9Bu\",\"planning_reports_issue-wave-cpb-0781-0830-lane-b.md\":\"CTYMg8Iw\",\"planning_reports_issue-wave-cpb-0781-0830-lane-c.md\":\"BT2R7I_D\",\"planning_reports_issue-wave-cpb-0781-0830-lane-d.md\":\"XCSxbOqw\",\"planning_reports_issue-wave-cpb-0781-0830-lane-e.md\":\"Cwin3iXB\",\"planning_reports_issue-wave-cpb-0781-0830-lane-e10-implementation-2026-02-23.md\":\"BiE-Symc\",\"planning_reports_issue-wave-cpb-0781-0830-lane-f.md\":\"BPFQECLS\",\"planning_reports_issue-wave-cpb-0781-0830-next-50-summary.md\":\"DqcZypC8\",\"planning_reports_issue-wave-cpb-0784-0785-lane-d10.md\":\"xlQ1IETx\",\"planning_reports_issue-wave-cpb-0981-1000-next-20-summary.md\":\"BgU5VnNR\",\"planning_reports_issue-wave-gh-35-integration-summary-2026-02-22.md\":\"CBKk1zIk\",\"planning_reports_issue-wave-gh-35-lane-1-self.md\":\"DfhtPtl2\",\"planning_reports_issue-wave-gh-35-lane-1.md\":\"D5nErqVG\",\"planning_reports_issue-wave-gh-35-lane-2.md\":\"CcNGRvFL\",\"planning_reports_issue-wave-gh-35-lane-3.md\":\"DAQgaCKe\",\"planning_reports_issue-wave-gh-35-lane-4.md\":\"B12RFh86\",\"planning_reports_issue-wave-gh-35-lane-5.md\":\"BD8OH8gI\",\"planning_reports_issue-wave-gh-35-lane-6.md\":\"nRD_HGSO\",\"planning_reports_issue-wave-gh-35-lane-7.md\":\"DxxhBIAG\",\"planning_reports_issue-wave-gh-next20-lane-f7.md\":\"N9DAWS8Q\",\"planning_reports_issue-wave-gh-next21-lane-1.md\":\"75i6yJDq\",\"planning_reports_issue-wave-gh-next21-lane-2.md\":\"DUrM9pQd\",\"planning_reports_issue-wave-gh-next21-lane-3.md\":\"CopjXRED\",\"planning_reports_issue-wave-gh-next21-lane-4.md\":\"CjHeHuTN\",\"planning_reports_issue-wave-gh-next21-lane-5.md\":\"CqVRPNUn\",\"planning_reports_issue-wave-gh-next21-lane-6.md\":\"C438_6JP\",\"planning_reports_issue-wave-gh-next21-lane-7.md\":\"DTcmOMBk\",\"planning_reports_issue-wave-gh-next32-lane-2.md\":\"ZD5oOf3G\",\"planning_reports_issue-wave-gh-next32-lane-3.md\":\"LxHtuy60\",\"planning_reports_issue-wave-gh-next32-lane-4.md\":\"CtyGhGkg\",\"planning_reports_issue-wave-gh-next32-lane-5.md\":\"CeBXhVqs\",\"planning_reports_issue-wave-gh-next32-lane-6.md\":\"jdmIezy7\",\"planning_reports_issue-wave-gh-next32-lane-7.md\":\"DfDxztub\",\"planning_reports_issue-wave-gh-next32-merge-2026-02-23.md\":\"EHBmEKUY\",\"planning_reports_issue-wave-gh-next32-merge-wave2-2026-02-23.md\":\"BTHFS68W\",\"planning_reports_lane-b-quality-governance-doc-parity-2026-02-23.md\":\"DtLwg33o\",\"planning_reports_next-50-wave1-execution-2026-02-23.md\":\"Dt17zylC\",\"planning_reports_next-50-wave2-execution-2026-02-23.md\":\"HiNJQ0zI\",\"planning_reports_next-50-wave3-execution-2026-02-23.md\":\"bbtdXM_K\",\"planning_reports_next-50-wave4-execution-2026-02-23.md\":\"DXJp55L-\",\"planning_reports_next-50-wave5-execution-2026-02-23.md\":\"B-AVm7G2\",\"planning_reports_next-50-work-items-2026-02-23.md\":\"C6CJFBE_\",\"prd.md\":\"BMTE8K32\",\"provider-catalog.md\":\"B964qiaQ\",\"provider-operations.md\":\"D5ZF3hib\",\"provider-quickstarts.md\":\"C051m4Fo\",\"provider-usage.md\":\"CXJJ-jkb\",\"readme.md\":\"Dj28aGZX\",\"reference_changelog_entry_template.md\":\"Cj1hkkNl\",\"reference_docs_ia_contract.md\":\"BjVwUZt1\",\"reference_docs_migration_matrix.md\":\"DDc-QnaQ\",\"reports_fragemented_explanation.md\":\"CvCEqZfc\",\"reports_fragemented_index.md\":\"1rd9A5eK\",\"reports_fragemented_merged.md\":\"DhTtvTtQ\",\"reports_fragemented_open_items_validation_2026-02-22.md\":\"CDAi-pKU\",\"reports_fragemented_readme.md\":\"DDR_hWRY\",\"reports_open_items_validation_2026-02-22.md\":\"Bi1fZycI\",\"reports_open_items_validation_fork_2026-02-22.md\":\"9oz5QZyI\",\"routing-reference.md\":\"Cm1uQgdF\",\"sdk-access.md\":\"R1OmYGl1\",\"sdk-access_cn.md\":\"C4HDi2HV\",\"sdk-access_fa.md\":\"CewhlDh6\",\"sdk-advanced.md\":\"D-UkRBT3\",\"sdk-advanced_cn.md\":\"DlxV9RMB\",\"sdk-advanced_fa.md\":\"BERu-0Es\",\"sdk-usage.md\":\"CxV176R2\",\"sdk-usage_cn.md\":\"Ct_kjhJx\",\"sdk-usage_fa.md\":\"BLR81jKC\",\"sdk-watcher.md\":\"ivt7FeWG\",\"sdk-watcher_cn.md\":\"D5F7iFnL\",\"sdk-watcher_fa.md\":\"BPSSoX3E\",\"spec.md\":\"CCwohbF1\",\"start-here.md\":\"CkRxFJyh\",\"troubleshooting.md\":\"B2HQYNGa\",\"tutorials_index.md\":\"Bpo6-08b\",\"worklog.md\":\"B-uMnQEw\",\"zh-cn_index.md\":\"zP9zk4aR\",\"zh-tw_index.md\":\"ByOwnU7A\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"cliproxy++\",\"description\":\"cliproxyapi-plusplus documentation\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"Start Here\",\"link\":\"/start-here\"},{\"text\":\"Tutorials\",\"link\":\"/tutorials/\"},{\"text\":\"How-to\",\"link\":\"/how-to/\"},{\"text\":\"Explanation\",\"link\":\"/explanation/\"},{\"text\":\"Getting Started\",\"link\":\"/getting-started\"},{\"text\":\"Providers\",\"link\":\"/provider-usage\"},{\"text\":\"Provider Catalog\",\"link\":\"/provider-catalog\"},{\"text\":\"Operations\",\"link\":\"/operations/\"},{\"text\":\"Reference\",\"link\":\"/routing-reference\"},{\"text\":\"API\",\"link\":\"/api/\"},{\"text\":\"Docsets\",\"link\":\"/docsets/\"}],\"sidebar\":[{\"text\":\"Guide\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Getting Started\",\"link\":\"/getting-started\"},{\"text\":\"Install\",\"link\":\"/install\"},{\"text\":\"Provider Usage\",\"link\":\"/provider-usage\"},{\"text\":\"Provider Catalog\",\"link\":\"/provider-catalog\"},{\"text\":\"Provider Operations\",\"link\":\"/provider-operations\"},{\"text\":\"Troubleshooting\",\"link\":\"/troubleshooting\"},{\"text\":\"Planning Boards\",\"link\":\"/planning/\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"Routing and Models\",\"link\":\"/routing-reference\"},{\"text\":\"Feature Guides\",\"link\":\"/features/\"},{\"text\":\"Docsets\",\"link\":\"/docsets/\"}]},{\"text\":\"API\",\"items\":[{\"text\":\"API Index\",\"link\":\"/api/\"},{\"text\":\"OpenAI-Compatible API\",\"link\":\"/api/openai-compatible\"},{\"text\":\"Management API\",\"link\":\"/api/management\"},{\"text\":\"Operations API\",\"link\":\"/api/operations\"}]}],\"search\":{\"provider\":\"local\"},\"footer\":{\"message\":\"MIT Licensed\",\"copyright\":\"Copyright © KooshaPari\"},\"editLink\":{\"pattern\":\"https://github.com/kooshapari/cliproxyapi-plusplus/edit/main/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"outline\":{\"level\":[2,3]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/kooshapari/cliproxyapi-plusplus\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>