Why does the model fail to reason correctly after successful tool calls? #27106
-
|
Hi everyone, I'm building a production AI assistant for monitoring photovoltaic (PV) power plants using Open WebUI. Overall, I'm very happy with the tool calling system. In fact, I think it works extremely well. The model almost always: selects the correct tool, So the tool-calling part is excellent. However, I'm struggling with what happens after the tools return their results. Example Suppose the user asks: Is zero power production abnormal right now? The assistant correctly calls: get_current_time() The tools return something like: Current time: { Plant summary: { For a PV power plant, the reasoning seems straightforward: Current time is 00:56. Instead, the model often responds with something similar to: Zero production may indicate equipment failure, communication problems, bad weather, or other issues. Further investigation is recommended. Even though all the information required to reach the correct conclusion is already available. Even explicit reasoning instructions don't always help I even tried prompting the model like this: Before answering: Is the measurement taken during the day or night? The model sometimes spends several minutes "thinking", but still gives an overly cautious answer instead of following this simple reasoning chain. Current System Prompt Below is the system prompt I'm currently using. ========================
|
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
|
What you are seeing is expected for an 8B model, and the prompt currently makes the decision harder than it appears. The two tool results prove that tool orchestration completed. The remaining step is ordinary model inference over the returned messages. Qwen3:8B can make that inference sometimes, but it will not be production-deterministic, especially with a long prompt containing competing rules. There is also a real conflict in the prompt:
For a production monitoring system, do not delegate this deterministic rule to the LLM. Put it in a tool (or backend service) and return the derived state explicitly: {
"plant_timezone": "Asia/Tehran",
"local_time": "2026-07-16T00:56:16+03:30",
"solar_elevation_deg": -31.4,
"is_daylight": false,
"active_power_kw": 0,
"active_alarms": [],
"zero_power_classification": "expected_nighttime_zero",
"reason": "Sun is below the configured daylight threshold"
}Even better, expose one composite tool such as I would make the prompt much shorter and use a three-row decision table: Then test in this order:
So the practical answer is: Open WebUI appears to be doing its part if the result messages reach the follow-up request; the 8B model and the contradictory/overlong policy explain the unreliable synthesis. Moving the daylight and fault classification into the tool is the change that makes this reliable rather than merely more likely. |
Beta Was this translation helpful? Give feedback.
What you are seeing is expected for an 8B model, and the prompt currently makes the decision harder than it appears.
The two tool results prove that tool orchestration completed. The remaining step is ordinary model inference over the returned messages. Qwen3:8B can make that inference sometimes, but it will not be production-deterministic, especially with a long prompt containing competing rules.
There is also a real conflict in the prompt:
00:56strongly sugges…