feat(autogen): add AG2-019, ambiguous tool name - #106
Conversation
Ports the ambiguous-name check to autogen. Claude SDK (CSDK-007), OpenAI (OAI-007), ADK (ADK-007), and MCP (MCP-003) all ship it; the five newer packs had none. The tool name sits directly beside the description in what the model sees, so it is half the selection signal, and a generic verb like process or handle spends that half on nothing.
|
Thanks @bradAGI, this is a clean port. I checked the What I like most is that the rule is genuinely accurate for AutoGen rather than just plausible. One nit: the closing sentence of AG2-019 will also need a rationale block in the Your Vercel note checks out too. This pairs with trustabl/trustabl#178, whose fixture copy is byte identical, so the two should land together. |
Ports the ambiguous-name check to AutoGen. Claude SDK (CSDK-007), OpenAI (OAI-007), ADK (ADK-007), and MCP (MCP-003) all ship it; the newer packs had none.
The tool name sits directly beside the description in what the model sees, so it is half the selection signal — and a generic verb like
processorhandlespends that half on nothing. Each wrong pick costs a full round of the conversation — propose, execute, reply — so an ambiguous name spends the AG2-004max_roundbudget rather than the chat reaching an answer.Same
name_inlist as CSDK-007, so behavior stays consistent across packs.Verification — engine built at
main:Fire (tool named
process): includesAG2-019Silent (same tool renamed
summarize_invoice):AG2-019absentA note on scope. I drafted a fifth rule in this batch for the Vercel AI SDK and dropped it after testing:
ToolDef.Nameis deliberately empty forvercel_ai_tool, because the SDK derives a tool's name from the key in thetools: { ... }record rather than from thetool({...})call. The engine asserts this directly —so every name-based predicate (
name_in,name_has_prefix) is structurally inert for that pack — it also blocks a Vercel idempotency rule, which is why the pack has none. Back-fillingNamefrom the record key at discovery time would unblock both. Happy to open that engine PR if it'd be useful.Paired engine PR follows, mirroring the rule into
testdata/rules-fixture/with fire/silent cases.