@@ -5,6 +5,10 @@ import {
55 resolveAnthropicVertexClientRegion ,
66 resolveAnthropicVertexProjectId ,
77} from "../plugin-sdk/anthropic-vertex.js" ;
8+ import {
9+ applyAnthropicPayloadPolicyToParams ,
10+ resolveAnthropicPayloadPolicy ,
11+ } from "./anthropic-payload-policy.js" ;
812
913type AnthropicVertexEffort = NonNullable < AnthropicOptions [ "effort" ] > ;
1014
@@ -31,6 +35,28 @@ function resolveAnthropicVertexMaxTokens(params: {
3135 return requested ?? modelMax ;
3236}
3337
38+ function createAnthropicVertexOnPayload ( params : {
39+ model : { api : string ; baseUrl ?: string ; provider : string } ;
40+ cacheRetention : AnthropicOptions [ "cacheRetention" ] | undefined ;
41+ onPayload : AnthropicOptions [ "onPayload" ] | undefined ;
42+ } ) : NonNullable < AnthropicOptions [ "onPayload" ] > {
43+ const policy = resolveAnthropicPayloadPolicy ( {
44+ provider : params . model . provider ,
45+ api : params . model . api ,
46+ baseUrl : params . model . baseUrl ,
47+ cacheRetention : params . cacheRetention ,
48+ enableCacheControl : true ,
49+ } ) ;
50+
51+ return async ( payload , model ) => {
52+ if ( payload && typeof payload === "object" && ! Array . isArray ( payload ) ) {
53+ applyAnthropicPayloadPolicyToParams ( payload as Record < string , unknown > , policy ) ;
54+ }
55+ const nextPayload = await params . onPayload ?.( payload , model ) ;
56+ return nextPayload ?? payload ;
57+ } ;
58+ }
59+
3460/**
3561 * Create a StreamFn that routes through pi-ai's `streamAnthropic` with an
3662 * injected `AnthropicVertex` client. All streaming, message conversion, and
@@ -49,8 +75,13 @@ export function createAnthropicVertexStreamFn(
4975 } ) ;
5076
5177 return ( model , context , options ) => {
78+ const transportModel = model as Model < "anthropic-messages" > & {
79+ api : string ;
80+ baseUrl ?: string ;
81+ provider : string ;
82+ } ;
5283 const maxTokens = resolveAnthropicVertexMaxTokens ( {
53- modelMaxTokens : model . maxTokens ,
84+ modelMaxTokens : transportModel . maxTokens ,
5485 requestedMaxTokens : options ?. maxTokens ,
5586 } ) ;
5687 const opts : AnthropicOptions = {
@@ -61,7 +92,11 @@ export function createAnthropicVertexStreamFn(
6192 cacheRetention : options ?. cacheRetention ,
6293 sessionId : options ?. sessionId ,
6394 headers : options ?. headers ,
64- onPayload : options ?. onPayload ,
95+ onPayload : createAnthropicVertexOnPayload ( {
96+ model : transportModel ,
97+ cacheRetention : options ?. cacheRetention ,
98+ onPayload : options ?. onPayload ,
99+ } ) ,
65100 maxRetryDelayMs : options ?. maxRetryDelayMs ,
66101 metadata : options ?. metadata ,
67102 } ;
@@ -95,7 +130,7 @@ export function createAnthropicVertexStreamFn(
95130 opts . thinkingEnabled = false ;
96131 }
97132
98- return streamAnthropic ( model as Model < "anthropic-messages" > , context , opts ) ;
133+ return streamAnthropic ( transportModel , context , opts ) ;
99134 } ;
100135}
101136
0 commit comments