Compare function-calling contracts across LLM APIs
LLM Function Calling Compared — Tool Schemas, Results, and Retry Safety
Function calling declares a tool and emits a call; the model does not execute the side effect by itself. Compare exact declaration, choice, call and result IDs, argument encoding, stream events, parallel ordering, continuation, and retry state. Automatic retry must stop when dispatch state is unresolved, even if the text response looks complete. Verified 2026-09-02.
Compare tool declarations, calls, results, parallelism, continuation, and side-effect-safe retry semantics by exact API surface. Qualitative demand: dedicated eight-provider function-calling comparisons were reviewed 2026-09-02; exact US monthly volume is unavailable.
Batch 58 · server-rendered evidence boards · verified 2026-09-02
Intent answer: Function calling declares a tool and emits a call; the model does not execute the side effect by itself. Compare exact declaration, choice, call and result IDs, argument encoding, stream events, parallel ordering, continuation, and retry state. Automatic retry must stop when dispatch state is unresolved, even if the text response looks complete. Verified 2026-09-02.
Demand evidence: Qualitative demand: dedicated eight-provider function-calling comparisons were reviewed 2026-09-02; exact US monthly volume is unavailable.
Scope boundary: Compare tool declarations, calls, results, parallelism, continuation, and side-effect-safe retry semantics by exact API surface. Exact provider, seller, serving host, account/tier, endpoint, model/snapshot, region, feature, and evidence identity are required; unresolved joins render Unavailable.
Tool declaration-call-result wire crosswalk
Deterministic formula / rule: wire pass = declaration + choice + call/result identity + argument encoding + stream/finish receipt; execution remains application-side unless documented otherwise.
Boundary: Owns cross-provider tool-call protocol; MCP, built-in execution, and agent quality remain separate boundaries.
| Frozen scenario / field ID | Exact identity and evidence fields | Result | State |
|---|---|---|---|
batch58-function-calling-m1-r1one function | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=one function; provider/host/model/surface; declaration/choice fields; call/result IDs; arguments; association; stream events; finish; usage/source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
batch58-function-calling-m1-r2forced function | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=forced function; provider/host/model/surface; declaration/choice fields; call/result IDs; arguments; association; stream events; finish; usage/source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
batch58-function-calling-m1-r3auto choice | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=auto choice; provider/host/model/surface; declaration/choice fields; call/result IDs; arguments; association; stream events; finish; usage/source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
batch58-function-calling-m1-r4parallel calls | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=parallel calls; provider/host/model/surface; declaration/choice fields; call/result IDs; arguments; association; stream events; finish; usage/source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
batch58-function-calling-m1-r5built-in provider tool | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=built-in provider tool; provider/host/model/surface; declaration/choice fields; call/result IDs; arguments; association; stream events; finish; usage/source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
batch58-function-calling-m1-r6unsupported-tool model | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=unsupported-tool model; provider/host/model/surface; declaration/choice fields; call/result IDs; arguments; association; stream events; finish; usage/source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact function-calling evidence join is not closed for “unsupported-tool model” | FAIL CLOSED — manual, probe, or source evidence required |
First-party citation: OpenAI Responses API reference. Verified 2026-09-02; missing or conflicting joins fail closed.
Tool-state conformance replay
Deterministic formula / rule: replay pass = request/tool/result/checkpoint hashes + submitted/effective controls + validator + retained ordering/state.
Boundary: Protocol success does not create a model-quality rank or prove safe side effects.
| Frozen scenario / field ID | Exact identity and evidence fields | Result | State |
|---|---|---|---|
batch58-function-calling-m2-r1successful read | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=successful read; request/tool/result/checkpoint hashes; controls; validator; call ordering; state retained/dropped; retry count; final artifact; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
batch58-function-calling-m2-r2malformed arguments | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=malformed arguments; request/tool/result/checkpoint hashes; controls; validator; call ordering; state retained/dropped; retry count; final artifact; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
batch58-function-calling-m2-r3unknown tool | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=unknown tool; request/tool/result/checkpoint hashes; controls; validator; call ordering; state retained/dropped; retry count; final artifact; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact function-calling evidence join is not closed for “unknown tool” | FAIL CLOSED — manual, probe, or source evidence required |
batch58-function-calling-m2-r4tool exception | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=tool exception; request/tool/result/checkpoint hashes; controls; validator; call ordering; state retained/dropped; retry count; final artifact; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
batch58-function-calling-m2-r5out-of-order parallel results | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=out-of-order parallel results; request/tool/result/checkpoint hashes; controls; validator; call ordering; state retained/dropped; retry count; final artifact; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
batch58-function-calling-m2-r6continuation after compaction | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=continuation after compaction; request/tool/result/checkpoint hashes; controls; validator; call ordering; state retained/dropped; retry count; final artifact; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
First-party citation: Anthropic Messages API. Verified 2026-09-02; missing or conflicting joins fail closed.
Side-effect and retry admission planner
Deterministic formula / rule: retry admitted = execution state known ∧ idempotency/verification path present; unresolved effect state => hold.
Boundary: Owns side-effect-safe admission; agent suitability, migration, and gateway syntax stay with their owners.
| Frozen scenario / field ID | Exact identity and evidence fields | Result | State |
|---|---|---|---|
batch58-function-calling-m3-r1read-only lookup | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=read-only lookup; execution authority; idempotency key; dispatch/result state; duplicate-risk; retry/verify/compensate/hold rule; owner; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 3 rule is reproducible but no production observation is claimed |
batch58-function-calling-m3-r2idempotent write | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=idempotent write; execution authority; idempotency key; dispatch/result state; duplicate-risk; retry/verify/compensate/hold rule; owner; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 3 rule is reproducible but no production observation is claimed |
batch58-function-calling-m3-r3non-idempotent purchase | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=non-idempotent purchase; execution authority; idempotency key; dispatch/result state; duplicate-risk; retry/verify/compensate/hold rule; owner; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact function-calling evidence join is not closed for “non-idempotent purchase” | FAIL CLOSED — manual, probe, or source evidence required |
batch58-function-calling-m3-r4timeout before dispatch | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=timeout before dispatch; execution authority; idempotency key; dispatch/result state; duplicate-risk; retry/verify/compensate/hold rule; owner; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 3 rule is reproducible but no production observation is claimed |
batch58-function-calling-m3-r5timeout after dispatch | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=timeout after dispatch; execution authority; idempotency key; dispatch/result state; duplicate-risk; retry/verify/compensate/hold rule; owner; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 3 rule is reproducible but no production observation is claimed |
batch58-function-calling-m3-r6cancellation/reconnect | route=/compare/llm-function-calling; owner=function-calling; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=function-calling; scenario=cancellation/reconnect; execution authority; idempotency key; dispatch/result state; duplicate-risk; retry/verify/compensate/hold rule; owner; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen function-calling fixture requires an exact source, identity, and result receipt | UNTESTED — module 3 rule is reproducible but no production observation is claimed |
First-party citation: Google Gemini API model documentation. Verified 2026-09-02; missing or conflicting joins fail closed.
Method and limitations: this board exposes deterministic rules, first-party citations, and dated evidence identities. It does not invent volume, coverage, entitlement, retention, residency, quota, capacity, feature support, quality, price, reliability, or legal conclusions. Run the function-calling evidence flow →
