Models & catalog

Open-source models with tool calling (measured)

Published 2026-08-12 · Updated 2026-10-20 · 6 min read

Tool calling is what turns a language model from a thing that answers into a thing that acts: it lets the model emit a structured request to call a function — get_weather, query_database, send_email — and then continue from the tool's result. Nearly every serious open-source model now supports it in principle. But “in principle” is the trap. Whether a model actually returns a clean tool_call with well-formed arguments depends on the serving stack as much as the weights: the same model that calls tools cleanly on one provider can be refused or mangle its arguments on another. That is why we flag a model as tool-capable only after a real call on the lane that serves it — models we have not measured yet carry no flag — and why you should verify it on the exact API you will use before building an agent on it.

What tool calling actually is

Tool calling (a.k.a. function calling) is the mechanism behind every agent framework. You declare the available functions — with names, descriptions, and JSON schemas for their arguments — and when the model decides it needs to act, it emits a structured tool_calls object instead of plain text. The runtime executes the function and feeds the result back; the model then continues. That loop — model → tool → result → model — is the entire foundation of agents, API integration with external services, and workflows that touch the outside world.

A model that cannot do this reliably cannot be an agent; it can only chat. So the question “which open-source model supports tool calling” is really “which models can I build an agent on, and which lanes actually serve that ability”.

It is a property of the serving stack

Here is the part that surprises people who only read model cards: tool calling is not fully determined by the weights. It depends on whether the serving framework and the provider have wired up the tool-calling path — the special tokens, the schema parser, the tool_calls response contract. A provider can refuse the feature, return it malformed, or simply not support it on a given deployment.

We have concrete evidence of this in our own routing. Qwen2.5-VL 72B is built for agent use — its model card says it “can reason and dynamically direct tools” — yet OVHcloud, which serves it for us, refused tool calls with a 400 (“feature 'tool calls' is not currently supported”, measured on 6 August 2026), so on our catalog it was live without tool calling (it has been paused since 20 October 2026, OVHcloud being unavailable to us). Pixtral 12B, the vision model Scaleway serves for us in its place, does answer tool calls (measured on 20 October 2026). That is why, on our catalog, toolCalling is a per-entry field measured by a real call on the lane that actually serves it, never assumed from the weights or copied between providers.

How to verify it in one call

You do not need a benchmark to know whether a lane serves tool calling. Run one small real call:

  1. Declare a trivial function — say get_weather(city) with a JSON schema.
  2. Send a prompt that clearly requires it, e.g. “What's the weather in Paris?”.
  3. Inspect the response: you want a valid tool_calls array with a well-formed arguments JSON object.

That is exactly the test behind every tool-calling flag in our catalog — our registry notes even record the city used (a get_weather on Paris for DeepSeek V4 Flash, Lyon for Llama 3.3 70B on OVHcloud). A clean, parseable tool_call with correct JSON is the difference between an agent that works and a string of text that happens to look like a function call.

Failure modes in practice

When tool calling is not actually wired through the serving stack, the failure is rarely a hard error — it is a subtle degradation that looks like the feature is working. Three patterns dominate.

The argument-as-string trap. A model returns a tool_call whose arguments is a quoted blob or a prose description instead of a parseable JSON object. The call “succeeds”; your parser, expecting JSON.parse, throws. This is the single most common production failure and the reason we check for well-formed JSON in every verification, not just for the presence of a tool_calls key.

The silent text fallback. When it genuinely cannot call the tool, a model may decide to answer in prose — “I don't have a weather tool” — instead of emitting a tool_call. In an automated loop that quietly halts the workflow rather than erroring, which is harder to catch than a crash.

The hallucinated tool name. The model invokes a function that was never declared, or one with the wrong signature. The runtime rejects it, and unless your agent re-sends the request, that single turn is lost.

Each of these is why a benchmark that checks “did it occasionally return a tool_call” is not enough. The useful test is the one we run per lane: a required call, a strict check on name and parseable arguments and correct values. That is the bar an agent actually depends on.

Which models we route with tool calling

25 of the 25 live models in our catalog are served with tool calling verified by a real call on their lane. It is a curated selection, not the whole market, and the exact list is public on the model catalog.

Among those verified models, on the EU-sovereign lane (18 models): Qwen3 235B, Qwen3.5 397B, GLM-5.2, DeepSeek V4 Flash 0731, Llama 3.3 70B, Qwen3.6 35B A3B, Qwen3 Coder 30B, Pixtral 12B, GPT-OSS 120B, Mistral Small 3.2 24B, Mistral Large 4, Apertus v1.5 70B, Qwen3.8 27B, GLM-5.3, DeepSeek V4.1 Flash, Gemma 4 26B, Kolibri 1 and Mistral Small 4 119B. On fast access, served by US companies (7 models): Kimi K3, Muse Spark 1.1, Muse Spark 1.2, GLM-5.3 Flash, Qwen3.8 Flash, DeepSeek V4 Pro and Gemma 3 27B. Qwen3.6 27B, Qwen3.5 9B and GPT-OSS 20B, measured with tool calling, have been temporarily paused since 20 October 2026 on the provider side (OVHcloud): not callable for now, and back unchanged once the route is restored.

All of them are billed the same way — per token from prepaid credit, no subscription — so building a small agent to test tool calling costs fractions of a euro. You do not commit to a contract to find out whether a model can use tools; you measure it for cents.

Why this matters for agents

For agentic work, tool calling is not a checkbox — it is the core loop, and the failure modes are specific:

  • Malformed arguments. A model that returns arguments as a string inside the wrapper, or with a schema mismatch, breaks every downstream parser.
  • Missing tool_calls. A model that answers in text when you asked for a tool call silently breaks the loop.
  • Lane-dependent behaviour. The same model can work on one provider and fail on another — exactly why capability must be verified on the lane you serve from.

So the practical advice mirrors our own process: pick the model, but verify tool calling on the provider lane you will actually use, with one cheap real call, before you wire an agent around it.

Tool calling on EU-sovereign infrastructure

Agentic workloads often touch sensitive data — a tool call can read an internal database or an inbox. If that data must stay under EU jurisdiction, you want a lane whose operator is outside non-EU control, not just a model that can call tools. All our tool-calling models that run on EU-owned operators are labeled sovereign; the fast-access lanes (Modal, OpenRouter) are under non-EU control and are labeled accordingly, never advertised as sovereign. A model labeled sovereign never leaves the sovereign lane unless you explicitly opt in, and every response says which provider served it (x-routed-provider, x-sovereign).

The combination you would actually want — open-source weights, verified tool calling, and EU-sovereign hosting — is exactly what the sovereign lane of the catalog exists to provide: one OpenAI-compatible call, a prepaid balance, and an EU-controlled inference provider. Calls are refused once the balance reaches zero (a call already running can take it slightly below; the difference comes off your next top-up). One caveat we state everywhere: the gateway itself runs on Vercel's Paris region, and Vercel is a US company — prompts and responses pass through it in transit and are never stored there (see our privacy policy).

FAQ

Which open-source models support tool calling?

Nearly every serious 2026 open-weight model supports it in principle, but support depends on the serving stack, not just the weights — the same model can work on one provider and be refused on another. In Frontière AI's catalog, 25 of the 25 live models are served with tool calling verified by a real call on the lane that serves them; we publish no flag for a model we have not measured. Qwen3.6 27B, Qwen3.5 9B and GPT-OSS 20B, measured too, are temporarily paused and not callable for now. The exact list is public on the model catalog.

Is tool calling the same as function calling?

Yes — tool calling and function calling are the same mechanism, the structured request a model emits to invoke an external function. It is the foundation of agents and AI assistants: the model requests a call, the runtime executes it, and the model continues from the result.

Do I need tool calling to build an AI agent?

Yes, for any agent that touches the outside world. Without a reliable tool_call contract, a model can only chat — it cannot query a database, call an API, or act on your behalf. Verifying tool calling on your actual provider lane is the first step of agent work.

Why would tool calling work on one provider and not another?

Because tool calling is wired into the serving stack — special tokens, schema parsing and the tool_calls response contract. A provider can refuse, mangle or skip the feature even for a capable model. That is why we flag a model as tool-capable only after a real call on the lane that serves it: we have seen a provider answer tool calls with a 400 for a model whose card presents it as agent-capable (Qwen2.5-VL 72B on OVHcloud).

Can I test tool calling with open-source models cheaply?

Yes. Frontière AI bills per token from prepaid credit — no subscription, no trial, top-up from €10, and calls are refused once the balance reaches zero. A single small real call with one declared function is all you need to verify tool calling on a lane, and it costs a fraction of a euro.

Do reasoning models support tool calling too?

Yes — several of the strongest reasoning models also route tool calling. On our catalog, a tool-calling flag always comes from a real call on the lane that serves the model, and reasoning models are flagged as such on their model page. Because reasoning burns output tokens while thinking, a tool-calling reasoning agent costs more per turn at the output rate — worth checking on your own workload with one cheap call.

How do I build a reliable agent loop around tool calling?

Start with a strict contract check: a required call, a verifiable tool name, parseable JSON arguments. Then handle the three failure modes — argument-as-string, silent text fallback, hallucinated tool name — by validating the response and re-sending on a malformed turn. Verifying tool calling on your actual provider lane first is the cheapest insurance.

What is the difference between tool calling and structured output?

Structured output forces the model to return JSON in a given schema. Tool calling goes further: the model emits a request to invoke a declared function, the runtime executes it, and the result feeds back into the model. Structured output is one-way formatting; tool calling is a loop that lets the model act and observe the outcome.

Does tool calling increase latency or cost?

Marginally. A tool call requires at least a second round-trip to execute the function and feed the result back, so the wall-clock time is a couple of calls, not one. Cost is negligible for the tool tokens themselves; for reasoning models the thinking tokens on each turn dominate. Neither is a reason to avoid tool calling if your workflow needs to act.

Can I use tools with models that do not natively support them?

Sometimes, via a sidecar or prompt-engineering trick, but it is fragile: the model may return prose instead of a structured call. If tool calling matters to you, choose a model whose serving lane verifiably supports it, and confirm with one real call — that is the measurement behind every tool-calling flag on our catalog.

Ready to try it?

Create an account and call any model in the catalog in minutes.

Create an account