mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 08:58:37 +00:00
refactor: share stream payload patch helper
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
|||||||
usesOpenAiStringModeAnthropicToolChoice,
|
usesOpenAiStringModeAnthropicToolChoice,
|
||||||
} from "../provider-capabilities.js";
|
} from "../provider-capabilities.js";
|
||||||
import { log } from "./logger.js";
|
import { log } from "./logger.js";
|
||||||
|
import { streamWithPayloadPatch } from "./stream-payload-utils.js";
|
||||||
|
|
||||||
const ANTHROPIC_CONTEXT_1M_BETA = "context-1m-2025-08-07";
|
const ANTHROPIC_CONTEXT_1M_BETA = "context-1m-2025-08-07";
|
||||||
const ANTHROPIC_1M_MODEL_PREFIXES = ["claude-opus-4", "claude-sonnet-4"] as const;
|
const ANTHROPIC_1M_MODEL_PREFIXES = ["claude-opus-4", "claude-sonnet-4"] as const;
|
||||||
@@ -341,18 +342,10 @@ export function createAnthropicFastModeWrapper(
|
|||||||
return underlying(model, context, options);
|
return underlying(model, context, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
const originalOnPayload = options?.onPayload;
|
return streamWithPayloadPatch(underlying, model, context, options, (payloadObj) => {
|
||||||
return underlying(model, context, {
|
if (payloadObj.service_tier === undefined) {
|
||||||
...options,
|
payloadObj.service_tier = serviceTier;
|
||||||
onPayload: (payload) => {
|
}
|
||||||
if (payload && typeof payload === "object") {
|
|
||||||
const payloadObj = payload as Record<string, unknown>;
|
|
||||||
if (payloadObj.service_tier === undefined) {
|
|
||||||
payloadObj.service_tier = serviceTier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return originalOnPayload?.(payload, model);
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import type { StreamFn } from "@mariozechner/pi-agent-core";
|
|||||||
import type { SimpleStreamOptions } from "@mariozechner/pi-ai";
|
import type { SimpleStreamOptions } from "@mariozechner/pi-ai";
|
||||||
import { streamSimple } from "@mariozechner/pi-ai";
|
import { streamSimple } from "@mariozechner/pi-ai";
|
||||||
import { log } from "./logger.js";
|
import { log } from "./logger.js";
|
||||||
|
import { streamWithPayloadPatch } from "./stream-payload-utils.js";
|
||||||
|
|
||||||
type OpenAIServiceTier = "auto" | "default" | "flex" | "priority";
|
type OpenAIServiceTier = "auto" | "default" | "flex" | "priority";
|
||||||
type OpenAIReasoningEffort = "low" | "medium" | "high";
|
type OpenAIReasoningEffort = "low" | "medium" | "high";
|
||||||
@@ -325,18 +326,10 @@ export function createOpenAIServiceTierWrapper(
|
|||||||
) {
|
) {
|
||||||
return underlying(model, context, options);
|
return underlying(model, context, options);
|
||||||
}
|
}
|
||||||
const originalOnPayload = options?.onPayload;
|
return streamWithPayloadPatch(underlying, model, context, options, (payloadObj) => {
|
||||||
return underlying(model, context, {
|
if (payloadObj.service_tier === undefined) {
|
||||||
...options,
|
payloadObj.service_tier = serviceTier;
|
||||||
onPayload: (payload) => {
|
}
|
||||||
if (payload && typeof payload === "object") {
|
|
||||||
const payloadObj = payload as Record<string, unknown>;
|
|
||||||
if (payloadObj.service_tier === undefined) {
|
|
||||||
payloadObj.service_tier = serviceTier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return originalOnPayload?.(payload, model);
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
20
src/agents/pi-embedded-runner/stream-payload-utils.ts
Normal file
20
src/agents/pi-embedded-runner/stream-payload-utils.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import type { StreamFn } from "@mariozechner/pi-agent-core";
|
||||||
|
|
||||||
|
export function streamWithPayloadPatch(
|
||||||
|
underlying: StreamFn,
|
||||||
|
model: Parameters<StreamFn>[0],
|
||||||
|
context: Parameters<StreamFn>[1],
|
||||||
|
options: Parameters<StreamFn>[2],
|
||||||
|
patchPayload: (payload: Record<string, unknown>) => void,
|
||||||
|
) {
|
||||||
|
const originalOnPayload = options?.onPayload;
|
||||||
|
return underlying(model, context, {
|
||||||
|
...options,
|
||||||
|
onPayload: (payload) => {
|
||||||
|
if (payload && typeof payload === "object") {
|
||||||
|
patchPayload(payload as Record<string, unknown>);
|
||||||
|
}
|
||||||
|
return originalOnPayload?.(payload, model);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user