mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-11 05:20:44 +08:00
重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
This commit is contained in:
parent
4a23b715a2
commit
dbbe3add6a
14438 changed files with 2693620 additions and 2546 deletions
59
openclaw/extensions/lmstudio/src/provider-auth.ts
Normal file
59
openclaw/extensions/lmstudio/src/provider-auth.ts
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
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)
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue