feat(fireworks): add Kimi K2.6 model

This commit is contained in:
Peter Steinberger
2026-04-21 20:30:29 +01:00
parent 2514746b32
commit 6f004ed4d4
7 changed files with 72 additions and 3 deletions

View File

@@ -6,6 +6,7 @@ Docs: https://docs.openclaw.ai
### Changes
- Fireworks/models: add Kimi K2.6 (`fireworks/accounts/fireworks/models/kimi-k2p6`) to the bundled catalog and live-model priority list, while keeping Kimi thinking disabled for Fireworks K2.6 requests.
- Onboard/wizard: simplify the security disclaimer copy (drop the yellow banner and warning icon in favor of plain-prose paragraphs), and flip remaining onboarding pickers with long dynamic option lists to searchable autocompletes (search provider, plugin configure, model provider filter).
- Channels/preview streaming: stream tool-progress updates into live preview edits for Discord, Slack, and Telegram so in-flight replies show incremental tool state in the same preview message before finalization. (#69611) Thanks @thewilloftheshadow.
- Ollama/onboard: populate the cloud-only model list from `ollama.com/api/tags` so `openclaw onboard` reflects the live cloud catalog instead of a static three-model seed; cap the discovered list at 500 and fall back to the previous hardcoded suggestions when ollama.com is unreachable or returns no models. (#68463) Thanks @BruceMacD.

View File

@@ -53,6 +53,7 @@ openclaw onboard --non-interactive \
| Model ref | Name | Input | Context | Max output | Notes |
| ------------------------------------------------------ | --------------------------- | ---------- | ------- | ---------- | ------------------------------------------ |
| `fireworks/accounts/fireworks/models/kimi-k2p6` | Kimi K2.6 | text,image | 262,144 | 262,144 | Latest Kimi model on Fireworks |
| `fireworks/accounts/fireworks/routers/kimi-k2p5-turbo` | Kimi K2.5 Turbo (Fire Pass) | text,image | 256,000 | 256,000 | Default bundled starter model on Fireworks |
<Tip>

View File

@@ -12,6 +12,9 @@ import {
FIREWORKS_DEFAULT_CONTEXT_WINDOW,
FIREWORKS_DEFAULT_MAX_TOKENS,
FIREWORKS_DEFAULT_MODEL_ID,
FIREWORKS_K2_6_CONTEXT_WINDOW,
FIREWORKS_K2_6_MAX_TOKENS,
FIREWORKS_K2_6_MODEL_ID,
} from "./provider-catalog.js";
function createFireworksDefaultRuntimeModel(params: { reasoning: boolean }): ProviderRuntimeModel {
@@ -46,14 +49,23 @@ describe("fireworks provider plugin", () => {
expect(resolved?.method.id).toBe("api-key");
});
it("builds the Fireworks Fire Pass starter catalog", async () => {
it("builds the Fireworks catalog", async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const catalogProvider = await runSingleProviderCatalog(provider);
expect(catalogProvider.api).toBe("openai-completions");
expect(catalogProvider.baseUrl).toBe(FIREWORKS_BASE_URL);
expect(catalogProvider.models?.map((model) => model.id)).toEqual([FIREWORKS_DEFAULT_MODEL_ID]);
expect(catalogProvider.models?.map((model) => model.id)).toEqual([
FIREWORKS_K2_6_MODEL_ID,
FIREWORKS_DEFAULT_MODEL_ID,
]);
expect(catalogProvider.models?.[0]).toMatchObject({
reasoning: false,
input: ["text", "image"],
contextWindow: FIREWORKS_K2_6_CONTEXT_WINDOW,
maxTokens: FIREWORKS_K2_6_MAX_TOKENS,
});
expect(catalogProvider.models?.[1]).toMatchObject({
reasoning: false,
input: ["text", "image"],
contextWindow: FIREWORKS_DEFAULT_CONTEXT_WINDOW,
@@ -113,4 +125,21 @@ describe("fireworks provider plugin", () => {
reasoning: false,
});
});
it("disables reasoning metadata for Fireworks Kimi k2.6 dynamic models", async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const resolved = provider.resolveDynamicModel?.(
createProviderDynamicModelContext({
provider: "fireworks",
modelId: "accounts/fireworks/models/kimi-k2p6",
models: [createFireworksDefaultRuntimeModel({ reasoning: false })],
}),
);
expect(resolved).toMatchObject({
provider: "fireworks",
id: "accounts/fireworks/models/kimi-k2p6",
reasoning: false,
});
});
});

View File

@@ -1,5 +1,5 @@
export function isFireworksKimiModelId(modelId: string): boolean {
const normalized = modelId.trim().toLowerCase();
const lastSegment = normalized.split("/").pop() ?? normalized;
return /^kimi-k2(?:p5|\.5)(?:[-_].+)?$/.test(lastSegment);
return /^kimi-k2(?:p[56]|[.-][56])(?:[-_].+)?$/.test(lastSegment);
}

View File

@@ -5,8 +5,11 @@ import type {
export const FIREWORKS_BASE_URL = "https://api.fireworks.ai/inference/v1";
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,
@@ -15,8 +18,24 @@ const ZERO_COST = {
cacheWrite: 0,
} as const;
const FIREWORKS_K2_6_COST = {
input: 0.95,
output: 4,
cacheRead: 0,
cacheWrite: 0,
} as const;
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)",

View File

@@ -55,6 +55,24 @@ describe("createFireworksKimiThinkingDisabledWrapper", () => {
).toMatchObject({ thinking: { type: "disabled" } });
});
it("forces thinking disabled for Fireworks Kimi k2.6 models", () => {
expect(
capturePayload({
provider: "fireworks",
api: "openai-completions",
modelId: "accounts/fireworks/models/kimi-k2p6",
}),
).toMatchObject({ thinking: { type: "disabled" } });
expect(
capturePayload({
provider: "fireworks",
api: "openai-completions",
modelId: "accounts/fireworks/routers/kimi-k2.6-turbo",
}),
).toMatchObject({ thinking: { type: "disabled" } });
});
it("strips reasoning fields when disabling Fireworks Kimi thinking", () => {
const payload = capturePayload({
provider: "fireworks",

View File

@@ -22,6 +22,7 @@ const HIGH_SIGNAL_LIVE_MODEL_PRIORITY = [
"openrouter/ai21/jamba-large-1.7",
"xai/grok-4-1-fast-non-reasoning",
"zai/glm-4.7",
"fireworks/accounts/fireworks/models/kimi-k2p6",
"fireworks/accounts/fireworks/routers/kimi-k2p5-turbo",
"minimax-portal/minimax-m2.7",
] as const;