use super::truncate::smart_truncate;
use crate::chunker::RlmChunker;
use crate::result::RlmResult;
use crate::stats::RlmStats;
pub fn fallback_result(
output: &str,
tool_id: &str,
tool_args: &serde_json::Value,
input_tokens: usize,
) -> RlmResult {
let (truncated, _, _) = smart_truncate(output, tool_id, tool_args, 8000);
let out_tok = RlmChunker::estimate_tokens(&truncated);
RlmResult {
processed: format!("[RLM processing failed, showing truncated output]\n\n{truncated}"),
stats: RlmStats {
input_tokens,
output_tokens: out_tok,
iterations: 0,
subcalls: 0,
elapsed_ms: 0,
compression_ratio: if out_tok == 0 {
0.0
} else {
out_tok as f64 / input_tokens as f64
},
},
success: false,
error: Some("Model call failed".into()),
trace: None,
trace_id: None,
}
}
pub fn enhanced_fallback(
output: &str,
tool_id: &str,
tool_args: &serde_json::Value,
input_tokens: usize,
) -> String {
if tool_id == "session_context" {
super::fallback_context::session_context_fallback(output, input_tokens)
} else {
let (truncated, _, _) = smart_truncate(output, tool_id, tool_args, 8000);
format!(
"## Fallback Summary\n*RLM processing failed - showing structured excerpt*\n\n{truncated}"
)
}
}