Serving Fara with llama.cpp: use --reasoning-format none, or agent harnesses get empty content

#4
by T0mSIlver - opened

If you serve this model with llama-server and consume it from an agent harness (e.g. Magentic-UI's Fara web surfer), tool parsing can fail on every call, with the harness seeing an empty assistant message.

What happens: Fara writes its thoughts as plain text followed by a <tool_call>...</tool_call> block. It emits a <think> opening tag but never a closing </think>. With llama-server's default reasoning extraction (--reasoning-format unset/auto), the parser treats everything after <think> as reasoning β€” so the entire output (thoughts + tool call) lands in reasoning_content, and message.content comes back as "". Any client that reads only content (the OpenAI-standard field) gets an empty string. In Magentic-UI this surfaces as list index out of range. Retrying (1/3)... on every task.

Repro: identical chat completion request, same model (27B, llama.cpp b10107):

  • default reasoning format β†’ content: "", thoughts + <tool_call> block in the reasoning field, finish_reason: stop
  • --reasoning-format none β†’ full raw output in content, parses fine

Fix: launch llama-server with --reasoning-format none. If you have a router/proxy in front doing its own reasoning extraction, disable it there too. Note the raw output then starts with a stray unclosed <think> tag β€” harmless for parsers that split on <tool_call>, just cosmetic in displayed thoughts.

Sign up or log in to comment