refactor: dedupe provider stream family surface

This commit is contained in:
Peter Steinberger
2026-04-06 17:48:57 +01:00
parent f1d7e9b569
commit a5a7ea0e39

View File

@@ -1,166 +1 @@
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";
export * from "./provider-stream.js";