Text Generation
Transformers
Safetensors
English
ivme
language-model
transformer
rope
swiglu
muon
from-scratch
tiny
small
decoder-only
custom_code
Instructions to use IvmeLabs/Ivme-Conversate-v2-Base with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use IvmeLabs/Ivme-Conversate-v2-Base with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="IvmeLabs/Ivme-Conversate-v2-Base", trust_remote_code=True)# Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("IvmeLabs/Ivme-Conversate-v2-Base", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use IvmeLabs/Ivme-Conversate-v2-Base with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "IvmeLabs/Ivme-Conversate-v2-Base" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "IvmeLabs/Ivme-Conversate-v2-Base", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/IvmeLabs/Ivme-Conversate-v2-Base
- SGLang
How to use IvmeLabs/Ivme-Conversate-v2-Base with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "IvmeLabs/Ivme-Conversate-v2-Base" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "IvmeLabs/Ivme-Conversate-v2-Base", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "IvmeLabs/Ivme-Conversate-v2-Base" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "IvmeLabs/Ivme-Conversate-v2-Base", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use IvmeLabs/Ivme-Conversate-v2-Base with Docker Model Runner:
docker model run hf.co/IvmeLabs/Ivme-Conversate-v2-Base
Update README.md
Browse files
README.md
CHANGED
|
@@ -22,276 +22,527 @@ pipeline_tag: text-generation
|
|
| 22 |
library_name: transformers
|
| 23 |
---
|
| 24 |
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
</a>
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
Benchmarks were run with lm-evaluation-harness via a custom model adapter
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
Strong
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
This pattern, strong local agreement paired with weaker long-distance syntax, is typical for models at this scale.
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
>
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
---
|
| 158 |
-
|
| 159 |
-
## Inference
|
| 160 |
-
|
| 161 |
-
This model can now be loaded with `AutoModelForCausalLM` instead of the
|
| 162 |
-
manual pickle-loading workflow, and weights are available as
|
| 163 |
-
`model.safetensors`.
|
| 164 |
-
|
| 165 |
-
```python
|
| 166 |
-
import torch
|
| 167 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 168 |
-
|
| 169 |
-
model = AutoModelForCausalLM.from_pretrained(
|
| 170 |
-
"IvmeLabs/Ivme-Conversate-v2-Base", trust_remote_code=True, dtype=torch.float32,
|
| 171 |
)
|
| 172 |
-
tokenizer = AutoTokenizer.from_pretrained("IvmeLabs/Ivme-Conversate-v2-Base", trust_remote_code=True)
|
| 173 |
-
model.eval()
|
| 174 |
|
| 175 |
-
inputs = tokenizer("Once upon a time, there was a", return_tensors="pt")
|
| 176 |
-
out = model.generate(
|
| 177 |
-
**inputs, max_new_tokens=200, do_sample=True,
|
| 178 |
-
temperature=0.8, top_k=50, pad_token_id=tokenizer.pad_token_id,
|
| 179 |
)
|
| 180 |
-
print(tokenizer.decode(out[0], skip_special_tokens=True))
|
| 181 |
-
```
|
| 182 |
-
|
| 183 |
-
`trust_remote_code=True` is required (custom architecture: RoPE + SwiGLU +
|
| 184 |
-
RMSNorm dense decoder). The original `ckpt_final.pt` pickle checkpoint and
|
| 185 |
-
`model/` architecture source remain in this repo unchanged for backwards
|
| 186 |
-
compatibility.
|
| 187 |
|
| 188 |
-
|
| 189 |
-
(`tokenizer.padding_side = "left"`) the model doesn't use an explicit
|
| 190 |
-
attention mask over padded positions, so right-padding within a batch will
|
| 191 |
-
give incorrect results.
|
| 192 |
|
| 193 |
-
|
| 194 |
|
| 195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
|
| 197 |
-
|
| 198 |
-
import sys
|
| 199 |
-
import torch
|
| 200 |
-
from tokenizers import Tokenizer
|
| 201 |
-
from huggingface_hub import hf_hub_download, snapshot_download
|
| 202 |
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
#
|
| 206 |
-
|
| 207 |
-
# user needing to manually copy any files.
|
| 208 |
-
repo_local_dir = snapshot_download(repo_id, allow_patterns=["model/*"])
|
| 209 |
sys.path.append(repo_local_dir)
|
| 210 |
|
| 211 |
-
from model import IvmeConfig, IvmeConversateV2
|
| 212 |
|
| 213 |
-
ckpt_path = hf_hub_download(repo_id, "ckpt_final.pt")
|
| 214 |
-
tokenizer_path = hf_hub_download(repo_id, "tokenizer.json")
|
| 215 |
|
| 216 |
-
tokenizer = Tokenizer.from_file(tokenizer_path)
|
| 217 |
|
| 218 |
-
# IvmeConfig is a plain dataclass saved into the checkpoint. Trust this only
|
| 219 |
-
# because it's our own checkpoint, produced by our own training code.
|
| 220 |
-
torch.serialization.add_safe_globals([IvmeConfig])
|
| 221 |
-
ckpt = torch.load(ckpt_path, map_location="cuda")
|
| 222 |
-
cfg = ckpt["config"]
|
| 223 |
|
| 224 |
-
model = IvmeConversateV2(cfg)
|
| 225 |
|
| 226 |
-
# Use EMA weights (smoothed), not the raw training weights, for inference.
|
| 227 |
-
# Strip torch.compile's "_orig_mod." prefix if the checkpoint was compiled.
|
| 228 |
-
state_dict = ckpt["ema_state_dict"]
|
| 229 |
-
state_dict = {k.removeprefix("_orig_mod."): v for k, v in state_dict.items()}
|
| 230 |
-
model.load_state_dict(state_dict)
|
| 231 |
|
| 232 |
-
model.cuda().eval()
|
| 233 |
|
| 234 |
-
prompt = "Once upon a time, there was a"
|
| 235 |
-
ids = tokenizer.encode(prompt).ids
|
| 236 |
-
idx = torch.tensor([ids], dtype=torch.long, device="cuda")
|
| 237 |
|
| 238 |
-
eot_id = tokenizer.token_to_id(
|
| 239 |
-
with torch.no_grad():
|
| 240 |
-
for _ in range(200):
|
| 241 |
-
idx_cond = idx if idx.size(1)
|
| 242 |
logits, _ = model(idx_cond)
|
| 243 |
-
logits = logits[:, -1, :] / 0.8 # temperature
|
| 244 |
-
|
| 245 |
-
v, _ = torch.topk(logits, 50)
|
| 246 |
-
logits[logits
|
| 247 |
-
|
| 248 |
-
probs = torch.softmax(logits, dim=-1)
|
| 249 |
-
next_id = torch.multinomial(probs, num_samples=1)
|
| 250 |
-
idx = torch.cat([idx, next_id], dim=1)
|
| 251 |
-
|
| 252 |
-
if next_id.item() == eot_id:
|
| 253 |
-
break
|
| 254 |
-
|
| 255 |
-
print(tokenizer.decode(idx[0].tolist()))
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
|
| 269 |
-
|
| 270 |
-
|
| 271 |
-
|
| 272 |
-
|
| 273 |
-
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
```bibtex
|
| 280 |
-
@misc{ivme-conversate-v2-Base,
|
| 281 |
author = {IvmeLabs},
|
| 282 |
title = {İvme-Conversate-v2-Base},
|
| 283 |
-
year = {2026},
|
| 284 |
publisher = {Hugging Face},
|
| 285 |
url = {https://huggingface.co/IvmeLabs/Ivme-Conversate-v2-Base}
|
| 286 |
-
}
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
|
|
|
| 22 |
library_name: transformers
|
| 23 |
---
|
| 24 |
|
| 25 |
+
<style>
|
| 26 |
+
@import url('https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,380;0,6..72,500;0,6..72,600;0,6..72,700;1,6..72,400&family=JetBrains+Mono:wght@400;500;600&display=swap');
|
| 27 |
+
*, html, body, div, p, table, td, th, ul, li { box-sizing: border-box; }
|
| 28 |
+
body{
|
| 29 |
+
margin:0;
|
| 30 |
+
background:
|
| 31 |
+
repeating-linear-gradient(180deg, rgba(0,0,0,0.014) 0px, rgba(0,0,0,0.014) 1px, transparent 1px, transparent 3px),
|
| 32 |
+
#f7f4ec !important;
|
| 33 |
+
color:#1c1a16;
|
| 34 |
+
font-family:'Newsreader', Georgia, serif;
|
| 35 |
+
}
|
| 36 |
+
::selection{background:#ff0000; color:#f7f4ec;}
|
| 37 |
+
a{color:#c40000; text-decoration:none; border-bottom:1px solid rgba(255,0,0,0.35);}
|
| 38 |
+
a:hover{border-bottom-color:#ff0000;}
|
| 39 |
+
.card{max-width:800px; margin:0 auto; padding:52px 40px 70px;}
|
| 40 |
+
.eyebrow{
|
| 41 |
+
font-family:'JetBrains Mono', monospace;
|
| 42 |
+
font-size:10.5px;
|
| 43 |
+
letter-spacing:0.24em;
|
| 44 |
+
text-transform:uppercase;
|
| 45 |
+
color:#ff0000;
|
| 46 |
+
margin-bottom:16px;
|
| 47 |
+
}
|
| 48 |
+
h1.title{
|
| 49 |
+
font-size:36px;
|
| 50 |
+
font-weight:700;
|
| 51 |
+
letter-spacing:-0.01em;
|
| 52 |
+
margin:0 0 6px;
|
| 53 |
+
line-height:1.1;
|
| 54 |
+
}
|
| 55 |
+
.codename-line{
|
| 56 |
+
font-family:'JetBrains Mono', monospace;
|
| 57 |
+
font-size:12px;
|
| 58 |
+
color:#8a8474;
|
| 59 |
+
letter-spacing:0.03em;
|
| 60 |
+
margin-bottom:28px;
|
| 61 |
+
}
|
| 62 |
+
.codename-line b{color:#4a463d; font-weight:500;}
|
| 63 |
+
.hero-logo{
|
| 64 |
+
width:100%;
|
| 65 |
+
max-width:320px;
|
| 66 |
+
display:block;
|
| 67 |
+
margin:0 auto 32px;
|
| 68 |
+
border:1px solid #d9d2bf;
|
| 69 |
+
filter:contrast(1.03);
|
| 70 |
+
}
|
| 71 |
+
p.dek{
|
| 72 |
+
font-size:16.5px;
|
| 73 |
+
line-height:1.7;
|
| 74 |
+
color:#2b2822;
|
| 75 |
+
margin:0 0 40px;
|
| 76 |
+
padding-bottom:36px;
|
| 77 |
+
border-bottom:1px solid #d9d2bf;
|
| 78 |
+
}
|
| 79 |
+
p.dek a{border-bottom-color:rgba(255,0,0,0.35);}
|
| 80 |
+
.stat-strip{
|
| 81 |
+
display:grid;
|
| 82 |
+
grid-template-columns: repeat(4, 1fr);
|
| 83 |
+
border-top:1px solid #1c1a16;
|
| 84 |
+
border-bottom:1px solid #1c1a16;
|
| 85 |
+
margin-bottom:44px;
|
| 86 |
+
}
|
| 87 |
+
.stat{padding:14px 12px; border-right:1px solid #d9d2bf; text-align:center;}
|
| 88 |
+
.stat:last-child{border-right:none;}
|
| 89 |
+
.stat-num{
|
| 90 |
+
font-family:'JetBrains Mono', monospace;
|
| 91 |
+
font-size:17px;
|
| 92 |
+
font-weight:600;
|
| 93 |
+
color:#1c1a16;
|
| 94 |
+
display:block;
|
| 95 |
+
}
|
| 96 |
+
.stat-label{
|
| 97 |
+
font-family:'JetBrains Mono', monospace;
|
| 98 |
+
font-size:9px;
|
| 99 |
+
letter-spacing:0.06em;
|
| 100 |
+
text-transform:uppercase;
|
| 101 |
+
color:#8a8474;
|
| 102 |
+
margin-top:3px;
|
| 103 |
+
display:block;
|
| 104 |
+
}
|
| 105 |
+
section{margin-bottom:48px;}
|
| 106 |
+
.section-head{display:flex; align-items:baseline; gap:14px; margin-bottom:18px;}
|
| 107 |
+
.section-index{font-family:'JetBrains Mono', monospace; font-size:12px; color:#ff0000;}
|
| 108 |
+
h2{font-size:22px; font-weight:600; margin:0; letter-spacing:-0.005em;}
|
| 109 |
+
h3{font-size:15px; font-weight:600; margin:26px 0 12px; font-family:'JetBrains Mono', monospace; letter-spacing:0.01em; color:#1c1a16;}
|
| 110 |
+
p{font-size:15px; line-height:1.72; color:#2b2822; margin:0 0 14px;}
|
| 111 |
+
/* spec / kv table */
|
| 112 |
+
table.kv{width:100%; border-collapse:collapse; font-size:14px; margin-top:6px;}
|
| 113 |
+
table.kv td{padding:9px 12px 9px 0; border-bottom:1px solid #ece7d8; vertical-align:top;}
|
| 114 |
+
table.kv tr:last-child td{border-bottom:1px solid #1c1a16;}
|
| 115 |
+
table.kv td:first-child{
|
| 116 |
+
font-family:'JetBrains Mono', monospace;
|
| 117 |
+
font-size:11px;
|
| 118 |
+
letter-spacing:0.02em;
|
| 119 |
+
color:#8a8474;
|
| 120 |
+
width:38%;
|
| 121 |
+
white-space:nowrap;
|
| 122 |
+
padding-top:11px;
|
| 123 |
+
}
|
| 124 |
+
table.kv td:last-child{color:#2b2822;}
|
| 125 |
+
/* results table */
|
| 126 |
+
table.results{width:100%; border-collapse:collapse; font-size:14px; margin-top:6px;}
|
| 127 |
+
table.results th{
|
| 128 |
+
text-align:left;
|
| 129 |
+
font-family:'JetBrains Mono', monospace;
|
| 130 |
+
font-size:10px;
|
| 131 |
+
letter-spacing:0.06em;
|
| 132 |
+
text-transform:uppercase;
|
| 133 |
+
color:#8a8474;
|
| 134 |
+
font-weight:500;
|
| 135 |
+
border-bottom:2px solid #1c1a16;
|
| 136 |
+
padding:8px 12px 8px 0;
|
| 137 |
+
}
|
| 138 |
+
table.results td{padding:12px 12px 12px 0; border-bottom:1px solid #d9d2bf; font-size:14px;}
|
| 139 |
+
table.results tr:last-child td{border-bottom:1px solid #1c1a16;}
|
| 140 |
+
table.results td:first-child{font-weight:500;}
|
| 141 |
+
table.results td.num{font-family:'JetBrains Mono', monospace; color:#4a463d;}
|
| 142 |
+
table.results td.win{font-family:'JetBrains Mono', monospace; color:#a02020; font-weight:600;}
|
| 143 |
+
table.results.compact{font-size:13px;}
|
| 144 |
+
table.results.compact td, table.results.compact th{padding:8px 10px 8px 0;}
|
| 145 |
+
.two-col{display:grid; grid-template-columns:1fr 1fr; gap:0 28px;}
|
| 146 |
+
.two-col .col-label{
|
| 147 |
+
font-family:'JetBrains Mono', monospace;
|
| 148 |
+
font-size:10px;
|
| 149 |
+
letter-spacing:0.06em;
|
| 150 |
+
text-transform:uppercase;
|
| 151 |
+
color:#8a8474;
|
| 152 |
+
margin-bottom:8px;
|
| 153 |
+
display:block;
|
| 154 |
+
}
|
| 155 |
+
/* sample output block */
|
| 156 |
+
.sample-prompt{
|
| 157 |
+
font-family:'JetBrains Mono', monospace;
|
| 158 |
+
font-size:11px;
|
| 159 |
+
letter-spacing:0.04em;
|
| 160 |
+
text-transform:uppercase;
|
| 161 |
+
color:#8a8474;
|
| 162 |
+
margin-bottom:10px;
|
| 163 |
+
}
|
| 164 |
+
blockquote.sample{
|
| 165 |
+
margin:0 0 8px;
|
| 166 |
+
border-left:3px solid #ff0000;
|
| 167 |
+
padding:16px 20px;
|
| 168 |
+
background:rgba(255,0,0,0.03);
|
| 169 |
+
font-size:14.5px;
|
| 170 |
+
line-height:1.75;
|
| 171 |
+
color:#2b2822;
|
| 172 |
+
font-style:italic;
|
| 173 |
+
}
|
| 174 |
+
.sample-meta{
|
| 175 |
+
font-family:'JetBrains Mono', monospace;
|
| 176 |
+
font-size:10.5px;
|
| 177 |
+
color:#8a8474;
|
| 178 |
+
margin-top:2px;
|
| 179 |
+
}
|
| 180 |
+
/* incident / callout box, reused signature element */
|
| 181 |
+
.callout{border:1px solid #1c1a16; position:relative; padding:26px 26px 22px; margin-bottom:8px;}
|
| 182 |
+
.callout::before{
|
| 183 |
+
content:attr(data-label);
|
| 184 |
+
position:absolute;
|
| 185 |
+
top:-9px; left:20px;
|
| 186 |
+
background:#f7f4ec;
|
| 187 |
+
padding:0 8px;
|
| 188 |
+
font-family:'JetBrains Mono', monospace;
|
| 189 |
+
font-size:9.5px;
|
| 190 |
+
letter-spacing:0.12em;
|
| 191 |
+
color:#ff0000;
|
| 192 |
+
}
|
| 193 |
+
.callout p{font-size:14.5px; margin-bottom:12px;}
|
| 194 |
+
.callout p:last-child{margin-bottom:0;}
|
| 195 |
+
/* code blocks, no JS dependency, hand-spanned tokens */
|
| 196 |
+
pre{
|
| 197 |
+
background:#1c1a16 !important;
|
| 198 |
+
padding:20px 22px;
|
| 199 |
+
overflow-x:auto;
|
| 200 |
+
border-left:3px solid #ff0000;
|
| 201 |
+
margin:0 0 14px;
|
| 202 |
+
border-radius:0;
|
| 203 |
+
}
|
| 204 |
+
pre code{
|
| 205 |
+
background:transparent !important;
|
| 206 |
+
background-color:transparent !important;
|
| 207 |
+
border:none !important;
|
| 208 |
+
border-radius:0 !important;
|
| 209 |
+
padding:0 !important;
|
| 210 |
+
font-family:'JetBrains Mono', monospace !important;
|
| 211 |
+
font-size:12px !important;
|
| 212 |
+
line-height:1.65 !important;
|
| 213 |
+
color:#f7f4ec !important;
|
| 214 |
+
white-space:pre !important;
|
| 215 |
+
display:block;
|
| 216 |
+
}
|
| 217 |
+
code{
|
| 218 |
+
font-family:'JetBrains Mono', monospace !important;
|
| 219 |
+
font-size:0.88em !important;
|
| 220 |
+
background-color:#ece5d3 !important;
|
| 221 |
+
color:#a02020 !important;
|
| 222 |
+
padding:2px 6px !important;
|
| 223 |
+
border-radius:2px !important;
|
| 224 |
+
border:1px solid #d9d2bf !important;
|
| 225 |
+
white-space:nowrap;
|
| 226 |
+
}
|
| 227 |
+
.tok-kw { color:#7fb8e8 !important; font-weight:600; }
|
| 228 |
+
.tok-str { color:#a8d992 !important; }
|
| 229 |
+
.tok-cls { color:#e8c66a !important; }
|
| 230 |
+
.tok-fn { color:#8fc7ff !important; }
|
| 231 |
+
.tok-num { color:#e8b56a !important; }
|
| 232 |
+
.tok-com { color:#8a8474 !important; font-style:italic; }
|
| 233 |
+
/* note box */
|
| 234 |
+
.note-box{
|
| 235 |
+
font-size:13.5px;
|
| 236 |
+
color:#4a463d;
|
| 237 |
+
background:rgba(255,0,0,0.03);
|
| 238 |
+
border-left:3px solid #ff0000;
|
| 239 |
+
padding:14px 18px;
|
| 240 |
+
line-height:1.6;
|
| 241 |
+
margin-bottom:14px;
|
| 242 |
+
}
|
| 243 |
+
/* architecture graph embed link */
|
| 244 |
+
.graph-embed{display:block; margin:20px 0 8px;}
|
| 245 |
+
.graph-embed img{width:100%; display:block; border:1px solid #d9d2bf;}
|
| 246 |
+
.graph-caption{
|
| 247 |
+
font-family:'JetBrains Mono', monospace;
|
| 248 |
+
font-size:10px;
|
| 249 |
+
color:#8a8474;
|
| 250 |
+
margin-top:8px;
|
| 251 |
+
letter-spacing:0.02em;
|
| 252 |
+
}
|
| 253 |
+
/* limitations list */
|
| 254 |
+
ul.limits{margin:0; padding:0; list-style:none;}
|
| 255 |
+
ul.limits li{
|
| 256 |
+
font-size:14.5px;
|
| 257 |
+
line-height:1.6;
|
| 258 |
+
color:#2b2822;
|
| 259 |
+
padding:11px 0 11px 22px;
|
| 260 |
+
border-bottom:1px solid #ece7d8;
|
| 261 |
+
position:relative;
|
| 262 |
+
}
|
| 263 |
+
ul.limits li:last-child{border-bottom:none;}
|
| 264 |
+
ul.limits li::before{
|
| 265 |
+
content:"–";
|
| 266 |
+
position:absolute;
|
| 267 |
+
left:0;
|
| 268 |
+
color:#ff0000;
|
| 269 |
+
font-weight:600;
|
| 270 |
+
}
|
| 271 |
+
footer{
|
| 272 |
+
border-top:1px solid #d9d2bf;
|
| 273 |
+
margin-top:56px;
|
| 274 |
+
padding-top:20px;
|
| 275 |
+
font-family:'JetBrains Mono', monospace;
|
| 276 |
+
font-size:10.5px;
|
| 277 |
+
color:#8a8474;
|
| 278 |
+
display:flex;
|
| 279 |
+
justify-content:space-between;
|
| 280 |
+
}
|
| 281 |
+
footer .fmark{color:#ff0000;}
|
| 282 |
+
.credit-line{
|
| 283 |
+
font-family:'JetBrains Mono', monospace;
|
| 284 |
+
font-size:10px;
|
| 285 |
+
color:#8a8474;
|
| 286 |
+
margin-top:6px;
|
| 287 |
+
}
|
| 288 |
+
@media (max-width: 620px){
|
| 289 |
+
.card{padding:36px 20px 50px;}
|
| 290 |
+
.stat-strip{grid-template-columns:repeat(2,1fr);}
|
| 291 |
+
.stat:nth-child(2){border-right:none;}
|
| 292 |
+
.two-col{grid-template-columns:1fr;}
|
| 293 |
+
table.kv td:first-child{width:auto; white-space:normal;}
|
| 294 |
+
footer{flex-direction:column; gap:6px;}
|
| 295 |
+
}
|
| 296 |
+
</style>
|
| 297 |
+
|
| 298 |
+
<div class="card">
|
| 299 |
+
|
| 300 |
+
<div class="eyebrow">İvmeLabs · Model Card · Conversate Family</div>
|
| 301 |
+
|
| 302 |
+
<h1 class="title">İvme-Conversate-v2-Base</h1>
|
| 303 |
+
<div class="codename-line">Codename <b>Apple 2</b> · dense decoder-only · 23,846,784 parameters</div>
|
| 304 |
+
|
| 305 |
+
<img class="hero-logo" src="https://cdn-uploads.huggingface.co/production/uploads/670562d6ac129959c16f84d4/9oWY_UmFyQ297XmaZEK7G.png" alt="Conversate-v2 logo">
|
| 306 |
+
|
| 307 |
+
<p class="dek">The second release in the Conversate line: a 24M parameter decoder-only base model trained from scratch, this time with a much heavier training diet. v1 produced grammatically correct sentences that did not really say anything when strung together, fluent without being about anything. v2 keeps almost the exact same architecture as v1 on purpose, and instead fixes the two things that actually mattered: far more training data, and a data mix weighted toward material that teaches a model to stay on topic across sentences.</p>
|
| 308 |
+
|
| 309 |
+
<div class="stat-strip">
|
| 310 |
+
<div class="stat"><span class="stat-num">23.8M</span><span class="stat-label">Parameters</span></div>
|
| 311 |
+
<div class="stat"><span class="stat-num">12.85B</span><span class="stat-label">Tokens Trained</span></div>
|
| 312 |
+
<div class="stat"><span class="stat-num">10</span><span class="stat-label">Layers</span></div>
|
| 313 |
+
<div class="stat"><span class="stat-num">4.75h</span><span class="stat-label">Train Time</span></div>
|
| 314 |
+
</div>
|
| 315 |
+
|
| 316 |
+
<section>
|
| 317 |
+
<div class="section-head"><span class="section-index">01</span><h2>Model Details</h2></div>
|
| 318 |
+
<table class="kv">
|
| 319 |
+
<tr><td>Architecture</td><td>Decoder-only transformer, dense (no loops, no exotic recurrence)</td></tr>
|
| 320 |
+
<tr><td>Parameters</td><td>23,846,784</td></tr>
|
| 321 |
+
<tr><td>Layers</td><td>10</td></tr>
|
| 322 |
+
<tr><td>Hidden dim</td><td>384</td></tr>
|
| 323 |
+
<tr><td>FFN</td><td>SwiGLU</td></tr>
|
| 324 |
+
<tr><td>Attention heads</td><td>6, full attention (no GQA)</td></tr>
|
| 325 |
+
<tr><td>Context length</td><td>1024 tokens</td></tr>
|
| 326 |
+
<tr><td>Vocab size</td><td>16,000 (custom BPE)</td></tr>
|
| 327 |
+
<tr><td>Positional encoding</td><td>RoPE (θ=10,000)</td></tr>
|
| 328 |
+
<tr><td>Normalization</td><td>RMSNorm (pre-norm)</td></tr>
|
| 329 |
+
<tr><td>Embeddings</td><td>Tied input/output</td></tr>
|
| 330 |
+
<tr><td>Biases</td><td>None</td></tr>
|
| 331 |
+
</table>
|
| 332 |
+
<p style="margin-top:16px; font-size:13.5px; color:#4a463d;">Nearly every setting above matches v1 on purpose. The point of v2 was to isolate the improvement to data and training, not to a bigger model.</p>
|
| 333 |
+
|
| 334 |
+
<a class="graph-embed" href="https://hfviewer.com/IvmeLabs/Ivme-Conversate-v2-Base?utm_source=huggingface&utm_medium=embedded_model_card&utm_campaign=IvmeLabs__Ivme-Conversate-v2-Base_card&utm_content=embedded_card_open_viewer&from=embedded-model-card" target="_blank" rel="noopener">
|
| 335 |
+
<img src="https://hfviewer.com/api/card.svg?source=IvmeLabs%2FIvme-Conversate-v2-Base&granularity=auto&v=20260516-title-pills-card" alt="Architecture graph for IvmeLabs/Ivme-Conversate-v2-Base. Open in hfviewer">
|
| 336 |
</a>
|
| 337 |
+
<div class="graph-caption">Interactive architecture graph, opens in hfviewer</div>
|
| 338 |
+
</section>
|
| 339 |
+
|
| 340 |
+
<section>
|
| 341 |
+
<div class="section-head"><span class="section-index">02</span><h2>Benchmarks</h2></div>
|
| 342 |
+
<p>Benchmarks were run with lm-evaluation-harness via a custom model adapter. Previous numbers from an internal script have been superseded by these.</p>
|
| 343 |
+
<table class="results">
|
| 344 |
+
<tr><th>Benchmark</th><th>v1</th><th>v2</th></tr>
|
| 345 |
+
<tr><td>WikiText-2 (byte perplexity) ↓</td><td class="num">2.96</td><td class="win">2.2250</td></tr>
|
| 346 |
+
<tr><td>BLiMP (macro-average, 68 paradigms) ↑</td><td class="num">61.40%</td><td class="win">75.09%</td></tr>
|
| 347 |
+
<tr><td>ARC-Easy (acc_norm) ↑</td><td class="num">30.85%</td><td class="win">39.98%</td></tr>
|
| 348 |
+
<tr><td>ARC-Easy (acc) ↑</td><td class="num">—</td><td class="win">43.56%</td></tr>
|
| 349 |
+
</table>
|
| 350 |
+
<p style="margin-top:14px;">Every metric improved. The ARC-Easy acc_norm gain (30.85% to 39.98%) is more modest than the raw acc numbers alone suggest, but still a real improvement over v1.</p>
|
| 351 |
+
|
| 352 |
+
<h3>BLiMP paradigm breakdown</h3>
|
| 353 |
+
<div class="two-col">
|
| 354 |
+
<div>
|
| 355 |
+
<span class="col-label">Strong · Core Agreement</span>
|
| 356 |
+
<table class="results compact">
|
| 357 |
+
<tr><td>principle_A_case_1</td><td class="num">100.00%</td></tr>
|
| 358 |
+
<tr><td>existential_there_quantifiers_1</td><td class="num">99.40%</td></tr>
|
| 359 |
+
<tr><td>anaphor_number_agreement</td><td class="num">98.00%</td></tr>
|
| 360 |
+
<tr><td>sentential_negation_npi_licensor</td><td class="num">97.30%</td></tr>
|
| 361 |
+
<tr><td>determiner_noun_agreement_1</td><td class="num">96.90%</td></tr>
|
| 362 |
+
<tr><td>principle_A_domain_1</td><td class="num">95.40%</td></tr>
|
| 363 |
+
</table>
|
| 364 |
+
</div>
|
| 365 |
+
<div>
|
| 366 |
+
<span class="col-label">Weak · Long-Distance / Islands</span>
|
| 367 |
+
<table class="results compact">
|
| 368 |
+
<tr><td>wh_vs_that_with_gap_long_distance</td><td class="num">17.20%</td></tr>
|
| 369 |
+
<tr><td>existential_there_quantifiers_2</td><td class="num">30.20%</td></tr>
|
| 370 |
+
<tr><td>left_branch_island_echo_question</td><td class="num">31.40%</td></tr>
|
| 371 |
+
<tr><td>superlative_quantifiers_2</td><td class="num">33.20%</td></tr>
|
| 372 |
+
<tr><td>principle_A_reconstruction</td><td class="num">36.10%</td></tr>
|
| 373 |
+
</table>
|
| 374 |
+
</div>
|
| 375 |
+
</div>
|
| 376 |
+
<p style="margin-top:16px;">This pattern, strong local agreement paired with weaker long-distance syntax, is typical for models at this scale.</p>
|
| 377 |
+
</section>
|
| 378 |
+
|
| 379 |
+
<section>
|
| 380 |
+
<div class="section-head"><span class="section-index">03</span><h2>Does it actually make more sense now?</h2></div>
|
| 381 |
+
<p>None of the benchmarks above directly test whether the model's writing holds together as connected text, which was v1's real problem. Sample output below, EMA weights, temperature 0.8, top_k 50.</p>
|
| 382 |
+
<div class="sample-prompt">Prompt: "Once upon a time, there was a"</div>
|
| 383 |
+
<blockquote class="sample">Once upon a time, there was a wise old turtle named Timmy who lived on the coast of South America. In this magical place, no matter how big or large, people could look up at the sea and talk to each other. Timmy asked, "What do you mean, Timmy?" The turtle replied, "Well, I think you might see people talking about ocean creatures. They are like little waves that carry their voices. Sometimes they say they're too big or small to hear." After a few moments, Timmy had an idea. "Can we go on a boat-boat tour? I can't believe all the kids in the village are doing that!" As they sailed further, they saw many beautiful islands and vibrant colors. Each island had its unique culture and traditions. When they reached the top, they saw a group of kids playing and splashing around. "Wow, lookgies!" said Timmy. "They live in a big ocean full of colorful fish and</blockquote>
|
| 384 |
+
</section>
|
| 385 |
+
|
| 386 |
+
<section>
|
| 387 |
+
<div class="section-head"><span class="section-index">04</span><h2>Training</h2></div>
|
| 388 |
+
|
| 389 |
+
<h3>Data mix</h3>
|
| 390 |
+
<p>~12.85B tokens total, roughly 8 to 9x more than v1's 1.57B. v1 was trained Chinchilla-optimal. v2 deliberately overtrains well past that point, since the model is small and cheap to run regardless.</p>
|
| 391 |
+
<table class="kv">
|
| 392 |
+
<tr><td>fineweb-edu</td><td>50%</td></tr>
|
| 393 |
+
<tr><td>smollm-corpus (cosmopedia-v2)</td><td>27%</td></tr>
|
| 394 |
+
<tr><td>dclm-baseline-1.0</td><td>8%</td></tr>
|
| 395 |
+
<tr><td>SimpleStories</td><td>5%</td></tr>
|
| 396 |
+
<tr><td>finemath (finemath-3plus)</td><td>5%</td></tr>
|
| 397 |
+
</table>
|
| 398 |
+
<p style="margin-top:14px;">Python-Edu was originally planned as a fifth source, but the actual code text lives behind a gated dataset with no practical way to align it against the sampled subset at this scale, so it was dropped and its share redistributed across the rest.</p>
|
| 399 |
+
|
| 400 |
+
<h3>Hyperparameters</h3>
|
| 401 |
+
<table class="kv">
|
| 402 |
+
<tr><td>Optimizer</td><td>Muon (body weights) + AdamW (embeddings, norms)</td></tr>
|
| 403 |
+
<tr><td>Muon lr</td><td>0.02</td></tr>
|
| 404 |
+
<tr><td>AdamW lr</td><td>3e-4</td></tr>
|
| 405 |
+
<tr><td>LR schedule</td><td>Warmup-Stable-Decay (WSD)</td></tr>
|
| 406 |
+
<tr><td>Weight decay</td><td>0.1</td></tr>
|
| 407 |
+
<tr><td>Gradient clipping</td><td>1.0</td></tr>
|
| 408 |
+
<tr><td>Batch size</td><td>192 sequences × 1024 tokens (196,608 tokens/step)</td></tr>
|
| 409 |
+
<tr><td>Total steps</td><td>65,376</td></tr>
|
| 410 |
+
<tr><td>Precision</td><td>bfloat16</td></tr>
|
| 411 |
+
<tr><td>Attention</td><td>PyTorch scaled_dot_product_attention (Flash Attention backend)</td></tr>
|
| 412 |
+
<tr><td>Compilation</td><td>torch.compile, roughly 2x throughput over eager</td></tr>
|
| 413 |
+
<tr><td>Final weights</td><td>EMA (β=0.999) of training trajectory</td></tr>
|
| 414 |
+
</table>
|
| 415 |
+
|
| 416 |
+
<h3>Hardware</h3>
|
| 417 |
+
<p>Trained on a single NVIDIA RTX PRO 6000 Blackwell (96GB) in approximately <b>4.75 hours</b>.</p>
|
| 418 |
+
</section>
|
| 419 |
+
|
| 420 |
+
<section>
|
| 421 |
+
<div class="section-head"><span class="section-index">05</span><h2>Tokenizer</h2></div>
|
| 422 |
+
<p>Custom byte-level BPE tokenizer trained from scratch on a sample of the pretraining mix. Vocab size 16,000.</p>
|
| 423 |
+
</section>
|
| 424 |
+
|
| 425 |
+
<section>
|
| 426 |
+
<div class="section-head"><span class="section-index">06</span><h2>Inference</h2></div>
|
| 427 |
+
<p>This model can now be loaded with <code>AutoModelForCausalLM</code> instead of the manual pickle-loading workflow, and weights are available as <code>model.safetensors</code>.</p>
|
| 428 |
+
|
| 429 |
+
<pre><code><span class="tok-kw">import</span> torch
|
| 430 |
+
<span class="tok-kw">from</span> transformers <span class="tok-kw">import</span> <span class="tok-cls">AutoModelForCausalLM</span>, <span class="tok-cls">AutoTokenizer</span>
|
| 431 |
+
|
| 432 |
+
model = <span class="tok-cls">AutoModelForCausalLM</span>.<span class="tok-fn">from_pretrained</span>(
|
| 433 |
+
<span class="tok-str">"IvmeLabs/Ivme-Conversate-v2-Base"</span>, trust_remote_code=<span class="tok-kw">True</span>, dtype=torch.float32,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 434 |
)
|
| 435 |
+
tokenizer = <span class="tok-cls">AutoTokenizer</span>.<span class="tok-fn">from_pretrained</span>(<span class="tok-str">"IvmeLabs/Ivme-Conversate-v2-Base"</span>, trust_remote_code=<span class="tok-kw">True</span>)
|
| 436 |
+
model.<span class="tok-fn">eval</span>()
|
| 437 |
|
| 438 |
+
inputs = <span class="tok-fn">tokenizer</span>(<span class="tok-str">"Once upon a time, there was a"</span>, return_tensors=<span class="tok-str">"pt"</span>)
|
| 439 |
+
out = model.<span class="tok-fn">generate</span>(
|
| 440 |
+
**inputs, max_new_tokens=<span class="tok-num">200</span>, do_sample=<span class="tok-kw">True</span>,
|
| 441 |
+
temperature=<span class="tok-num">0.8</span>, top_k=<span class="tok-num">50</span>, pad_token_id=tokenizer.pad_token_id,
|
| 442 |
)
|
| 443 |
+
<span class="tok-fn">print</span>(tokenizer.<span class="tok-fn">decode</span>(out[<span class="tok-num">0</span>], skip_special_tokens=<span class="tok-kw">True</span>))</code></pre>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 444 |
|
| 445 |
+
<p><code>trust_remote_code=True</code> is required (custom architecture: RoPE + SwiGLU + RMSNorm dense decoder). The original <code>ckpt_final.pt</code> pickle checkpoint and <code>model/</code> architecture source remain in this repo unchanged for backwards compatibility.</p>
|
|
|
|
|
|
|
|
|
|
| 446 |
|
| 447 |
+
<div class="note-box">Use left-padding (<code>tokenizer.padding_side = "left"</code>) for batch generation. The model doesn't use an explicit attention mask over padded positions, so right-padding within a batch will give incorrect results.</div>
|
| 448 |
|
| 449 |
+
<h3>Legacy inference</h3>
|
| 450 |
+
<p>Here's a basic inference path in case you want to work with the pickle files directly.</p>
|
| 451 |
+
<pre><code><span class="tok-kw">import</span> sys
|
| 452 |
+
<span class="tok-kw">import</span> torch
|
| 453 |
+
<span class="tok-kw">from</span> tokenizers <span class="tok-kw">import</span> <span class="tok-cls">Tokenizer</span>
|
| 454 |
+
<span class="tok-kw">from</span> huggingface_hub <span class="tok-kw">import</span> hf_hub_download, snapshot_download
|
| 455 |
|
| 456 |
+
repo_id = <span class="tok-str">"IvmeLabs/Ivme-Conversate-v2-Base"</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 457 |
|
| 458 |
+
<span class="tok-com"># Download just the model/ folder (architecture code) into the HF cache,</span>
|
| 459 |
+
<span class="tok-com"># then add it to sys.path so `from model import ...` works without the</span>
|
| 460 |
+
<span class="tok-com"># user needing to manually copy any files.</span>
|
| 461 |
+
repo_local_dir = <span class="tok-fn">snapshot_download</span>(repo_id, allow_patterns=[<span class="tok-str">"model/*"</span>])
|
|
|
|
|
|
|
| 462 |
sys.path.append(repo_local_dir)
|
| 463 |
|
| 464 |
+
<span class="tok-kw">from</span> model <span class="tok-kw">import</span> <span class="tok-cls">IvmeConfig</span>, <span class="tok-cls">IvmeConversateV2</span>
|
| 465 |
|
| 466 |
+
ckpt_path = <span class="tok-fn">hf_hub_download</span>(repo_id, <span class="tok-str">"ckpt_final.pt"</span>)
|
| 467 |
+
tokenizer_path = <span class="tok-fn">hf_hub_download</span>(repo_id, <span class="tok-str">"tokenizer.json"</span>)
|
| 468 |
|
| 469 |
+
tokenizer = <span class="tok-cls">Tokenizer</span>.<span class="tok-fn">from_file</span>(tokenizer_path)
|
| 470 |
|
| 471 |
+
<span class="tok-com"># IvmeConfig is a plain dataclass saved into the checkpoint. Trust this only</span>
|
| 472 |
+
<span class="tok-com"># because it's our own checkpoint, produced by our own training code.</span>
|
| 473 |
+
torch.serialization.<span class="tok-fn">add_safe_globals</span>([<span class="tok-cls">IvmeConfig</span>])
|
| 474 |
+
ckpt = torch.<span class="tok-fn">load</span>(ckpt_path, map_location=<span class="tok-str">"cuda"</span>)
|
| 475 |
+
cfg = ckpt[<span class="tok-str">"config"</span>]
|
| 476 |
|
| 477 |
+
model = <span class="tok-cls">IvmeConversateV2</span>(cfg)
|
| 478 |
|
| 479 |
+
<span class="tok-com"># Use EMA weights (smoothed), not the raw training weights, for inference.</span>
|
| 480 |
+
<span class="tok-com"># Strip torch.compile's "_orig_mod." prefix if the checkpoint was compiled.</span>
|
| 481 |
+
state_dict = ckpt[<span class="tok-str">"ema_state_dict"</span>]
|
| 482 |
+
state_dict = {k.removeprefix(<span class="tok-str">"_orig_mod."</span>): v <span class="tok-kw">for</span> k, v <span class="tok-kw">in</span> state_dict.items()}
|
| 483 |
+
model.<span class="tok-fn">load_state_dict</span>(state_dict)
|
| 484 |
|
| 485 |
+
model.cuda().<span class="tok-fn">eval</span>()
|
| 486 |
|
| 487 |
+
prompt = <span class="tok-str">"Once upon a time, there was a"</span>
|
| 488 |
+
ids = tokenizer.<span class="tok-fn">encode</span>(prompt).ids
|
| 489 |
+
idx = torch.<span class="tok-fn">tensor</span>([ids], dtype=torch.long, device=<span class="tok-str">"cuda"</span>)
|
| 490 |
|
| 491 |
+
eot_id = tokenizer.<span class="tok-fn">token_to_id</span>(<span class="tok-str">"<|endoftext|>"</span>)
|
| 492 |
+
<span class="tok-kw">with</span> torch.no_grad():
|
| 493 |
+
<span class="tok-kw">for</span> _ <span class="tok-kw">in</span> range(<span class="tok-num">200</span>):
|
| 494 |
+
idx_cond = idx <span class="tok-kw">if</span> idx.size(<span class="tok-num">1</span>) <= cfg.context_len <span class="tok-kw">else</span> idx[:, -cfg.context_len:]
|
| 495 |
logits, _ = model(idx_cond)
|
| 496 |
+
logits = logits[:, -<span class="tok-num">1</span>, :] / <span class="tok-num">0.8</span> <span class="tok-com"># temperature</span>
|
| 497 |
+
|
| 498 |
+
v, _ = torch.<span class="tok-fn">topk</span>(logits, <span class="tok-num">50</span>)
|
| 499 |
+
logits[logits < v[:, [-<span class="tok-num">1</span>]]] = -float(<span class="tok-str">"inf"</span>)
|
| 500 |
+
|
| 501 |
+
probs = torch.<span class="tok-fn">softmax</span>(logits, dim=-<span class="tok-num">1</span>)
|
| 502 |
+
next_id = torch.<span class="tok-fn">multinomial</span>(probs, num_samples=<span class="tok-num">1</span>)
|
| 503 |
+
idx = torch.<span class="tok-fn">cat</span>([idx, next_id], dim=<span class="tok-num">1</span>)
|
| 504 |
+
|
| 505 |
+
<span class="tok-kw">if</span> next_id.item() == eot_id:
|
| 506 |
+
<span class="tok-kw">break</span>
|
| 507 |
+
|
| 508 |
+
<span class="tok-fn">print</span>(tokenizer.<span class="tok-fn">decode</span>(idx[<span class="tok-num">0</span>].tolist()))</code></pre>
|
| 509 |
+
</section>
|
| 510 |
+
|
| 511 |
+
<section>
|
| 512 |
+
<div class="section-head"><span class="section-index">07</span><h2>Limitations</h2></div>
|
| 513 |
+
<ul class="limits">
|
| 514 |
+
<li>Base model only, not instruction tuned, will not follow instructions or answer questions</li>
|
| 515 |
+
<li>English only</li>
|
| 516 |
+
<li>1024 token context window</li>
|
| 517 |
+
<li>Weaker on long-distance syntactic dependencies than on local agreement, see BLiMP breakdown above</li>
|
| 518 |
+
<li>No code data in the training mix (Python-Edu was dropped, see Training)</li>
|
| 519 |
+
<li>Weak knowledge: the model has learned syntax and grammar well but falls short on knowledge and easily hallucinates. Expected to improve in upcoming variants via distillation.</li>
|
| 520 |
+
</ul>
|
| 521 |
+
</section>
|
| 522 |
+
|
| 523 |
+
<section>
|
| 524 |
+
<div class="section-head"><span class="section-index">08</span><h2>What's next</h2></div>
|
| 525 |
+
<p>Still on the table for a future version: distillation from a larger teacher model, and a return to the more experimental İvmetron architecture once time allows for the kind of patient debugging a genuinely novel design needs.</p>
|
| 526 |
+
<p>Check our other upcoming models on the <a href="https://huggingface.co/IvmeLabs">İvmeLabs organization page</a>.</p>
|
| 527 |
+
</section>
|
| 528 |
+
|
| 529 |
+
<section>
|
| 530 |
+
<div class="section-head"><span class="section-index">09</span><h2>Citation</h2></div>
|
| 531 |
+
<pre><code>@misc{<span class="tok-fn">ivme-conversate-v2-Base</span>,
|
|
|
|
|
|
|
| 532 |
author = {IvmeLabs},
|
| 533 |
title = {İvme-Conversate-v2-Base},
|
| 534 |
+
year = {<span class="tok-num">2026</span>},
|
| 535 |
publisher = {Hugging Face},
|
| 536 |
url = {https://huggingface.co/IvmeLabs/Ivme-Conversate-v2-Base}
|
| 537 |
+
}</code></pre>
|
| 538 |
+
</section>
|
| 539 |
+
|
| 540 |
+
<footer>
|
| 541 |
+
<div>
|
| 542 |
+
<span>İvmeLabs <span class="fmark">/</span> Conversate</span>
|
| 543 |
+
<div class="credit-line">Apple photo by <a href="https://unsplash.com/@cenali">Matheus Cenali</a> on Unsplash</div>
|
| 544 |
+
</div>
|
| 545 |
+
<span>Hugging Face Model Card</span>
|
| 546 |
+
</footer>
|
| 547 |
+
|
| 548 |
+
</div>
|