Compaction fails with "CAPIError: 400 Tool choice must be auto" on custom models
Personne n'a encore pris cette issue.
- Langage dominant
- Shell
- Étoiles
- 11.2k
- Forks
- 1.9k
- Merge moyen
- 14 h 16 min
- PR mergées (30 j)
- 6
Description
Describe the bug
Session compaction (manual /compact and automatic compaction at the context threshold) fails with:
Compaction failed. CAPIError: 400 Tool choice must be auto
whenever the session is running a custom model (e.g. ~z-ai/glm-latest registered through a custom OpenRouter-compatible provider). The compaction summary request appears to force a tool call, and CAPI rejects non-auto tool choice for custom models, so compaction can never succeed on them.
Switching the same session to a first-party model (e.g. GPT-5.6 Luna or Claude Sonnet 4.6) and running /compact succeeds, confirming the failure is tied to the custom model's tool-choice capability, not the session contents.
Affected version
GitHub Copilot CLI 1.0.80 (also confirmed still present in the 1.0.81-14 prerelease)
Steps to reproduce the behavior
- Register a custom model via an OpenRouter-compatible provider (e.g.
~z-ai/glm-latest) - Start a session on that model and work until auto-compaction triggers (or run
/compactmanually) - Observe:
Compaction failed. CAPIError: 400 Tool choice must be auto - Switch the session to a first-party model and run
/compact— it succeeds
Expected behavior
Compaction should succeed on custom models, e.g. by falling back to tool_choice: auto with a prompt-based summary when the selected model does not support forced tool choice.
Additional context
- Reproducible across multiple sessions and repositories whenever the session model is a custom one; first-party models (GPT/Claude/Gemini) compact fine.
- After the failed compaction the session keeps growing and eventually hits context/size failures, since auto-compaction can never complete on custom models.
Guide de contribution
Ouvrir 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.
Piste de recherche
Commencez par reproduire l’échec avec /compact sur un modèle personnalisé compatible avec OpenRouter, puis comparez-le à un modèle first-party. Aucun fichier source ni test n’est mentionné dans le rapport ; suivez donc la requête de compactage depuis le point d’entrée /compact et examinez la gestion du choix de l’outil. La tâche sera considérée comme terminée lorsque le compactage manuel et automatique s’effectuera correctement pour les modèles personnalisés, sans l’erreur CAPI.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Domaine
- api, cli
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100