Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 28 additions & 4 deletions src/widgets/ai-settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,23 @@ const AISettingsComponent: React.FC<IAISettingsComponentProps> = ({
return secret?.value;
};

const setSecretToManager = async (
provider: string,
fieldName: string,
value: string
): Promise<void> => {
await secretsManager?.set(
Private.getToken(),
SECRETS_NAMESPACE,
`${provider}:${fieldName}`,
{
namespace: SECRETS_NAMESPACE,
id: `${provider}:${fieldName}`,
value
}
);
};

/**
* Attach a secrets field to the secrets manager.
* @param input - the DOm element to attach.
Expand Down Expand Up @@ -308,9 +325,7 @@ const AISettingsComponent: React.FC<IAISettingsComponentProps> = ({
// Retrieve the API key from the secrets manager if necessary.
if (model.config.useSecretsManager && secretsManager) {
provider.apiKey =
(await getSecretFromManager(provider.provider, 'apiKey')) ??
provider.apiKey ??
'';
(await getSecretFromManager(provider.provider, 'apiKey')) ?? '';
}
setEditingProvider(provider);
setDialogOpen(true);
Expand Down Expand Up @@ -354,6 +369,15 @@ const AISettingsComponent: React.FC<IAISettingsComponentProps> = ({
if (updates.useSecretsManager !== undefined) {
if (updates.useSecretsManager) {
for (const provider of model.config.providers) {
// if the secrets manager doesn't have the current API key, copy the current
// one from settings.
if (!(await getSecretFromManager(provider.provider, 'apiKey'))) {
setSecretToManager(
provider.provider,
'apiKey',
provider.apiKey ?? ''
);
}
provider.apiKey = SECRETS_REPLACEMENT;
await model.updateProvider(provider.id, provider);
}
Expand Down Expand Up @@ -719,7 +743,7 @@ const AISettingsComponent: React.FC<IAISettingsComponentProps> = ({
label={
<div>
<span>Use the secrets manager to manage API keys</span>
{!config.useSecretsManager && (
{config.useSecretsManager && (
<Alert severity="warning" icon={<Error />} sx={{ mb: 2 }}>
The secrets will be stored in plain text in settings
</Alert>
Expand Down
Loading