llm-strings 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +117 -45
  2. package/dist/ai-sdk.cjs +831 -0
  3. package/dist/ai-sdk.cjs.map +1 -0
  4. package/dist/ai-sdk.d.cts +27 -0
  5. package/dist/ai-sdk.d.ts +27 -0
  6. package/dist/ai-sdk.js +465 -0
  7. package/dist/ai-sdk.js.map +1 -0
  8. package/dist/{chunk-MPIHGH6L.js → chunk-2ARD4TFU.js} +5 -4
  9. package/dist/chunk-2ARD4TFU.js.map +1 -0
  10. package/dist/{chunk-FCEV23OT.js → chunk-BCOUH7LH.js} +9 -3
  11. package/dist/chunk-BCOUH7LH.js.map +1 -0
  12. package/dist/{chunk-UYMVUTLV.js → chunk-RPXK2A7O.js} +5 -9
  13. package/dist/chunk-RPXK2A7O.js.map +1 -0
  14. package/dist/{chunk-XID353H7.js → chunk-W4NIQY7M.js} +412 -52
  15. package/dist/chunk-W4NIQY7M.js.map +1 -0
  16. package/dist/index.cjs +443 -84
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +1 -1
  19. package/dist/index.d.ts +4 -4
  20. package/dist/index.js +9 -4
  21. package/dist/normalize.cjs +19 -2
  22. package/dist/normalize.cjs.map +1 -1
  23. package/dist/normalize.d.cts +1 -1
  24. package/dist/normalize.d.ts +2 -2
  25. package/dist/normalize.js +2 -2
  26. package/dist/parse.cjs +73 -2
  27. package/dist/parse.cjs.map +1 -1
  28. package/dist/parse.d.cts +5 -1
  29. package/dist/parse.d.ts +5 -1
  30. package/dist/parse.js +2 -1
  31. package/dist/{provider-core-DinpG40u.d.cts → provider-core-BiAl8MCV.d.cts} +20 -1
  32. package/dist/{provider-core-DinpG40u.d.ts → provider-core-BiAl8MCV.d.ts} +20 -1
  33. package/dist/providers.cjs +786 -110
  34. package/dist/providers.cjs.map +1 -1
  35. package/dist/providers.d.cts +2 -2
  36. package/dist/providers.d.ts +2 -2
  37. package/dist/providers.js +379 -60
  38. package/dist/providers.js.map +1 -1
  39. package/dist/validate.cjs +433 -79
  40. package/dist/validate.cjs.map +1 -1
  41. package/dist/validate.js +4 -4
  42. package/package.json +13 -3
  43. package/dist/chunk-FCEV23OT.js.map +0 -1
  44. package/dist/chunk-MPIHGH6L.js.map +0 -1
  45. package/dist/chunk-UYMVUTLV.js.map +0 -1
  46. package/dist/chunk-XID353H7.js.map +0 -1
package/dist/providers.js CHANGED
@@ -3,6 +3,7 @@ import {
3
3
  CACHE_TTLS,
4
4
  CACHE_VALUES,
5
5
  DURATION_RE,
6
+ HOST_ALIASES,
6
7
  PARAM_SPECS,
7
8
  PROVIDER_PARAMS,
8
9
  REASONING_MODEL_UNSUPPORTED,
@@ -12,19 +13,46 @@ import {
12
13
  detectGatewaySubProvider,
13
14
  detectProvider,
14
15
  isGatewayProvider,
15
- isReasoningModel
16
- } from "./chunk-XID353H7.js";
16
+ isReasoningModel,
17
+ providerFromHostAlias,
18
+ resolveHostAlias
19
+ } from "./chunk-W4NIQY7M.js";
17
20
 
18
21
  // src/provider-meta.ts
19
22
  var PROVIDER_META = [
20
23
  { id: "openai", name: "OpenAI", host: "api.openai.com", color: "#10a37f" },
21
- { id: "anthropic", name: "Anthropic", host: "api.anthropic.com", color: "#e8956a" },
22
- { id: "google", name: "Google", host: "generativelanguage.googleapis.com", color: "#4285f4" },
24
+ {
25
+ id: "anthropic",
26
+ name: "Anthropic",
27
+ host: "api.anthropic.com",
28
+ color: "#e8956a"
29
+ },
30
+ {
31
+ id: "google",
32
+ name: "Google",
33
+ host: "generativelanguage.googleapis.com",
34
+ color: "#4285f4"
35
+ },
23
36
  { id: "mistral", name: "Mistral", host: "api.mistral.ai", color: "#ff7000" },
24
37
  { id: "cohere", name: "Cohere", host: "api.cohere.com", color: "#39594d" },
25
- { id: "bedrock", name: "Bedrock", host: "bedrock-runtime.us-east-1.amazonaws.com", color: "#ff9900" },
26
- { id: "openrouter", name: "OpenRouter", host: "openrouter.ai", color: "#818cf8" },
27
- { id: "vercel", name: "Vercel", host: "gateway.ai.vercel.app", color: "#ededed" }
38
+ {
39
+ id: "bedrock",
40
+ name: "Bedrock",
41
+ host: "bedrock-runtime.us-east-1.amazonaws.com",
42
+ color: "#ff9900"
43
+ },
44
+ {
45
+ id: "openrouter",
46
+ name: "OpenRouter",
47
+ host: "openrouter.ai",
48
+ color: "#818cf8"
49
+ },
50
+ {
51
+ id: "vercel",
52
+ name: "Vercel",
53
+ host: "gateway.ai.vercel.app",
54
+ color: "#ededed"
55
+ }
28
56
  ];
29
57
  var MODELS = {
30
58
  openai: [
@@ -89,99 +117,387 @@ var MODELS = {
89
117
  };
90
118
  var CANONICAL_PARAM_SPECS = {
91
119
  openai: {
92
- temperature: { type: "number", min: 0, max: 2, default: 0.7, description: "Controls randomness" },
93
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
94
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling" },
95
- frequency_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize frequent tokens" },
96
- presence_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize repeated topics" },
120
+ temperature: {
121
+ type: "number",
122
+ min: 0,
123
+ max: 2,
124
+ default: 0.7,
125
+ description: "Controls randomness"
126
+ },
127
+ max_tokens: {
128
+ type: "number",
129
+ min: 1,
130
+ default: 4096,
131
+ description: "Maximum output tokens"
132
+ },
133
+ top_p: {
134
+ type: "number",
135
+ min: 0,
136
+ max: 1,
137
+ default: 1,
138
+ description: "Nucleus sampling"
139
+ },
140
+ frequency_penalty: {
141
+ type: "number",
142
+ min: -2,
143
+ max: 2,
144
+ default: 0,
145
+ description: "Penalize frequent tokens"
146
+ },
147
+ presence_penalty: {
148
+ type: "number",
149
+ min: -2,
150
+ max: 2,
151
+ default: 0,
152
+ description: "Penalize repeated topics"
153
+ },
97
154
  stop: { type: "string", default: "", description: "Stop sequences" },
98
155
  n: { type: "number", min: 1, default: 1, description: "Completions count" },
99
156
  seed: { type: "number", default: "", description: "Random seed" },
100
157
  stream: { type: "boolean", default: false, description: "Stream response" },
101
- effort: { type: "enum", values: ["none", "minimal", "low", "medium", "high", "xhigh"], default: "medium", description: "Reasoning effort" }
158
+ effort: {
159
+ type: "enum",
160
+ values: ["none", "minimal", "low", "medium", "high", "xhigh"],
161
+ default: "medium",
162
+ description: "Reasoning effort"
163
+ }
102
164
  },
103
165
  anthropic: {
104
- temperature: { type: "number", min: 0, max: 1, default: 0.7, description: "Controls randomness" },
105
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
106
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling" },
107
- top_k: { type: "number", min: 0, default: 40, description: "Top-K sampling" },
166
+ temperature: {
167
+ type: "number",
168
+ min: 0,
169
+ max: 1,
170
+ default: 0.7,
171
+ description: "Controls randomness"
172
+ },
173
+ max_tokens: {
174
+ type: "number",
175
+ min: 1,
176
+ default: 4096,
177
+ description: "Maximum output tokens"
178
+ },
179
+ top_p: {
180
+ type: "number",
181
+ min: 0,
182
+ max: 1,
183
+ default: 1,
184
+ description: "Nucleus sampling"
185
+ },
186
+ top_k: {
187
+ type: "number",
188
+ min: 0,
189
+ default: 40,
190
+ description: "Top-K sampling"
191
+ },
108
192
  stop: { type: "string", default: "", description: "Stop sequences" },
109
193
  stream: { type: "boolean", default: false, description: "Stream response" },
110
- effort: { type: "enum", values: ["low", "medium", "high", "max"], default: "medium", description: "Thinking effort" },
111
- cache: { type: "enum", values: ["ephemeral"], default: "ephemeral", description: "Cache control" },
112
- cache_ttl: { type: "enum", values: ["5m", "1h"], default: "5m", description: "Cache TTL" }
194
+ effort: {
195
+ type: "enum",
196
+ values: ["low", "medium", "high", "max"],
197
+ default: "medium",
198
+ description: "Thinking effort"
199
+ },
200
+ cache: {
201
+ type: "enum",
202
+ values: ["ephemeral"],
203
+ default: "ephemeral",
204
+ description: "Cache control"
205
+ },
206
+ cache_ttl: {
207
+ type: "enum",
208
+ values: ["5m", "1h"],
209
+ default: "5m",
210
+ description: "Cache TTL"
211
+ }
113
212
  },
114
213
  google: {
115
- temperature: { type: "number", min: 0, max: 2, default: 0.7, description: "Controls randomness" },
116
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
117
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling" },
118
- top_k: { type: "number", min: 0, default: 40, description: "Top-K sampling" },
119
- frequency_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize frequent tokens" },
120
- presence_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize repeated topics" },
214
+ temperature: {
215
+ type: "number",
216
+ min: 0,
217
+ max: 2,
218
+ default: 0.7,
219
+ description: "Controls randomness"
220
+ },
221
+ max_tokens: {
222
+ type: "number",
223
+ min: 1,
224
+ default: 4096,
225
+ description: "Maximum output tokens"
226
+ },
227
+ top_p: {
228
+ type: "number",
229
+ min: 0,
230
+ max: 1,
231
+ default: 1,
232
+ description: "Nucleus sampling"
233
+ },
234
+ top_k: {
235
+ type: "number",
236
+ min: 0,
237
+ default: 40,
238
+ description: "Top-K sampling"
239
+ },
240
+ frequency_penalty: {
241
+ type: "number",
242
+ min: -2,
243
+ max: 2,
244
+ default: 0,
245
+ description: "Penalize frequent tokens"
246
+ },
247
+ presence_penalty: {
248
+ type: "number",
249
+ min: -2,
250
+ max: 2,
251
+ default: 0,
252
+ description: "Penalize repeated topics"
253
+ },
121
254
  stop: { type: "string", default: "", description: "Stop sequences" },
122
255
  n: { type: "number", min: 1, default: 1, description: "Candidate count" },
123
256
  stream: { type: "boolean", default: false, description: "Stream response" },
124
257
  seed: { type: "number", default: "", description: "Random seed" }
125
258
  },
126
259
  mistral: {
127
- temperature: { type: "number", min: 0, max: 1, default: 0.7, description: "Controls randomness" },
128
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
129
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling" },
130
- frequency_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize frequent tokens" },
131
- presence_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize repeated topics" },
260
+ temperature: {
261
+ type: "number",
262
+ min: 0,
263
+ max: 1,
264
+ default: 0.7,
265
+ description: "Controls randomness"
266
+ },
267
+ max_tokens: {
268
+ type: "number",
269
+ min: 1,
270
+ default: 4096,
271
+ description: "Maximum output tokens"
272
+ },
273
+ top_p: {
274
+ type: "number",
275
+ min: 0,
276
+ max: 1,
277
+ default: 1,
278
+ description: "Nucleus sampling"
279
+ },
280
+ frequency_penalty: {
281
+ type: "number",
282
+ min: -2,
283
+ max: 2,
284
+ default: 0,
285
+ description: "Penalize frequent tokens"
286
+ },
287
+ presence_penalty: {
288
+ type: "number",
289
+ min: -2,
290
+ max: 2,
291
+ default: 0,
292
+ description: "Penalize repeated topics"
293
+ },
132
294
  stop: { type: "string", default: "", description: "Stop sequences" },
133
295
  n: { type: "number", min: 1, default: 1, description: "Completions count" },
134
296
  seed: { type: "number", default: "", description: "Random seed" },
135
297
  stream: { type: "boolean", default: false, description: "Stream response" },
136
- safe_prompt: { type: "boolean", default: false, description: "Enable safe prompt" },
137
- min_tokens: { type: "number", min: 0, default: 0, description: "Minimum tokens" }
298
+ safe_prompt: {
299
+ type: "boolean",
300
+ default: false,
301
+ description: "Enable safe prompt"
302
+ },
303
+ min_tokens: {
304
+ type: "number",
305
+ min: 0,
306
+ default: 0,
307
+ description: "Minimum tokens"
308
+ }
138
309
  },
139
310
  cohere: {
140
- temperature: { type: "number", min: 0, max: 1, default: 0.7, description: "Controls randomness" },
141
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
142
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling (p)" },
143
- top_k: { type: "number", min: 0, max: 500, default: 40, description: "Top-K sampling (k)" },
144
- frequency_penalty: { type: "number", min: 0, max: 1, default: 0, description: "Penalize frequent tokens" },
145
- presence_penalty: { type: "number", min: 0, max: 1, default: 0, description: "Penalize repeated topics" },
311
+ temperature: {
312
+ type: "number",
313
+ min: 0,
314
+ max: 1,
315
+ default: 0.7,
316
+ description: "Controls randomness"
317
+ },
318
+ max_tokens: {
319
+ type: "number",
320
+ min: 1,
321
+ default: 4096,
322
+ description: "Maximum output tokens"
323
+ },
324
+ top_p: {
325
+ type: "number",
326
+ min: 0,
327
+ max: 1,
328
+ default: 1,
329
+ description: "Nucleus sampling (p)"
330
+ },
331
+ top_k: {
332
+ type: "number",
333
+ min: 0,
334
+ max: 500,
335
+ default: 40,
336
+ description: "Top-K sampling (k)"
337
+ },
338
+ frequency_penalty: {
339
+ type: "number",
340
+ min: 0,
341
+ max: 1,
342
+ default: 0,
343
+ description: "Penalize frequent tokens"
344
+ },
345
+ presence_penalty: {
346
+ type: "number",
347
+ min: 0,
348
+ max: 1,
349
+ default: 0,
350
+ description: "Penalize repeated topics"
351
+ },
146
352
  stop: { type: "string", default: "", description: "Stop sequences" },
147
353
  stream: { type: "boolean", default: false, description: "Stream response" },
148
354
  seed: { type: "number", default: "", description: "Random seed" }
149
355
  },
150
356
  bedrock: {
151
- temperature: { type: "number", min: 0, max: 1, default: 0.7, description: "Controls randomness" },
152
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
153
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling" },
154
- top_k: { type: "number", min: 0, default: 40, description: "Top-K sampling" },
357
+ temperature: {
358
+ type: "number",
359
+ min: 0,
360
+ max: 1,
361
+ default: 0.7,
362
+ description: "Controls randomness"
363
+ },
364
+ max_tokens: {
365
+ type: "number",
366
+ min: 1,
367
+ default: 4096,
368
+ description: "Maximum output tokens"
369
+ },
370
+ top_p: {
371
+ type: "number",
372
+ min: 0,
373
+ max: 1,
374
+ default: 1,
375
+ description: "Nucleus sampling"
376
+ },
377
+ top_k: {
378
+ type: "number",
379
+ min: 0,
380
+ default: 40,
381
+ description: "Top-K sampling"
382
+ },
155
383
  stop: { type: "string", default: "", description: "Stop sequences" },
156
384
  stream: { type: "boolean", default: false, description: "Stream response" },
157
- cache: { type: "enum", values: ["ephemeral"], default: "ephemeral", description: "Cache control" },
158
- cache_ttl: { type: "enum", values: ["5m", "1h"], default: "5m", description: "Cache TTL" }
385
+ cache: {
386
+ type: "enum",
387
+ values: ["ephemeral"],
388
+ default: "ephemeral",
389
+ description: "Cache control"
390
+ },
391
+ cache_ttl: {
392
+ type: "enum",
393
+ values: ["5m", "1h"],
394
+ default: "5m",
395
+ description: "Cache TTL"
396
+ }
159
397
  },
160
398
  openrouter: {
161
- temperature: { type: "number", min: 0, max: 2, default: 0.7, description: "Controls randomness" },
162
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
163
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling" },
164
- top_k: { type: "number", min: 0, default: 40, description: "Top-K sampling" },
165
- frequency_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize frequent tokens" },
166
- presence_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize repeated topics" },
399
+ temperature: {
400
+ type: "number",
401
+ min: 0,
402
+ max: 2,
403
+ default: 0.7,
404
+ description: "Controls randomness"
405
+ },
406
+ max_tokens: {
407
+ type: "number",
408
+ min: 1,
409
+ default: 4096,
410
+ description: "Maximum output tokens"
411
+ },
412
+ top_p: {
413
+ type: "number",
414
+ min: 0,
415
+ max: 1,
416
+ default: 1,
417
+ description: "Nucleus sampling"
418
+ },
419
+ top_k: {
420
+ type: "number",
421
+ min: 0,
422
+ default: 40,
423
+ description: "Top-K sampling"
424
+ },
425
+ frequency_penalty: {
426
+ type: "number",
427
+ min: -2,
428
+ max: 2,
429
+ default: 0,
430
+ description: "Penalize frequent tokens"
431
+ },
432
+ presence_penalty: {
433
+ type: "number",
434
+ min: -2,
435
+ max: 2,
436
+ default: 0,
437
+ description: "Penalize repeated topics"
438
+ },
167
439
  stop: { type: "string", default: "", description: "Stop sequences" },
168
440
  n: { type: "number", min: 1, default: 1, description: "Completions count" },
169
441
  seed: { type: "number", default: "", description: "Random seed" },
170
442
  stream: { type: "boolean", default: false, description: "Stream response" },
171
- effort: { type: "enum", values: ["none", "minimal", "low", "medium", "high", "xhigh"], default: "medium", description: "Reasoning effort" }
443
+ effort: {
444
+ type: "enum",
445
+ values: ["none", "minimal", "low", "medium", "high", "xhigh"],
446
+ default: "medium",
447
+ description: "Reasoning effort"
448
+ }
172
449
  },
173
450
  vercel: {
174
- temperature: { type: "number", min: 0, max: 2, default: 0.7, description: "Controls randomness" },
175
- max_tokens: { type: "number", min: 1, default: 4096, description: "Maximum output tokens" },
176
- top_p: { type: "number", min: 0, max: 1, default: 1, description: "Nucleus sampling" },
177
- top_k: { type: "number", min: 0, default: 40, description: "Top-K sampling" },
178
- frequency_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize frequent tokens" },
179
- presence_penalty: { type: "number", min: -2, max: 2, default: 0, description: "Penalize repeated topics" },
451
+ temperature: {
452
+ type: "number",
453
+ min: 0,
454
+ max: 2,
455
+ default: 0.7,
456
+ description: "Controls randomness"
457
+ },
458
+ max_tokens: {
459
+ type: "number",
460
+ min: 1,
461
+ default: 4096,
462
+ description: "Maximum output tokens"
463
+ },
464
+ top_p: {
465
+ type: "number",
466
+ min: 0,
467
+ max: 1,
468
+ default: 1,
469
+ description: "Nucleus sampling"
470
+ },
471
+ top_k: {
472
+ type: "number",
473
+ min: 0,
474
+ default: 40,
475
+ description: "Top-K sampling"
476
+ },
477
+ frequency_penalty: {
478
+ type: "number",
479
+ min: -2,
480
+ max: 2,
481
+ default: 0,
482
+ description: "Penalize frequent tokens"
483
+ },
484
+ presence_penalty: {
485
+ type: "number",
486
+ min: -2,
487
+ max: 2,
488
+ default: 0,
489
+ description: "Penalize repeated topics"
490
+ },
180
491
  stop: { type: "string", default: "", description: "Stop sequences" },
181
492
  n: { type: "number", min: 1, default: 1, description: "Completions count" },
182
493
  seed: { type: "number", default: "", description: "Random seed" },
183
494
  stream: { type: "boolean", default: false, description: "Stream response" },
184
- effort: { type: "enum", values: ["none", "minimal", "low", "medium", "high", "xhigh"], default: "medium", description: "Reasoning effort" }
495
+ effort: {
496
+ type: "enum",
497
+ values: ["none", "minimal", "low", "medium", "high", "xhigh"],
498
+ default: "medium",
499
+ description: "Reasoning effort"
500
+ }
185
501
  }
186
502
  };
187
503
  export {
@@ -190,6 +506,7 @@ export {
190
506
  CACHE_VALUES,
191
507
  CANONICAL_PARAM_SPECS,
192
508
  DURATION_RE,
509
+ HOST_ALIASES,
193
510
  MODELS,
194
511
  PARAM_SPECS,
195
512
  PROVIDER_META,
@@ -201,6 +518,8 @@ export {
201
518
  detectGatewaySubProvider,
202
519
  detectProvider,
203
520
  isGatewayProvider,
204
- isReasoningModel
521
+ isReasoningModel,
522
+ providerFromHostAlias,
523
+ resolveHostAlias
205
524
  };
206
525
  //# sourceMappingURL=providers.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/provider-meta.ts"],"sourcesContent":["import type { Provider } from \"./provider-core.js\";\n\n/* ------------------------------------------------------------------ */\n/* UI-consumable metadata for 3rd-party integrations */\n/* ------------------------------------------------------------------ */\n\nexport interface ProviderMeta {\n /** Provider identifier — matches the Provider union type. */\n id: Provider;\n /** Human-readable display name. */\n name: string;\n /** Default / canonical API hostname. */\n host: string;\n /** Brand color as a CSS hex value. */\n color: string;\n}\n\nexport const PROVIDER_META: ProviderMeta[] = [\n { id: \"openai\", name: \"OpenAI\", host: \"api.openai.com\", color: \"#10a37f\" },\n { id: \"anthropic\", name: \"Anthropic\", host: \"api.anthropic.com\", color: \"#e8956a\" },\n { id: \"google\", name: \"Google\", host: \"generativelanguage.googleapis.com\", color: \"#4285f4\" },\n { id: \"mistral\", name: \"Mistral\", host: \"api.mistral.ai\", color: \"#ff7000\" },\n { id: \"cohere\", name: \"Cohere\", host: \"api.cohere.com\", color: \"#39594d\" },\n { id: \"bedrock\", name: \"Bedrock\", host: \"bedrock-runtime.us-east-1.amazonaws.com\", color: \"#ff9900\" },\n { id: \"openrouter\", name: \"OpenRouter\", host: \"openrouter.ai\", color: \"#818cf8\" },\n { id: \"vercel\", name: \"Vercel\", host: \"gateway.ai.vercel.app\", color: \"#ededed\" },\n];\n\n/**\n * Suggested / common model IDs per provider, ordered by recency.\n * Not exhaustive — providers add models frequently.\n */\nexport const MODELS: Record<Provider, string[]> = {\n openai: [\n \"gpt-5.2\", \"gpt-5.2-pro\",\n \"gpt-4.1\", \"gpt-4.1-mini\", \"gpt-4.1-nano\",\n \"o3\", \"o3-mini\", \"o4-mini\", \"o1-pro\",\n ],\n anthropic: [\n \"claude-opus-4-6\", \"claude-sonnet-4-6\",\n \"claude-sonnet-4-5\", \"claude-haiku-4-5\",\n ],\n google: [\n \"gemini-3-pro-preview\", \"gemini-3-flash-preview\",\n \"gemini-2.5-pro\", \"gemini-2.5-flash\",\n ],\n mistral: [\n \"mistral-large-latest\", \"mistral-medium-latest\",\n \"mistral-small-latest\", \"codestral-latest\",\n \"magistral-medium-latest\",\n ],\n cohere: [\n \"command-a-03-2025\",\n \"command-r-plus-08-2024\", \"command-r-08-2024\",\n \"command-r7b-12-2024\",\n ],\n bedrock: [\n \"anthropic.claude-opus-4-6-v1\", \"anthropic.claude-sonnet-4-6-v1\",\n \"anthropic.claude-haiku-4-5-v1\",\n \"amazon.nova-pro-v1\", \"amazon.nova-lite-v1\",\n \"meta.llama3-70b-instruct-v1:0\",\n ],\n openrouter: [\n \"openai/gpt-5.2\", \"anthropic/claude-opus-4-6\",\n \"google/gemini-2.5-pro\", \"mistral/mistral-large-latest\",\n ],\n vercel: [\n \"openai/gpt-5.2\", \"anthropic/claude-opus-4-6\",\n \"google/gemini-2.5-pro\", \"google/gemini-3-pro-preview\",\n \"google/gemini-3-flash-preview\", \"mistral/mistral-large-latest\",\n \"qwen/qwen2.5-pro\",\n ],\n};\n\n/**\n * Canonical parameter spec — keyed by canonical (snake_case) param names\n * with defaults and descriptions for UI consumption.\n */\nexport interface CanonicalParamSpec {\n type: \"number\" | \"string\" | \"boolean\" | \"enum\";\n min?: number;\n max?: number;\n values?: string[];\n default?: string | number | boolean;\n description?: string;\n}\n\nexport const CANONICAL_PARAM_SPECS: Record<Provider, Record<string, CanonicalParamSpec>> = {\n openai: {\n temperature: { type: \"number\", min: 0, max: 2, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling\" },\n frequency_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize frequent tokens\" },\n presence_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize repeated topics\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: { type: \"enum\", values: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"], default: \"medium\", description: \"Reasoning effort\" },\n },\n anthropic: {\n temperature: { type: \"number\", min: 0, max: 1, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling\" },\n top_k: { type: \"number\", min: 0, default: 40, description: \"Top-K sampling\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: { type: \"enum\", values: [\"low\", \"medium\", \"high\", \"max\"], default: \"medium\", description: \"Thinking effort\" },\n cache: { type: \"enum\", values: [\"ephemeral\"], default: \"ephemeral\", description: \"Cache control\" },\n cache_ttl: { type: \"enum\", values: [\"5m\", \"1h\"], default: \"5m\", description: \"Cache TTL\" },\n },\n google: {\n temperature: { type: \"number\", min: 0, max: 2, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling\" },\n top_k: { type: \"number\", min: 0, default: 40, description: \"Top-K sampling\" },\n frequency_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize frequent tokens\" },\n presence_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize repeated topics\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Candidate count\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n },\n mistral: {\n temperature: { type: \"number\", min: 0, max: 1, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling\" },\n frequency_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize frequent tokens\" },\n presence_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize repeated topics\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n safe_prompt: { type: \"boolean\", default: false, description: \"Enable safe prompt\" },\n min_tokens: { type: \"number\", min: 0, default: 0, description: \"Minimum tokens\" },\n },\n cohere: {\n temperature: { type: \"number\", min: 0, max: 1, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling (p)\" },\n top_k: { type: \"number\", min: 0, max: 500, default: 40, description: \"Top-K sampling (k)\" },\n frequency_penalty: { type: \"number\", min: 0, max: 1, default: 0, description: \"Penalize frequent tokens\" },\n presence_penalty: { type: \"number\", min: 0, max: 1, default: 0, description: \"Penalize repeated topics\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n },\n bedrock: {\n temperature: { type: \"number\", min: 0, max: 1, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling\" },\n top_k: { type: \"number\", min: 0, default: 40, description: \"Top-K sampling\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n cache: { type: \"enum\", values: [\"ephemeral\"], default: \"ephemeral\", description: \"Cache control\" },\n cache_ttl: { type: \"enum\", values: [\"5m\", \"1h\"], default: \"5m\", description: \"Cache TTL\" },\n },\n openrouter: {\n temperature: { type: \"number\", min: 0, max: 2, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling\" },\n top_k: { type: \"number\", min: 0, default: 40, description: \"Top-K sampling\" },\n frequency_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize frequent tokens\" },\n presence_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize repeated topics\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: { type: \"enum\", values: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"], default: \"medium\", description: \"Reasoning effort\" },\n },\n vercel: {\n temperature: { type: \"number\", min: 0, max: 2, default: 0.7, description: \"Controls randomness\" },\n max_tokens: { type: \"number\", min: 1, default: 4096, description: \"Maximum output tokens\" },\n top_p: { type: \"number\", min: 0, max: 1, default: 1, description: \"Nucleus sampling\" },\n top_k: { type: \"number\", min: 0, default: 40, description: \"Top-K sampling\" },\n frequency_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize frequent tokens\" },\n presence_penalty: { type: \"number\", min: -2, max: 2, default: 0, description: \"Penalize repeated topics\" },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: { type: \"enum\", values: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"], default: \"medium\", description: \"Reasoning effort\" },\n },\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/provider-meta.ts"],"sourcesContent":["import type { Provider } from \"./provider-core.js\";\n\n/* ------------------------------------------------------------------ */\n/* UI-consumable metadata for 3rd-party integrations */\n/* ------------------------------------------------------------------ */\n\nexport interface ProviderMeta {\n /** Provider identifier — matches the Provider union type. */\n id: Provider;\n /** Human-readable display name. */\n name: string;\n /** Default / canonical API hostname. */\n host: string;\n /** Brand color as a CSS hex value. */\n color: string;\n}\n\nexport const PROVIDER_META: ProviderMeta[] = [\n { id: \"openai\", name: \"OpenAI\", host: \"api.openai.com\", color: \"#10a37f\" },\n {\n id: \"anthropic\",\n name: \"Anthropic\",\n host: \"api.anthropic.com\",\n color: \"#e8956a\",\n },\n {\n id: \"google\",\n name: \"Google\",\n host: \"generativelanguage.googleapis.com\",\n color: \"#4285f4\",\n },\n { id: \"mistral\", name: \"Mistral\", host: \"api.mistral.ai\", color: \"#ff7000\" },\n { id: \"cohere\", name: \"Cohere\", host: \"api.cohere.com\", color: \"#39594d\" },\n {\n id: \"bedrock\",\n name: \"Bedrock\",\n host: \"bedrock-runtime.us-east-1.amazonaws.com\",\n color: \"#ff9900\",\n },\n {\n id: \"openrouter\",\n name: \"OpenRouter\",\n host: \"openrouter.ai\",\n color: \"#818cf8\",\n },\n {\n id: \"vercel\",\n name: \"Vercel\",\n host: \"gateway.ai.vercel.app\",\n color: \"#ededed\",\n },\n];\n\n/**\n * Suggested / common model IDs per provider, ordered by recency.\n * Not exhaustive — providers add models frequently.\n */\nexport const MODELS: Record<Provider, string[]> = {\n openai: [\n \"gpt-5.2\",\n \"gpt-5.2-pro\",\n \"gpt-4.1\",\n \"gpt-4.1-mini\",\n \"gpt-4.1-nano\",\n \"o3\",\n \"o3-mini\",\n \"o4-mini\",\n \"o1-pro\",\n ],\n anthropic: [\n \"claude-opus-4-6\",\n \"claude-sonnet-4-6\",\n \"claude-sonnet-4-5\",\n \"claude-haiku-4-5\",\n ],\n google: [\n \"gemini-3-pro-preview\",\n \"gemini-3-flash-preview\",\n \"gemini-2.5-pro\",\n \"gemini-2.5-flash\",\n ],\n mistral: [\n \"mistral-large-latest\",\n \"mistral-medium-latest\",\n \"mistral-small-latest\",\n \"codestral-latest\",\n \"magistral-medium-latest\",\n ],\n cohere: [\n \"command-a-03-2025\",\n \"command-r-plus-08-2024\",\n \"command-r-08-2024\",\n \"command-r7b-12-2024\",\n ],\n bedrock: [\n \"anthropic.claude-opus-4-6-v1\",\n \"anthropic.claude-sonnet-4-6-v1\",\n \"anthropic.claude-haiku-4-5-v1\",\n \"amazon.nova-pro-v1\",\n \"amazon.nova-lite-v1\",\n \"meta.llama3-70b-instruct-v1:0\",\n ],\n openrouter: [\n \"openai/gpt-5.2\",\n \"anthropic/claude-opus-4-6\",\n \"google/gemini-2.5-pro\",\n \"mistral/mistral-large-latest\",\n ],\n vercel: [\n \"openai/gpt-5.2\",\n \"anthropic/claude-opus-4-6\",\n \"google/gemini-2.5-pro\",\n \"google/gemini-3-pro-preview\",\n \"google/gemini-3-flash-preview\",\n \"mistral/mistral-large-latest\",\n \"qwen/qwen2.5-pro\",\n ],\n};\n\n/**\n * Canonical parameter spec — keyed by canonical (snake_case) param names\n * with defaults and descriptions for UI consumption.\n */\nexport interface CanonicalParamSpec {\n type: \"number\" | \"string\" | \"boolean\" | \"enum\";\n min?: number;\n max?: number;\n values?: string[];\n default?: string | number | boolean;\n description?: string;\n}\n\nexport const CANONICAL_PARAM_SPECS: Record<\n Provider,\n Record<string, CanonicalParamSpec>\n> = {\n openai: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 2,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling\",\n },\n frequency_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize frequent tokens\",\n },\n presence_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize repeated topics\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: {\n type: \"enum\",\n values: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"],\n default: \"medium\",\n description: \"Reasoning effort\",\n },\n },\n anthropic: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling\",\n },\n top_k: {\n type: \"number\",\n min: 0,\n default: 40,\n description: \"Top-K sampling\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: {\n type: \"enum\",\n values: [\"low\", \"medium\", \"high\", \"max\"],\n default: \"medium\",\n description: \"Thinking effort\",\n },\n cache: {\n type: \"enum\",\n values: [\"ephemeral\"],\n default: \"ephemeral\",\n description: \"Cache control\",\n },\n cache_ttl: {\n type: \"enum\",\n values: [\"5m\", \"1h\"],\n default: \"5m\",\n description: \"Cache TTL\",\n },\n },\n google: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 2,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling\",\n },\n top_k: {\n type: \"number\",\n min: 0,\n default: 40,\n description: \"Top-K sampling\",\n },\n frequency_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize frequent tokens\",\n },\n presence_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize repeated topics\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Candidate count\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n },\n mistral: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling\",\n },\n frequency_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize frequent tokens\",\n },\n presence_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize repeated topics\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n safe_prompt: {\n type: \"boolean\",\n default: false,\n description: \"Enable safe prompt\",\n },\n min_tokens: {\n type: \"number\",\n min: 0,\n default: 0,\n description: \"Minimum tokens\",\n },\n },\n cohere: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling (p)\",\n },\n top_k: {\n type: \"number\",\n min: 0,\n max: 500,\n default: 40,\n description: \"Top-K sampling (k)\",\n },\n frequency_penalty: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 0,\n description: \"Penalize frequent tokens\",\n },\n presence_penalty: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 0,\n description: \"Penalize repeated topics\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n },\n bedrock: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling\",\n },\n top_k: {\n type: \"number\",\n min: 0,\n default: 40,\n description: \"Top-K sampling\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n cache: {\n type: \"enum\",\n values: [\"ephemeral\"],\n default: \"ephemeral\",\n description: \"Cache control\",\n },\n cache_ttl: {\n type: \"enum\",\n values: [\"5m\", \"1h\"],\n default: \"5m\",\n description: \"Cache TTL\",\n },\n },\n openrouter: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 2,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling\",\n },\n top_k: {\n type: \"number\",\n min: 0,\n default: 40,\n description: \"Top-K sampling\",\n },\n frequency_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize frequent tokens\",\n },\n presence_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize repeated topics\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: {\n type: \"enum\",\n values: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"],\n default: \"medium\",\n description: \"Reasoning effort\",\n },\n },\n vercel: {\n temperature: {\n type: \"number\",\n min: 0,\n max: 2,\n default: 0.7,\n description: \"Controls randomness\",\n },\n max_tokens: {\n type: \"number\",\n min: 1,\n default: 4096,\n description: \"Maximum output tokens\",\n },\n top_p: {\n type: \"number\",\n min: 0,\n max: 1,\n default: 1,\n description: \"Nucleus sampling\",\n },\n top_k: {\n type: \"number\",\n min: 0,\n default: 40,\n description: \"Top-K sampling\",\n },\n frequency_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize frequent tokens\",\n },\n presence_penalty: {\n type: \"number\",\n min: -2,\n max: 2,\n default: 0,\n description: \"Penalize repeated topics\",\n },\n stop: { type: \"string\", default: \"\", description: \"Stop sequences\" },\n n: { type: \"number\", min: 1, default: 1, description: \"Completions count\" },\n seed: { type: \"number\", default: \"\", description: \"Random seed\" },\n stream: { type: \"boolean\", default: false, description: \"Stream response\" },\n effort: {\n type: \"enum\",\n values: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"],\n default: \"medium\",\n description: \"Reasoning effort\",\n },\n },\n};\n"],"mappings":"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","names":[]}