Fireworks.ai's Kimi K2.5 model was silently killing task output. The Julius Agent's tool loop executed successfully, all tool calls completed, but the final response returned blank. The culprit: a single line of Rust, `let final_text = response.text.clone().unwrap_or_default()`, which trusted the model's final `response.text` field. Kimi K2.5 sends a `FinishReason::Stop` signal with that field empty after tool execution, so the system returned an empty string every time.

The fix is a fallback to `ConversationState`. When `response.text` is empty at the stop state, the code now calls `last_assistant_text()` to pull the most recent assistant message from the conversation history, which was already stored correctly throughout the loop. No data was ever lost. It just wasn't being read. This fix shipped alongside a prior change that raised `max_turns` from 10 to 50, making the tool loop meaningfully more durable for complex multi-step tasks.

Read the full write-up for the breakdown of why the conversation history is the more reliable source of truth than the model's finish payload, and what it reveals about how different providers implement `FinishReason::Stop`. If you're building agentic systems against multiple LLM providers, the model variations section is the part you actually need.

[READ ORIGINAL →]