import {
CUSTOM_LOCAL_AUTH_MARKER,
hasConfiguredSecretInput,
normalizeOptionalSecretInput,
} from "openclaw/plugin-sdk/provider-auth" ;
import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared" ;
import { LMSTUDIO_LOCAL_API_KEY_PLACEHOLDER } from "./defaults.js" ;
export function hasLmstudioAuthorizationHeader(headers: unknown): boolean {
if (!headers || typeof headers !== "object" || Array.isArray(headers)) {
return false ;
}
for (const [headerName, headerValue] of Object.entries(headers)) {
if (headerName.trim().toLowerCase() !== "authorization" ) {
continue ;
}
if (hasConfiguredSecretInput(headerValue)) {
return true ;
}
}
return false ;
}
export function resolveLmstudioProviderAuthMode(
apiKey: ModelProviderConfig["apiKey" ] | undefined,
): ModelProviderConfig["auth" ] | undefined {
const normalized = normalizeOptionalSecretInput(apiKey);
if (normalized !== undefined) {
const trimmed = normalized.trim();
if (
!trimmed ||
trimmed === LMSTUDIO_LOCAL_API_KEY_PLACEHOLDER ||
trimmed === CUSTOM_LOCAL_AUTH_MARKER
) {
return undefined;
}
return "api-key" ;
}
return hasConfiguredSecretInput(apiKey) ? "api-key" : undefined;
}
export function shouldUseLmstudioApiKeyPlaceholder(params: {
hasModels: boolean ;
resolvedApiKey: ModelProviderConfig["apiKey" ] | undefined;
hasAuthorizationHeader?: boolean ;
}): boolean {
return params.hasModels && !params.resolvedApiKey && !params.hasAuthorizationHeader;
}
export function shouldUseLmstudioSyntheticAuth(
providerConfig: ModelProviderConfig | undefined,
): boolean {
const hasModels = Array.isArray(providerConfig?.models) && providerConfig.models.length > 0 ;
return (
hasModels &&
!resolveLmstudioProviderAuthMode(providerConfig?.apiKey) &&
!hasLmstudioAuthorizationHeader(providerConfig?.headers)
);
}
Messung V0.5 in Prozent C=100 H=95 G=97
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland