You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Route on tool-control requirements instead of dropping them in translation #1727
TranslationRequirements (internal/router/router.go:37) lets routing skip targets that cannot serve a request's audio, files, structured output and so on, with the off, shadow and enforce rollout. Tool controls are not in it. When a request carries one the target cannot express, the emitter drops it and the request goes out without the constraint.
Each one can be patched in its emitter by returning an incompatibility error, which the proxy rescues to the Anthropic baseline. That works, but it decides after a model was already picked, and it only ever falls back to one model.
Proposal
Add ParallelToolLimit, ToolSubset, StrictTools and RestrictedToolCallers to TranslationRequirements, set in RequestEnvelope.TranslationRequirements from the fields above.
Teach the existing compatibility check which wire families honour each one.
Ship behind the existing rollout: shadow first, so you can see how much traffic each requirement would move before enforcing.
Shadow mode also answers the open question on #1385 case 11: whether common clients send parallel_tool_calls: false by default and would lose Gemini under a strict reject.
Scope
One requirement per PR, starting with ParallelToolLimit. Each PR adds the field, the extraction, the family rule and table tests, with no change in off mode and no filtering in shadow mode.
I'll open the ParallelToolLimit PR next so there is something concrete to look at. If you'd rather go another way, I'll close it and do case 11 as a plain emitter reject instead.
Activity