pub mod cli;
pub mod compare;
pub mod config;
pub mod dataset;
pub mod dedup;
pub mod events;
pub mod exec;
pub mod export;
pub mod history;
pub mod hub;
pub mod llm;
pub mod logging;
pub mod metrics;
pub mod pipeline;
pub mod pricing;
pub mod project_format;
pub mod project_lock;
pub mod prompts;
pub mod retry;
pub mod runpod;
pub mod runs;
pub mod secrets;
pub mod system;
pub mod train;
pub mod tui;
pub mod update;
#[cfg(test)]
pub(crate) mod test_support {
pub(crate) static SIGNALS: tokio::sync::Mutex<()> = tokio::sync::Mutex::const_new(());
pub(crate) fn make_executable(path: &std::path::Path) -> std::io::Result<()> {
use std::os::unix::fs::PermissionsExt as _;
std::fs::set_permissions(path, std::fs::Permissions::from_mode(0o755))
}
pub(crate) fn sh_available() -> bool {
std::process::Command::new("sh")
.arg("-c")
.arg(":")
.status()
.is_ok_and(|status| status.success())
}
pub(crate) fn tools_available() -> bool {
sh_available()
&& ["python3", "tar"].iter().all(|program| {
std::process::Command::new(program)
.arg("--version")
.output()
.is_ok_and(|output| output.status.success())
})
}
pub(crate) fn tar(
dir: &std::path::Path,
archive: &std::path::Path,
top: &str,
) -> Result<(), Box<dyn std::error::Error>> {
let status = std::process::Command::new("tar")
.arg("-czf")
.arg(archive)
.arg("-C")
.arg(dir)
.arg(top)
.status()?;
if status.success() {
Ok(())
} else {
Err(format!("tar failed: {status}").into())
}
}
pub(crate) fn text(output: &std::process::Output) -> String {
format!(
"{}{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
)
}
}