← Back to all comparisons

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.

Verified 2026-09-02 source

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 IDExact identity and evidence fieldsResultState
batch58-function-calling-m1-r1
one 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 1 rule is reproducible but no production observation is claimed
batch58-function-calling-m1-r2
forced 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 1 rule is reproducible but no production observation is claimed
batch58-function-calling-m1-r3
auto 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 1 rule is reproducible but no production observation is claimed
batch58-function-calling-m1-r4
parallel 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 1 rule is reproducible but no production observation is claimed
batch58-function-calling-m1-r5
built-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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 1 rule is reproducible but no production observation is claimed
batch58-function-calling-m1-r6
unsupported-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-02Unavailable — 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 IDExact identity and evidence fieldsResultState
batch58-function-calling-m2-r1
successful 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 2 rule is reproducible but no production observation is claimed
batch58-function-calling-m2-r2
malformed 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 2 rule is reproducible but no production observation is claimed
batch58-function-calling-m2-r3
unknown 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-02Unavailable — exact function-calling evidence join is not closed for “unknown tool”FAIL CLOSED — manual, probe, or source evidence required
batch58-function-calling-m2-r4
tool 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 2 rule is reproducible but no production observation is claimed
batch58-function-calling-m2-r5
out-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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 2 rule is reproducible but no production observation is claimed
batch58-function-calling-m2-r6
continuation 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — 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 IDExact identity and evidence fieldsResultState
batch58-function-calling-m3-r1
read-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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 3 rule is reproducible but no production observation is claimed
batch58-function-calling-m3-r2
idempotent 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 3 rule is reproducible but no production observation is claimed
batch58-function-calling-m3-r3
non-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-02Unavailable — exact function-calling evidence join is not closed for “non-idempotent purchase”FAIL CLOSED — manual, probe, or source evidence required
batch58-function-calling-m3-r4
timeout 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 3 rule is reproducible but no production observation is claimed
batch58-function-calling-m3-r5
timeout 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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — module 3 rule is reproducible but no production observation is claimed
batch58-function-calling-m3-r6
cancellation/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-02Unavailable — frozen function-calling fixture requires an exact source, identity, and result receiptUNTESTED — 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 →