`modelCapabilities.limits.maxContextWindowTokens` is ignored by the runtime; only the undocumented `provider.maxContextWindowTokens` works
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 65/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- python
- Domaine
- api, backend, developer-experience
Piste de recherche
The issue is in the Python SDK's serialization and runtime handling of model capabilities. Start by examining the CopilotClient class, specifically the create_session method and the _convert_provider_to_wire_format function. Look at the ModelCapabilitiesOverride and ModelLimitsOverride classes in the SDK, and compare their field names to the runtime's api.schema.json. The test file tests/copilot_sdk/test_max_context_window.py shows the workaround and can be used to verify a fix. The goal is to ensure the max_context_window_tokens parameter is correctly serialized and honored by the runtime, or to expose the working provider.maxContextWindowTokens field.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
create_session(model_capabilities=ModelCapabilitiesOverride(limits=ModelLimitsOverride(max_context_window_tokens=...))) is documented as "Override individual model capabilities resolved by the runtime", but it has no effect on the session's context-window management: session.history.compact keeps reporting contextWindow.tokenLimit = 128000 (the BYOK fallback default), so auto-compaction triggers far too early for long-context BYOK models.
Two additional problems compound this:
- The Python SDK serializes
ModelLimitsOverrideto camelCase (maxContextWindowTokens), while the runtime's ownapi.schema.jsondeclaresModelCapabilitiesOverrideLimitsproperties in snake_case (max_context_window_tokens) — so even if the runtime honored the override, the wire names would not match. Sending snake_case manually (by monkey-patching_capabilities_to_dict) changes nothing, so the parameter appears to be entirely non-functional. - The only working path — the BYOK
ProviderConfigtop-levelmaxContextWindowTokens— is not exposed by the Python SDK:ProviderConfig(TypedDict) lacks the field and_convert_provider_to_wire_formatdrops it from the dict.
Environment
github-copilot-sdk(Python): 1.0.14 (latest on PyPI at the time)- Runtime bundle: CLI 1.0.85
- OS: Linux x64
Evidence (all variants, same BYOK model deepseek-flash)
| Configuration path | history.compact → contextWindow.tokenLimit |
|---|---|
| (none — baseline) | 128000 |
model_capabilities limits maxContextWindowTokens (SDK default, camelCase wire) |
128000 ❌ |
model_capabilities limits max_context_window_tokens (snake_case wire via monkey-patch) |
128000 ❌ |
provider.modelCapabilities.limits.max_context_window_tokens (wire injected via monkey-patch) |
128000 ❌ |
provider.maxContextWindowTokens (wire injected via monkey-patch) |
1048576 ✅ |
Expected behavior
session.open'smodelCapabilities.limits.maxContextWindowTokensshould override the resolved context window used for compaction/truncation/token display (and the Python SDK's wire casing should match what the runtime deserializes); or- the Python SDK should expose
provider.max_context_window_tokens(ProviderConfigfield + wire conversion), since that is the only knob the runtime honors today.
Workaround
Monkey-patch CopilotClient._convert_provider_to_wire_format to pass maxContextWindowTokens through on the provider object. Verified working (tokenLimit = 1048576). Repro script: tests/copilot_sdk/test_max_context_window.py.
- Langage dominant
- TypeScript
- Étoiles
- 10.6k
- Forks
- 1.5k
- Merge moyen
- 19 h 4 min
- PR mergées (30 j)
- 18
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de github/copilot-sdk
-
Clarify SDK architecture and in-process runtime transportPeut-être pris @KalebCole l’a pris il y a 15 jours. Ouvertedocumentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
github/copilot-sdk#2804 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Python ModelLimits drops max_output_tokens from model metadataPeut-être pris @HDMowri l’a pris il y a 17 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
github/copilot-sdk#2798 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
github/copilot-sdk#2793 ·
Les mainteneurs répondent en général sous 1 jour
-
agentic-workflows
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
github/copilot-sdk#2782 ·
Les mainteneurs répondent en général sous 1 jour
-
agentic-workflows
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
github/copilot-sdk#2779 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de github/copilot-sdk
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
polarsource/polar#15580 ·
Les mainteneurs répondent en général sous 1 jour
-
accepted bug via-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 69/100
pingdotgg/t3code#20931 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
bug/1-unconfirmed kind/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 83/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
ranxianglei/billion-context#3583 ·
Les mainteneurs répondent en général sous 1 jour