feat: Make API Key optional for custom model providers (#1756)

* Initial plan

* Make API Key optional for custom model providers

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* Fix TypeScript type errors in test functions

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* perf: ui

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>
Co-authored-by: Junyan Qin <rockchinq@gmail.com>
This commit is contained in:
Copilot
2025-11-06 20:59:34 +08:00
committed by GitHub
parent 17070471f7
commit 9a997fbcb0
2 changed files with 12 additions and 16 deletions

View File

@@ -75,7 +75,7 @@ const getFormSchema = (t: (key: string) => string) =>
.string()
.min(1, { message: t('models.modelProviderRequired') }),
url: z.string().min(1, { message: t('models.requestURLRequired') }),
api_key: z.string().min(1, { message: t('models.apiKeyRequired') }),
api_key: z.string().optional(),
extra_args: z.array(getExtraArgSchema(t)).optional(),
});
@@ -101,7 +101,7 @@ export default function EmbeddingForm({
name: '',
model_provider: '',
url: '',
api_key: 'sk-xxxxx',
api_key: '',
extra_args: [],
},
});
@@ -245,7 +245,7 @@ export default function EmbeddingForm({
timeout: 120,
},
extra_args: extraArgsObj,
api_keys: [value.api_key],
api_keys: value.api_key ? [value.api_key] : [],
};
if (editMode) {
@@ -310,6 +310,7 @@ export default function EmbeddingForm({
extraArgsObj[arg.key] = arg.value;
}
});
const apiKey = form.getValues('api_key');
httpClient
.testEmbeddingModel('_', {
uuid: '',
@@ -320,7 +321,7 @@ export default function EmbeddingForm({
base_url: form.getValues('url'),
timeout: 120,
},
api_keys: [form.getValues('api_key')],
api_keys: apiKey ? [apiKey] : [],
extra_args: extraArgsObj,
})
.then((res) => {
@@ -461,10 +462,7 @@ export default function EmbeddingForm({
name="api_key"
render={({ field }) => (
<FormItem>
<FormLabel>
{t('models.apiKey')}
<span className="text-red-500">*</span>
</FormLabel>
<FormLabel>{t('models.apiKey')}</FormLabel>
<FormControl>
<Input {...field} />
</FormControl>

View File

@@ -76,7 +76,7 @@ const getFormSchema = (t: (key: string) => string) =>
.string()
.min(1, { message: t('models.modelProviderRequired') }),
url: z.string().min(1, { message: t('models.requestURLRequired') }),
api_key: z.string().min(1, { message: t('models.apiKeyRequired') }),
api_key: z.string().optional(),
abilities: z.array(z.string()),
extra_args: z.array(getExtraArgSchema(t)).optional(),
});
@@ -103,7 +103,7 @@ export default function LLMForm({
name: '',
model_provider: '',
url: '',
api_key: 'sk-xxxxx',
api_key: '',
abilities: [],
extra_args: [],
},
@@ -261,7 +261,7 @@ export default function LLMForm({
timeout: 120,
},
extra_args: extraArgsObj,
api_keys: [value.api_key],
api_keys: value.api_key ? [value.api_key] : [],
abilities: value.abilities,
};
@@ -324,6 +324,7 @@ export default function LLMForm({
extraArgsObj[arg.key] = arg.value;
}
});
const apiKey = form.getValues('api_key');
httpClient
.testLLMModel('_', {
uuid: '',
@@ -334,7 +335,7 @@ export default function LLMForm({
base_url: form.getValues('url'),
timeout: 120,
},
api_keys: [form.getValues('api_key')],
api_keys: apiKey ? [apiKey] : [],
abilities: form.getValues('abilities'),
extra_args: extraArgsObj,
})
@@ -478,10 +479,7 @@ export default function LLMForm({
name="api_key"
render={({ field }) => (
<FormItem>
<FormLabel>
{t('models.apiKey')}
<span className="text-red-500">*</span>
</FormLabel>
<FormLabel>{t('models.apiKey')}</FormLabel>
<FormControl>
<Input {...field} />
</FormControl>