Skip to content

feat: per-model growth-nudge floor (modelMinNudgeLimits) for mixed-context installs #344

Description

@ranxianglei

Requested by

@bernhardberger in the PR #343 thread (2026-08-28), as a follow-up to issue #342 / PR #343 (growth-nudge floor via minNudgeContextPercent).

Problem

PR #343 makes the T1 growth-nudge floor the global minNudgeContextPercent (default 15% of the model context window). Mixed-model installations cannot express per-model floors with a single global percent:

Model Advertised window Intended floor Floor at global 37.5% Floor at default 15%
OpenAI GPT-5.6 (native) 400,000 150,000 150,000 ✓ 60,000 (reproduces #342 early nudges)
openrouter/z-ai/glm-5.3 1,048,576 (OpenRouter API) 200,000 393,216 (≈2× intended) 157,286

No single global value satisfies both: 37.5% delays the GLM floor to nearly twice the intended value; 15% puts native OpenAI back at 60K.

Proposed API

An optional per-model growth floor, following the existing modelMaxLimits / modelMinLimits style:

modelMinNudgeLimits?: Record<string, number | `${number}%`>

Keyed by provider/model (same keying as the existing model-limit overrides). Values may be absolute tokens or "X%" of that model's context window.

Precedence order (as proposed by the requester)

1. modelMinNudgeLimits[provider/model]
2. minNudgeContextPercent × model context
3. existing growth-only behavior when model context is unknown

This keeps the simple 15% default and lets mixed-model installations use exact token or percentage floors. The existing modelMinLimits keeps its current turn/iteration-reminder meaning (unchanged).

Implementation notes

  • Floor computation lives in injectCompressNudges (minNudgeFloorTokens / overMinNudgeFloor, lib/messages/inject/inject.ts).
  • New config field needs validation/merging in lib/config.ts + dcp.schema.json + docs (CONFIGURATION.md, README.md), following the modelMinLimits pattern.
  • Tests: extend the issue #342: block in tests/inject.test.ts (per-model floor wins over global percent; percent value resolves against the per-model window; unknown-model-context fallback unchanged).

Scope

Does not block PR #343 — the global floor ships first; this is a follow-up enhancement. Recorded here so the mixed-context limitation is tracked before #343 merges.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions