Files
ml/Cargo.toml
T
Hanzo Dev 4eb006e5ba hanzo-research: Rust /v1/research client for self-logging kernel benchmarks
Mirror the Python hanzo_research SDK verbs + semantics:
experiment(hypothesis, predict) -> log(text) -> conclude(verdict, because, value),
plus record / snapshot / report and query / totals. The Verdict enum
(Proven|Refuted|Inconclusive) rejects any other value at compile time; a
refutation is a first-class sealed result. A stated hypothesis with no verdict
seals Inconclusive, never silently a proof.

Zero-config provenance: the first entry method posts the run in-flight and stamps
git sha/branch/dirty, the commit narrative since the experiment's last recorded
run, the crate versions resolved from Cargo.lock, and the host. The caller
supplies none. Records serialize to the identical wire shape as the Python SDK,
proven by an equality test against the golden shape.

Per-org Bearer auth only (no client-forged identity headers); the api key is
redacted from Debug; query values are percent-encoded; artifacts carry a client
sha256 the server verifies.

Deps stay within the resolved lock (ureq 2.12, base64 0.22, sha2 0.10, serde);
hex and percent-encoding are hand-rolled. Blocking client for a bench tool.

Tests: shape identity vs Python golden, running-record empty-log, finish
defaults, attempt shape, content-addressing, key redaction, and an end-to-end
mock-server run of a kernel-perf refutation. Example: examples/kernel_perf.rs.
2026-07-22 22:25:34 -07:00

142 lines
4.5 KiB
TOML

[workspace]
# Only the hanzo-* crates are workspace members. The legacy hanzo-ml-* crates are an orphaned
# duplicate cluster (no hanzo crate depends on them); keeping them out of the build drops the
# `hanzo-ml` name from the workspace and resolves the hanzo-ml-pyo3 vs hanzo-ml-pyo3 `links="python"`
# conflict. The dirs remain on disk for now and can be deleted in a follow-up.
members = [
"hanzo-3d",
"hanzo-datasets",
"hanzo-flash-attn-v3",
"hanzo-ml",
"hanzo-ml-examples",
"hanzo-ml-pyo3",
"hanzo-ml-wasm-examples/*",
"hanzo-ml-wasm-tests",
"hanzo-nn",
"hanzo-research",
"hanzo-train",
"hanzo-training",
"hanzo-transformers",
"tensor-tools",
]
exclude = [
"hanzo-ml-book",
"hanzo-flash-attn",
"hanzo-flash-attn-build",
"hanzo-kernel",
"hanzo-kernel-macros",
"hanzo-kernels",
"hanzo-metal-kernels",
"hanzo-rocm-kernels",
"hanzo-onnx",
"hanzo-flash-attn",
"hanzo-kernels",
"hanzo-metal-kernels",
"hanzo-ml-book",
"hanzo-onnx",
"hanzo-ug",
]
resolver = "2"
[workspace.package]
version = "0.11.18"
edition = "2021"
description = "Multi-backend tensor & ML framework for Rust — part of the Hanzo ML stack."
repository = "https://github.com/hanzoai/ml"
keywords = ["blas", "tensor", "machine-learning"]
categories = ["science"]
license = "MIT OR Apache-2.0"
[workspace.dependencies]
rocm-rs = { package = "hanzo-rocm", version = "0.5.2", default-features = false, features = ["macros"] }
hanzo-rocm-kernels = { path = "./hanzo-rocm-kernels", version = "0.11.36" }
ab_glyph = "0.2.23"
accelerate-src = { version = "0.3.2" }
anyhow = { version = "1", features = ["backtrace"] }
byteorder = "1.4.3"
chrono = "0.4"
# Hanzo-renamed workspace dependencies (at version 0.10.x)
hanzo-ml = { path = "./hanzo-ml", package = "hanzo-ml", version = "0.11.85" }
hanzo-datasets = { path = "./hanzo-datasets", version = "0.11.8" }
hanzo-flash-attn = { path = "./hanzo-flash-attn", version = "0.11.34" }
hanzo-flash-attn-v3 = { path = "./hanzo-flash-attn-v3", version = "0.11.9" }
hanzo-kernels = { path = "./hanzo-kernels", version = "0.11.36" }
hanzo-metal-kernels = { path = "./hanzo-metal-kernels", version = "0.11.44" }
hanzo-nn = { path = "./hanzo-nn", version = "0.11.33" }
hanzo-onnx = { path = "./hanzo-onnx", version = "0.11.8" }
hanzo-transformers = { path = "./hanzo-transformers", version = "0.11.8" }
hanzo-ug = { path = "./hanzo-ug", version = "0.11.33" }
clap = { version = "4.2.4", features = ["derive"] }
criterion = { version = "0.8", default-features = false }
cudarc = { version = "0.19.4", features = [
"std",
"cublas",
"cublaslt",
"curand",
"driver",
"nvrtc",
"f16",
"f8",
"cuda-version-from-build-system",
"dynamic-linking",
], default-features = false }
fancy-regex = "0.18.0"
gemm = { version = "0.19.0", features = ["wasm-simd128-enable"] }
hf-hub = "0.5.0"
half = { version = "2.5.0", features = [
"num-traits",
"use-intrinsics",
"rand_distr",
] }
float8 = { version = "0.7.0", features = ["num-traits", "rand_distr"] }
hound = "3.5.1"
image = { version = "0.25.2", default-features = false, features = [
"jpeg",
"png",
] }
imageproc = { version = "0.26.0", features = [
"text",
], default-features = false }
intel-mkl-src = { version = "0.8.1", features = ["mkl-static-lp64-iomp"] }
libc = { version = "0.2.147" }
libm = { version = "0.2.15" }
log = "0.4"
memmap2 = { version = "0.9.3", features = ["stable_deref_trait"] }
num_cpus = "1.15.0"
num-traits = "0.2.15"
parquet = "58"
rand = "0.9.0"
rand_distr = "0.5.1"
rayon = "1.7.0"
safetensors = "0.7.0"
serde = { version = "1.0.171", features = ["derive"] }
serde_plain = "1.0.2"
serde_json = "1.0.99"
thiserror = "2"
tokenizers = { version = "0.22.0", default-features = false }
tracing = "0.1.37"
tracing-chrome = "0.7.1"
tracing-subscriber = "0.3.7"
ug = "0.5.0"
ug-cuda = "0.5.0"
ug-metal = "0.5.0"
yoke = { version = "0.8.1", features = ["derive"] }
zip = { version = "8.6.0", default-features = false }
objc2-metal = { version = "0.3.1" }
objc2-foundation = { version = "0.3.1" }
[profile.release-with-debug]
inherits = "release"
debug = true
[workspace.lints.clippy]
# Stylistic lints in inherited model/bench code; allowed so CI clippy -D warnings is green.
explicit_counter_loop = "allow"
unnecessary_unwrap = "allow"
manual_checked_ops = "allow"
needless_borrow = "allow"
large_const_arrays = "allow"
# Quant-kernel idioms: parallel-array indexing and wide kernel signatures are intentional.
needless_range_loop = "allow"
too_many_arguments = "allow"