use std::collections::HashMap;
use std::path::Path;
use crate::error::FlameError;
use crate::io_safetensors::save_flame_model_safetensors;
use crate::model::FlameModel;
pub fn convert_npy_to_safetensors(
npy_dir: &Path,
safetensors_path: &Path,
) -> Result<(), FlameError> {
tracing::info!(
"Converting FLAME model from NPY ({}) to safetensors ({})",
npy_dir.display(),
safetensors_path.display()
);
let model = FlameModel::load(npy_dir)?;
let mut metadata = HashMap::new();
metadata.insert("format".to_string(), "FLAME".to_string());
metadata.insert("version".to_string(), "2020".to_string());
metadata.insert("converted_from".to_string(), npy_dir.display().to_string());
metadata.insert("conversion_tool".to_string(), "oxigaf-flame".to_string());
metadata.insert("date".to_string(), chrono::Utc::now().to_rfc3339());
save_flame_model_safetensors(&model, safetensors_path, Some(&metadata))?;
tracing::info!("Successfully converted FLAME model to safetensors format");
Ok(())
}
#[allow(clippy::implicit_hasher)]
pub fn convert_npy_to_safetensors_with_metadata(
npy_dir: &Path,
safetensors_path: &Path,
metadata: &HashMap<String, String>,
) -> Result<(), FlameError> {
tracing::info!(
"Converting FLAME model from NPY ({}) to safetensors ({})",
npy_dir.display(),
safetensors_path.display()
);
let model = FlameModel::load(npy_dir)?;
save_flame_model_safetensors(&model, safetensors_path, Some(metadata))?;
tracing::info!("Successfully converted FLAME model to safetensors format");
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use std::fs;
use tempfile::TempDir;
#[test]
fn test_conversion_interface() {
let temp_dir = TempDir::new().expect("test: temp dir creation should succeed");
let npy_dir = temp_dir.path().join("npy");
let safetensors_path = temp_dir.path().join("model.safetensors");
fs::create_dir(&npy_dir).expect("test: dir creation should succeed");
let result = convert_npy_to_safetensors(&npy_dir, &safetensors_path);
assert!(result.is_err());
}
#[test]
fn test_conversion_with_metadata() {
let temp_dir = TempDir::new().expect("test: temp dir creation should succeed");
let npy_dir = temp_dir.path().join("npy");
let safetensors_path = temp_dir.path().join("model.safetensors");
fs::create_dir(&npy_dir).expect("test: dir creation should succeed");
let mut metadata = HashMap::new();
metadata.insert("test".to_string(), "value".to_string());
let result =
convert_npy_to_safetensors_with_metadata(&npy_dir, &safetensors_path, &metadata);
assert!(result.is_err());
}
}