mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-13 18:21:27 +00:00
* fix: disable FirePass Kimi reasoning leak * fix: preserve Fireworks wrapper fallbacks * fix: harden Fireworks Kimi model matching * fix: restore Fireworks payload sanitization
40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
import type { StreamFn } from "@mariozechner/pi-agent-core";
|
|
import { streamSimple } from "@mariozechner/pi-ai";
|
|
import type { ProviderWrapStreamFnContext } from "openclaw/plugin-sdk/plugin-entry";
|
|
import { normalizeProviderId } from "openclaw/plugin-sdk/provider-model-shared";
|
|
import { streamWithPayloadPatch } from "openclaw/plugin-sdk/provider-stream-shared";
|
|
import { isFireworksKimiModelId } from "./model-id.js";
|
|
|
|
function isFireworksProviderId(providerId: string): boolean {
|
|
const normalized = normalizeProviderId(providerId);
|
|
return normalized === "fireworks" || normalized === "fireworks-ai";
|
|
}
|
|
|
|
export function createFireworksKimiThinkingDisabledWrapper(
|
|
baseStreamFn: StreamFn | undefined,
|
|
): StreamFn {
|
|
const underlying = baseStreamFn ?? streamSimple;
|
|
return (model, context, options) =>
|
|
streamWithPayloadPatch(underlying, model, context, options, (payloadObj) => {
|
|
// Fireworks Kimi can emit chain-of-thought in visible `content` unless
|
|
// the Anthropic-style thinking toggle is explicitly disabled.
|
|
payloadObj.thinking = { type: "disabled" };
|
|
delete payloadObj.reasoning;
|
|
delete payloadObj.reasoning_effort;
|
|
delete payloadObj.reasoningEffort;
|
|
});
|
|
}
|
|
|
|
export function wrapFireworksProviderStream(
|
|
ctx: ProviderWrapStreamFnContext,
|
|
): StreamFn | undefined {
|
|
if (
|
|
!isFireworksProviderId(ctx.provider) ||
|
|
ctx.model?.api !== "openai-completions" ||
|
|
!isFireworksKimiModelId(ctx.modelId)
|
|
) {
|
|
return undefined;
|
|
}
|
|
return createFireworksKimiThinkingDisabledWrapper(ctx.streamFn);
|
|
}
|