openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
83 lines (82 loc) • 3.3 kB
JavaScript
import { a as normalizeFastMode } from "../../string-coerce-1VuiLaaR.mjs";
import { a as asOptionalRecord } from "../../record-coerce-TIsquoVR.mjs";
import "../../llm-CJ3KKVO3.mjs";
import "../../string-coerce-runtime-BbIJhy7G.mjs";
import { i as streamSimple } from "../../stream-B2a9zNQj.mjs";
import { n as buildProviderStreamFamilyHooks } from "../../provider-stream-BeFr0nEc.mjs";
import "../../provider-stream-family-ClRPt3YW.mjs";
import { t as resolveOpenAIModelServiceTiers } from "../../service-tier-policy-BDjYtXTR.mjs";
import "../../token-sharing-CmBELw8t.mjs";
import { t as createOpenAINativeWebSearchWrapper } from "../../native-web-search-C7A1Da7K.mjs";
//#region extensions/openai/responses-stream.runtime.ts
const { wrapStreamFn } = buildProviderStreamFamilyHooks("openai-responses-defaults");
const SIWC_SERVICE_TIERS = [
"default",
"priority",
"ultrafast",
"slow"
];
function wrapOpenAIResponsesStream(ctx) {
let streamContext = ctx;
const serviceTiers = ctx.model ? resolveOpenAIModelServiceTiers({
modelId: ctx.model.id,
api: ctx.model.api,
baseUrl: ctx.model.baseUrl
}) : void 0;
if (serviceTiers) streamContext = {
...ctx,
extraParams: {
...ctx.extraParams,
fastMode: () => {
if (!serviceTiers.includes("priority")) return false;
const raw = ctx.extraParams?.fastMode ?? ctx.extraParams?.fast_mode;
const requested = normalizeFastMode(typeof raw === "function" ? raw() : raw);
return requested === "ultrafast" ? true : requested;
}
}
};
if (ctx.auth?.mode === "oauth" && ctx.auth.authFlow === "chatgpt-token-sharing") {
const underlying = streamContext.streamFn ?? streamSimple;
streamContext = {
...streamContext,
extraParams: {
...streamContext.extraParams,
transport: "sse",
responsesServerCompaction: false
},
streamFn: (model, context, options) => {
const headers = new Headers(options?.headers);
headers.set("x-openai-chatpass-test", "codex-direct");
const sharingOptions = {
...options,
headers: Object.fromEntries(headers.entries()),
transport: "sse",
replayResponsesItemIds: false,
onPayload: async (payload, payloadModel) => {
const transformed = await options?.onPayload?.(payload, payloadModel);
const request = asOptionalRecord(transformed ?? payload);
if (!request) throw new Error("ChatGPT token sharing requires a Responses request object.");
if (request.service_tier != null && !SIWC_SERVICE_TIERS.some((tier) => tier === request.service_tier)) throw new Error(`Sign in with ChatGPT does not support this service tier. Remove serviceTier/service_tier from the model params or select one of: ${SIWC_SERVICE_TIERS.join(", ")}.`);
request.store = false;
for (const field of [
"context_management",
"metadata",
"max_output_tokens",
"temperature",
"top_p",
"prompt_cache_retention"
]) delete request[field];
return request;
}
};
return underlying(model, context, sharingOptions);
}
};
}
return createOpenAINativeWebSearchWrapper(wrapStreamFn?.(streamContext) ?? streamContext.streamFn, {
config: ctx.config,
nativeWebSearchAllowedByToolPolicy: ctx.nativeWebSearchAllowedByToolPolicy
});
}
//#endregion
export { wrapOpenAIResponsesStream };