mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-01 09:20:20 +00:00
refactor: split provider stream sdk seams
This commit is contained in:
166
src/plugin-sdk/provider-stream-family.ts
Normal file
166
src/plugin-sdk/provider-stream-family.ts
Normal file
@@ -0,0 +1,166 @@
|
||||
import {
|
||||
createGoogleThinkingPayloadWrapper,
|
||||
sanitizeGoogleThinkingPayload,
|
||||
} from "../agents/pi-embedded-runner/google-stream-wrappers.js";
|
||||
import { createMinimaxFastModeWrapper } from "../agents/pi-embedded-runner/minimax-stream-wrappers.js";
|
||||
import {
|
||||
createMoonshotThinkingWrapper,
|
||||
resolveMoonshotThinkingType,
|
||||
} from "../agents/pi-embedded-runner/moonshot-thinking-stream-wrappers.js";
|
||||
import {
|
||||
createCodexNativeWebSearchWrapper,
|
||||
createOpenAIAttributionHeadersWrapper,
|
||||
createOpenAIFastModeWrapper,
|
||||
createOpenAIReasoningCompatibilityWrapper,
|
||||
createOpenAIResponsesContextManagementWrapper,
|
||||
createOpenAIServiceTierWrapper,
|
||||
createOpenAITextVerbosityWrapper,
|
||||
resolveOpenAIFastMode,
|
||||
resolveOpenAIServiceTier,
|
||||
resolveOpenAITextVerbosity,
|
||||
} from "../agents/pi-embedded-runner/openai-stream-wrappers.js";
|
||||
import {
|
||||
getOpenRouterModelCapabilities,
|
||||
loadOpenRouterModelCapabilities,
|
||||
} from "../agents/pi-embedded-runner/openrouter-model-capabilities.js";
|
||||
import {
|
||||
createKilocodeWrapper,
|
||||
createOpenRouterSystemCacheWrapper,
|
||||
createOpenRouterWrapper,
|
||||
isProxyReasoningUnsupported,
|
||||
} from "../agents/pi-embedded-runner/proxy-stream-wrappers.js";
|
||||
import {
|
||||
createToolStreamWrapper,
|
||||
createZaiToolStreamWrapper,
|
||||
} from "../agents/pi-embedded-runner/zai-stream-wrappers.js";
|
||||
import type { ProviderPlugin } from "../plugins/types.js";
|
||||
import type { ProviderWrapStreamFnContext } from "./plugin-entry.js";
|
||||
|
||||
export type ProviderStreamFamily =
|
||||
| "google-thinking"
|
||||
| "kilocode-thinking"
|
||||
| "moonshot-thinking"
|
||||
| "minimax-fast-mode"
|
||||
| "openai-responses-defaults"
|
||||
| "openrouter-thinking"
|
||||
| "tool-stream-default-on";
|
||||
|
||||
type ProviderStreamFamilyHooks = Pick<ProviderPlugin, "wrapStreamFn">;
|
||||
|
||||
export function buildProviderStreamFamilyHooks(
|
||||
family: ProviderStreamFamily,
|
||||
): ProviderStreamFamilyHooks {
|
||||
switch (family) {
|
||||
case "google-thinking":
|
||||
return {
|
||||
wrapStreamFn: (ctx: ProviderWrapStreamFnContext) =>
|
||||
createGoogleThinkingPayloadWrapper(ctx.streamFn, ctx.thinkingLevel),
|
||||
};
|
||||
case "moonshot-thinking":
|
||||
return {
|
||||
wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => {
|
||||
const thinkingType = resolveMoonshotThinkingType({
|
||||
configuredThinking: ctx.extraParams?.thinking,
|
||||
thinkingLevel: ctx.thinkingLevel,
|
||||
});
|
||||
return createMoonshotThinkingWrapper(ctx.streamFn, thinkingType);
|
||||
},
|
||||
};
|
||||
case "kilocode-thinking":
|
||||
return {
|
||||
wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => {
|
||||
const thinkingLevel =
|
||||
ctx.modelId === "kilo/auto" || isProxyReasoningUnsupported(ctx.modelId)
|
||||
? undefined
|
||||
: ctx.thinkingLevel;
|
||||
return createKilocodeWrapper(ctx.streamFn, thinkingLevel);
|
||||
},
|
||||
};
|
||||
case "minimax-fast-mode":
|
||||
return {
|
||||
wrapStreamFn: (ctx: ProviderWrapStreamFnContext) =>
|
||||
createMinimaxFastModeWrapper(ctx.streamFn, ctx.extraParams?.fastMode === true),
|
||||
};
|
||||
case "openai-responses-defaults":
|
||||
return {
|
||||
wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => {
|
||||
let nextStreamFn = createOpenAIAttributionHeadersWrapper(ctx.streamFn);
|
||||
|
||||
if (resolveOpenAIFastMode(ctx.extraParams)) {
|
||||
nextStreamFn = createOpenAIFastModeWrapper(nextStreamFn);
|
||||
}
|
||||
|
||||
const serviceTier = resolveOpenAIServiceTier(ctx.extraParams);
|
||||
if (serviceTier) {
|
||||
nextStreamFn = createOpenAIServiceTierWrapper(nextStreamFn, serviceTier);
|
||||
}
|
||||
|
||||
const textVerbosity = resolveOpenAITextVerbosity(ctx.extraParams);
|
||||
if (textVerbosity) {
|
||||
nextStreamFn = createOpenAITextVerbosityWrapper(nextStreamFn, textVerbosity);
|
||||
}
|
||||
|
||||
nextStreamFn = createCodexNativeWebSearchWrapper(nextStreamFn, {
|
||||
config: ctx.config,
|
||||
agentDir: ctx.agentDir,
|
||||
});
|
||||
return createOpenAIResponsesContextManagementWrapper(
|
||||
createOpenAIReasoningCompatibilityWrapper(nextStreamFn),
|
||||
ctx.extraParams,
|
||||
);
|
||||
},
|
||||
};
|
||||
case "openrouter-thinking":
|
||||
return {
|
||||
wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => {
|
||||
const thinkingLevel =
|
||||
ctx.modelId === "auto" || isProxyReasoningUnsupported(ctx.modelId)
|
||||
? undefined
|
||||
: ctx.thinkingLevel;
|
||||
return createOpenRouterWrapper(ctx.streamFn, thinkingLevel);
|
||||
},
|
||||
};
|
||||
case "tool-stream-default-on":
|
||||
return {
|
||||
wrapStreamFn: (ctx: ProviderWrapStreamFnContext) =>
|
||||
createToolStreamWrapper(ctx.streamFn, ctx.extraParams?.tool_stream !== false),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
createGoogleThinkingPayloadWrapper,
|
||||
sanitizeGoogleThinkingPayload,
|
||||
} from "../agents/pi-embedded-runner/google-stream-wrappers.js";
|
||||
export { createMinimaxFastModeWrapper } from "../agents/pi-embedded-runner/minimax-stream-wrappers.js";
|
||||
export {
|
||||
createMoonshotThinkingWrapper,
|
||||
resolveMoonshotThinkingType,
|
||||
} from "../agents/pi-embedded-runner/moonshot-thinking-stream-wrappers.js";
|
||||
export {
|
||||
createOpenAIAttributionHeadersWrapper,
|
||||
createCodexNativeWebSearchWrapper,
|
||||
createOpenAIDefaultTransportWrapper,
|
||||
createOpenAIFastModeWrapper,
|
||||
createOpenAIReasoningCompatibilityWrapper,
|
||||
createOpenAIResponsesContextManagementWrapper,
|
||||
createOpenAIServiceTierWrapper,
|
||||
createOpenAITextVerbosityWrapper,
|
||||
resolveOpenAIFastMode,
|
||||
resolveOpenAIServiceTier,
|
||||
resolveOpenAITextVerbosity,
|
||||
} from "../agents/pi-embedded-runner/openai-stream-wrappers.js";
|
||||
export {
|
||||
createKilocodeWrapper,
|
||||
createOpenRouterSystemCacheWrapper,
|
||||
createOpenRouterWrapper,
|
||||
isProxyReasoningUnsupported,
|
||||
} from "../agents/pi-embedded-runner/proxy-stream-wrappers.js";
|
||||
export {
|
||||
getOpenRouterModelCapabilities,
|
||||
loadOpenRouterModelCapabilities,
|
||||
} from "../agents/pi-embedded-runner/openrouter-model-capabilities.js";
|
||||
export {
|
||||
createToolStreamWrapper,
|
||||
createZaiToolStreamWrapper,
|
||||
} from "../agents/pi-embedded-runner/zai-stream-wrappers.js";
|
||||
40
src/plugin-sdk/provider-stream-shared.ts
Normal file
40
src/plugin-sdk/provider-stream-shared.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import type { StreamFn } from "@mariozechner/pi-agent-core";
|
||||
|
||||
export type ProviderStreamWrapperFactory =
|
||||
| ((streamFn: StreamFn | undefined) => StreamFn | undefined)
|
||||
| null
|
||||
| undefined
|
||||
| false;
|
||||
|
||||
export function composeProviderStreamWrappers(
|
||||
baseStreamFn: StreamFn | undefined,
|
||||
...wrappers: ProviderStreamWrapperFactory[]
|
||||
): StreamFn | undefined {
|
||||
return wrappers.reduce(
|
||||
(streamFn, wrapper) => (wrapper ? wrapper(streamFn) : streamFn),
|
||||
baseStreamFn,
|
||||
);
|
||||
}
|
||||
|
||||
export {
|
||||
applyAnthropicPayloadPolicyToParams,
|
||||
resolveAnthropicPayloadPolicy,
|
||||
} from "../agents/anthropic-payload-policy.js";
|
||||
export {
|
||||
buildCopilotDynamicHeaders,
|
||||
hasCopilotVisionInput,
|
||||
} from "../agents/copilot-dynamic-headers.js";
|
||||
export { applyAnthropicEphemeralCacheControlMarkers } from "../agents/pi-embedded-runner/anthropic-cache-control-payload.js";
|
||||
export {
|
||||
createBedrockNoCacheWrapper,
|
||||
isAnthropicBedrockModel,
|
||||
} from "../agents/pi-embedded-runner/bedrock-stream-wrappers.js";
|
||||
export {
|
||||
createMoonshotThinkingWrapper,
|
||||
resolveMoonshotThinkingType,
|
||||
} from "../agents/pi-embedded-runner/moonshot-thinking-stream-wrappers.js";
|
||||
export { streamWithPayloadPatch } from "../agents/pi-embedded-runner/stream-payload-utils.js";
|
||||
export {
|
||||
createToolStreamWrapper,
|
||||
createZaiToolStreamWrapper,
|
||||
} from "../agents/pi-embedded-runner/zai-stream-wrappers.js";
|
||||
Reference in New Issue
Block a user