pizdecM2 / README.md
RaspizD's picture
Upload folder using huggingface_hub
8b085a3 verified
|
Raw History Blame Contribute Delete
3.17 kB
---
license: mit
tags:
- arithmetic
- llama
- custom-architecture
- gguf
- safetensors
- micro-model
library_name: pytorch
pipeline_tag: text-generation
model_name: pizdecM2
---
# pizdecM2
**pizdecM2** is an experimental micro-model (~520 parameters) built to evaluate character-level arithmetic representations, custom Llama-compatible GGUF metadata mapping, and PyTorch Safetensors export pipelines.
Despite its tiny size, the architecture achieves **100% accuracy** on its specialized target domain.
---
## ⚠️ Important Note & Model Scope
> **CRITICAL:** This model is designed strictly for a single specific task and **WILL NOT** understand regular text, multi-digit operations, or non-addition prompts.
* **Supported Input Format:** Exactly 4-character prompts formatted as `x+y=` where $x$ and $y$ are single digits such that $x + y < 10$.
* **Valid examples:** `2+3=`, `0+0=`, `1+8=`, `4+5=`
* **Unsupported inputs:** `5+5=`, `10+2=`, `2*3=`, `hello`
* **Context Length:** Fixed at **4 tokens**.
* **Output:** Predicts a single character token representing the result ($0 \dots 9$).
---
## Model Metrics & Specs
* **Model Name:** `pizdecM2`
* **Total Parameters:** 520 (100% Trainable)
* **Accuracy:** **100.00%** (55/55 evaluated test samples)
* **Vocabulary Size:** 13 tokens (`0`-`9`, `+`, `=`, `\n`)
* **Embedding Size:** 10
* **FFN Hidden Dimension:** 14
* **Available Formats:**
* `model.safetensors` (~2.52 KB)
* `model.gguf` (~2.97 KB)
* `tokenizer.json` (~0.13 KB)
---
## Architecture Breakdown
| Layer | Shape | Param Count |
| :--- | :--- | :--- |
| `embed_tokens.weight` | [13, 10] | 130 |
| `pos_emb` | [4, 10] | 40 |
| `ffn.weight` | [14, 10] | 140 |
| `ffn.bias` | [14] | 14 |
| `lm_head.weight` | [13, 14] | 182 |
| `lm_head.bias` | [13] | 13 |
| `pad` | [1] | 1 |
| **Total** | | **520** |
---
## How to Run Inference
```python
import json
import torch
import torch.nn as nn
from safetensors.torch import load_file
# Define architecture
class LlamaCompatible500P(nn.Module):
def __init__(self):
super().__init__()
self.embed_tokens = nn.Embedding(13, 10)
self.pos_emb = nn.Parameter(torch.randn(4, 10) * 0.1)
self.ffn = nn.Linear(10, 14)
self.act = nn.SiLU()
self.lm_head = nn.Linear(14, 13)
self.pad = nn.Parameter(torch.zeros(1))
def forward(self, x):
B, T = x.size()
h = self.embed_tokens(x) + self.pos_emb[:T, :]
h_flat = h.mean(dim=1)
feat = self.act(self.ffn(h_flat))
return self.lm_head(feat)
# Load Tokenizer & Model Weights
with open("tokenizer.json", "r", encoding="utf-8") as f:
vocab = json.load(f)["vocab"]
char_to_id = {ch: i for i, ch in enumerate(vocab)}
id_to_char = {i: ch for i, ch in enumerate(vocab)}
model = LlamaCompatible500P()
model.load_state_dict(load_file("model.safetensors"))
model.eval()
# Run Prediction
prompt = "3+5="
tokens = torch.tensor([[char_to_id[c] for c in prompt]])
with torch.no_grad():
logits = model(tokens)
pred_id = torch.argmax(logits, dim=-1).item()
print(f"Input: {prompt} | Output: {id_to_char[pred_id]}")
```
# License
MIT License