Skip to content

Commit eaabe1b

Browse files
chore: bump to 2.2.0, airframe dep 0.2.2 — Qwen3/Qwen2/Gemma multi-arch support
1 parent 40db856 commit eaabe1b

2 files changed

Lines changed: 127 additions & 110 deletions

File tree

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [2.2.0] - 2026-06-09
11+
12+
### Fixed
13+
- **Multi-architecture model loading** — Qwen3, Qwen2, Gemma-2, Phi-3 family models now
14+
load correctly via airframe 0.2.2. Previously these architectures silently failed due
15+
to a hardcoded Llama key prefix in the GGUF metadata parser.
16+
- **Qwen3 tied embeddings** — Qwen3 models that share output.weight with token_embd.weight
17+
now load and run correctly.
18+
- **Context cap safety** — Large-context models (Qwen2-7B n_ctx=32768) no longer cause
19+
memory exhaustion on CPU oracle generation paths.
20+
21+
### Changed
22+
- Airframe dependency updated to 0.2.2.
23+
- Shimmy version bumped to 2.2.0.
24+
25+
---
26+
1027
## [2.1.0] - 2026-06-02
1128

1229
### Added

Cargo.toml

Lines changed: 110 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,110 @@
1-
[package]
2-
name = "shimmy"
3-
version = "2.1.0"
4-
publish = true
5-
edition = "2021"
6-
license = "MIT"
7-
description = "Lightweight Ollama-compatible inference server with native SafeTensors support. No Python dependencies, cross-platform WebGPU acceleration via Airframe."
8-
homepage = "https://github.com/Michael-A-Kuykendall/shimmy"
9-
repository = "https://github.com/Michael-A-Kuykendall/shimmy"
10-
readme = "README.md"
11-
keywords = ["llm", "local-ai", "inference", "server", "api"]
12-
categories = ["command-line-utilities", "web-programming::http-server"]
13-
authors = ["Michael A. Kuykendall <michaelallenkuykendall@gmail.com>"]
14-
include = [
15-
"src/**/*",
16-
"templates/**/*",
17-
"Cargo.toml",
18-
"Cargo.lock",
19-
"README.md",
20-
"LICENSE",
21-
"build.rs"
22-
]
23-
24-
[features]
25-
default = ["airframe", "huggingface"] # Full GPU build; use --no-default-features --features huggingface for CPU-only
26-
# Engine backends
27-
airframe = ["dep:airframe"] # Airframe native GPU engine
28-
huggingface = [] # Python integration, no additional Rust deps
29-
mlx = [] # Apple MLX integration for Metal GPU acceleration on Apple Silicon
30-
# Convenience feature sets
31-
fast = ["huggingface"] # Fast compilation - no path deps (CI-safe)
32-
full = ["airframe", "huggingface", "mlx"] # Full compilation - includes all backends
33-
gpu = ["airframe", "huggingface"] # GPU-optimized build via Airframe
34-
apple = ["airframe", "huggingface"] # Apple Silicon - Airframe via Metal + HuggingFace
35-
coverage = ["huggingface"] # Coverage testing - no path deps, fast compile
36-
llama = [] # Deprecated: llama.cpp removed in v2.0. Empty feature retained to silence cfg guards pending cleanup.
37-
llama-cuda = [] # Deprecated: llama.cpp CUDA backend removed in v2.0.
38-
llama-vulkan = [] # Deprecated: llama.cpp Vulkan backend removed in v2.0.
39-
llama-opencl = [] # Deprecated: llama.cpp OpenCL backend removed in v2.0.
40-
41-
[dependencies]
42-
anyhow = "1"
43-
axum = { version = "0.7", features = ["http1", "json", "ws", "macros"] }
44-
async-trait = "0.1"
45-
bytes = "1"
46-
chrono = { version = "0.4", features = ["serde"] }
47-
clap = { version = "4", features = ["derive"] }
48-
futures-util = "0.3"
49-
lazy_static = "1.5"
50-
memmap2 = "0.9"
51-
minijinja = { version = "2", features = ["loader"] }
52-
parking_lot = "0.12"
53-
rand = "0.8"
54-
regex = "1"
55-
safetensors = "0.4"
56-
serde = { version = "1", features = ["derive"] }
57-
serde_json = "1"
58-
sys-info = "0.9"
59-
sysinfo = "0.30"
60-
tempfile = "3"
61-
thiserror = "1"
62-
tokio = { version = "1", features = ["macros","rt-multi-thread","signal","process","fs"] }
63-
tokio-stream = "0.1"
64-
tracing = "0.1"
65-
tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
66-
uuid = { version = "1", features = ["v4", "serde"] }
67-
dirs = "5.0"
68-
reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream"], default-features = false }
69-
70-
# Airframe native GPU inference — public crate on crates.io
71-
airframe = { version = "0.2.1", optional = true }
72-
73-
[dev-dependencies]
74-
tokio-tungstenite = "0.20"
75-
criterion = { version = "0.5", features = ["html_reports"] }
76-
serial_test = "3.1" # For serialized test execution
77-
# Additional dependencies for mock testing infrastructure
78-
tempfile = "3" # For creating temporary test directories
79-
rand = "0.8" # For randomized testing scenarios (already in main deps)
80-
assert_cmd = "2" # For CLI testing
81-
predicates = "3" # For assertion predicates in tests
82-
tower = { version = "0.5", features = ["util"] } # For test oneshot helper
83-
# Note: tempfile is already in main dependencies, rand is already in main dependencies
84-
85-
[profile.release]
86-
lto = true
87-
codegen-units = 1
88-
opt-level = "z"
89-
90-
# Optimize build times for development
91-
[profile.dev]
92-
opt-level = 1
93-
debug = true
94-
95-
# Faster builds for dependencies
96-
[profile.dev.package."*"]
97-
opt-level = 2
98-
debug = false
99-
100-
# Benchmark configuration
101-
[[bench]]
102-
name = "model_loading"
103-
harness = false
104-
105-
[[bench]]
106-
name = "generation_performance"
107-
harness = false
108-
109-
[workspace]
110-
1+
[package]
2+
name = "shimmy"
3+
version = "2.2.0"
4+
publish = true
5+
edition = "2021"
6+
license = "MIT"
7+
description = "Lightweight Ollama-compatible inference server with native SafeTensors support. No Python dependencies, cross-platform WebGPU acceleration via Airframe."
8+
homepage = "https://github.com/Michael-A-Kuykendall/shimmy"
9+
repository = "https://github.com/Michael-A-Kuykendall/shimmy"
10+
readme = "README.md"
11+
keywords = ["llm", "local-ai", "inference", "server", "api"]
12+
categories = ["command-line-utilities", "web-programming::http-server"]
13+
authors = ["Michael A. Kuykendall <michaelallenkuykendall@gmail.com>"]
14+
include = [
15+
"src/**/*",
16+
"templates/**/*",
17+
"Cargo.toml",
18+
"Cargo.lock",
19+
"README.md",
20+
"LICENSE",
21+
"build.rs"
22+
]
23+
24+
[features]
25+
default = ["airframe", "huggingface"] # Full GPU build; use --no-default-features --features huggingface for CPU-only
26+
# Engine backends
27+
airframe = ["dep:airframe"] # Airframe native GPU engine
28+
huggingface = [] # Python integration, no additional Rust deps
29+
mlx = [] # Apple MLX integration for Metal GPU acceleration on Apple Silicon
30+
# Convenience feature sets
31+
fast = ["huggingface"] # Fast compilation - no path deps (CI-safe)
32+
full = ["airframe", "huggingface", "mlx"] # Full compilation - includes all backends
33+
gpu = ["airframe", "huggingface"] # GPU-optimized build via Airframe
34+
apple = ["airframe", "huggingface"] # Apple Silicon - Airframe via Metal + HuggingFace
35+
coverage = ["huggingface"] # Coverage testing - no path deps, fast compile
36+
llama = [] # Deprecated: llama.cpp removed in v2.0. Empty feature retained to silence cfg guards pending cleanup.
37+
llama-cuda = [] # Deprecated: llama.cpp CUDA backend removed in v2.0.
38+
llama-vulkan = [] # Deprecated: llama.cpp Vulkan backend removed in v2.0.
39+
llama-opencl = [] # Deprecated: llama.cpp OpenCL backend removed in v2.0.
40+
41+
[dependencies]
42+
anyhow = "1"
43+
axum = { version = "0.7", features = ["http1", "json", "ws", "macros"] }
44+
async-trait = "0.1"
45+
bytes = "1"
46+
chrono = { version = "0.4", features = ["serde"] }
47+
clap = { version = "4", features = ["derive"] }
48+
futures-util = "0.3"
49+
lazy_static = "1.5"
50+
memmap2 = "0.9"
51+
minijinja = { version = "2", features = ["loader"] }
52+
parking_lot = "0.12"
53+
rand = "0.8"
54+
regex = "1"
55+
safetensors = "0.4"
56+
serde = { version = "1", features = ["derive"] }
57+
serde_json = "1"
58+
sys-info = "0.9"
59+
sysinfo = "0.30"
60+
tempfile = "3"
61+
thiserror = "1"
62+
tokio = { version = "1", features = ["macros","rt-multi-thread","signal","process","fs"] }
63+
tokio-stream = "0.1"
64+
tracing = "0.1"
65+
tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
66+
uuid = { version = "1", features = ["v4", "serde"] }
67+
dirs = "5.0"
68+
reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream"], default-features = false }
69+
70+
# Airframe native GPU inference — public crate on crates.io
71+
airframe = { version = "0.2.2", optional = true }
72+
73+
[dev-dependencies]
74+
tokio-tungstenite = "0.20"
75+
criterion = { version = "0.5", features = ["html_reports"] }
76+
serial_test = "3.1" # For serialized test execution
77+
# Additional dependencies for mock testing infrastructure
78+
tempfile = "3" # For creating temporary test directories
79+
rand = "0.8" # For randomized testing scenarios (already in main deps)
80+
assert_cmd = "2" # For CLI testing
81+
predicates = "3" # For assertion predicates in tests
82+
tower = { version = "0.5", features = ["util"] } # For test oneshot helper
83+
# Note: tempfile is already in main dependencies, rand is already in main dependencies
84+
85+
[profile.release]
86+
lto = true
87+
codegen-units = 1
88+
opt-level = "z"
89+
90+
# Optimize build times for development
91+
[profile.dev]
92+
opt-level = 1
93+
debug = true
94+
95+
# Faster builds for dependencies
96+
[profile.dev.package."*"]
97+
opt-level = 2
98+
debug = false
99+
100+
# Benchmark configuration
101+
[[bench]]
102+
name = "model_loading"
103+
harness = false
104+
105+
[[bench]]
106+
name = "generation_performance"
107+
harness = false
108+
109+
[workspace]
110+

0 commit comments

Comments
 (0)