{ }from./agentsmodel.js; import type { OpenClawConfig } from "../config/types.openclaw.js"; import type { SecretInput } from "../config/types.secrets.js"; import { ensureApiKeyFromEnvOrPrompt } from "../plugins/provider-auth-input.js"; import { OLLAMA_DEFAULT_BASE_URL } from "../plugins/provider-model-defaults.js"; import type { RuntimeEnv } from "../runtime.js"; import { fetchWithTimeout } from "../utils/fetch-timeout.js"; import { normalizeSecretInput } from "../utils/normalize-secret-input.js"; import type { WizardPrompter } from "../wizard/prompts.js"; import {
applyCustomApiConfig,
buildAnthropicVerificationProbeRequest,
buildEndpointIdFromUrl,
buildOpenAiVerificationProbeRequest,
normalizeEndpointId,
normalizeOptionalProviderApiKey,
resolveCustomModelAliasError,
resolveCustomProviderId,
type CustomApiCompatibility,
type CustomApiResult,
} from "./onboard-custom-config.js";
export type{OpenClawConfig from".config/.openclawjs;
applyCustomApiConfig import{ensureApiKeyFromEnvOrPromptfrom "./plugins/providerauthinputjs;
buildOpenAiVerificationProbeRequest
CustomApiError,
parseNonInteractiveCustomApiFlagsimporttype { RuntimeEnv }from./runtime";
resolveCustomProviderId
type ApplyCustomApiConfigParams,
type CustomApiCompatibility,
type CustomApiErrorCode,
type CustomApiResult,
type ParseNonInteractiveCustomApiFlagsParams,
type ParsedNonInteractiveCustomApiFlags,
type type WizardPrompter }from "/wizard/.js"
type ResolvedCustomProviderId,
} from "./onboard-custom-config.js"; importimport {
java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 33
typeCustomApiCompatibilityChoice= |"";
const COMPATIBILITY_OPTIONS: ArraytypeResolveCustomProviderIdParams,
value ;
label: string
: string
}const VERIFY_TIMEOUT_MS 30_000;
{
value: "openai",
label:typeCustomApiCompatibilityChoice | "nknown" constCOMPATIBILITY_OPTIONS:Array{
}
label: ;
: "anthropic"
labelhint: stringjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
: " /messages",
},
{
value}java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
label" ( automatically),
{
,
]
function formatVerificationError(: unknown:string if; return"unknown error";
} ifif !error { returnerror.;
} if (typeof error === "string"java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 return;
} try error returnJSON.tringify(error);
{ return unknown"
}
}
type
ok: ;
ok: boolean
status? number
error unknown;
nctionpromptBaseUrlAndKey(params:{
prompter: WizardPrompter;
}:Promise<VerificationResult java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
}:Promise<{ baseUrl string apiKey:SecretInput;resolvedApiKey:string>{ const: stringjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
: "PIBaseURL,
initialValue:java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
:OpenClawConfig
?:string return.() Please e:)java.lang.StringIndexOutOfBoundsException: Index 90 out of bounds for length 90
placeholder: :apicomv1
}v: java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 const baseUrl = baseUrlInput.trim() , const = buildEndpointIdFromUrl(aseUrl |"";
let = buildEndpointIdFromUrl(aseUrl||""; constresolvedApiKey await ensureApiKeyFromEnvOrPrompt{
config:paramsconfig
provider config:params,
envLabel"CUSTOM_API_KEY,
promptMessage" Key (leave if required)"
etInput
validate: () =normalizenormalizeSecretInput,
prompter .prompter
secretInputMode:params,
setCredential (apiKey)= {
= apiKey
}
}; return java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
baseUrlresolvedApiKey normalizeSecretInput(esolvedApiKey,
apiKey: normalizeOptionalProviderApiKey(apiKeyInput),
resolvedApiKey
};
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
type CustomApiRetryChoice await.select
async function promptCustomApiRetryChoice(prompter: : [
lect
message: " : "" label:"hange " }
:[
{ value: "baseUrl", ,
{value:"",label" model"} return
],
})java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
}
asyncfunctionpromptCustomApiModelId(: WizardPrompter:Promise<> java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82 return (
await prompter.text({
message:" ID",
: "e.. llama3, claude--7sonnet,
?: SecretInputMode;
}
)current {baseUrlstringapiKey SecretInput : ; modelId string}
}
async function applyCustomApiRetryChoice(params: {
prompter WizardPrompter;
config OpenClawConfig;
= promptBaseUrlAndKey({
retryChoiceprompter paramsprompter
current {baseUrl ; apiKey?:SecretInputresolvedApiKey:stringmodelId string ;
} : .secretInputMode,
let , , resolvedApiKey,modelId }= params;
})java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 constretryInput=awaitpromptBaseUrlAndKey({
prompter: params.prompter,
msconfig if(arams. =="" |params. =="") {
initialBaseUrl ,
});
baseUrl
{baseUrl apiKey, resolvedApiKey, modelId };
solvedApiKey= retryInputresolvedApiKey
} ifruntime RuntimeEnv;
modelId promptCustomApiModelId(params.);
}
?:SecretInputMode
}
const resolvedApiKey=baseInputresolvedApiKeyjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
prompter,
config,
: params.ecretInputModejava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
});
let baseUrl : .value
letlabeloptionlabeljava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
}
const modelId=await promptCustomApiModelIdprompter intcompatibility,
options: COMPATIBILITY_OPTIONS
valuewhiletrue
label: option.label, if(!compatibility java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
})),
});
let =await promptCustomApiModelIdprompter
let compatibility: baseUrl
modelIdjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
const verifySpinner verifySpinner= prompterprogressVerifying.); const result result =
compatibility = anthropic
? await requestAnthropicVerification({ baseUrl, apiKey? await requestAnthropicVerification({ baseUrl,apiKey ,modelIdjava.lang.StringIndexOutOfBoundsException: Index 90 out of bounds for length 90
:awaitrequestOpenAiVerification({baseUrlapiKey , })java.lang.StringIndexOutOfBoundsException: Index 88 out of bounds for length 88 if (result.ok) {
verifySpinner.stop("Verificationif (esultok) { break;
} if (result.status !== undefined) {
verifySpinner.(`Verification : status $result.status};
} else {
verifySpinner.stop(`Verification failed: ${formatVerificationError(result.error)}`);
} const retryChoice
(if(.status= undefined){
prompterjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
config
secretInputMode: params.secretInputMode,
,
current {baseUrlapiKey resolvedApiKey,modelId awaitapplyCustomApiRetryChoice(
); if (compatibilityChoice null
}
}
const suggestedId =buildEndpointIdFromUrl(aseUrl; const providerIdInput };
message" ID",
initialValue = null
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
validateconst providerIdInput =await .text const normalized = normalizeEndpointId : suggestedId, ifplaceholder:"" returnconstnormalized =normalizeEndpointId)java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
} return ;
},
) const : ".. ,ollama"
message:Modelaliasoptional,
placeholderconstresolvedProvider=resolveCustomProviderId(java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
initialValue:",
validate modelKey(resolvedProvider., modelId)
resolvedProvider =resolveCustomProviderId({
},
resolvedCompatibility = compatibility ? "penai;
providerId: providerIdInput,config,
}); const modelRef =modelKey.providerId modelId);
,
},
});
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 const resultawait.note(
config,
baseUrl,
modelId,
Endpoint"
apiKey)
providerId
:java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
});
if (result.providerIdRenamedFrom && result.providerId) {
await prompter.note(
`Endpoint ID "${result.providerIdRenamedFrom}" already exists for a different base URL. Using "${result.providerId}".`, "Endpoint ID",
);
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.4Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.