import type { ProviderResolveDynamicModelContext } from "openclaw/plugin-sdk/plugin-entry"; import { defineSingleProviderPluginEntry } from "openclaw/plugin-sdk/provider-entry"; import { buildProviderReplayFamilyHooks, cloneFirstTemplateModel, DEFAULT_CONTEXT_TOKENS, normalizeModelCompat, } from "openclaw/plugin-sdk/provider-model-shared"; import { applyFireworksConfig, FIREWORKS_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildFireworksProvider, FIREWORKS_BASE_URL, FIREWORKS_DEFAULT_CONTEXT_WINDOW, FIREWORKS_DEFAULT_MAX_TOKENS, FIREWORKS_DEFAULT_MODEL_ID, } from "./provider-catalog.js"; const PROVIDER_ID = "fireworks"; const OPENAI_COMPATIBLE_REPLAY_HOOKS = buildProviderReplayFamilyHooks({ family: "openai-compatible", }); function resolveFireworksDynamicModel(ctx: ProviderResolveDynamicModelContext) { const modelId = ctx.modelId.trim(); if (!modelId) { return undefined; } return ( cloneFirstTemplateModel({ providerId: PROVIDER_ID, modelId, templateIds: [FIREWORKS_DEFAULT_MODEL_ID], ctx, patch: { provider: PROVIDER_ID, }, }) ?? normalizeModelCompat({ id: modelId, name: modelId, provider: PROVIDER_ID, api: "openai-completions", baseUrl: FIREWORKS_BASE_URL, reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: FIREWORKS_DEFAULT_CONTEXT_WINDOW, maxTokens: FIREWORKS_DEFAULT_MAX_TOKENS || DEFAULT_CONTEXT_TOKENS, }) ); } export default defineSingleProviderPluginEntry({ id: PROVIDER_ID, name: "Fireworks Provider", description: "Bundled Fireworks AI provider plugin", provider: { label: "Fireworks", aliases: ["fireworks-ai"], docsPath: "/providers/fireworks", auth: [ { methodId: "api-key", label: "Fireworks API key", hint: "API key", optionKey: "fireworksApiKey", flagName: "--fireworks-api-key", envVar: "FIREWORKS_API_KEY", promptMessage: "Enter Fireworks API key", defaultModel: FIREWORKS_DEFAULT_MODEL_REF, applyConfig: (cfg) => applyFireworksConfig(cfg), }, ], catalog: { buildProvider: buildFireworksProvider, allowExplicitBaseUrl: true, }, ...OPENAI_COMPATIBLE_REPLAY_HOOKS, resolveDynamicModel: (ctx) => resolveFireworksDynamicModel(ctx), isModernModelRef: () => true, }, });