UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

104 lines (103 loc) • 3.68 kB
import { n as findNormalizedProviderValue } from "../../provider-id-BIyeXQag.mjs"; import { t as normalizeOptionalSecretInput } from "../../normalize-secret-input-DBJvdk-L.mjs"; import { t as definePluginEntry } from "../../plugin-entry-BsETFXpv.mjs"; import "../../provider-auth-DgA3mFGd.mjs"; import { n as createProviderApiKeyAuthMethod } from "../../provider-api-key-auth-Be2lyTmK.mjs"; import { i as buildOpenAICompatibleProviderCatalog } from "../../provider-catalog-live-runtime-DidRb6it.mjs"; import "../../provider-entry-DevSbTgb.mjs"; import { i as applyLitellmConfig, r as LITELLM_DEFAULT_MODEL_REF } from "../../onboard-D9eecJZi.mjs"; import { t as buildLitellmImageGenerationProvider } from "../../image-generation-provider-B_rfDEfg.mjs"; import { t as buildLitellmProvider } from "../../provider-catalog-B2D9jK6K.mjs"; //#region extensions/litellm/index.ts const PROVIDER_ID = "litellm"; function applyCustomBaseUrlForNonInteractiveSetup(cfg, customBaseUrl) { const baseUrl = normalizeOptionalSecretInput(customBaseUrl)?.replace(/\/+$/, ""); if (!baseUrl) return cfg; const existingProvider = cfg.models?.providers?.[PROVIDER_ID]; return { ...cfg, models: { ...cfg.models, providers: { ...cfg.models?.providers, [PROVIDER_ID]: { ...existingProvider, baseUrl, models: existingProvider?.models ?? [] } } } }; } var litellm_default = definePluginEntry({ id: PROVIDER_ID, name: "LiteLLM Provider", description: "Bundled LiteLLM provider plugin", register(api) { const apiKeyAuth = createProviderApiKeyAuthMethod({ providerId: PROVIDER_ID, methodId: "api-key", label: "LiteLLM API key", hint: "Unified gateway for 100+ LLM providers", optionKey: "litellmApiKey", flagName: "--litellm-api-key", envVar: "LITELLM_API_KEY", promptMessage: "Enter LiteLLM API key", defaultModel: LITELLM_DEFAULT_MODEL_REF, applyConfig: (cfg) => applyLitellmConfig(cfg), noteTitle: "LiteLLM", noteMessage: [ "LiteLLM provides a unified API to 100+ LLM providers.", "Get your API key from your LiteLLM proxy or https://litellm.ai", "Default proxy runs on http://localhost:4000" ].join("\n"), wizard: { choiceId: `${PROVIDER_ID}-api-key`, choiceLabel: "LiteLLM API key", groupId: PROVIDER_ID, groupLabel: "LiteLLM", groupHint: "Unified LLM gateway (100+ providers)", methodId: "api-key" } }); api.registerProvider({ id: PROVIDER_ID, label: "LiteLLM", docsPath: "/providers/litellm", envVars: ["LITELLM_API_KEY"], auth: [{ ...apiKeyAuth, runNonInteractive: async (ctx) => { const runNonInteractive = apiKeyAuth.runNonInteractive; if (!runNonInteractive) return null; return await runNonInteractive({ ...ctx, config: applyCustomBaseUrlForNonInteractiveSetup(ctx.config, ctx.opts.customBaseUrl) }); } }], catalog: { order: "simple", run: (ctx) => { const explicitBaseUrl = findNormalizedProviderValue(ctx.config.models?.providers, PROVIDER_ID)?.baseUrl ?? ""; const versionedBaseUrl = /\/v1\/*$/.test(explicitBaseUrl.trim()); return buildOpenAICompatibleProviderCatalog({ discoveryMode: "strict", ctx, providerId: PROVIDER_ID, buildProvider: buildLitellmProvider, allowExplicitBaseUrl: true, modelDiscovery: { endpointPath: versionedBaseUrl ? "models" : "v1/models" } }); } }, staticCatalog: { order: "simple", run: async () => ({ provider: buildLitellmProvider() }) } }); api.registerImageGenerationProvider(buildLitellmImageGenerationProvider()); } }); //#endregion export { litellm_default as default };