import type { Api, Model } from "@mariozechner/pi-ai"; import type { ModelRegistry } from "@mariozechner/pi-coding-agent"; import type { AuthProfileStore } from "../../agents/auth-profiles/types.js"; import { shouldSuppressBuiltInModel } from "../../agents/model-suppression.js"; import type { OpenClawConfig } from "../../config/types.openclaw.js"; import { resolveRuntimeSyntheticAuthProviderRefs } from "../../plugins/synthetic-auth.runtime.js"; import {
formatErrorWithStack,
MODEL_AVAILABILITY_UNAVAILABLE_CODE,
shouldFallbackToAuthHeuristics,
} from "./list.errors.js"; import { toModelRow as toModelRowBase } from "./list.model-row.js"; import {
discoverAuthStorage,
discoverModels,
hasUsableCustomProviderApiKey,
listProfilesForProvider,
resolveAwsSdkEnvVarName,
resolveEnvApiKey,
resolveOpenClawAgentDir,
} from "./list.runtime.js"; import type { ModelRow } from "./list.types.js"; import { modelKey } from "./shared.js";
const hasAuthForProvider = (
provider: string,
cfg?: OpenClawConfig,
authStore?: AuthProfileStore,
) => { if (!cfg || !authStore) { returnfalse;
} if (listProfilesForProvider(authStore, provider).length > 0) { returntrue;
} if (provider === "amazon-bedrock" && resolveAwsSdkEnvVarName()) { returntrue;
} if (resolveEnvApiKey(provider)) { returntrue;
} if (hasUsableCustomProviderApiKey(cfg, provider)) { returntrue;
} if (resolveRuntimeSyntheticAuthProviderRefs().includes(provider)) { returntrue;
} returnfalse;
};
function createAvailabilityUnavailableError(message: string): Error { const err = new Error(message);
(err as { code?: string }).code = MODEL_AVAILABILITY_UNAVAILABLE_CODE; return err;
}
function validateAvailableModels(availableModels: unknown): Model<Api>[] { if (!Array.isArray(availableModels)) { throw createAvailabilityUnavailableError( "Model availability unavailable: getAvailable() returned a non-array value.",
);
}
for (const model of availableModels) { if (
!model || typeof model !== "object" || typeof (model as { provider?: unknown }).provider !== "string" || typeof (model as { id?: unknown }).id !== "string"
) { throw createAvailabilityUnavailableError( "Model availability unavailable: getAvailable() returned invalid model entries.",
);
}
}
// Some providers can report model-level availability as unavailable. // Fall back to provider-level auth heuristics when availability is undefined.
availableKeys = undefined; if (!availabilityErrorMessage) {
availabilityErrorMessage = formatErrorWithStack(err);
}
} return { registry, models, availableKeys, availabilityErrorMessage };
}
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.