feat: declare fireworks model catalog

This commit is contained in:
Shakker
2026-04-28 06:29:38 +01:00
parent c3c8d66acf
commit 1aa62c0b0a
2 changed files with 74 additions and 42 deletions

View File

@@ -23,6 +23,45 @@
"cliDescription": "Fireworks API key"
}
],
"modelCatalog": {
"providers": {
"fireworks": {
"baseUrl": "https://api.fireworks.ai/inference/v1",
"api": "openai-completions",
"models": [
{
"id": "accounts/fireworks/models/kimi-k2p6",
"name": "Kimi K2.6",
"input": ["text", "image"],
"contextWindow": 262144,
"maxTokens": 262144,
"cost": {
"input": 0.95,
"output": 4,
"cacheRead": 0,
"cacheWrite": 0
}
},
{
"id": "accounts/fireworks/routers/kimi-k2p5-turbo",
"name": "Kimi K2.5 Turbo (Fire Pass)",
"input": ["text", "image"],
"contextWindow": 256000,
"maxTokens": 256000,
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
}
}
]
}
},
"discovery": {
"fireworks": "static"
}
},
"configSchema": {
"type": "object",
"additionalProperties": false,

View File

@@ -1,57 +1,50 @@
import { buildManifestModelProviderConfig } from "openclaw/plugin-sdk/provider-catalog-shared";
import type {
ModelDefinitionConfig,
ModelProviderConfig,
} from "openclaw/plugin-sdk/provider-model-shared";
import manifest from "./openclaw.plugin.json" with { type: "json" };
export const FIREWORKS_BASE_URL = "https://api.fireworks.ai/inference/v1";
const FIREWORKS_MANIFEST_PROVIDER = buildManifestModelProviderConfig({
providerId: "fireworks",
catalog: manifest.modelCatalog.providers.fireworks,
});
export const FIREWORKS_BASE_URL = FIREWORKS_MANIFEST_PROVIDER.baseUrl;
export const FIREWORKS_DEFAULT_MODEL_ID = "accounts/fireworks/routers/kimi-k2p5-turbo";
export const FIREWORKS_K2_6_MODEL_ID = "accounts/fireworks/models/kimi-k2p6";
export const FIREWORKS_DEFAULT_CONTEXT_WINDOW = 256000;
export const FIREWORKS_DEFAULT_MAX_TOKENS = 256000;
export const FIREWORKS_K2_6_CONTEXT_WINDOW = 262144;
export const FIREWORKS_K2_6_MAX_TOKENS = 262144;
const ZERO_COST = {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
} as const;
function requireFireworksManifestModel(id: string): ModelDefinitionConfig {
const model = FIREWORKS_MANIFEST_PROVIDER.models.find((entry) => entry.id === id);
if (!model) {
throw new Error(`Missing Fireworks modelCatalog row ${id}`);
}
return model;
}
const FIREWORKS_K2_6_COST = {
input: 0.95,
output: 4,
cacheRead: 0,
cacheWrite: 0,
} as const;
const FIREWORKS_DEFAULT_MODEL = requireFireworksManifestModel(FIREWORKS_DEFAULT_MODEL_ID);
const FIREWORKS_K2_6_MODEL = requireFireworksManifestModel(FIREWORKS_K2_6_MODEL_ID);
export const FIREWORKS_DEFAULT_CONTEXT_WINDOW = FIREWORKS_DEFAULT_MODEL.contextWindow;
export const FIREWORKS_DEFAULT_MAX_TOKENS = FIREWORKS_DEFAULT_MODEL.maxTokens;
export const FIREWORKS_K2_6_CONTEXT_WINDOW = FIREWORKS_K2_6_MODEL.contextWindow;
export const FIREWORKS_K2_6_MAX_TOKENS = FIREWORKS_K2_6_MODEL.maxTokens;
function cloneFireworksCatalogModel(model: ModelDefinitionConfig): ModelDefinitionConfig {
return {
...model,
input: [...model.input],
cost: { ...model.cost },
};
}
export function buildFireworksCatalogModels(): ModelDefinitionConfig[] {
return [
{
id: FIREWORKS_K2_6_MODEL_ID,
name: "Kimi K2.6",
reasoning: false,
input: ["text", "image"],
cost: FIREWORKS_K2_6_COST,
contextWindow: FIREWORKS_K2_6_CONTEXT_WINDOW,
maxTokens: FIREWORKS_K2_6_MAX_TOKENS,
},
{
id: FIREWORKS_DEFAULT_MODEL_ID,
name: "Kimi K2.5 Turbo (Fire Pass)",
reasoning: false, // Kimi K2.5 can expose reasoning in visible content on FirePass.
input: ["text", "image"],
cost: ZERO_COST,
contextWindow: FIREWORKS_DEFAULT_CONTEXT_WINDOW,
maxTokens: FIREWORKS_DEFAULT_MAX_TOKENS,
},
];
return FIREWORKS_MANIFEST_PROVIDER.models.map(cloneFireworksCatalogModel);
}
export function buildFireworksProvider(): ModelProviderConfig {
return {
baseUrl: FIREWORKS_BASE_URL,
api: "openai-completions",
models: buildFireworksCatalogModels(),
};
return buildManifestModelProviderConfig({
providerId: "fireworks",
catalog: manifest.modelCatalog.providers.fireworks,
});
}