diff --git a/apodex/task_runner.py b/apodex/task_runner.py index 1ccb527..7df00f7 100644 --- a/apodex/task_runner.py +++ b/apodex/task_runner.py @@ -564,6 +564,7 @@ async def _run_native_workflow(self, task: str, profile: Any) -> None: stopped_by, answer_status=str(state.get("answer_status") or ""), answer_source=str(state.get("final_answer_source") or ""), + no_tool_is_complete=True, ) if complete: self.r.final( diff --git a/workflows/stateful_react_agent/_runtime.py b/workflows/stateful_react_agent/_runtime.py index cdefcc0..08e1337 100644 --- a/workflows/stateful_react_agent/_runtime.py +++ b/workflows/stateful_react_agent/_runtime.py @@ -116,7 +116,7 @@ def render_system_prompt_notes( # mid-token. Without the rescue that fragment IS the answer — which is how a run # whose visible output was "The shell ate my `" scored zero. _GRACEFUL_FINAL_STOP_REASONS = frozenset({ - "max_turns", "context_limit_reached", "response_truncated", + "max_turns", "context_limit_reached", "response_truncated", "no_tool", }) # Abnormal / infra terminations: the LLM endpoint exhausted retries