`modelCapabilities.limits.maxContextWindowTokens` is ignored by the runtime; only the undocumented `provider.maxContextWindowTokens` works
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 65/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- python
调研方向
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.
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- Java
- 星标
- 10.5k
- 派生
- 1.5k
- 平均合并
- 1 天 9 小时
- 30 天内合并 PR
- 129
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
github/copilot-sdk 的其他 Issue
-
agentic-workflows
难度 2/5 1-3 小时 新手友好度 65/100
github/copilot-sdk#2760 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 65/100
github/copilot-sdk#2759 ·
-
documentation
难度 1/5 1 小时以内 新手友好度 85/100
github/copilot-sdk#2758 ·
-
agentic-workflows
难度 2/5 1-3 小时 新手友好度 68/100
github/copilot-sdk#2709 · 1 条评论 ·
-
难度 1/5 1 小时以内 新手友好度 78/100
github/copilot-sdk#2673 ·
查看 github/copilot-sdk 的全部 Issue
相似的 Issue
-
area-deployment area-integrations triage:bot-seen
难度 2/5 半天 新手友好度 86/100
-
难度 2/5 1-3 小时 新手友好度 75/100
apache/flink-agents#1156 ·
-
area/connectors autoteam community connectors/source/shopify needs-triage team/use type/bug
难度 2/5 1-3 小时 新手友好度 84/100
-
难度 2/5 1-3 小时 新手友好度 70/100
-
难度 1/5 1 小时以内 新手友好度 85/100