`modelCapabilities.limits.maxContextWindowTokens` is ignored by the runtime; only the undocumented `provider.maxContextWindowTokens` works
まだ誰も着手していません。
評価
- 難易度
- 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時間
- マージ済み PR(30日)
- 130
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- 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
-
documentation
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
inu-appcenter/memorIN-backend#288 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
-
frontend maui-pilot pilot-ask question
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
area/plugin
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
kestra-io/plugin-kestra#190 ·