Architecture & Specifications
Table with columns: Parameter, Value| Parameter | Value |
|---|
| Architecture | Pre-norm Transformer decoder (LlamaForCausalLM, arch: llama) |
| Total Parameters | 1,418,911,232 (1.42B, tied input/output embeddings) |
Layers (num_hidden_layers) | 28 |
Hidden Dimension (hidden_size) | 1536 |
FFN Dimension (intermediate_size) | 9216 (6.0x SwiGLU MLP, SiLU gate) |
| Attention Heads | 12 Query heads / 2 Key-Value heads (GQA 6:1, head_dim = 128) |
| Positional Encoding | Rotary Position Embeddings (RoPE, theta = 1,000,000.0) |
| Normalization | RMSNorm (eps = 1e-6) |
| Context Window | 32,768 tokens (8,192 default in Ollama Modelfile for low RAM usage) |
Vocabulary (vocab_size) | 49,152 custom byte-level BPE (`< |
| Weights Provided | model.safetensors (FP16, 2.71 GB) and puma-1.0-q8_0.gguf (Q8_0, 1.44 GB) |
| License | Apache-2.0 |
Custom 49,152-Token Puma BPE Vocabulary
Puma 1.0 uses a compact 49,152-token (3 * 2^14) byte-level BPE vocabulary focused on English prose, mathematics, and source code:
- IDs
0..255: Complete 256-byte UTF-8 fallback table (0 unknown tokens on any input).
- IDs
256..49143: 48,888 ancestor-closed BPE merges prioritized for English, symbolic math, and programming syntax.
- IDs
49144..49151: Dedicated control tokens (<|pad|>, <|bos|>, <|eos|>, <|system|>, <|user|>, <|assistant|>, <|fim_prefix|>, <|fim_middle|>), shrinking the embedding matrix to 75.5M parameters (49,152 x 1,536) for faster CPU token selection and lower memory bandwidth.
Capabilities & Intended Scope
What Puma 1.0 Does Well
- Python & General Software Engineering: Writes clean, idiomatic functions, data structures, CLI scripts, unit tests, SQL queries, regular expressions, and debugging explanations (
90% Python AST validity and 70% strict unit-test pass rate on held-out algorithmic benchmarks including merge_intervals, two_sum, length_of_longest_substring, valid_brackets, binary_search, flatten, and top_k_frequent).
- Everyday Assistant & Concise Chat: Handles casual greetings, short follow-ups, brainstorming, summarization, and structured formatting (
JSON, YAML, Markdown tables) across multi-turn conversations without losing turn boundaries.
- STEM & Introductory Reasoning: Explains algorithms, computer systems, physics, and step-by-step arithmetic clearly at low latency.
- Offline & Privacy-Preserving Edge Execution: Runs 100% locally in
~1.6 GB RAM with zero network calls.
Limitations
- Compact
1.42B Capacity: Puma 1.0 does not store encyclopedic world trivia or obscure historical citations reliably; pair it with local document retrieval (RAG) when exact factual lookup is required.
- English-Centric Vocabulary: Non-Latin scripts fall back to UTF-8 byte tokens (
0..255), increasing token count on non-English text.
- Single-Pass Reasoning Depth: Complex multi-constraint math or large-codebase refactors benefit from explicit step-by-step prompts or external test execution.
Running Puma 1.0 on CPU (Desktop, Laptop, or Raspberry Pi 5)
Option 1: Ollama (Recommended — One Command)
ollama run Merkium/puma-1.0
Or run directly from Hugging Face via Ollama:
ollama run hf.co/Ueuee82683/Puma-1.0
Expected throughput on modern CPUs (Q8_0, 1.44 GB):
- Apple Silicon (M1 / M2 / M3 / M4):
55 - 95 tokens/s
- Modern x86_64 Laptop/Desktop CPU (AVX2, 8 threads):
20 - 40 tokens/s
- Raspberry Pi 5 (8 GB RAM, ARM64):
7 - 12 tokens/s
Option 2: llama.cpp CLI / Server (Pure C++, Zero Python Dependencies)
Download puma-1.0-q8_0.gguf and run directly on CPU:
huggingface-cli download Ueuee82683/Puma-1.0 puma-1.0-q8_0.gguf --local-dir . # Interactive multi-turn chat on CPU./llama-cli -m puma-1.0-q8_0.gguf -cnv -c 8192 -t 8 --temp 0.4 \ -p "You are Puma 1.0, an open-weight 1.42B-parameter AI assistant and coding model created by Merkium and released under Apache 2.0." # Local OpenAI-compatible HTTP API server on port 8080./llama-server -m puma-1.0-q8_0.gguf -c 8192 -t 8 --port 8080
Running Puma 1.0 on a Phone (iOS & Android)
Because puma-1.0-q8_0.gguf is a standard arch: llama GGUF (1.44 GB), it runs offline on any modern smartphone with 4 GB+ RAM (iPhone 13 or newer, Pixel 7/8/9, Galaxy S22/S23/S24, or Snapdragon 8-series devices):
- PocketPal AI (iOS & Android — Free, Open Source):
- Install PocketPal AI from the iOS App Store or Google Play Store.
- Open Models -> + -> Add from Hugging Face, search
Ueuee82683/Puma-1.0, and download puma-1.0-q8_0.gguf (1.44 GB).
- Open model settings, set stop strings to
<|eos|> and <|user|>, and tap Load. Expect 12 - 28 tokens/s completely offline (including in Airplane Mode).
- Layla Lite / ChatterUI / Maid (Android & iOS):
- Download
puma-1.0-q8_0.gguf directly from Ueuee82683/Puma-1.0 onto device storage and load it as a local GGUF model with context size 4096 for minimal battery drain.
- Android Termux (
ollama or llama.cpp):
pkg update && pkg install ollamaollama serve &ollama run Merkium/puma-1.0
Local Assistant via OpenAI-Compatible SDK (Ollama)
Once ollama run Merkium/puma-1.0 has pulled the model, query it from any Python script, IDE plugin (Continue.dev, Zed, Cursor local), or CLI tool at http://localhost:11434/v1:
from openai import OpenAI client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama") messages = [ {"role": "system", "content": "You are Puma 1.0, a concise local engineering assistant."}, {"role": "user", "content": "Write a Python function to merge overlapping intervals and include 2 assertions."},] response = client.chat.completions.create( model="Merkium/puma-1.0", messages=messages, temperature=0.3,)print(response.choices[0].message.content)
import torchfrom transformers import AutoModelForCausalLM, AutoTokenizer model_id = "Ueuee82683/Puma-1.0"tokenizer = AutoTokenizer.from_pretrained(model_id)model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32, device_map="auto",) messages = [ {"role": "user", "content": "Explain binary search time complexity and show a clean Python implementation."}]prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to(model.device) stop_ids = [ tokenizer.eos_token_id, tokenizer.convert_tokens_to_ids("<|user|>"), tokenizer.convert_tokens_to_ids("<|system|>"),] with torch.no_grad(): out = model.generate( **inputs, max_new_tokens=512, temperature=0.4, top_p=0.9, do_sample=True, eos_token_id=stop_ids, pad_token_id=tokenizer.pad_token_id, ) print(tokenizer.decode(out[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Puma 1.0 uses explicit turn delimiters from its custom control vocabulary:
<|bos|><|system|>You are Puma 1.0, an open-weight 1.42B-parameter AI assistant and coding model created by Merkium and released under Apache 2.0.<|eos|><|user|>{user_message}<|eos|><|assistant|>{assistant_response}<|eos|>
License
Released under the Apache License 2.0.