Q85: custom endpoints accept local HTTP servers and keyless access

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-10-08 14:28:01 -04:00
1 parent 9599d0aecd
commit da0b94ce59
11 files changed
+90 -17

No files matched your search

+3 -2
View File
@@ -384,8 +384,9 @@ function validateProvider(draft: Draft, providers: ProviderCatalogEntry[]): stri
const selected = providers.find((entry) => entry.key === draft.providerKey);
if (!selected) return t("Provider is no longer available.");
if (selected.customEndpoint && !draft.providerBaseUrl.trim()) return t("Base URL is required.");
if (!draft.providerSecret.trim()) {
return selected.authType === "api_key" || selected.customEndpoint ? t("API key is required.") : t("Access token is required.");
// A custom endpoint may be a local server that takes no key.
if (!draft.providerSecret.trim() && !selected.customEndpoint) {
return selected.authType === "api_key" ? t("API key is required.") : t("Access token is required.");
}
if (!draft.providerModel.trim()) return t("Model is required.");
return null;
@@ -78,7 +78,7 @@ function ProviderCredentialFields({
const hasCredential = isOAuthLike
? Boolean(draft.providerSecret.trim())
: isCustom
? Boolean(draft.providerBaseUrl.trim() && draft.providerSecret.trim())
? Boolean(draft.providerBaseUrl.trim())
: Boolean(draft.providerSecret.trim());
const loadModels = async (secret: string) => {
@@ -133,7 +133,7 @@ function ProviderCredentialFields({
onChange={(event) => onChange({ providerBaseUrl: event.target.value })}
/>
</Field>
<Field label={t("API key")}>
<Field label={t("API key (if the server asks for one)")}>
<input
className="input"
type="password"
+1
View File
@@ -32,6 +32,7 @@ export const zh: Record<string, string> = {
"superseded": "已被取代",
"stalled": "已停滞",
"Resume": "恢复",
"API key (if the server asks for one)": "API 密钥(服务需要时填写)",
"Checking...": "检查中...",
"Check for agent work": "检查能否胜任 Agent 工作",
"This model follows instructions and calls tools.": "该模型能遵循指令并调用工具。",
@@ -88,7 +88,7 @@ function CompatFieldsForm({ entry, provider }: { entry: ProviderCatalogEntry; pr
onChange={(event) => setBaseUrl(event.target.value)}
/>
</Field>
<Field label={t("API key")}><input className="input" name="secret" type="password" required /></Field>
<Field label={t("API key (if the server asks for one)")}><input className="input" name="secret" type="password" /></Field>
<ModelPicker entry={entry} provider={provider} />
</>
);