[package]
edition = "2024"
rust-version = "1.86"
name = "pmetal"
version = "0.3.13"
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "High-performance LLM fine-tuning framework for Apple Silicon"
readme = "README.md"
keywords = [
"machine-learning",
"llm",
"fine-tuning",
"apple-silicon",
"mlx",
]
categories = [
"science",
"algorithms",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/epistates/pmetal"
resolver = "2"
[features]
ane = [
"metal",
"pmetal-metal/ane",
"pmetal-core/ane",
"pmetal-trainer?/ane",
"pmetal-models?/ane",
]
cli = [
"full",
"dep:clap",
"dep:tokio",
"dep:tracing-subscriber",
"dep:serde",
"dep:serde_yaml",
"dep:indicatif",
"dep:anyhow",
"dep:safetensors",
"dep:dirs",
"dep:chrono",
"dep:parquet",
"dep:arrow-array",
"dep:arrow-json",
"dep:rand",
"dep:regex",
"dep:tempfile",
"dep:tokenizers",
"dep:walkdir",
"dep:flate2",
"dep:libc",
"dep:reqwest",
"dep:sha2",
]
core = ["dep:pmetal-core"]
dashboard = [
"cli",
"dep:ratatui",
"dep:crossterm",
"dep:futures",
"dep:tokio-util",
]
data = [
"dep:pmetal-data",
"core",
"mlx",
]
default = [
"cli",
"dashboard",
"ane",
]
distill = [
"dep:pmetal-distill",
"core",
"mlx",
"metal",
]
distributed = [
"dep:pmetal-distributed",
"pmetal-trainer?/distributed",
]
full = [
"core",
"gguf",
"metal",
"hub",
"distributed",
"mhc",
"mlx",
"models",
"lora",
"data",
"trainer",
"distill",
"merge",
"vocoder",
"ane",
]
gguf = [
"dep:pmetal-gguf",
"core",
]
hub = [
"dep:pmetal-hub",
"core",
]
lora = [
"dep:pmetal-lora",
"core",
"gguf",
"metal",
"mlx",
"models",
]
lora-metal-fused = [
"lora",
"pmetal-lora/metal-fused",
]
merge = [
"dep:pmetal-merge",
"core",
"mlx",
]
metal = [
"dep:pmetal-metal",
"core",
]
mhc = [
"dep:pmetal-mhc",
"core",
"metal",
]
mlx = [
"dep:pmetal-mlx",
"dep:mlx-rs",
"core",
"metal",
]
models = [
"dep:pmetal-models",
"core",
"gguf",
"metal",
"mlx",
]
serve = [
"cli",
"dep:pmetal-serve",
]
trainer = [
"dep:pmetal-trainer",
"core",
"mlx",
"metal",
"lora",
"models",
"data",
"distill",
]
vocoder = [
"dep:pmetal-vocoder",
"core",
"mlx",
]
[lib]
name = "pmetal"
path = "src/lib.rs"
[[bin]]
name = "pmetal"
path = "src/main.rs"
required-features = ["cli"]
[[example]]
name = "device_info"
path = "examples/device_info.rs"
[[example]]
name = "finetune_ane"
path = "examples/finetune_ane.rs"
[[example]]
name = "finetune_manual"
path = "examples/finetune_manual.rs"
required-features = [
"data",
"lora",
"trainer",
]
[[example]]
name = "inference"
path = "examples/inference.rs"
required-features = [
"hub",
"data",
"models",
]
[[example]]
name = "inference_ane"
path = "examples/inference_ane.rs"
required-features = [
"hub",
"data",
"models",
"ane",
]
[dependencies.anyhow]
version = "1.0"
optional = true
[dependencies.arrow-array]
version = "58"
optional = true
[dependencies.arrow-json]
version = "58"
optional = true
[dependencies.chrono]
version = "0.4"
optional = true
[dependencies.clap]
version = "4"
features = ["derive"]
optional = true
[dependencies.crossterm]
version = "0.29"
features = ["event-stream"]
optional = true
[dependencies.dirs]
version = "6"
optional = true
[dependencies.flate2]
version = "1"
optional = true
[dependencies.futures]
version = "0.3"
optional = true
[dependencies.indicatif]
version = "0.18"
optional = true
[dependencies.libc]
version = "0.2"
optional = true
[dependencies.mlx-rs]
version = "0.25.8"
features = ["safetensors"]
optional = true
package = "pmetal-mlx-rs"
[dependencies.parquet]
version = "58"
features = ["arrow"]
optional = true
[dependencies.pmetal-core]
version = "0.3.12"
optional = true
default-features = false
[dependencies.pmetal-data]
version = "0.3.12"
optional = true
[dependencies.pmetal-distill]
version = "0.3.12"
optional = true
[dependencies.pmetal-distributed]
version = "0.3.12"
optional = true
[dependencies.pmetal-gguf]
version = "0.3.12"
optional = true
[dependencies.pmetal-hub]
version = "0.3.12"
optional = true
[dependencies.pmetal-lora]
version = "0.3.12"
optional = true
[dependencies.pmetal-merge]
version = "0.3.12"
optional = true
[dependencies.pmetal-metal]
version = "0.3.12"
optional = true
default-features = false
[dependencies.pmetal-mhc]
version = "0.3.12"
optional = true
[dependencies.pmetal-mlx]
version = "0.3.12"
optional = true
[dependencies.pmetal-models]
version = "0.3.12"
optional = true
[dependencies.pmetal-serve]
version = "0.3.12"
optional = true
[dependencies.pmetal-trainer]
version = "0.3.12"
optional = true
[dependencies.pmetal-vocoder]
version = "0.3.12"
optional = true
[dependencies.rand]
version = "0.10"
optional = true
[dependencies.ratatui]
version = "0.30"
optional = true
[dependencies.regex]
version = "1"
optional = true
[dependencies.reqwest]
version = "0.13"
features = [
"json",
"multipart",
"stream",
"rustls",
]
optional = true
[dependencies.safetensors]
version = "0.7"
optional = true
[dependencies.serde]
version = "1.0"
features = ["derive"]
optional = true
[dependencies.serde_json]
version = "1.0"
[dependencies.serde_yaml]
version = "0.10"
optional = true
package = "serde_yaml_ng"
[dependencies.sha2]
version = "0.10"
optional = true
[dependencies.tempfile]
version = "3"
optional = true
[dependencies.tokenizers]
version = "0.22"
optional = true
[dependencies.tokio]
version = "1.50"
features = ["full"]
optional = true
[dependencies.tokio-util]
version = "0.7"
features = ["rt"]
optional = true
[dependencies.tracing]
version = "0.1"
[dependencies.tracing-subscriber]
version = "0.3"
features = ["env-filter"]
optional = true
[dependencies.walkdir]
version = "2"
optional = true
[dev-dependencies.tracing-subscriber]
version = "0.3"
features = ["env-filter"]
[build-dependencies.flate2]
version = "1"
[lints.clippy]
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
must_use_candidate = "allow"
[lints.clippy.all]
level = "warn"
priority = -1
[lints.rust]
unsafe_code = "deny"
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = ["cfg(kani)"]