|
|
--- |
|
|
language: |
|
|
- en |
|
|
- fr |
|
|
library_name: transformers |
|
|
pipeline_tag: text-generation |
|
|
tags: |
|
|
- binary-carry-probagation |
|
|
- binary-level |
|
|
- bit-level |
|
|
- causal-lm |
|
|
- tokenizer-free |
|
|
- base2 |
|
|
- binary |
|
|
- calculator |
|
|
- addition |
|
|
- TinyTransformerLM |
|
|
license: apache-2.0 |
|
|
datasets: |
|
|
- PhysiQuanty/BINARY-CARRY-PROPAGATION |
|
|
--- |
|
|
|
|
|
# Binary-Calculator-LLM (Proof of Concept) |
|
|
|
|
|
A tiny **tokenizer-free / bit-level** (base-2) **calculator** proof of concept. |
|
|
|
|
|
This repository ships custom `modeling_*.py` / `configuration_*.py`, so you must load it with `trust_remote_code=True`. |
|
|
|
|
|
## What it does |
|
|
|
|
|
The model is trained to read two integers encoded as **10-bit binary** inside a structured prompt, and to emit an answer inside a `BOR ... EOR` block (binary output, variable-length). |
|
|
|
|
|
### Vocab (size = 8) |
|
|
|
|
|
- Bits: `0`, `1` |
|
|
- Specials: |
|
|
- `BOS=2`, `EOS=3` |
|
|
- `BOI=4`, `EOI=5` (integer input blocks) |
|
|
- `BOR=6`, `EOR=7` (integer result block) |
|
|
|
|
|
## Load (Python) |
|
|
|
|
|
```python |
|
|
from transformers import AutoModelForCausalLM |
|
|
|
|
|
m = AutoModelForCausalLM.from_pretrained( |
|
|
"PhysiQuanty/Binary-Calculator-LLM-POC", |
|
|
trust_remote_code=True, |
|
|
) |
|
|
m.eval() |
|
|
```` |
|
|
|
|
|
## Inference (CLI) |
|
|
|
|
|
This repo is typically used with the companion inference script `inference_binary_calculator3.py` (manual token-by-token loop, no `.generate()`), supporting: |
|
|
|
|
|
* `--prompt_int "int,int"` → builds: `BOS t0 t1 BOI <10b int1> EOI BOI <10b int2> EOI` |
|
|
* `--print_int` → extracts the **first** `BOR ... EOR` block and prints the decoded integer |
|
|
|
|
|
### Command |
|
|
|
|
|
```bash |
|
|
python3 inference_binary_calculator3.py \ |
|
|
--repo "PhysiQuanty/Binary-Calculator-LLM-POC" \ |
|
|
--prompt_int "20,68" \ |
|
|
--seed -1 \ |
|
|
--stop_on_eos \ |
|
|
--max_new_tokens 64 \ |
|
|
--temperature 0.7 \ |
|
|
--top_k 50 \ |
|
|
--print_int |
|
|
``` |
|
|
|
|
|
### Example output |
|
|
|
|
|
```text |
|
|
[Seed] 1011554894 |
|
|
[Device] cuda |
|
|
[Model] loaded from PhysiQuanty/Binary-Calculator-LLM-POC | vocab_size=8 |
|
|
[Prompt Origin] prompt_int="20,68" (t0,t1=0,0) |
|
|
[Prompt IDs] len=27 first32=[2, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 5, 4, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5] |
|
|
|
|
|
[Generated RAW IDS] |
|
|
[6, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 3] |
|
|
|
|
|
[Generated RAW IDS (as digits)] |
|
|
600001011000760000000100073 |
|
|
|
|
|
[PrintInt] First BOR..EOR |
|
|
[PrintInt] pos=27 nbits=11 bits=00001011000 int=88 |
|
|
``` |
|
|
|
|
|
## Notes |
|
|
|
|
|
* Inputs are **10-bit integers** (0..1023). The output can exceed 10 bits (e.g. addition overflow), so the `BOR..EOR` block is decoded with **variable bit-length**. |
|
|
* The model is **tokenizer-free** in the sense that it operates directly on bits and a tiny set of structural tokens. |
|
|
* This is a **POC**: sampling settings (`temperature`, `top_k`) can affect stability. For deterministic behavior, you can lower temperature and/or increase constraints. |