Skip to content

Commit 650729c

Browse files
committed
Prevent API key prompts and editing for model providers using local localhost base URLs
1 parent 52bc414 commit 650729c

4 files changed

Lines changed: 51 additions & 29 deletions

File tree

‎packages/ui/src/components/editor/settings/ModelProviders/ModelProviders.tsx‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,13 @@ export const ModelProviders: React.FC<ModelProviders.Props> = (props) => {
4949
title="Rename provider"
5050
/>
5151
)}
52-
<IconButton
53-
codicon_icon="key"
54-
on_click={() => props.on_change_api_key(provider.name)}
55-
title="Change API key"
56-
/>
52+
{!provider.baseUrl.includes('localhost') && (
53+
<IconButton
54+
codicon_icon="key"
55+
on_click={() => props.on_change_api_key(provider.name)}
56+
title="Change API key"
57+
/>
58+
)}
5759
<IconButton
5860
codicon_icon="trash"
5961
on_click={() => props.on_delete_provider(provider.name)}

‎packages/vscode/src/views/settings/backend/message-handlers/handle-add-model-provider.ts‎

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,24 @@ export const handle_add_model_provider = async (
4444
return await show_create_provider_quick_pick()
4545
}
4646

47-
const api_key = await vscode.window.showInputBox({
48-
title: 'Model API Key',
49-
prompt: 'Enter your model API key'
50-
})
51-
if (api_key === undefined) {
52-
return await show_create_provider_quick_pick()
47+
const normalized_base_url = normalize_base_url(base_url)
48+
const is_local = normalized_base_url.includes('localhost')
49+
50+
let api_key: string | undefined = ''
51+
if (!is_local) {
52+
api_key = await vscode.window.showInputBox({
53+
title: 'API Key',
54+
prompt: 'Enter your API key'
55+
})
56+
if (api_key === undefined) {
57+
return await show_create_provider_quick_pick()
58+
}
5359
}
5460

5561
const new_provider: CustomProvider = {
5662
type: 'custom' as const,
5763
name: name.trim(),
58-
base_url: normalize_base_url(base_url),
64+
base_url: normalized_base_url,
5965
api_key: api_key?.trim() || ''
6066
}
6167

@@ -67,13 +73,18 @@ export const handle_add_model_provider = async (
6773
const create_built_in_provider = async (
6874
name: keyof typeof PROVIDERS
6975
): Promise<boolean> => {
70-
const api_key = await vscode.window.showInputBox({
71-
title: 'Model API Key',
72-
prompt: 'Enter your model API key',
73-
validateInput: (value) => (!value.trim() ? 'API key is required' : null)
74-
})
75-
if (api_key === undefined) {
76-
return await show_create_provider_quick_pick()
76+
const provider_info = PROVIDERS[name]
77+
const is_local = provider_info.base_url.includes('localhost')
78+
79+
let api_key: string | undefined = ''
80+
if (!is_local) {
81+
api_key = await vscode.window.showInputBox({
82+
title: 'API Key',
83+
prompt: 'Enter your API key'
84+
})
85+
if (api_key === undefined) {
86+
return await show_create_provider_quick_pick()
87+
}
7788
}
7889

7990
const providers = await providers_manager.get_providers()

‎packages/vscode/src/views/settings/backend/message-handlers/handle-edit-model-provider-key.ts‎

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,35 @@ export const handle_change_model_provider_key = async (
2626
}
2727

2828
const new_api_key = await vscode.window.showInputBox({
29-
title: `Model API Key for ${provider_name}`,
30-
prompt: 'Enter your model API key. Press Esc to keep the current one.',
29+
title: `API Key for ${provider_name}`,
30+
prompt: 'Enter your API key.',
3131
password: true,
3232
placeHolder: provider_to_update.api_key
3333
? `...${provider_to_update.api_key.slice(-4)}`
3434
: 'No API key set'
3535
})
3636

3737
if (new_api_key === undefined) {
38-
// User cancelled
3938
return
4039
}
4140

41+
const trimmed_api_key = new_api_key.trim()
42+
43+
if (trimmed_api_key == '' && provider_to_update.api_key) {
44+
const confirmation = await vscode.window.showWarningMessage(
45+
`Are you sure you want to clear the API key for ${provider_name}? This action cannot be undone.`,
46+
{ modal: true },
47+
'Clear API Key'
48+
)
49+
50+
if (confirmation != 'Clear API Key') {
51+
return
52+
}
53+
}
54+
4255
const updated_provider: Provider = {
4356
...provider_to_update,
44-
api_key: new_api_key.trim()
57+
api_key: trimmed_api_key
4558
}
4659

4760
const providers = await providers_manager.get_providers()

‎packages/vscode/src/views/settings/backend/message-handlers/handle-get-model-providers.ts‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,10 @@ export const handle_get_model_providers = async (
99
const saved_providers = await providers_manager.get_providers()
1010

1111
const providers_for_client = saved_providers.map((p) => {
12-
const apiKeyMask = p.api_key
13-
? `...${p.api_key.slice(-4)}`
14-
: '⚠ Missing API key'
12+
const apiKeyMask = p.api_key ? `...${p.api_key.slice(-4)}` : ''
1513

1614
const baseUrl =
17-
p.type === 'built-in'
18-
? PROVIDERS[p.name].base_url
19-
: p.base_url || '⚠ Missing base URL'
15+
p.type == 'built-in' ? PROVIDERS[p.name].base_url : p.base_url
2016

2117
return {
2218
name: p.name,

0 commit comments

Comments
 (0)