mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 14:01:24 +08:00
27 lines
1.2 KiB
TypeScript
27 lines
1.2 KiB
TypeScript
// Deepinfra plugin module implements cache wrapper behavior.
|
|
import {
|
|
applyAnthropicEphemeralCacheControlMarkers,
|
|
streamWithPayloadPatch,
|
|
} from "openclaw/plugin-sdk/provider-stream";
|
|
|
|
// StreamFn isn't re-exported via the plugin SDK; derive it from a helper that
|
|
// accepts it so we stay on the SDK boundary.
|
|
type StreamFn = Parameters<typeof streamWithPayloadPatch>[0];
|
|
|
|
// Inject Anthropic ephemeral cache_control markers for anthropic/* models on
|
|
// DeepInfra. The OpenRouter equivalent short-circuits on a provider/endpoint
|
|
// check, so DeepInfra advertises isCacheTtlEligible but the payload patch
|
|
// never fires. Gating on the model id instead fixes that.
|
|
export function createDeepInfraAnthropicCacheWrapper(baseStreamFn: StreamFn): StreamFn {
|
|
return ((model, context, options) => {
|
|
const modelIdRaw = (model as { id?: unknown }).id;
|
|
const modelId = typeof modelIdRaw === "string" ? modelIdRaw.toLowerCase() : "";
|
|
if (!modelId.startsWith("anthropic/")) {
|
|
return baseStreamFn(model, context, options);
|
|
}
|
|
return streamWithPayloadPatch(baseStreamFn, model, context, options, (payload) => {
|
|
applyAnthropicEphemeralCacheControlMarkers(payload);
|
|
});
|
|
}) as StreamFn;
|
|
}
|