UNPKG

@gguf/claw

Version:

Multi-channel AI gateway with extensible messaging integrations

96 lines (94 loc) 4.01 kB
import { T as resolveOpenClawAgentDir } from "./auth-profiles-DFa1zzNy.js"; import { i as loadConfig } from "./config-B2kL1ciP.js"; import { t as ensureOpenClawModelsJson } from "./models-config-5zJ39mUb.js"; //#region src/agents/model-catalog.ts let modelCatalogPromise = null; let hasLoggedModelCatalogError = false; const defaultImportPiSdk = () => import("./pi-model-discovery-Do3xMEtM.js").then((n) => n.r); let importPiSdk = defaultImportPiSdk; const CODEX_PROVIDER = "openai-codex"; const OPENAI_CODEX_GPT53_MODEL_ID = "gpt-5.3-codex"; const OPENAI_CODEX_GPT53_SPARK_MODEL_ID = "gpt-5.3-codex-spark"; function applyOpenAICodexSparkFallback(models) { if (models.some((entry) => entry.provider === CODEX_PROVIDER && entry.id.toLowerCase() === OPENAI_CODEX_GPT53_SPARK_MODEL_ID)) return; const baseModel = models.find((entry) => entry.provider === CODEX_PROVIDER && entry.id.toLowerCase() === OPENAI_CODEX_GPT53_MODEL_ID); if (!baseModel) return; models.push({ ...baseModel, id: OPENAI_CODEX_GPT53_SPARK_MODEL_ID, name: OPENAI_CODEX_GPT53_SPARK_MODEL_ID }); } function createAuthStorage(AuthStorageLike, path) { const withFactory = AuthStorageLike; if (typeof withFactory.create === "function") return withFactory.create(path); return new AuthStorageLike(path); } async function loadModelCatalog(params) { if (params?.useCache === false) modelCatalogPromise = null; if (modelCatalogPromise) return modelCatalogPromise; modelCatalogPromise = (async () => { const models = []; const sortModels = (entries) => entries.sort((a, b) => { const p = a.provider.localeCompare(b.provider); if (p !== 0) return p; return a.name.localeCompare(b.name); }); try { await ensureOpenClawModelsJson(params?.config ?? loadConfig()); await (await import("./pi-auth-json-BgkD6ovr.js").then((n) => n.n)).ensurePiAuthJsonFromAuthProfiles(resolveOpenClawAgentDir()); const piSdk = await importPiSdk(); const agentDir = resolveOpenClawAgentDir(); const { join } = await import("node:path"); const authStorage = createAuthStorage(piSdk.AuthStorage, join(agentDir, "auth.json")); const registry = new piSdk.ModelRegistry(authStorage, join(agentDir, "models.json")); const entries = Array.isArray(registry) ? registry : registry.getAll(); for (const entry of entries) { const id = String(entry?.id ?? "").trim(); if (!id) continue; const provider = String(entry?.provider ?? "").trim(); if (!provider) continue; const name = String(entry?.name ?? id).trim() || id; const contextWindow = typeof entry?.contextWindow === "number" && entry.contextWindow > 0 ? entry.contextWindow : void 0; const reasoning = typeof entry?.reasoning === "boolean" ? entry.reasoning : void 0; const input = Array.isArray(entry?.input) ? entry.input : void 0; models.push({ id, name, provider, contextWindow, reasoning, input }); } applyOpenAICodexSparkFallback(models); if (models.length === 0) modelCatalogPromise = null; return sortModels(models); } catch (error) { if (!hasLoggedModelCatalogError) { hasLoggedModelCatalogError = true; console.warn(`[model-catalog] Failed to load model catalog: ${String(error)}`); } modelCatalogPromise = null; if (models.length > 0) return sortModels(models); return []; } })(); return modelCatalogPromise; } /** * Check if a model supports image input based on its catalog entry. */ function modelSupportsVision(entry) { return entry?.input?.includes("image") ?? false; } /** * Find a model in the catalog by provider and model ID. */ function findModelInCatalog(catalog, provider, modelId) { const normalizedProvider = provider.toLowerCase().trim(); const normalizedModelId = modelId.toLowerCase().trim(); return catalog.find((entry) => entry.provider.toLowerCase() === normalizedProvider && entry.id.toLowerCase() === normalizedModelId); } //#endregion export { loadModelCatalog as n, modelSupportsVision as r, findModelInCatalog as t };