Skip to content

Conversation

@daniel-lxs
Copy link
Contributor

@daniel-lxs daniel-lxs commented Oct 9, 2025

Related GitHub Issue

Closes: #4337

Description

This PR adds support for obtaining API keys from the environment. A checkbox is added to each configuration that allows inputting an API key -- when checked, a given environment variable (eg, OPENAI_API_KEY, etc) is consulted for the key and the user is not required to provide one in the configuration. Env Var key is predictable but not editable.

Test Procedure

I tested this using VS Code run configurations, where the expected environment variable could be provided or omitted.

Pre-Submission Checklist

  • Issue Linked: This PR is linked to an approved GitHub Issue (see "Related GitHub Issue" above).
  • Scope: My changes are focused on the linked issue (one major feature/fix per PR).
  • Self-Review: I have performed a thorough self-review of my code.
  • Testing: New and/or updated tests have been added to cover my changes (if applicable).
  • Documentation Impact: I have considered if my changes require documentation updates (see "Documentation Updates" section below).

A documentation update is advised, to describe environment variable usage to supply API keys.

Summary

Adds support for using environment variables for API keys across multiple providers, updates UI components to reflect this, and enhances testing and translation capabilities.

  • Behavior:
    • Adds support for API keys from environment variables for providers like anthropic, glama, openrouter, openai, gemini, mistral, deepseek, unbound, requesty, xai, groq, chutes, litellm.
    • Updates validateModelsAndKeysProvided() to check for environment variable usage for API keys.
  • UI Components:
    • Introduces ApiKey component to handle API key input and environment variable toggle.
    • Updates various provider components to use the new ApiKey component.
  • Testing:
    • Adds comprehensive tests for environment variable integration and the ApiKey component.

suprjinx added 30 commits May 27, 2025 16:44
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
OPENAI_API_KEY env var

Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
whole process.env into webview

Signed-off-by: Geoff Wilson <[email protected]>
of api key env var; use constants for env var keys.

Signed-off-by: Geoff Wilson <[email protected]>
errant keys in test file

Signed-off-by: Geoff Wilson <[email protected]>
suprjinx and others added 23 commits August 13, 2025 10:59
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
Signed-off-by: Geoff Wilson <[email protected]>
FIREWORKS: 'FIREWORKS_API_KEY',
HUGGING_FACE: 'HUGGINGFACE_API_KEY',
IO_INTELLIGENCE: 'IOINTELLIGENCE_API_KEY',
MOONSHOOT: 'MOONSHOT_API_KEY',
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: MOONSHOOT should be MOONSHOT to match the naming convention of other constants (e.g., DEEP_SEEK, SAMBA_NOVA).

Suggested change
MOONSHOOT: 'MOONSHOT_API_KEY',
MOONSHOT: 'MOONSHOT_API_KEY',

</div>
<ApiKey
apiKey={apiConfiguration?.moonshotApiKey || ""}
apiKeyEnvVar={API_KEYS.MOONSHOOT}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This references the typo MOONSHOOT from constants.ts. Should be API_KEYS.MOONSHOT (without the extra 'O').

Suggested change
apiKeyEnvVar={API_KEYS.MOONSHOOT}
apiKeyEnvVar={API_KEYS.MOONSHOT}

return new QwenCodeHandler(options)
case "moonshot":
if (options.moonshotConfigUseEnvVars) {
options.moonshotApiKey = getEnvVar(API_KEYS.MOONSHOOT, options.moonshotApiKey)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also references the typo MOONSHOOT. Should be API_KEYS.MOONSHOT.

Suggested change
options.moonshotApiKey = getEnvVar(API_KEYS.MOONSHOOT, options.moonshotApiKey)
options.moonshotApiKey = getEnvVar(API_KEYS.MOONSHOT, options.moonshotApiKey)

},
[setApiConfigurationField],
)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extra blank line - should be removed for consistency with other provider components.

@DanCodeInc DanCodeInc deleted a comment from roo-code-dan bot Oct 9, 2025
@suprjinx
Copy link

Hi @daniel-lxs looks like there's an issue with MOONSHOT constant name -- do you want me to fix in the original PR?

@daniel-lxs daniel-lxs closed this Oct 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants