| Crates.io | torsh-package |
| lib.rs | torsh-package |
| version | 0.1.0-alpha.2 |
| created_at | 2025-09-30 03:13:10.397375+00 |
| updated_at | 2025-12-22 05:14:05.111543+00 |
| description | Model packaging and distribution utilities for ToRSh |
| homepage | https://github.com/cool-japan/torsh/ |
| repository | https://github.com/cool-japan/torsh/ |
| max_upload_size | |
| id | 1860511 |
| size | 1,109,675 |
Model packaging and distribution system for the ToRSh deep learning framework.
torsh-package provides functionality similar to PyTorch's torch.package for creating self-contained model packages that include code, weights, dependencies, and metadata. This enables easy model distribution, deployment, and reproducibility across different environments.
exporter: Package creation and export functionalityimporter: Package loading and import functionalitymanifest: Package metadata and dependency managementresources: Resource storage and retrieval systemversion: Package versioning and compatibilityuse torsh_package::prelude::*;
use torsh_nn::Module;
// Create package exporter
let config = ExportConfig {
include_code: true,
include_weights: true,
compression: CompressionType::Gzip,
metadata: PackageMetadata::default(),
};
let mut exporter = PackageExporter::new(config);
// Add model to package
exporter.add_model("my_model", &model)?;
// Add additional resources
exporter.add_resource("config.json", ResourceType::Json, config_data)?;
exporter.add_resource("preprocessing.py", ResourceType::Python, preprocess_code)?;
// Export package
exporter.export_to_file("my_model_package.torsh")?;
use torsh_package::prelude::*;
// Load package
let package = Package::load("my_model_package.torsh")?;
// Get model from package
let model = package.get_model("my_model")?;
// Get additional resources
let config = package.get_resource("config.json")?;
let preprocess_code = package.get_resource("preprocessing.py")?;
// Check package metadata
println!("Package: {} v{}", package.name(), package.version());
println!("Created: {}", package.created_at());
println!("Dependencies: {:?}", package.dependencies());
use torsh_package::prelude::*;
// Load package without extracting
let package_info = PackageImporter::inspect("my_model_package.torsh")?;
println!("Package manifest:");
println!(" Name: {}", package_info.manifest.name);
println!(" Version: {}", package_info.manifest.version);
println!(" Models: {:?}", package_info.manifest.models);
println!(" Resources: {:?}", package_info.manifest.resources);
println!(" Size: {} bytes", package_info.size);
use torsh_package::prelude::*;
// Check version compatibility
let package_version = PackageVersion::parse("1.2.3")?;
let required_version = PackageVersion::parse(">=1.0.0,<2.0.0")?;
if package_version.satisfies(&required_version) {
println!("Package version is compatible");
} else {
println!("Package version incompatibility detected");
}
// Update package
let mut updater = PackageUpdater::new("my_model_package.torsh")?;
updater.update_model("my_model", &new_model)?;
updater.increment_version(VersionIncrement::Patch)?;
updater.save("my_model_package_v1.2.4.torsh")?;
use torsh_package::prelude::*;
// Supported resource types
let resources = vec![
("model.safetensors", ResourceType::Model),
("config.json", ResourceType::Json),
("tokenizer.json", ResourceType::Tokenizer),
("preprocessing.py", ResourceType::Python),
("data.csv", ResourceType::Data),
("image.png", ResourceType::Binary),
];
for (name, resource_type) in resources {
exporter.add_resource(name, resource_type, data)?;
}
The torsh-package format uses a structured archive containing:
package.torsh
├── manifest.json # Package metadata and dependency info
├── models/ # Model weights and architectures
│ └── my_model.safetensors
├── code/ # Python/Rust code files
│ └── preprocessing.py
├── resources/ # Additional resources
│ ├── config.json
│ └── tokenizer.json
└── metadata/ # Version and compatibility info
└── package.info
use torsh_package::prelude::*;
// Create incremental update
let patch = PackagePatch::new("my_model_package.torsh")?
.update_model("my_model", &updated_model)?
.add_resource("new_config.json", ResourceType::Json, new_config)?
.remove_resource("old_file.txt")?;
// Apply patch
patch.save_as_patch("update_v1.2.4.patch")?;
// Apply patch to existing package
let updated_package = Package::load("my_model_package.torsh")?
.apply_patch("update_v1.2.4.patch")?;
use torsh_package::prelude::*;
// Specify dependencies
let dependencies = Dependencies::new()
.add_torsh_version(">=0.1.0,<0.2.0")?
.add_python_package("numpy", ">=1.20.0")?
.add_python_package("transformers", ">=4.20.0")?
.add_system_requirement("cuda", ">=11.0")?;
exporter.set_dependencies(dependencies)?;
torsh-core: Core types and error handlingtorsh-nn: Neural network modulesserde: Serialization supportzip: Archive compression and extractionchrono: Date and time handlingsemver: Semantic versioningtorsh-package is optimized for:
See the examples/ directory for: