Skip to content
AIGPUPython

Local LLM Emits Tool Calls as Plain Text Instead of Structured Arguments

A tool-enabled client displays JSON-like text instead of invoking its function dispatcher. This Local Function Calling guide explains how to isolate the responsible component and confirm a stable result.

Quick Answer

Start by doing this: Run a trivial calculator tool against a model explicitly advertised as tool-capable using the correct chat endpoint. If that identifies the affected layer, choose the model's supported tool-call template and client schema; keep strict JSON parsing and human confirmation for side effects. Test the original action again before changing anything else.

A successful connection or installation message can be misleading when the actual operation still fails. In Local Function Calling, the specific symptom is this: A tool-enabled client displays JSON-like text instead of invoking its function dispatcher. The practical objective is to restore the affected feature, determine the actual failing layer, and confirm the result without sacrificing data or account protection.

Recognize the pattern

A tool-enabled client displays JSON-like text instead of invoking its function dispatcher. The key distinction is whether the failure happens before the service, game, application or device becomes available, or only when the user performs the specific action. Run a trivial calculator tool against a model explicitly advertised as tool-capable using the correct chat endpoint.

  • Exact observation: A tool-enabled client displays JSON-like text instead of invoking its function dispatcher.
  • First useful comparison: Run a trivial calculator tool against a model explicitly advertised as tool-capable using the correct chat endpoint.
  • Expected healthy state: The client receives a structured tool_calls object and invokes only the declared read-only test function.

Keep a short timeline: when did the behavior start, what software or network condition changed immediately beforehand, and is the failure consistent on every attempt? A successful unrelated feature should not be treated as proof that the affected layer is healthy.

How to distinguish the causes

Model chat template, tool schema and client API mode may not support structured tool calls together. This is a hypothesis that should be confirmed through the comparison above. A model that downloads successfully is not necessarily compatible with a tokenizer, runtime, GPU or API mode. Keep data and model artifacts separate so experiments do not overwrite production indexes or checkpoints.

Small reproducible inputs are valuable: fix the random seed where supported, preserve the exact model hash and run a single request before enabling batching. For retrieval failures, separate the search layer from the final generated answer If the test result contradicts the suspected cause, do not push forward with a broad reset. Return to the recorded baseline and investigate the next boundary instead.

Safe starting point

Preserve the known working model, environment lockfile, workflow and any custom prompt templates. Capture VRAM capacity, model architecture, device selection and the exact failing phase before upgrading dependencies.

  1. Run a trivial calculator tool against a model explicitly advertised as tool-capable using the correct chat endpoint.
  2. Compare raw assistant messages, finish reasons and tool_calls fields; verify the server isn’t using completion-only mode.
  3. Note the original settings and capture any relevant error identifier without copying passwords or session tokens.

Do not begin with formatting a disk, deleting a player profile, disabling secure boot, bypassing TLS checks or running registry cleaners. The controlled tests below are designed to find the narrow failure before considering any operation that could affect unrelated data.

Step-by-Step Troubleshooting

Choose Beginner for reversible checks or Advanced for focused diagnostics.

Capture the exact failure in Local Function Calling

A tool-enabled client displays JSON-like text instead of invoking its function dispatcher. Record the product model, application build and time of failure. Run a trivial calculator tool against a model explicitly advertised as tool-capable using the correct chat endpoint. Use a screenshot or a non-sensitive log excerpt as the baseline; do not attempt three repairs at once.

Run the lowest-risk comparison

Run a trivial calculator tool against a model explicitly advertised as tool-capable using the correct chat endpoint. Compare the outcome with a known-working account, device, cable or network only where it is permitted and relevant. A model that downloads successfully is not necessarily compatible with a tokenizer, runtime, GPU or API mode. Keep data and model artifacts separate so experiments do not overwrite production indexes or checkpoints Keep the original settings written down so each test is reversible.

Apply a supported, targeted correction

Choose the model's supported tool-call template and client schema; keep strict JSON parsing and human confirmation for side effects. Confirm that the changed component actually belongs to Local Function Calling and is supported by the installed OS and hardware. Restart only the necessary app or device, and leave unrelated security settings intact.

Check the original workflow again

The client receives a structured tool_calls object and invokes only the declared read-only test function. Repeat the exact action that failed originally, not a different synthetic test. Record whether the problem is resolved completely, only on one connection, or only after a restart; that distinction determines the next action.

Diagnostic decision table

Use the following evidence map after completing the Beginner checks. Each row provides an interpretation, not an instruction to apply every possible fix.

Layer Evidence to compare Next decision
Model/runtime compatibility Run a trivial calculator tool against a model explicitly advertised as tool-capable using the correct chat endpoint. Investigate the local setup or initial prerequisite.
Device memory or environment Model chat template, tool schema and client API mode may not support structured tool calls together. Compare the failing component with a known working control.
API or output validation Compare raw assistant messages, finish reasons and tool_calls fields; verify the server isn’t using completion-only mode. Keep only observations supported by a log or repeatable test.

Compare raw assistant messages, finish reasons and tool_calls fields; verify the server isn’t using completion-only mode. If the evidence points away from this layer, return to the previous row. The process is intentionally sequential: a configuration change only has diagnostic value when the prior state is recorded.

Do not do these things

  • Avoid changing unrelated layers. Test a minimal prompt or tiny input first. Memory pressure, tokenizer faults, and API serialization issues usually become easier to distinguish when you remove extra models, agents and extensions
  • Do not confuse a temporary workaround with a fix. Model chat template, tool schema and client API mode may not support structured tool calls together.
  • Do not erase the evidence. Keep the original settings and note whether a tool-enabled client displays JSON-like text instead of invoking its function dispatcher.

Decision rule: If the proposed change does not produce the expected result in a repeatable test, restore the previous configuration. A problem that remains identical needs better evidence, not a larger reset.

Verify in practice

The client receives a structured tool_calls object and invokes only the declared read-only test function. Use the same device, title, workload or service path on which the failure was observed. Compare the outcome directly with the original screenshot or error log, and repeat the test twice if the failure was intermittent.

For data-processing systems, preserve a set of representative inputs and expected outputs. Confirm both functional correctness and resource use before restoring a production workload If one test passes but the underlying account, certificate, performance metric or data synchronization is still wrong, mark the result as partial and continue with the Advanced checks rather than claiming a complete repair.

Solution Checklist

0/12 completed

What to do next

Compare raw assistant messages, finish reasons and tool_calls fields; verify the server isn’t using completion-only mode. If Local Function Calling still fails the original operation, revert temporary test settings that did not help and capture the precise evidence for the vendor or administrator. Include what worked, what failed and whether the comparison was conducted on the same build and connection.

Do not keep repeating account resets, firmware flashes or driver removals when there is no measurable improvement. For unsupported hardware, managed work devices or possible physical failure, ask the relevant vendor or qualified technician to confirm the supported route forward.

Reduce repeat failures

Choose the model’s supported tool-call template and client schema; keep strict JSON parsing and human confirmation for side effects. Keep the exact working driver, firmware version, app build or policy setting documented. Future changes should be tested against the same baseline, especially after operating-system, network or application updates.

Did this solution fix your problem?

Optional feedback helps us improve this guide. Never send private data.

Can't find your answer?

Tell our editors which problem needs a guide. Do not include passwords, API keys, email addresses, private URLs, or full error logs.

Analyze Error

Paste an error message to identify its likely category. Analysis takes place in your browser; only a short error category will be used if you choose to search.

Do not paste passwords, tokens, private URLs or full logs.