huggingface/smolagents · error · AgentExecutionError

If you want to return an answer, please do not perform any o

Error message

If you want to return an answer, please do not perform any other tool calls than the final answer tool call!

What it means

In ToolCallingAgent._step_stream, once a tool output flagged is_final_answer appears, the model must have issued exactly one tool call — the final_answer call. If the message contains additional tool calls alongside final_answer, the agent raises AgentExecutionError because mixing final answers with other calls makes the run's result ambiguous.

Source

Thrown at src/smolagents/agents.py:1341

            memory_step.token_usage = chat_message.token_usage
        except Exception as e:
            raise AgentGenerationError(f"Error while generating output:\n{e}", self.logger) from e

        if chat_message.tool_calls is None or len(chat_message.tool_calls) == 0:
            try:
                chat_message = self.model.parse_tool_calls(chat_message)
            except Exception as e:
                raise AgentParsingError(f"Error while parsing tool call from model output: {e}", self.logger)
        else:
            for tool_call in chat_message.tool_calls:
                tool_call.function.arguments = parse_json_if_needed(tool_call.function.arguments)
        final_answer, got_final_answer = None, False
        for output in self.process_tool_calls(chat_message, memory_step):
            yield output
            if isinstance(output, ToolOutput):
                if output.is_final_answer:
                    if len(chat_message.tool_calls) > 1:
                        raise AgentExecutionError(
                            "If you want to return an answer, please do not perform any other tool calls than the final answer tool call!",
                            self.logger,
                        )
                    if got_final_answer:
                        raise AgentToolExecutionError(
                            "You returned multiple final answers. Please return only one single final answer!",
                            self.logger,
                        )
                    final_answer = output.output
                    got_final_answer = True

                    # Manage state variables
                    if isinstance(final_answer, str) and final_answer in self.state.keys():
                        final_answer = self.state[final_answer]
        yield ActionOutput(
            output=final_answer,
            is_final_answer=got_final_answer,
        )

View on GitHub (pinned to 30bb116109)

Solutions

  1. Retry the run or step — models usually emit a single final_answer call on resampling.
  2. Use a stronger/tool-calling-native model that respects the single-final-answer contract.
  3. Clarify the system prompt/prompt template to forbid combining final_answer with other tool calls.
Defensive patterns

Strategy: retry

Try / catch

from smolagents.exceptions import AgentExecutionError

try:
    result = agent.run(task)
except AgentExecutionError as e:
    if 'final answer tool call' in str(e):
        result = agent.run(task + '\nReturn the answer using only the final_answer tool.')
    else:
        raise

Prevention

When it happens

Trigger: The model returns multiple tool_calls in one message where at least one is final_answer (e.g. final_answer(...) plus a search(...) call in the same response), during agent.run with a ToolCallingAgent.

Common situations: Smaller models that 'hedge' by calling a tool and answering at once; prompts encouraging parallel tool use; structured-output configs that force multiple tool call slots.

Related errors


AI-assisted analysis of huggingface/smolagents@30bb116109 (2026-08-28). Data as JSON: /api/errors/388dfbaf8e97a556. Report an issue: GitHub.