mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-18 19:04:45 +00:00
52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
import type { ProviderWrapStreamFnContext } from "openclaw/plugin-sdk/plugin-entry";
|
|
import {
|
|
createDeepSeekV4OpenAICompatibleThinkingWrapper,
|
|
streamWithPayloadPatch,
|
|
} from "openclaw/plugin-sdk/provider-stream-shared";
|
|
import { isOpencodeGoKimiNoReasoningModelId } from "./provider-catalog.js";
|
|
|
|
function isOpencodeGoDeepSeekV4ModelId(modelId: unknown): boolean {
|
|
return modelId === "deepseek-v4-flash" || modelId === "deepseek-v4-pro";
|
|
}
|
|
|
|
export function createOpencodeGoDeepSeekV4Wrapper(
|
|
baseStreamFn: ProviderWrapStreamFnContext["streamFn"],
|
|
thinkingLevel: ProviderWrapStreamFnContext["thinkingLevel"],
|
|
): ProviderWrapStreamFnContext["streamFn"] {
|
|
return createDeepSeekV4OpenAICompatibleThinkingWrapper({
|
|
baseStreamFn,
|
|
thinkingLevel,
|
|
shouldPatchModel: (model) =>
|
|
model.provider === "opencode-go" && isOpencodeGoDeepSeekV4ModelId(model.id),
|
|
});
|
|
}
|
|
|
|
function stripReasoningParams(payloadObj: Record<string, unknown>): void {
|
|
delete payloadObj.reasoning;
|
|
delete payloadObj.reasoning_effort;
|
|
delete payloadObj.reasoningEffort;
|
|
}
|
|
|
|
export function createOpencodeGoKimiNoReasoningWrapper(
|
|
baseStreamFn: ProviderWrapStreamFnContext["streamFn"],
|
|
): ProviderWrapStreamFnContext["streamFn"] {
|
|
if (!baseStreamFn) {
|
|
return undefined;
|
|
}
|
|
const underlying = baseStreamFn;
|
|
return (model, context, options) => {
|
|
if (model.provider !== "opencode-go" || !isOpencodeGoKimiNoReasoningModelId(model.id)) {
|
|
return underlying(model, context, options);
|
|
}
|
|
return streamWithPayloadPatch(underlying, model, context, options, stripReasoningParams);
|
|
};
|
|
}
|
|
|
|
export function createOpencodeGoWrapper(
|
|
baseStreamFn: ProviderWrapStreamFnContext["streamFn"],
|
|
thinkingLevel: ProviderWrapStreamFnContext["thinkingLevel"],
|
|
): ProviderWrapStreamFnContext["streamFn"] {
|
|
const kimiWrapped = createOpencodeGoKimiNoReasoningWrapper(baseStreamFn) ?? baseStreamFn;
|
|
return createOpencodeGoDeepSeekV4Wrapper(kimiWrapped, thinkingLevel) ?? kimiWrapped;
|
|
}
|