use crate::episode::{Episode, ExecutionStep};
use anyhow::Result;
#[must_use]
pub fn is_decision_action(action: &str) -> bool {
let action_lower = action.to_lowercase();
action_lower.contains("if ")
|| action_lower.contains("when ")
|| action_lower.contains("check ")
|| action_lower.contains("verify ")
|| action_lower.contains("validate ")
|| action_lower.contains("ensure ")
|| action_lower.starts_with("decide ")
|| action_lower.starts_with("determine ")
}
pub fn extract_condition(episode: &Episode, step: &ExecutionStep, _idx: usize) -> Result<String> {
let mut condition_parts = Vec::new();
if !episode.context.domain.is_empty() {
condition_parts.push(format!("In {} domain", episode.context.domain));
}
if let Some(lang) = &episode.context.language {
condition_parts.push(format!("using {lang}"));
}
condition_parts.push(step.action.clone());
Ok(condition_parts.join(", "))
}
pub fn extract_action(episode: &Episode, step: &ExecutionStep, idx: usize) -> Result<String> {
if let Some(next_step) = episode.steps.get(idx + 1) {
Ok(format!("Use {} to {}", next_step.tool, next_step.action))
} else {
Ok(format!("Apply {}", step.tool))
}
}