Skip to content

Commit 4d20fac

Browse files
committed
Merge branch 'pr-6178' into feat/add-api-key-env-vars
2 parents 691657f + d6f301f commit 4d20fac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1479
-708
lines changed

packages/types/src/constants.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* API key environment variable names organized by provider
3+
*/
4+
export const API_KEYS = {
5+
ANTHROPIC: 'ANTHROPIC_API_KEY',
6+
OPENAI: 'OPENAI_API_KEY',
7+
OPEN_ROUTER: 'OPENROUTER_API_KEY',
8+
GLAMA: 'GLAMA_API_KEY',
9+
GEMINI: 'GEMINI_API_KEY',
10+
MISTRAL: 'MISTRAL_API_KEY',
11+
DEEP_SEEK: 'DEEPSEEK_API_KEY',
12+
UNBOUND: 'UNBOUND_API_KEY',
13+
REQUESTY: 'REQUESTY_API_KEY',
14+
XAI: 'XAI_API_KEY',
15+
GROQ: 'GROQ_API_KEY',
16+
CHUTES: 'CHUTES_API_KEY',
17+
LITELLM: 'LITELLM_API_KEY',
18+
CEREBRAS: 'CEREBRAS_API_KEY',
19+
DEEP_INFRA: 'DEEPINFRA_API_KEY',
20+
DOUBAO: 'DOUBAO_API_KEY',
21+
FEATHERLESS: 'FEATHERLESS_API_KEY',
22+
FIREWORKS: 'FIREWORKS_API_KEY',
23+
HUGGING_FACE: 'HUGGINGFACE_API_KEY',
24+
IO_INTELLIGENCE: 'IOINTELLIGENCE_API_KEY',
25+
MOONSHOOT: 'MOONSHOT_API_KEY',
26+
SAMBA_NOVA: 'SAMBANOVA_API_KEY',
27+
VERCEL: 'VERCEL_API_KEY',
28+
ZAI: 'ZAI_API_KEY',
29+
} as const
30+
31+
/**
32+
* Array of all API key environment variable names
33+
*/
34+
export const API_KEY_ENV_VAR_NAMES = Object.values(API_KEYS)
35+
36+
/**
37+
* Type for API key environment variable names
38+
*/
39+
export type ApiKeyEnvVar = typeof API_KEYS[keyof typeof API_KEYS]

packages/types/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export * from "./api.js"
22
export * from "./cloud.js"
33
export * from "./codebase-index.js"
4+
export * from "./constants.js"
45
export * from "./cookie-consent.js"
56
export * from "./events.js"
67
export * from "./experiment.js"

packages/types/src/provider-settings.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ const apiModelIdProviderModelSchema = baseProviderSettingsSchema.extend({
190190

191191
const anthropicSchema = apiModelIdProviderModelSchema.extend({
192192
apiKey: z.string().optional(),
193+
anthropicConfigUseEnvVars: z.boolean().optional(),
193194
anthropicBaseUrl: z.string().optional(),
194195
anthropicUseAuthToken: z.boolean().optional(),
195196
anthropicBeta1MContext: z.boolean().optional(), // Enable 'context-1m-2025-08-07' beta for 1M context window.
@@ -203,10 +204,12 @@ const claudeCodeSchema = apiModelIdProviderModelSchema.extend({
203204
const glamaSchema = baseProviderSettingsSchema.extend({
204205
glamaModelId: z.string().optional(),
205206
glamaApiKey: z.string().optional(),
207+
glamaConfigUseEnvVars: z.boolean().optional(),
206208
})
207209

208210
const openRouterSchema = baseProviderSettingsSchema.extend({
209211
openRouterApiKey: z.string().optional(),
212+
openRouterConfigUseEnvVars: z.boolean().optional(),
210213
openRouterModelId: z.string().optional(),
211214
openRouterBaseUrl: z.string().optional(),
212215
openRouterSpecificProvider: z.string().optional(),
@@ -243,6 +246,7 @@ const vertexSchema = apiModelIdProviderModelSchema.extend({
243246
const openAiSchema = baseProviderSettingsSchema.extend({
244247
openAiBaseUrl: z.string().optional(),
245248
openAiApiKey: z.string().optional(),
249+
openAiConfigUseEnvVars: z.boolean().optional(),
246250
openAiLegacyFormat: z.boolean().optional(),
247251
openAiR1FormatEnabled: z.boolean().optional(),
248252
openAiModelId: z.string().optional(),
@@ -281,6 +285,7 @@ const lmStudioSchema = baseProviderSettingsSchema.extend({
281285

282286
const geminiSchema = apiModelIdProviderModelSchema.extend({
283287
geminiApiKey: z.string().optional(),
288+
geminiConfigUseEnvVars: z.boolean().optional(),
284289
googleGeminiBaseUrl: z.string().optional(),
285290
enableUrlContext: z.boolean().optional(),
286291
enableGrounding: z.boolean().optional(),
@@ -293,6 +298,7 @@ const geminiCliSchema = apiModelIdProviderModelSchema.extend({
293298

294299
const openAiNativeSchema = apiModelIdProviderModelSchema.extend({
295300
openAiNativeApiKey: z.string().optional(),
301+
openAiNativeConfigUseEnvVars: z.boolean().optional(),
296302
openAiNativeBaseUrl: z.string().optional(),
297303
// OpenAI Responses API service tier for openai-native provider only.
298304
// UI should only expose this when the selected model supports flex/priority.
@@ -301,40 +307,47 @@ const openAiNativeSchema = apiModelIdProviderModelSchema.extend({
301307

302308
const mistralSchema = apiModelIdProviderModelSchema.extend({
303309
mistralApiKey: z.string().optional(),
310+
mistralConfigUseEnvVars: z.boolean().optional(),
304311
mistralCodestralUrl: z.string().optional(),
305312
})
306313

307314
const deepSeekSchema = apiModelIdProviderModelSchema.extend({
308315
deepSeekBaseUrl: z.string().optional(),
309316
deepSeekApiKey: z.string().optional(),
317+
deepSeekConfigUseEnvVars: z.boolean().optional(),
310318
})
311319

312320
const deepInfraSchema = apiModelIdProviderModelSchema.extend({
313321
deepInfraBaseUrl: z.string().optional(),
314322
deepInfraApiKey: z.string().optional(),
323+
deepInfraConfigUseEnvVars: z.boolean().optional(),
315324
deepInfraModelId: z.string().optional(),
316325
})
317326

318327
const doubaoSchema = apiModelIdProviderModelSchema.extend({
319328
doubaoBaseUrl: z.string().optional(),
320329
doubaoApiKey: z.string().optional(),
330+
doubaoConfigUseEnvVars: z.boolean().optional(),
321331
})
322332

323333
const moonshotSchema = apiModelIdProviderModelSchema.extend({
324334
moonshotBaseUrl: z
325335
.union([z.literal("https://api.moonshot.ai/v1"), z.literal("https://api.moonshot.cn/v1")])
326336
.optional(),
327337
moonshotApiKey: z.string().optional(),
338+
moonshotConfigUseEnvVars: z.boolean().optional(),
328339
})
329340

330341
const unboundSchema = baseProviderSettingsSchema.extend({
331342
unboundApiKey: z.string().optional(),
343+
unboundConfigUseEnvVars: z.boolean().optional(),
332344
unboundModelId: z.string().optional(),
333345
})
334346

335347
const requestySchema = baseProviderSettingsSchema.extend({
336348
requestyBaseUrl: z.string().optional(),
337349
requestyApiKey: z.string().optional(),
350+
requestyConfigUseEnvVars: z.boolean().optional(),
338351
requestyModelId: z.string().optional(),
339352
})
340353

@@ -346,35 +359,42 @@ const fakeAiSchema = baseProviderSettingsSchema.extend({
346359

347360
const xaiSchema = apiModelIdProviderModelSchema.extend({
348361
xaiApiKey: z.string().optional(),
362+
xaiConfigUseEnvVars: z.boolean().optional(),
349363
})
350364

351365
const groqSchema = apiModelIdProviderModelSchema.extend({
352366
groqApiKey: z.string().optional(),
367+
groqConfigUseEnvVars: z.boolean().optional(),
353368
})
354369

355370
const huggingFaceSchema = baseProviderSettingsSchema.extend({
356371
huggingFaceApiKey: z.string().optional(),
372+
huggingFaceConfigUseEnvVars: z.boolean().optional(),
357373
huggingFaceModelId: z.string().optional(),
358374
huggingFaceInferenceProvider: z.string().optional(),
359375
})
360376

361377
const chutesSchema = apiModelIdProviderModelSchema.extend({
362378
chutesApiKey: z.string().optional(),
379+
chutesConfigUseEnvVars: z.boolean().optional(),
363380
})
364381

365382
const litellmSchema = baseProviderSettingsSchema.extend({
366383
litellmBaseUrl: z.string().optional(),
367384
litellmApiKey: z.string().optional(),
385+
litellmConfigUseEnvVars: z.boolean().optional(),
368386
litellmModelId: z.string().optional(),
369387
litellmUsePromptCache: z.boolean().optional(),
370388
})
371389

372390
const cerebrasSchema = apiModelIdProviderModelSchema.extend({
373391
cerebrasApiKey: z.string().optional(),
392+
cerebrasConfigUseEnvVars: z.boolean().optional(),
374393
})
375394

376395
const sambaNovaSchema = apiModelIdProviderModelSchema.extend({
377396
sambaNovaApiKey: z.string().optional(),
397+
sambaNovaConfigUseEnvVars: z.boolean().optional(),
378398
})
379399

380400
export const zaiApiLineSchema = z.enum(["international_coding", "international", "china_coding", "china"])
@@ -383,20 +403,24 @@ export type ZaiApiLine = z.infer<typeof zaiApiLineSchema>
383403

384404
const zaiSchema = apiModelIdProviderModelSchema.extend({
385405
zaiApiKey: z.string().optional(),
406+
zaiConfigUseEnvVars: z.boolean().optional(),
386407
zaiApiLine: zaiApiLineSchema.optional(),
387408
})
388409

389410
const fireworksSchema = apiModelIdProviderModelSchema.extend({
390411
fireworksApiKey: z.string().optional(),
412+
fireworksConfigUseEnvVars: z.boolean().optional(),
391413
})
392414

393415
const featherlessSchema = apiModelIdProviderModelSchema.extend({
394416
featherlessApiKey: z.string().optional(),
417+
featherlessConfigUseEnvVars: z.boolean().optional(),
395418
})
396419

397420
const ioIntelligenceSchema = apiModelIdProviderModelSchema.extend({
398421
ioIntelligenceModelId: z.string().optional(),
399422
ioIntelligenceApiKey: z.string().optional(),
423+
ioIntelligenceConfigUseEnvVars: z.boolean().optional(),
400424
})
401425

402426
const qwenCodeSchema = apiModelIdProviderModelSchema.extend({
@@ -409,6 +433,7 @@ const rooSchema = apiModelIdProviderModelSchema.extend({
409433

410434
const vercelAiGatewaySchema = baseProviderSettingsSchema.extend({
411435
vercelAiGatewayApiKey: z.string().optional(),
436+
vercelConfigUseEnvVars: z.boolean().optional(),
412437
vercelAiGatewayModelId: z.string().optional(),
413438
})
414439

0 commit comments

Comments
 (0)