























@@ -274,6 +274,36 @@ function isManagedSecretRefApiKeyMarker(apiKey: string | undefined): boolean {
274274return apiKey?.trim() === NON_ENV_SECRETREF_MARKER;
275275}
276276277+export function hasSyntheticLocalProviderAuthConfig(params: {
278+cfg: OpenClawConfig | undefined;
279+provider: string;
280+}): boolean {
281+const providerConfig = resolveProviderConfig(params.cfg, params.provider);
282+if (!providerConfig) {
283+return false;
284+}
285+286+const hasApiConfig =
287+Boolean(providerConfig.api?.trim()) ||
288+Boolean(providerConfig.baseUrl?.trim()) ||
289+(Array.isArray(providerConfig.models) && providerConfig.models.length > 0);
290+if (!hasApiConfig) {
291+return false;
292+}
293+294+const authOverride = resolveProviderAuthOverride(params.cfg, params.provider);
295+if (authOverride && authOverride !== "api-key") {
296+return false;
297+}
298+if (!isCustomLocalProviderConfig(providerConfig)) {
299+return false;
300+}
301+if (hasExplicitProviderApiKeyConfig(providerConfig)) {
302+return false;
303+}
304+return Boolean(providerConfig.baseUrl && isLocalBaseUrl(providerConfig.baseUrl));
305+}
306+277307type SyntheticProviderAuthResolution = {
278308auth?: ResolvedProviderAuth;
279309blockedOnManagedSecretRef?: boolean;
@@ -340,29 +370,10 @@ function resolveSyntheticLocalProviderAuth(params: {
340370return null;
341371}
342372343-const hasApiConfig =
344-Boolean(providerConfig.api?.trim()) ||
345-Boolean(providerConfig.baseUrl?.trim()) ||
346-(Array.isArray(providerConfig.models) && providerConfig.models.length > 0);
347-if (!hasApiConfig) {
348-return null;
349-}
350-351-const authOverride = resolveProviderAuthOverride(params.cfg, params.provider);
352-if (authOverride && authOverride !== "api-key") {
353-return null;
354-}
355-if (!isCustomLocalProviderConfig(providerConfig)) {
356-return null;
357-}
358-if (hasExplicitProviderApiKeyConfig(providerConfig)) {
359-return null;
360-}
361-362373// Custom providers pointing at a local server (e.g. llama.cpp, vLLM, LocalAI)
363374// typically don't require auth. Synthesize a local key so the auth resolver
364375// doesn't reject them when the user left the API key blank during setup.
365-if (providerConfig.baseUrl && isLocalBaseUrl(providerConfig.baseUrl)) {
376+if (hasSyntheticLocalProviderAuthConfig(params)) {
366377return {
367378apiKey: CUSTOM_LOCAL_AUTH_MARKER,
368379source: `models.providers.${params.provider} (synthetic local key)`,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。