nes: update defaults for current file budgeting#322382
Merged
Merged
Conversation
to have budget of 1500 tokens and reuse leftover budget for code above
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the default prompt budgeting for the Copilot inline-edits (xtab/NES) current-file clipping options to reduce prompt size while improving utilization of the allocated “above-cursor” budget when the cursor is near the top of the file.
Changes:
- Reduce
currentFile.maxTokensdefault from 2000 → 1500. - Enable
currentFile.useLeftoverBudgetFromAboveby default so unused “above cursor” budget can be applied to “below cursor” expansion when using even-split clipping.
Show a summary per file
| File | Description |
|---|---|
| extensions/copilot/src/platform/inlineEdits/common/dataTypes/xtabPromptOptions.ts | Adjusts default current-file token budget and enables leftover-budget donation behavior for paged clipping. |
Copilot's findings
- Files reviewed: 1/1 changed files
- Comments generated: 0
The "context above and below get same # of tokens" test inherits its options from DEFAULT_OPTIONS.currentFile. Flipping the default useLeftoverBudgetFromAbove to true made it exercise the donation path, breaking its premise and inline snapshot. Pin the option to false so the test keeps validating the even-split behavior its name describes; the donation behavior is already covered by the dedicated expandRangeToPageRange tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
|
This PR will be automatically cherry-picked to |
lszomoru
approved these changes
Jun 22, 2026
ulugbekna
added a commit
that referenced
this pull request
Jul 2, 2026
main (#322382) lowered currentFile.maxTokens 2000->1500, which broke the global-budget 'volume-neutral defaults' invariant (floor(total*share) must equal each part's legacy cap). Recalibrate DEFAULT_SHARES to cap/7500 and set DEFAULT_TOTAL_TOKENS to 7500 (the sum of the merged per-part caps: 1500 + 2000 + 2000 + 1000 + 1000), so shares still sum to exactly 1 and every part's base allocation reproduces its cap. finalSurplus stays 6000 (7500 - 1500). Update dependent specs (literal 8000 -> DEFAULT_TOTAL_TOKENS, stale 2000 cap comments -> 1500) and the design doc (defaults table, worked examples, effective caps, ordering caveat, migration note) for T=7500 and currentFile base 1500. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
ulugbekna
added a commit
that referenced
this pull request
Jul 2, 2026
#323948) * nes: fold currentFile budgeting into the global budget cascade Under the opt-in global budget experiment, the current file now draws its clip budget from the shared pool (its `shares.currentFile` slice of `totalTokens`) and donates whatever it does not use to the cascade as the initial surplus. When the global budget is disabled (prod default) behavior is byte-identical, and the new defaults (totalTokens 8000, shares in eighths) reproduce today's per-part `maxTokens` caps exactly. - xtabPromptOptions: add `GlobalBudgetSharePart`, `currentFileBudget()` and `validate()`; grow `shares` to include `currentFile`; bump `DEFAULT_TOTAL_TOKENS` to 8000 and rebalance `DEFAULT_SHARES`. - promptCrafting: seed the cascade's initial surplus from the current file's leftover budget; delegate validation to the namespace helper. - xtabProvider: size and clip the current file from the pool and compute the surplus, gated on `globalBudget` being defined. - Tests: volume-neutral invariant, `currentFileBudget`/`validate` units, and provider-level regression + new-behavior coverage. - Docs: rewrite globalBudgetCascade.md for the seeded-surplus design. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * nes: collapse global-budget settings into a single exp-driven JSON string Replace the two experiment-driven global-budget settings (globalBudget.enabled boolean + globalBudget.totalTokens number) with a single JSON-encoded string setting, modelled after modelConfigurationString, that defines totalTokens, order, and shares together. - configurationService: remove InlineEditsXtabGlobalBudgetEnabled and InlineEditsXtabGlobalBudgetTotalTokens; add InlineEditsXtabGlobalBudget (string | undefined, ExperimentBased, default undefined). - xtabPromptOptions: add GlobalBudgetOptions.VALIDATOR (all top-level fields optional; shares must be complete when present) and a pure GlobalBudgetOptions.fromConfigString(): Result<GlobalBudgetOptions, string> that JSON-parses, structurally validates, merges over the defaults, then runs the semantic validate(). Never throws. - xtabProvider: inject ITelemetryService; resolve the budget via getGlobalBudget(), returning undefined (disabled, identical to prod) when the string is unset/empty/invalid and emitting incorrectNesGlobalBudgetConfig telemetry on parse/validation failure. - Tests: migrate the provider global-budget tests to the JSON string and add fromConfigString unit tests. - Docs: rewrite the globalBudgetCascade.md Wiring section and migration note. No regression: an unset string keeps the byte-identical legacy path. '{}' enables the budget with the volume-neutral defaults; {"totalTokens":N} only overrides the pool size. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * nes: clip the current file last under a global budget to reuse cascade leftover Under a global budget the current file is now clipped LAST, sized to its base share plus whatever the budget cascade left unused (`currentFileBudget + finalSurplus`), so it trims less and reuses leftover budget. The cascade runs first (seeded with 0, the current file never donates) and is threaded into `getUserPrompt` via `precomputedCascade` so it renders exactly once. This replaces the earlier two-mode design: the opt-in `reuseLeftoverForCurrentFile` flag and the seeded-surplus "donate-forward" path are dropped, along with all `currentFileBudgetSurplus`/`initialSurplus` threading. Clip-last is now the single behavior under a global budget. The validator hardening (rejecting non-finite or negative `totalTokens`/shares) is kept. No production regression: when `globalBudget` is undefined the current file is still clipped to its own `currentFile.maxTokens` with the legacy await ordering, byte-identical to before. The global budget remains experiment-gated and off in prod. Tests and globalBudgetCascade.md updated for the clip-last-only behavior. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * nes: address review — restore nLinesOfCurrentFileInPrompt telemetry timing - xtabProvider: record setNLinesOfCurrentFileInPrompt inside both budget branches. In the legacy/prod branch the clip happens before the context-gathering awaits, so the telemetry call is moved back there to match prod timing exactly (it is still emitted when a request is cancelled mid-gathering). The clip-last branch records it after the cascade, as the clip is inherently last there. - xtabPromptOptions: fix two stale JSDoc blocks that still described the removed donate-forward behavior; describe clip-last instead. - globalBudgetCascade.md: correct the conservation bound to T·(Σ shares) and document the share-sum tolerance (over-allocation ≤ ~1e-3·T). - promptCrafting.spec: add a cascade test asserting finalSurplus shrinks as the cascade consumes budget (current file reuses less leftover). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * nes: fix stale DEFAULT_ORDER doc comment to say clip-last Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * nes: rename clipCurrentFileToBudget param to overriddenMaxTokens Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * nes: extract current-file clip + context gathering into a method Pulls the ~55-line global-budget/legacy if-else out of doGetNextEditWithSelection into a private gatherContextAndClipCurrentFile method returning Result<{ clippedTaggedCurrentDoc, areaAroundCodeToEdit, precomputedCascade, langCtx, neighborSnippets }, NoNextEditReason>. Behavior, clip-first/clip-last ordering, and nLinesOfCurrentFileInPrompt telemetry timing are unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * nes: recalibrate global-budget defaults to merged currentFile cap (1500) main (#322382) lowered currentFile.maxTokens 2000->1500, which broke the global-budget 'volume-neutral defaults' invariant (floor(total*share) must equal each part's legacy cap). Recalibrate DEFAULT_SHARES to cap/7500 and set DEFAULT_TOTAL_TOKENS to 7500 (the sum of the merged per-part caps: 1500 + 2000 + 2000 + 1000 + 1000), so shares still sum to exactly 1 and every part's base allocation reproduces its cap. finalSurplus stays 6000 (7500 - 1500). Update dependent specs (literal 8000 -> DEFAULT_TOTAL_TOKENS, stale 2000 cap comments -> 1500) and the design doc (defaults table, worked examples, effective caps, ordering caveat, migration note) for T=7500 and currentFile base 1500. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
to have budget of 1500 tokens and reuse leftover budget for code above