Files
openclaw/extensions/fireworks/stream.ts
Peter Steinberger bc0c3fcd63 refactor(providers): shared generated-media download guard and binary-response adoption (#120351)
* fix(agents): cancel rejected provider binary bodies

* refactor(providers): share generated media downloads

* refactor(providers): adopt payload patch stream wrapper

* fix(providers): preserve generated media helper contracts
2026-08-07 15:45:53 -07:00

36 lines
1.4 KiB
TypeScript

// Fireworks plugin module implements stream behavior.
import type { StreamFn } from "openclaw/plugin-sdk/agent-core";
import type { ProviderWrapStreamFnContext } from "openclaw/plugin-sdk/plugin-entry";
import { normalizeProviderId } from "openclaw/plugin-sdk/provider-model-shared";
import { createPayloadPatchStreamWrapper } 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";
}
function createFireworksKimiThinkingDisabledWrapper(baseStreamFn: StreamFn | undefined): StreamFn {
return createPayloadPatchStreamWrapper(baseStreamFn, ({ payload }) => {
// Fireworks Kimi can emit chain-of-thought in visible `content` unless
// the Anthropic-style thinking toggle is explicitly disabled.
payload.thinking = { type: "disabled" };
delete payload.reasoning;
delete payload.reasoning_effort;
delete payload.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);
}