11import { buildArray } from './array'
2+ import { cloneDeep , isEqual } from './lodash-replacements'
23
3- // Deep clone using JSON serialization (works for serializable objects)
4- function cloneDeep < T > ( obj : T ) : T {
5- return JSON . parse ( JSON . stringify ( obj ) )
6- }
7-
8- // Deep equality check using JSON serialization
9- function isEqual ( a : unknown , b : unknown ) : boolean {
10- try {
11- return JSON . stringify ( a ) === JSON . stringify ( b )
12- } catch {
13- return a === b
14- }
15- }
164import { getToolCallString } from '../tools/utils'
175
186import type {
@@ -34,9 +22,9 @@ export function toContentString(msg: ModelMessage): string {
3422export function withCacheControl <
3523 T extends { providerOptions ?: ProviderMetadata } ,
3624> ( obj : T ) : T {
37- const wrapper = cloneDeep ( obj )
25+ const wrapper = cloneDeep ( obj ) as T
3826 if ( ! wrapper . providerOptions ) {
39- wrapper . providerOptions = { }
27+ wrapper . providerOptions = { } as ProviderMetadata
4028 }
4129 if ( ! wrapper . providerOptions . anthropic ) {
4230 wrapper . providerOptions . anthropic = { }
@@ -52,12 +40,10 @@ export function withCacheControl<
5240export function withoutCacheControl <
5341 T extends { providerOptions ?: ProviderMetadata } ,
5442> ( obj : T ) : T {
55- const wrapper = cloneDeep ( obj )
56- if (
57- wrapper . providerOptions ?. anthropic ?. cacheControl &&
58- 'type' in wrapper . providerOptions . anthropic . cacheControl
59- ) {
60- delete ( wrapper . providerOptions . anthropic . cacheControl as any ) . type
43+ const wrapper = cloneDeep ( obj ) as T
44+ const anthropicCache = wrapper . providerOptions ?. anthropic ?. cacheControl
45+ if ( anthropicCache && typeof anthropicCache === 'object' && 'type' in anthropicCache ) {
46+ delete ( anthropicCache as any ) . type
6147 }
6248 if (
6349 Object . keys ( wrapper . providerOptions ?. anthropic ?. cacheControl ?? { } )
@@ -69,11 +55,9 @@ export function withoutCacheControl<
6955 delete wrapper . providerOptions ?. anthropic
7056 }
7157
72- if (
73- wrapper . providerOptions ?. openrouter ?. cacheControl &&
74- 'type' in wrapper . providerOptions . openrouter . cacheControl
75- ) {
76- delete ( wrapper . providerOptions . openrouter . cacheControl as any ) . type
58+ const openrouterCache = wrapper . providerOptions ?. openrouter ?. cacheControl
59+ if ( openrouterCache && typeof openrouterCache === 'object' && 'type' in openrouterCache ) {
60+ delete ( openrouterCache as any ) . type
7761 }
7862 if (
7963 Object . keys ( wrapper . providerOptions ?. openrouter ?. cacheControl ?? { } )
0 commit comments