`modelCapabilities.limits.maxContextWindowTokens` is ignored by the runtime; only the undocumented `provider.maxContextWindowTokens` works
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- api, backend, developer-experience
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Java
- Estrellas
- 10.5k
- Forks
- 1.5k
- Merge medio
- 1 d 9 h
- PR fusionados (30 d)
- 130
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de github/copilot-sdk
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
github/copilot-sdk#2760 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
github/copilot-sdk#2759 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
github/copilot-sdk#2758 ·
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
github/copilot-sdk#2709 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
github/copilot-sdk#2673 ·
Todos los issues de github/copilot-sdk
Issues similares
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
inu-appcenter/memorIN-backend#288 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
frontend maui-pilot pilot-ask question
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Abiertoarea/plugin
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
kestra-io/plugin-kestra#190 ·