@@ -27,13 +27,6 @@ function parsePercentageString(value: string, total: number): number | undefined
2727 return Math . round ( ( clampedPercent / 100 ) * total )
2828}
2929
30- export const findModelLimit = (
31- modelId : string ,
32- modelLimits : Record < string , number | `${number } %`> ,
33- ) : number | `${number } %` | undefined => {
34- return modelLimits [ modelId ]
35- }
36-
3730// XML wrappers
3831export const wrapPrunableTools = ( content : string ) : string => {
3932 return `<prunable-tools>
@@ -76,15 +69,18 @@ Context management was just performed. Do NOT use the ${toolName} again. A fresh
7669const resolveContextLimit = (
7770 config : PluginConfig ,
7871 state : SessionState ,
79- messages : WithParts [ ] ,
72+ providerId : string | undefined ,
73+ modelId : string | undefined ,
8074) : number | undefined => {
81- const { settings } = config . tools
82- const { modelLimits , contextLimit } = settings
75+ const modelLimits = config . tools . settings . modelLimits
76+ const contextLimit = config . tools . settings . contextLimit
8377
8478 if ( modelLimits ) {
85- const userMsg = getLastUserMessage ( messages )
86- const modelId = userMsg ? ( userMsg . info as UserMessage ) . model . modelID : undefined
87- const limit = modelId !== undefined ? findModelLimit ( modelId , modelLimits ) : undefined
79+ const providerModelId =
80+ providerId !== undefined && modelId !== undefined
81+ ? `${ providerId } /${ modelId } `
82+ : undefined
83+ const limit = providerModelId !== undefined ? modelLimits [ providerModelId ] : undefined
8884
8985 if ( limit !== undefined ) {
9086 if ( typeof limit === "string" && limit . endsWith ( "%" ) ) {
@@ -114,12 +110,14 @@ const shouldInjectCompressNudge = (
114110 config : PluginConfig ,
115111 state : SessionState ,
116112 messages : WithParts [ ] ,
113+ providerId : string | undefined ,
114+ modelId : string | undefined ,
117115) : boolean => {
118116 if ( config . tools . compress . permission === "deny" ) {
119117 return false
120118 }
121119
122- const contextLimit = resolveContextLimit ( config , state , messages )
120+ const contextLimit = resolveContextLimit ( config , state , providerId , modelId )
123121 if ( contextLimit === undefined ) {
124122 return false
125123 }
@@ -226,6 +224,13 @@ export const insertPruneToolContext = (
226224
227225 const pruneOrDistillEnabled = pruneEnabled || distillEnabled
228226 const contentParts : string [ ] = [ ]
227+ const lastUserMessage = getLastUserMessage ( messages )
228+ const providerId = lastUserMessage
229+ ? ( lastUserMessage . info as UserMessage ) . model . providerID
230+ : undefined
231+ const modelId = lastUserMessage
232+ ? ( lastUserMessage . info as UserMessage ) . model . modelID
233+ : undefined
229234
230235 if ( state . lastToolPrune ) {
231236 logger . debug ( "Last tool was prune - injecting cooldown message" )
@@ -245,7 +250,7 @@ export const insertPruneToolContext = (
245250 contentParts . push ( compressContext )
246251 }
247252
248- if ( shouldInjectCompressNudge ( config , state , messages ) ) {
253+ if ( shouldInjectCompressNudge ( config , state , messages , providerId , modelId ) ) {
249254 logger . info ( "Inserting compress nudge - token usage exceeds contextLimit" )
250255 contentParts . push ( renderCompressNudge ( ) )
251256 } else if (
@@ -263,7 +268,6 @@ export const insertPruneToolContext = (
263268
264269 const combinedContent = contentParts . join ( "\n" )
265270
266- const lastUserMessage = getLastUserMessage ( messages )
267271 if ( ! lastUserMessage ) {
268272 return
269273 }
0 commit comments