arthu1 commited on
Commit
b1ca288
·
verified ·
1 Parent(s): fcb2595

Promote stronger final-style 207M checkpoint

Browse files
Aurora-3.png DELETED

Git LFS Details

  • SHA256: ec2dba8a346b2ec4cd9b38c08ad55d8bd849ff77fa89e6ad569b7c4bc8486633
  • Pointer size: 132 Bytes
  • Size of remote file: 1.96 MB
aurora/__init__.py DELETED
@@ -1,4 +0,0 @@
1
- from .config import AuroraConfig, load_model_config
2
- from .model import AuroraForCausalLM
3
-
4
- __all__ = ["AuroraConfig", "AuroraForCausalLM", "load_model_config"]
 
 
 
 
 
aurora/config.py DELETED
@@ -1,63 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from dataclasses import dataclass, fields
4
- from pathlib import Path
5
- from typing import Any
6
-
7
- import yaml
8
-
9
-
10
- @dataclass
11
- class AuroraConfig:
12
- model_name: str = "Ember Proelia"
13
- vocab_size: int = 16000
14
- hidden_size: int = 896
15
- num_layers: int = 23
16
- num_attention_heads: int = 14
17
- num_key_value_heads: int = 2
18
- intermediate_size: int = 2432
19
- context_length: int = 2048
20
- rope_theta: float = 500000.0
21
- rms_norm_eps: float = 1.0e-5
22
- qk_norm: bool = True
23
- tie_word_embeddings: bool = True
24
- attention_bias: bool = False
25
- mlp_bias: bool = False
26
- dropout: float = 0.0
27
- num_experts: int = 1
28
- router_aux_loss_coef: float = 0.0
29
- router_z_loss_coef: float = 0.0
30
- router_noise_scale: float = 0.0
31
- moe_capacity_factor: float = 0.0
32
- router_use_gate_weight: bool = False
33
-
34
- @property
35
- def head_dim(self) -> int:
36
- return self.hidden_size // self.num_attention_heads
37
-
38
- def validate(self) -> None:
39
- if self.vocab_size <= 0 or self.hidden_size <= 0 or self.num_layers <= 0:
40
- raise ValueError("vocab_size, hidden_size, and num_layers must be positive")
41
- if self.hidden_size % self.num_attention_heads != 0:
42
- raise ValueError("hidden_size must divide evenly by num_attention_heads")
43
- if self.num_attention_heads % self.num_key_value_heads != 0:
44
- raise ValueError("num_attention_heads must divide evenly by num_key_value_heads")
45
- if self.head_dim % 2 != 0:
46
- raise ValueError("head_dim must be even for RoPE")
47
- if self.context_length <= 0:
48
- raise ValueError("context_length must be positive")
49
- if self.num_experts <= 0:
50
- raise ValueError("num_experts must be positive")
51
-
52
-
53
- def load_model_config(path: str | Path) -> AuroraConfig:
54
- path = Path(path)
55
- with path.open("r", encoding="utf-8") as handle:
56
- raw: dict[str, Any] = yaml.safe_load(handle) or {}
57
- allowed = {field.name for field in fields(AuroraConfig)}
58
- unknown = sorted(set(raw) - allowed)
59
- if unknown:
60
- raise ValueError(f"Unknown model config keys: {unknown}")
61
- cfg = AuroraConfig(**raw)
62
- cfg.validate()
63
- return cfg
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aurora/model.py DELETED
@@ -1,376 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import math
4
-
5
- import torch
6
- import torch.nn as nn
7
- import torch.nn.functional as F
8
-
9
- from aurora.config import AuroraConfig
10
-
11
- try:
12
- from cut_cross_entropy import linear_cross_entropy
13
- except ImportError:
14
- linear_cross_entropy = None
15
-
16
-
17
- class RMSNorm(nn.Module):
18
- def __init__(self, dim: int, eps: float) -> None:
19
- super().__init__()
20
- self.weight = nn.Parameter(torch.ones(dim))
21
- self.eps = eps
22
-
23
- def forward(self, x: torch.Tensor) -> torch.Tensor:
24
- scale = torch.rsqrt(x.pow(2).mean(dim=-1, keepdim=True) + self.eps)
25
- return self.weight * x * scale
26
-
27
-
28
- def precompute_rope_frequencies(
29
- seq_len: int, head_dim: int, theta: float, device: torch.device, dtype: torch.dtype
30
- ) -> tuple[torch.Tensor, torch.Tensor]:
31
- inv_freq = 1.0 / (theta ** (torch.arange(0, head_dim, 2, device=device).float() / head_dim))
32
- positions = torch.arange(seq_len, device=device).float()
33
- freqs = torch.outer(positions, inv_freq)
34
- return freqs.cos().to(dtype=dtype), freqs.sin().to(dtype=dtype)
35
-
36
-
37
- def apply_rope(x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> torch.Tensor:
38
- cos = cos[None, :, None, :]
39
- sin = sin[None, :, None, :]
40
- x_even = x[..., 0::2]
41
- x_odd = x[..., 1::2]
42
- out = torch.empty_like(x)
43
- out[..., 0::2] = x_even * cos - x_odd * sin
44
- out[..., 1::2] = x_even * sin + x_odd * cos
45
- return out
46
-
47
-
48
- class CausalSelfAttention(nn.Module):
49
- def __init__(self, cfg: AuroraConfig) -> None:
50
- super().__init__()
51
- self.cfg = cfg
52
- self.num_heads = cfg.num_attention_heads
53
- self.num_kv_heads = cfg.num_key_value_heads
54
- self.head_dim = cfg.head_dim
55
- self.kv_repeat = self.num_heads // self.num_kv_heads
56
-
57
- self.q_proj = nn.Linear(cfg.hidden_size, cfg.num_attention_heads * self.head_dim, bias=cfg.attention_bias)
58
- self.k_proj = nn.Linear(cfg.hidden_size, cfg.num_key_value_heads * self.head_dim, bias=cfg.attention_bias)
59
- self.v_proj = nn.Linear(cfg.hidden_size, cfg.num_key_value_heads * self.head_dim, bias=cfg.attention_bias)
60
- self.o_proj = nn.Linear(cfg.hidden_size, cfg.hidden_size, bias=cfg.attention_bias)
61
- self.q_norm = RMSNorm(self.head_dim, cfg.rms_norm_eps) if cfg.qk_norm else nn.Identity()
62
- self.k_norm = RMSNorm(self.head_dim, cfg.rms_norm_eps) if cfg.qk_norm else nn.Identity()
63
- self.dropout_p = cfg.dropout
64
-
65
- def forward(self, x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> torch.Tensor:
66
- batch, seq_len, _ = x.shape
67
- q = self.q_proj(x).view(batch, seq_len, self.num_heads, self.head_dim)
68
- k = self.k_proj(x).view(batch, seq_len, self.num_kv_heads, self.head_dim)
69
- v = self.v_proj(x).view(batch, seq_len, self.num_kv_heads, self.head_dim)
70
-
71
- q = self.q_norm(q)
72
- k = self.k_norm(k)
73
- q = apply_rope(q, cos, sin).transpose(1, 2)
74
- k = apply_rope(k, cos, sin).transpose(1, 2)
75
- v = v.transpose(1, 2)
76
-
77
- # Explicit K/V expansion is mathematically equivalent to GQA and works
78
- # across CUDA, Apple MPS, and CPU PyTorch backends.
79
- if self.kv_repeat > 1:
80
- k = k.repeat_interleave(self.kv_repeat, dim=1)
81
- v = v.repeat_interleave(self.kv_repeat, dim=1)
82
- y = F.scaled_dot_product_attention(
83
- q,
84
- k,
85
- v,
86
- attn_mask=None,
87
- dropout_p=self.dropout_p if self.training else 0.0,
88
- is_causal=True,
89
- )
90
- y = y.transpose(1, 2).contiguous().view(batch, seq_len, self.cfg.hidden_size)
91
- return self.o_proj(y)
92
-
93
-
94
- class SwiGLU(nn.Module):
95
- def __init__(self, cfg: AuroraConfig, intermediate_size: int | None = None) -> None:
96
- super().__init__()
97
- intermediate_size = intermediate_size or cfg.intermediate_size
98
- self.gate_proj = nn.Linear(cfg.hidden_size, intermediate_size, bias=cfg.mlp_bias)
99
- self.up_proj = nn.Linear(cfg.hidden_size, intermediate_size, bias=cfg.mlp_bias)
100
- self.down_proj = nn.Linear(intermediate_size, cfg.hidden_size, bias=cfg.mlp_bias)
101
-
102
- def forward(self, x: torch.Tensor) -> torch.Tensor:
103
- return self.down_proj(F.silu(self.gate_proj(x)) * self.up_proj(x))
104
-
105
-
106
- class Top1MoE(nn.Module):
107
- """Top-1 routed SwiGLU experts with Switch-style router regularization."""
108
-
109
- def __init__(self, cfg: AuroraConfig) -> None:
110
- super().__init__()
111
- self.num_experts = cfg.num_experts
112
- self.router_aux_loss_coef = cfg.router_aux_loss_coef
113
- self.router_z_loss_coef = cfg.router_z_loss_coef
114
- self.router_noise_scale = cfg.router_noise_scale
115
- self.capacity_factor = cfg.moe_capacity_factor
116
- self.use_gate_weight = cfg.router_use_gate_weight
117
- # Keep routing in BF16/FP32 rather than quantizing its logits to FP8.
118
- self.router = nn.Linear(cfg.hidden_size, cfg.num_experts, bias=False)
119
- self.experts = nn.ModuleList([SwiGLU(cfg) for _ in range(cfg.num_experts)])
120
- # Detached summaries from the latest batch, for collapse detection in
121
- # the trainer. They are intentionally not persistent model state.
122
- self.last_expert_fraction: torch.Tensor | None = None
123
- self.last_preferred_expert_fraction: torch.Tensor | None = None
124
- self.last_forced_fraction: torch.Tensor | None = None
125
- self.last_selected_gate_probability: torch.Tensor | None = None
126
-
127
- def _capacity_constrained_route(
128
- self, scores: torch.Tensor, preferred_index: torch.Tensor
129
- ) -> torch.Tensor:
130
- """Assign exactly one expert/token while bounding every expert load.
131
-
132
- Experts keep their highest-scoring first-choice tokens. Overflow is
133
- deterministically retried against each token's next preference. With
134
- five experts this small eager-only matching pass is far cheaper than
135
- an expert MLP and prevents a collapsed router from starving experts.
136
- """
137
- token_count = scores.size(0)
138
- capacity = max(
139
- math.ceil(token_count / self.num_experts),
140
- math.ceil(token_count * self.capacity_factor / self.num_experts),
141
- )
142
- rankings = torch.argsort(scores, dim=-1, descending=True)
143
- assigned = torch.full_like(preferred_index, -1)
144
- remaining = [capacity for _ in range(self.num_experts)]
145
-
146
- for rank in range(self.num_experts):
147
- for expert_index in range(self.num_experts):
148
- slots = remaining[expert_index]
149
- if slots <= 0:
150
- continue
151
- candidates = torch.nonzero(
152
- (assigned < 0) & (rankings[:, rank] == expert_index), as_tuple=False
153
- ).flatten()
154
- candidate_count = candidates.numel()
155
- if candidate_count == 0:
156
- continue
157
- if candidate_count > slots:
158
- candidate_scores = scores.index_select(0, candidates)[:, expert_index]
159
- best_positions = torch.topk(candidate_scores, k=slots, sorted=False).indices
160
- candidates = candidates.index_select(0, best_positions)
161
- candidate_count = slots
162
- assigned.index_fill_(0, candidates, expert_index)
163
- remaining[expert_index] -= candidate_count
164
-
165
- # The combined capacity is at least the token count and every token
166
- # ranks every expert, so this is a logic invariant rather than an
167
- # expected fallback.
168
- if bool(torch.any(assigned < 0)):
169
- raise RuntimeError("capacity-constrained MoE routing left tokens unassigned")
170
- return assigned
171
-
172
- def forward(self, x: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
173
- original_shape = x.shape
174
- flat_x = x.reshape(-1, original_shape[-1])
175
- router_logits = self.router(flat_x).float()
176
- router_probs = torch.softmax(router_logits, dim=-1)
177
- # Routing indices are discrete. Keep this bookkeeping out of the
178
- # autograd graph; language gradients still reach the selected gate
179
- # probability when gate weighting is enabled, while router losses use
180
- # the clean differentiable probabilities below.
181
- with torch.no_grad():
182
- routing_logits = router_logits
183
- if self.training and self.router_noise_scale > 0:
184
- # Noisy top-1 routing keeps early training exploratory. Only
185
- # the discrete expert choice is noisy; probability weights and
186
- # regularization remain based on clean BF16/FP32 logits.
187
- gumbel_noise = -torch.empty_like(router_logits).exponential_().log()
188
- routing_logits = router_logits + self.router_noise_scale * gumbel_noise
189
- preferred_index = torch.argmax(routing_logits, dim=-1)
190
- route_index = (
191
- self._capacity_constrained_route(routing_logits, preferred_index)
192
- if self.capacity_factor
193
- else preferred_index
194
- )
195
- selected_router_probability = router_probs.gather(1, route_index.unsqueeze(1)).squeeze(1)
196
- route_weight = (
197
- selected_router_probability
198
- if self.use_gate_weight
199
- else torch.ones_like(selected_router_probability)
200
- )
201
-
202
- output = torch.zeros_like(flat_x)
203
- for expert_index, expert in enumerate(self.experts):
204
- token_indices = torch.nonzero(route_index == expert_index, as_tuple=False).flatten()
205
- if token_indices.numel() == 0:
206
- continue
207
- expert_input = flat_x.index_select(0, token_indices)
208
- real_token_count = expert_input.size(0)
209
- # TorchAO's FP8 GEMMs require their M dimension to be divisible
210
- # by 16. Sparse routing gives every expert a variable number of
211
- # tokens, so pad only this temporary dispatch buffer and discard
212
- # the corresponding outputs. This changes no real-token math.
213
- fp8_padding = (-real_token_count) % 16
214
- if fp8_padding:
215
- expert_input = torch.cat(
216
- (expert_input, expert_input.new_zeros((fp8_padding, expert_input.size(-1)))), dim=0
217
- )
218
- expert_output = expert(expert_input)[:real_token_count]
219
- routed_output = expert_output * route_weight.index_select(0, token_indices).to(expert_output.dtype).unsqueeze(-1)
220
- # RMSNorm can promote the residual stream to FP32, while the FP8
221
- # expert projections return BF16 under autocast. Restore the
222
- # residual dtype before scattering selected expert outputs.
223
- output = output.index_copy(0, token_indices, routed_output.to(output.dtype))
224
-
225
- expert_fraction = F.one_hot(route_index, num_classes=self.num_experts).to(router_probs.dtype).mean(dim=0)
226
- preferred_fraction = F.one_hot(preferred_index, num_classes=self.num_experts).to(router_probs.dtype).mean(dim=0)
227
- mean_router_prob = router_probs.mean(dim=0)
228
- self.last_expert_fraction = expert_fraction.detach()
229
- self.last_preferred_expert_fraction = preferred_fraction.detach()
230
- self.last_forced_fraction = (route_index != preferred_index).float().mean().detach()
231
- self.last_selected_gate_probability = selected_router_probability.mean().detach()
232
- # Balance the router's *clean preference* rather than the capacity-
233
- # constrained dispatch, which is intentionally already near-uniform.
234
- aux_loss = self.router_aux_loss_coef * self.num_experts * torch.sum(
235
- preferred_fraction * mean_router_prob
236
- )
237
- z_loss = self.router_z_loss_coef * torch.logsumexp(router_logits, dim=-1).square().mean()
238
- return output.reshape(original_shape), aux_loss + z_loss
239
-
240
-
241
- class DecoderBlock(nn.Module):
242
- def __init__(self, cfg: AuroraConfig) -> None:
243
- super().__init__()
244
- self.input_layernorm = RMSNorm(cfg.hidden_size, cfg.rms_norm_eps)
245
- self.self_attn = CausalSelfAttention(cfg)
246
- self.post_attention_layernorm = RMSNorm(cfg.hidden_size, cfg.rms_norm_eps)
247
- self.mlp: nn.Module = Top1MoE(cfg) if cfg.num_experts > 1 else SwiGLU(cfg)
248
-
249
- def forward(self, x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
250
- x = x + self.self_attn(self.input_layernorm(x), cos, sin)
251
- mlp_input = self.post_attention_layernorm(x)
252
- if isinstance(self.mlp, Top1MoE):
253
- mlp_output, router_loss = self.mlp(mlp_input)
254
- else:
255
- mlp_output = self.mlp(mlp_input)
256
- router_loss = x.new_zeros((), dtype=torch.float32)
257
- return x + mlp_output, router_loss
258
-
259
-
260
- class AuroraForCausalLM(nn.Module):
261
- def __init__(self, cfg: AuroraConfig) -> None:
262
- super().__init__()
263
- cfg.validate()
264
- self.cfg = cfg
265
- self.embed_tokens = nn.Embedding(cfg.vocab_size, cfg.hidden_size)
266
- self.layers = nn.ModuleList([DecoderBlock(cfg) for _ in range(cfg.num_layers)])
267
- self.norm = RMSNorm(cfg.hidden_size, cfg.rms_norm_eps)
268
- self.lm_head = nn.Linear(cfg.hidden_size, cfg.vocab_size, bias=False)
269
- self.last_router_loss: torch.Tensor | None = None
270
- self.register_buffer("rope_cos_cached", torch.empty(0), persistent=False)
271
- self.register_buffer("rope_sin_cached", torch.empty(0), persistent=False)
272
- if cfg.tie_word_embeddings:
273
- self.lm_head.weight = self.embed_tokens.weight
274
- self.apply(self._init_weights)
275
-
276
- def _init_weights(self, module: nn.Module) -> None:
277
- if isinstance(module, nn.Linear):
278
- nn.init.normal_(module.weight, mean=0.0, std=0.02)
279
- if module.bias is not None:
280
- nn.init.zeros_(module.bias)
281
- elif isinstance(module, nn.Embedding):
282
- nn.init.normal_(module.weight, mean=0.0, std=0.02)
283
-
284
- def _rope_cache(
285
- self, seq_len: int, device: torch.device, dtype: torch.dtype
286
- ) -> tuple[torch.Tensor, torch.Tensor]:
287
- cache_miss = (
288
- self.rope_cos_cached.numel() == 0
289
- or self.rope_cos_cached.size(0) < seq_len
290
- or self.rope_cos_cached.device != device
291
- or self.rope_cos_cached.dtype != dtype
292
- )
293
- if cache_miss:
294
- cos, sin = precompute_rope_frequencies(
295
- self.cfg.context_length,
296
- self.cfg.head_dim,
297
- self.cfg.rope_theta,
298
- device,
299
- dtype,
300
- )
301
- self.rope_cos_cached = cos
302
- self.rope_sin_cached = sin
303
- return self.rope_cos_cached[:seq_len], self.rope_sin_cached[:seq_len]
304
-
305
- def _rope_dtype(self, x: torch.Tensor) -> torch.dtype:
306
- if x.device.type == "cuda" and torch.is_autocast_enabled("cuda"):
307
- return torch.get_autocast_dtype("cuda")
308
- if x.device.type == "cpu" and torch.is_autocast_enabled("cpu"):
309
- return torch.get_autocast_dtype("cpu")
310
- return x.dtype
311
-
312
- def forward(
313
- self, input_ids: torch.Tensor, labels: torch.Tensor | None = None
314
- ) -> tuple[torch.Tensor, torch.Tensor | None]:
315
- x = self.embed_tokens(input_ids)
316
- cos, sin = self._rope_cache(x.size(1), x.device, self._rope_dtype(x))
317
- router_loss = torch.zeros((), device=x.device, dtype=torch.float32)
318
- for layer in self.layers:
319
- x, layer_router_loss = layer(x, cos, sin)
320
- router_loss = router_loss + layer_router_loss
321
- # Each layer produces a regularizer of the same scale. Average them
322
- # so the configured coefficient has the same meaning regardless of
323
- # depth (instead of becoming 16x stronger in this MoE model).
324
- router_loss = router_loss / max(1, len(self.layers))
325
- self.last_router_loss = router_loss.detach()
326
- x = self.norm(x)
327
- if labels is not None and linear_cross_entropy is not None:
328
- # RMSNorm may promote activations to FP32, but Cut Cross Entropy's
329
- # backward kernel requires BF16/FP16 hidden states.
330
- loss = linear_cross_entropy(x.to(self.lm_head.weight.dtype), self.lm_head.weight, labels, shift=True)
331
- logits = x.new_empty(0)
332
- else:
333
- logits = self.lm_head(x)
334
- loss = None
335
- if labels is not None:
336
- loss = F.cross_entropy(
337
- logits[:, :-1].contiguous().view(-1, logits.size(-1)),
338
- labels[:, 1:].contiguous().view(-1),
339
- )
340
- # Keep evaluation perplexity comparable to dense models: router regularization
341
- # shapes gradients only during training and is not language-model loss.
342
- if loss is not None and self.training:
343
- loss = loss + router_loss
344
- return logits, loss
345
-
346
-
347
- def count_parameters(model: nn.Module) -> int:
348
- seen: set[int] = set()
349
- total = 0
350
- for param in model.parameters():
351
- ident = id(param)
352
- if ident not in seen:
353
- seen.add(ident)
354
- total += param.numel()
355
- return total
356
-
357
-
358
- def count_active_parameters(model: nn.Module) -> int:
359
- """Count parameters used by one top-1 path, without double-counting ties."""
360
- seen: set[int] = set()
361
- total = 0
362
- for name, param in model.named_parameters():
363
- if ".mlp.experts." in name:
364
- expert_index = name.split(".mlp.experts.", 1)[1].split(".", 1)[0]
365
- if expert_index != "0":
366
- continue
367
- ident = id(param)
368
- if ident not in seen:
369
- seen.add(ident)
370
- total += param.numel()
371
- return total
372
-
373
-
374
- def estimate_parameter_count(cfg: AuroraConfig) -> int:
375
- model = AuroraForCausalLM(cfg)
376
- return count_parameters(model)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aurora_config.py DELETED
@@ -1,63 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from dataclasses import dataclass, fields
4
- from pathlib import Path
5
- from typing import Any
6
-
7
- import yaml
8
-
9
-
10
- @dataclass
11
- class AuroraConfig:
12
- model_name: str = "Ember Proelia"
13
- vocab_size: int = 16000
14
- hidden_size: int = 896
15
- num_layers: int = 23
16
- num_attention_heads: int = 14
17
- num_key_value_heads: int = 2
18
- intermediate_size: int = 2432
19
- context_length: int = 2048
20
- rope_theta: float = 500000.0
21
- rms_norm_eps: float = 1.0e-5
22
- qk_norm: bool = True
23
- tie_word_embeddings: bool = True
24
- attention_bias: bool = False
25
- mlp_bias: bool = False
26
- dropout: float = 0.0
27
- num_experts: int = 1
28
- router_aux_loss_coef: float = 0.0
29
- router_z_loss_coef: float = 0.0
30
- router_noise_scale: float = 0.0
31
- moe_capacity_factor: float = 0.0
32
- router_use_gate_weight: bool = False
33
-
34
- @property
35
- def head_dim(self) -> int:
36
- return self.hidden_size // self.num_attention_heads
37
-
38
- def validate(self) -> None:
39
- if self.vocab_size <= 0 or self.hidden_size <= 0 or self.num_layers <= 0:
40
- raise ValueError("vocab_size, hidden_size, and num_layers must be positive")
41
- if self.hidden_size % self.num_attention_heads != 0:
42
- raise ValueError("hidden_size must divide evenly by num_attention_heads")
43
- if self.num_attention_heads % self.num_key_value_heads != 0:
44
- raise ValueError("num_attention_heads must divide evenly by num_key_value_heads")
45
- if self.head_dim % 2 != 0:
46
- raise ValueError("head_dim must be even for RoPE")
47
- if self.context_length <= 0:
48
- raise ValueError("context_length must be positive")
49
- if self.num_experts <= 0:
50
- raise ValueError("num_experts must be positive")
51
-
52
-
53
- def load_model_config(path: str | Path) -> AuroraConfig:
54
- path = Path(path)
55
- with path.open("r", encoding="utf-8") as handle:
56
- raw: dict[str, Any] = yaml.safe_load(handle) or {}
57
- allowed = {field.name for field in fields(AuroraConfig)}
58
- unknown = sorted(set(raw) - allowed)
59
- if unknown:
60
- raise ValueError(f"Unknown model config keys: {unknown}")
61
- cfg = AuroraConfig(**raw)
62
- cfg.validate()
63
- return cfg
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aurora_model.py DELETED
@@ -1,376 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import math
4
-
5
- import torch
6
- import torch.nn as nn
7
- import torch.nn.functional as F
8
-
9
- from .aurora_config import AuroraConfig
10
-
11
- try:
12
- from cut_cross_entropy import linear_cross_entropy
13
- except ImportError:
14
- linear_cross_entropy = None
15
-
16
-
17
- class RMSNorm(nn.Module):
18
- def __init__(self, dim: int, eps: float) -> None:
19
- super().__init__()
20
- self.weight = nn.Parameter(torch.ones(dim))
21
- self.eps = eps
22
-
23
- def forward(self, x: torch.Tensor) -> torch.Tensor:
24
- scale = torch.rsqrt(x.pow(2).mean(dim=-1, keepdim=True) + self.eps)
25
- return self.weight * x * scale
26
-
27
-
28
- def precompute_rope_frequencies(
29
- seq_len: int, head_dim: int, theta: float, device: torch.device, dtype: torch.dtype
30
- ) -> tuple[torch.Tensor, torch.Tensor]:
31
- inv_freq = 1.0 / (theta ** (torch.arange(0, head_dim, 2, device=device).float() / head_dim))
32
- positions = torch.arange(seq_len, device=device).float()
33
- freqs = torch.outer(positions, inv_freq)
34
- return freqs.cos().to(dtype=dtype), freqs.sin().to(dtype=dtype)
35
-
36
-
37
- def apply_rope(x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> torch.Tensor:
38
- cos = cos[None, :, None, :]
39
- sin = sin[None, :, None, :]
40
- x_even = x[..., 0::2]
41
- x_odd = x[..., 1::2]
42
- out = torch.empty_like(x)
43
- out[..., 0::2] = x_even * cos - x_odd * sin
44
- out[..., 1::2] = x_even * sin + x_odd * cos
45
- return out
46
-
47
-
48
- class CausalSelfAttention(nn.Module):
49
- def __init__(self, cfg: AuroraConfig) -> None:
50
- super().__init__()
51
- self.cfg = cfg
52
- self.num_heads = cfg.num_attention_heads
53
- self.num_kv_heads = cfg.num_key_value_heads
54
- self.head_dim = cfg.head_dim
55
- self.kv_repeat = self.num_heads // self.num_kv_heads
56
-
57
- self.q_proj = nn.Linear(cfg.hidden_size, cfg.num_attention_heads * self.head_dim, bias=cfg.attention_bias)
58
- self.k_proj = nn.Linear(cfg.hidden_size, cfg.num_key_value_heads * self.head_dim, bias=cfg.attention_bias)
59
- self.v_proj = nn.Linear(cfg.hidden_size, cfg.num_key_value_heads * self.head_dim, bias=cfg.attention_bias)
60
- self.o_proj = nn.Linear(cfg.hidden_size, cfg.hidden_size, bias=cfg.attention_bias)
61
- self.q_norm = RMSNorm(self.head_dim, cfg.rms_norm_eps) if cfg.qk_norm else nn.Identity()
62
- self.k_norm = RMSNorm(self.head_dim, cfg.rms_norm_eps) if cfg.qk_norm else nn.Identity()
63
- self.dropout_p = cfg.dropout
64
-
65
- def forward(self, x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> torch.Tensor:
66
- batch, seq_len, _ = x.shape
67
- q = self.q_proj(x).view(batch, seq_len, self.num_heads, self.head_dim)
68
- k = self.k_proj(x).view(batch, seq_len, self.num_kv_heads, self.head_dim)
69
- v = self.v_proj(x).view(batch, seq_len, self.num_kv_heads, self.head_dim)
70
-
71
- q = self.q_norm(q)
72
- k = self.k_norm(k)
73
- q = apply_rope(q, cos, sin).transpose(1, 2)
74
- k = apply_rope(k, cos, sin).transpose(1, 2)
75
- v = v.transpose(1, 2)
76
-
77
- # Explicit K/V expansion is mathematically equivalent to GQA and works
78
- # across CUDA, Apple MPS, and CPU PyTorch backends.
79
- if self.kv_repeat > 1:
80
- k = k.repeat_interleave(self.kv_repeat, dim=1)
81
- v = v.repeat_interleave(self.kv_repeat, dim=1)
82
- y = F.scaled_dot_product_attention(
83
- q,
84
- k,
85
- v,
86
- attn_mask=None,
87
- dropout_p=self.dropout_p if self.training else 0.0,
88
- is_causal=True,
89
- )
90
- y = y.transpose(1, 2).contiguous().view(batch, seq_len, self.cfg.hidden_size)
91
- return self.o_proj(y)
92
-
93
-
94
- class SwiGLU(nn.Module):
95
- def __init__(self, cfg: AuroraConfig, intermediate_size: int | None = None) -> None:
96
- super().__init__()
97
- intermediate_size = intermediate_size or cfg.intermediate_size
98
- self.gate_proj = nn.Linear(cfg.hidden_size, intermediate_size, bias=cfg.mlp_bias)
99
- self.up_proj = nn.Linear(cfg.hidden_size, intermediate_size, bias=cfg.mlp_bias)
100
- self.down_proj = nn.Linear(intermediate_size, cfg.hidden_size, bias=cfg.mlp_bias)
101
-
102
- def forward(self, x: torch.Tensor) -> torch.Tensor:
103
- return self.down_proj(F.silu(self.gate_proj(x)) * self.up_proj(x))
104
-
105
-
106
- class Top1MoE(nn.Module):
107
- """Top-1 routed SwiGLU experts with Switch-style router regularization."""
108
-
109
- def __init__(self, cfg: AuroraConfig) -> None:
110
- super().__init__()
111
- self.num_experts = cfg.num_experts
112
- self.router_aux_loss_coef = cfg.router_aux_loss_coef
113
- self.router_z_loss_coef = cfg.router_z_loss_coef
114
- self.router_noise_scale = cfg.router_noise_scale
115
- self.capacity_factor = cfg.moe_capacity_factor
116
- self.use_gate_weight = cfg.router_use_gate_weight
117
- # Keep routing in BF16/FP32 rather than quantizing its logits to FP8.
118
- self.router = nn.Linear(cfg.hidden_size, cfg.num_experts, bias=False)
119
- self.experts = nn.ModuleList([SwiGLU(cfg) for _ in range(cfg.num_experts)])
120
- # Detached summaries from the latest batch, for collapse detection in
121
- # the trainer. They are intentionally not persistent model state.
122
- self.last_expert_fraction: torch.Tensor | None = None
123
- self.last_preferred_expert_fraction: torch.Tensor | None = None
124
- self.last_forced_fraction: torch.Tensor | None = None
125
- self.last_selected_gate_probability: torch.Tensor | None = None
126
-
127
- def _capacity_constrained_route(
128
- self, scores: torch.Tensor, preferred_index: torch.Tensor
129
- ) -> torch.Tensor:
130
- """Assign exactly one expert/token while bounding every expert load.
131
-
132
- Experts keep their highest-scoring first-choice tokens. Overflow is
133
- deterministically retried against each token's next preference. With
134
- five experts this small eager-only matching pass is far cheaper than
135
- an expert MLP and prevents a collapsed router from starving experts.
136
- """
137
- token_count = scores.size(0)
138
- capacity = max(
139
- math.ceil(token_count / self.num_experts),
140
- math.ceil(token_count * self.capacity_factor / self.num_experts),
141
- )
142
- rankings = torch.argsort(scores, dim=-1, descending=True)
143
- assigned = torch.full_like(preferred_index, -1)
144
- remaining = [capacity for _ in range(self.num_experts)]
145
-
146
- for rank in range(self.num_experts):
147
- for expert_index in range(self.num_experts):
148
- slots = remaining[expert_index]
149
- if slots <= 0:
150
- continue
151
- candidates = torch.nonzero(
152
- (assigned < 0) & (rankings[:, rank] == expert_index), as_tuple=False
153
- ).flatten()
154
- candidate_count = candidates.numel()
155
- if candidate_count == 0:
156
- continue
157
- if candidate_count > slots:
158
- candidate_scores = scores.index_select(0, candidates)[:, expert_index]
159
- best_positions = torch.topk(candidate_scores, k=slots, sorted=False).indices
160
- candidates = candidates.index_select(0, best_positions)
161
- candidate_count = slots
162
- assigned.index_fill_(0, candidates, expert_index)
163
- remaining[expert_index] -= candidate_count
164
-
165
- # The combined capacity is at least the token count and every token
166
- # ranks every expert, so this is a logic invariant rather than an
167
- # expected fallback.
168
- if bool(torch.any(assigned < 0)):
169
- raise RuntimeError("capacity-constrained MoE routing left tokens unassigned")
170
- return assigned
171
-
172
- def forward(self, x: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
173
- original_shape = x.shape
174
- flat_x = x.reshape(-1, original_shape[-1])
175
- router_logits = self.router(flat_x).float()
176
- router_probs = torch.softmax(router_logits, dim=-1)
177
- # Routing indices are discrete. Keep this bookkeeping out of the
178
- # autograd graph; language gradients still reach the selected gate
179
- # probability when gate weighting is enabled, while router losses use
180
- # the clean differentiable probabilities below.
181
- with torch.no_grad():
182
- routing_logits = router_logits
183
- if self.training and self.router_noise_scale > 0:
184
- # Noisy top-1 routing keeps early training exploratory. Only
185
- # the discrete expert choice is noisy; probability weights and
186
- # regularization remain based on clean BF16/FP32 logits.
187
- gumbel_noise = -torch.empty_like(router_logits).exponential_().log()
188
- routing_logits = router_logits + self.router_noise_scale * gumbel_noise
189
- preferred_index = torch.argmax(routing_logits, dim=-1)
190
- route_index = (
191
- self._capacity_constrained_route(routing_logits, preferred_index)
192
- if self.capacity_factor
193
- else preferred_index
194
- )
195
- selected_router_probability = router_probs.gather(1, route_index.unsqueeze(1)).squeeze(1)
196
- route_weight = (
197
- selected_router_probability
198
- if self.use_gate_weight
199
- else torch.ones_like(selected_router_probability)
200
- )
201
-
202
- output = torch.zeros_like(flat_x)
203
- for expert_index, expert in enumerate(self.experts):
204
- token_indices = torch.nonzero(route_index == expert_index, as_tuple=False).flatten()
205
- if token_indices.numel() == 0:
206
- continue
207
- expert_input = flat_x.index_select(0, token_indices)
208
- real_token_count = expert_input.size(0)
209
- # TorchAO's FP8 GEMMs require their M dimension to be divisible
210
- # by 16. Sparse routing gives every expert a variable number of
211
- # tokens, so pad only this temporary dispatch buffer and discard
212
- # the corresponding outputs. This changes no real-token math.
213
- fp8_padding = (-real_token_count) % 16
214
- if fp8_padding:
215
- expert_input = torch.cat(
216
- (expert_input, expert_input.new_zeros((fp8_padding, expert_input.size(-1)))), dim=0
217
- )
218
- expert_output = expert(expert_input)[:real_token_count]
219
- routed_output = expert_output * route_weight.index_select(0, token_indices).to(expert_output.dtype).unsqueeze(-1)
220
- # RMSNorm can promote the residual stream to FP32, while the FP8
221
- # expert projections return BF16 under autocast. Restore the
222
- # residual dtype before scattering selected expert outputs.
223
- output = output.index_copy(0, token_indices, routed_output.to(output.dtype))
224
-
225
- expert_fraction = F.one_hot(route_index, num_classes=self.num_experts).to(router_probs.dtype).mean(dim=0)
226
- preferred_fraction = F.one_hot(preferred_index, num_classes=self.num_experts).to(router_probs.dtype).mean(dim=0)
227
- mean_router_prob = router_probs.mean(dim=0)
228
- self.last_expert_fraction = expert_fraction.detach()
229
- self.last_preferred_expert_fraction = preferred_fraction.detach()
230
- self.last_forced_fraction = (route_index != preferred_index).float().mean().detach()
231
- self.last_selected_gate_probability = selected_router_probability.mean().detach()
232
- # Balance the router's *clean preference* rather than the capacity-
233
- # constrained dispatch, which is intentionally already near-uniform.
234
- aux_loss = self.router_aux_loss_coef * self.num_experts * torch.sum(
235
- preferred_fraction * mean_router_prob
236
- )
237
- z_loss = self.router_z_loss_coef * torch.logsumexp(router_logits, dim=-1).square().mean()
238
- return output.reshape(original_shape), aux_loss + z_loss
239
-
240
-
241
- class DecoderBlock(nn.Module):
242
- def __init__(self, cfg: AuroraConfig) -> None:
243
- super().__init__()
244
- self.input_layernorm = RMSNorm(cfg.hidden_size, cfg.rms_norm_eps)
245
- self.self_attn = CausalSelfAttention(cfg)
246
- self.post_attention_layernorm = RMSNorm(cfg.hidden_size, cfg.rms_norm_eps)
247
- self.mlp: nn.Module = Top1MoE(cfg) if cfg.num_experts > 1 else SwiGLU(cfg)
248
-
249
- def forward(self, x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
250
- x = x + self.self_attn(self.input_layernorm(x), cos, sin)
251
- mlp_input = self.post_attention_layernorm(x)
252
- if isinstance(self.mlp, Top1MoE):
253
- mlp_output, router_loss = self.mlp(mlp_input)
254
- else:
255
- mlp_output = self.mlp(mlp_input)
256
- router_loss = x.new_zeros((), dtype=torch.float32)
257
- return x + mlp_output, router_loss
258
-
259
-
260
- class AuroraForCausalLM(nn.Module):
261
- def __init__(self, cfg: AuroraConfig) -> None:
262
- super().__init__()
263
- cfg.validate()
264
- self.cfg = cfg
265
- self.embed_tokens = nn.Embedding(cfg.vocab_size, cfg.hidden_size)
266
- self.layers = nn.ModuleList([DecoderBlock(cfg) for _ in range(cfg.num_layers)])
267
- self.norm = RMSNorm(cfg.hidden_size, cfg.rms_norm_eps)
268
- self.lm_head = nn.Linear(cfg.hidden_size, cfg.vocab_size, bias=False)
269
- self.last_router_loss: torch.Tensor | None = None
270
- self.register_buffer("rope_cos_cached", torch.empty(0), persistent=False)
271
- self.register_buffer("rope_sin_cached", torch.empty(0), persistent=False)
272
- if cfg.tie_word_embeddings:
273
- self.lm_head.weight = self.embed_tokens.weight
274
- self.apply(self._init_weights)
275
-
276
- def _init_weights(self, module: nn.Module) -> None:
277
- if isinstance(module, nn.Linear):
278
- nn.init.normal_(module.weight, mean=0.0, std=0.02)
279
- if module.bias is not None:
280
- nn.init.zeros_(module.bias)
281
- elif isinstance(module, nn.Embedding):
282
- nn.init.normal_(module.weight, mean=0.0, std=0.02)
283
-
284
- def _rope_cache(
285
- self, seq_len: int, device: torch.device, dtype: torch.dtype
286
- ) -> tuple[torch.Tensor, torch.Tensor]:
287
- cache_miss = (
288
- self.rope_cos_cached.numel() == 0
289
- or self.rope_cos_cached.size(0) < seq_len
290
- or self.rope_cos_cached.device != device
291
- or self.rope_cos_cached.dtype != dtype
292
- )
293
- if cache_miss:
294
- cos, sin = precompute_rope_frequencies(
295
- self.cfg.context_length,
296
- self.cfg.head_dim,
297
- self.cfg.rope_theta,
298
- device,
299
- dtype,
300
- )
301
- self.rope_cos_cached = cos
302
- self.rope_sin_cached = sin
303
- return self.rope_cos_cached[:seq_len], self.rope_sin_cached[:seq_len]
304
-
305
- def _rope_dtype(self, x: torch.Tensor) -> torch.dtype:
306
- if x.device.type == "cuda" and torch.is_autocast_enabled("cuda"):
307
- return torch.get_autocast_dtype("cuda")
308
- if x.device.type == "cpu" and torch.is_autocast_enabled("cpu"):
309
- return torch.get_autocast_dtype("cpu")
310
- return x.dtype
311
-
312
- def forward(
313
- self, input_ids: torch.Tensor, labels: torch.Tensor | None = None
314
- ) -> tuple[torch.Tensor, torch.Tensor | None]:
315
- x = self.embed_tokens(input_ids)
316
- cos, sin = self._rope_cache(x.size(1), x.device, self._rope_dtype(x))
317
- router_loss = torch.zeros((), device=x.device, dtype=torch.float32)
318
- for layer in self.layers:
319
- x, layer_router_loss = layer(x, cos, sin)
320
- router_loss = router_loss + layer_router_loss
321
- # Each layer produces a regularizer of the same scale. Average them
322
- # so the configured coefficient has the same meaning regardless of
323
- # depth (instead of becoming 16x stronger in this MoE model).
324
- router_loss = router_loss / max(1, len(self.layers))
325
- self.last_router_loss = router_loss.detach()
326
- x = self.norm(x)
327
- if labels is not None and linear_cross_entropy is not None:
328
- # RMSNorm may promote activations to FP32, but Cut Cross Entropy's
329
- # backward kernel requires BF16/FP16 hidden states.
330
- loss = linear_cross_entropy(x.to(self.lm_head.weight.dtype), self.lm_head.weight, labels, shift=True)
331
- logits = x.new_empty(0)
332
- else:
333
- logits = self.lm_head(x)
334
- loss = None
335
- if labels is not None:
336
- loss = F.cross_entropy(
337
- logits[:, :-1].contiguous().view(-1, logits.size(-1)),
338
- labels[:, 1:].contiguous().view(-1),
339
- )
340
- # Keep evaluation perplexity comparable to dense models: router regularization
341
- # shapes gradients only during training and is not language-model loss.
342
- if loss is not None and self.training:
343
- loss = loss + router_loss
344
- return logits, loss
345
-
346
-
347
- def count_parameters(model: nn.Module) -> int:
348
- seen: set[int] = set()
349
- total = 0
350
- for param in model.parameters():
351
- ident = id(param)
352
- if ident not in seen:
353
- seen.add(ident)
354
- total += param.numel()
355
- return total
356
-
357
-
358
- def count_active_parameters(model: nn.Module) -> int:
359
- """Count parameters used by one top-1 path, without double-counting ties."""
360
- seen: set[int] = set()
361
- total = 0
362
- for name, param in model.named_parameters():
363
- if ".mlp.experts." in name:
364
- expert_index = name.split(".mlp.experts.", 1)[1].split(".", 1)[0]
365
- if expert_index != "0":
366
- continue
367
- ident = id(param)
368
- if ident not in seen:
369
- seen.add(ident)
370
- total += param.numel()
371
- return total
372
-
373
-
374
- def estimate_parameter_count(cfg: AuroraConfig) -> int:
375
- model = AuroraForCausalLM(cfg)
376
- return count_parameters(model)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
benchmarks.json DELETED
@@ -1,2294 +0,0 @@
1
- {
2
- "model": "North-ML1/Aurora-Proelia",
3
- "checkpoint": "/home/arthur/ember-proelia/checkpoints/aurora-proelia-chatml-sft-strong-probe-20260815/final.pt",
4
- "runtime": "native AuroraForCausalLM",
5
- "device": "cuda",
6
- "seed": 20260815,
7
- "prompt_format": "Question: ...\\nAnswer:",
8
- "scoring": {
9
- "mmlu_arc": "conditional log-likelihood of answer letters A/B/C/D",
10
- "hellaswag": "conditional log-likelihood of each ending",
11
- "gsm8k": "greedy generation; last extracted number exact-match"
12
- },
13
- "warning": "These are transparent local slices of public benchmark test/validation splits, not official full leaderboard evaluations.",
14
- "elapsed_seconds": 128.61,
15
- "benchmarks": {
16
- "mmlu": {
17
- "dataset": "cais/mmlu",
18
- "config": "all",
19
- "split": "test",
20
- "sample_rule": "first 1 rows per subject, sorted by subject",
21
- "n": 57,
22
- "correct": 16,
23
- "accuracy": 0.2807017543859649,
24
- "items": [
25
- {
26
- "id": "abstract_algebra",
27
- "gold": 1,
28
- "predicted": 3,
29
- "correct": false,
30
- "scores": [
31
- -11.065407752990723,
32
- -13.722344398498535,
33
- -13.820038795471191,
34
- -8.746415138244629
35
- ]
36
- },
37
- {
38
- "id": "anatomy",
39
- "gold": 0,
40
- "predicted": 0,
41
- "correct": true,
42
- "scores": [
43
- -8.992938995361328,
44
- -12.293392181396484,
45
- -11.663692474365234,
46
- -10.392932891845703
47
- ]
48
- },
49
- {
50
- "id": "astronomy",
51
- "gold": 0,
52
- "predicted": 0,
53
- "correct": true,
54
- "scores": [
55
- -15.312116622924805,
56
- -16.695585250854492,
57
- -16.407697677612305,
58
- -15.772703170776367
59
- ]
60
- },
61
- {
62
- "id": "business_ethics",
63
- "gold": 2,
64
- "predicted": 2,
65
- "correct": true,
66
- "scores": [
67
- -8.371504783630371,
68
- -11.833579063415527,
69
- -5.9145731925964355,
70
- -10.86881160736084
71
- ]
72
- },
73
- {
74
- "id": "clinical_knowledge",
75
- "gold": 0,
76
- "predicted": 0,
77
- "correct": true,
78
- "scores": [
79
- -13.617753028869629,
80
- -13.94362735748291,
81
- -14.37102222442627,
82
- -13.762635231018066
83
- ]
84
- },
85
- {
86
- "id": "college_biology",
87
- "gold": 2,
88
- "predicted": 0,
89
- "correct": false,
90
- "scores": [
91
- -7.839444637298584,
92
- -9.998029708862305,
93
- -10.59827995300293,
94
- -9.899320602416992
95
- ]
96
- },
97
- {
98
- "id": "college_chemistry",
99
- "gold": 3,
100
- "predicted": 0,
101
- "correct": false,
102
- "scores": [
103
- -7.491821765899658,
104
- -9.227158546447754,
105
- -7.884720325469971,
106
- -10.37416934967041
107
- ]
108
- },
109
- {
110
- "id": "college_computer_science",
111
- "gold": 0,
112
- "predicted": 0,
113
- "correct": true,
114
- "scores": [
115
- -13.934694290161133,
116
- -15.274904251098633,
117
- -14.76298713684082,
118
- -14.667703628540039
119
- ]
120
- },
121
- {
122
- "id": "college_mathematics",
123
- "gold": 1,
124
- "predicted": 2,
125
- "correct": false,
126
- "scores": [
127
- -9.38847541809082,
128
- -8.894182205200195,
129
- -7.576257705688477,
130
- -11.495370864868164
131
- ]
132
- },
133
- {
134
- "id": "college_medicine",
135
- "gold": 1,
136
- "predicted": 0,
137
- "correct": false,
138
- "scores": [
139
- -7.948405742645264,
140
- -9.367794036865234,
141
- -9.104778289794922,
142
- -12.021099090576172
143
- ]
144
- },
145
- {
146
- "id": "college_physics",
147
- "gold": 1,
148
- "predicted": 0,
149
- "correct": false,
150
- "scores": [
151
- -7.774142742156982,
152
- -12.240840911865234,
153
- -10.31619644165039,
154
- -10.80251693725586
155
- ]
156
- },
157
- {
158
- "id": "computer_security",
159
- "gold": 2,
160
- "predicted": 1,
161
- "correct": false,
162
- "scores": [
163
- -9.164381980895996,
164
- -8.878569602966309,
165
- -9.307784080505371,
166
- -9.142569541931152
167
- ]
168
- },
169
- {
170
- "id": "conceptual_physics",
171
- "gold": 0,
172
- "predicted": 0,
173
- "correct": true,
174
- "scores": [
175
- -10.650524139404297,
176
- -16.48568344116211,
177
- -17.593189239501953,
178
- -14.196720123291016
179
- ]
180
- },
181
- {
182
- "id": "econometrics",
183
- "gold": 0,
184
- "predicted": 0,
185
- "correct": true,
186
- "scores": [
187
- -11.667923927307129,
188
- -15.554291725158691,
189
- -13.543992042541504,
190
- -15.381836891174316
191
- ]
192
- },
193
- {
194
- "id": "electrical_engineering",
195
- "gold": 3,
196
- "predicted": 2,
197
- "correct": false,
198
- "scores": [
199
- -13.507604598999023,
200
- -11.796621322631836,
201
- -11.196439743041992,
202
- -12.321866989135742
203
- ]
204
- },
205
- {
206
- "id": "elementary_mathematics",
207
- "gold": 2,
208
- "predicted": 3,
209
- "correct": false,
210
- "scores": [
211
- -9.177167892456055,
212
- -11.000051498413086,
213
- -9.727285385131836,
214
- -8.292234420776367
215
- ]
216
- },
217
- {
218
- "id": "formal_logic",
219
- "gold": 3,
220
- "predicted": 0,
221
- "correct": false,
222
- "scores": [
223
- -8.854928970336914,
224
- -10.767251968383789,
225
- -10.492792129516602,
226
- -11.700159072875977
227
- ]
228
- },
229
- {
230
- "id": "global_facts",
231
- "gold": 2,
232
- "predicted": 3,
233
- "correct": false,
234
- "scores": [
235
- -9.921621322631836,
236
- -12.06275749206543,
237
- -11.628408432006836,
238
- -9.798643112182617
239
- ]
240
- },
241
- {
242
- "id": "high_school_biology",
243
- "gold": 0,
244
- "predicted": 0,
245
- "correct": true,
246
- "scores": [
247
- -8.379108428955078,
248
- -10.377635955810547,
249
- -9.365474700927734,
250
- -9.146793365478516
251
- ]
252
- },
253
- {
254
- "id": "high_school_chemistry",
255
- "gold": 0,
256
- "predicted": 2,
257
- "correct": false,
258
- "scores": [
259
- -12.899845123291016,
260
- -14.593929290771484,
261
- -12.671749114990234,
262
- -13.124927520751953
263
- ]
264
- },
265
- {
266
- "id": "high_school_computer_science",
267
- "gold": 2,
268
- "predicted": 0,
269
- "correct": false,
270
- "scores": [
271
- -13.954312324523926,
272
- -17.87796401977539,
273
- -14.44018268585205,
274
- -16.66739273071289
275
- ]
276
- },
277
- {
278
- "id": "high_school_european_history",
279
- "gold": 2,
280
- "predicted": 2,
281
- "correct": true,
282
- "scores": [
283
- -8.392210960388184,
284
- -10.337569236755371,
285
- -8.25827693939209,
286
- -10.247694969177246
287
- ]
288
- },
289
- {
290
- "id": "high_school_geography",
291
- "gold": 1,
292
- "predicted": 0,
293
- "correct": false,
294
- "scores": [
295
- -12.850770950317383,
296
- -15.290803909301758,
297
- -13.659631729125977,
298
- -15.022645950317383
299
- ]
300
- },
301
- {
302
- "id": "high_school_government_and_politics",
303
- "gold": 3,
304
- "predicted": 3,
305
- "correct": true,
306
- "scores": [
307
- -15.277093887329102,
308
- -16.450571060180664,
309
- -14.606401443481445,
310
- -13.837526321411133
311
- ]
312
- },
313
- {
314
- "id": "high_school_macroeconomics",
315
- "gold": 1,
316
- "predicted": 0,
317
- "correct": false,
318
- "scores": [
319
- -6.6448845863342285,
320
- -7.94866418838501,
321
- -7.96520471572876,
322
- -7.020662784576416
323
- ]
324
- },
325
- {
326
- "id": "high_school_mathematics",
327
- "gold": 3,
328
- "predicted": 2,
329
- "correct": false,
330
- "scores": [
331
- -9.252296447753906,
332
- -9.586601257324219,
333
- -8.409431457519531,
334
- -8.650627136230469
335
- ]
336
- },
337
- {
338
- "id": "high_school_microeconomics",
339
- "gold": 0,
340
- "predicted": 2,
341
- "correct": false,
342
- "scores": [
343
- -14.495097160339355,
344
- -14.228175163269043,
345
- -13.366610527038574,
346
- -13.880999565124512
347
- ]
348
- },
349
- {
350
- "id": "high_school_physics",
351
- "gold": 1,
352
- "predicted": 2,
353
- "correct": false,
354
- "scores": [
355
- -10.188655853271484,
356
- -12.201091766357422,
357
- -7.940624237060547,
358
- -10.224483489990234
359
- ]
360
- },
361
- {
362
- "id": "high_school_psychology",
363
- "gold": 0,
364
- "predicted": 0,
365
- "correct": true,
366
- "scores": [
367
- -8.603910446166992,
368
- -13.654096603393555,
369
- -12.107229232788086,
370
- -14.099546432495117
371
- ]
372
- },
373
- {
374
- "id": "high_school_statistics",
375
- "gold": 1,
376
- "predicted": 2,
377
- "correct": false,
378
- "scores": [
379
- -8.421165466308594,
380
- -9.866905212402344,
381
- -7.0621185302734375,
382
- -9.383644104003906
383
- ]
384
- },
385
- {
386
- "id": "high_school_us_history",
387
- "gold": 3,
388
- "predicted": 2,
389
- "correct": false,
390
- "scores": [
391
- -9.264945983886719,
392
- -10.157363891601562,
393
- -6.800559997558594,
394
- -8.552444458007812
395
- ]
396
- },
397
- {
398
- "id": "high_school_world_history",
399
- "gold": 0,
400
- "predicted": 2,
401
- "correct": false,
402
- "scores": [
403
- -10.331644058227539,
404
- -10.24443244934082,
405
- -9.055864334106445,
406
- -9.592950820922852
407
- ]
408
- },
409
- {
410
- "id": "human_aging",
411
- "gold": 0,
412
- "predicted": 3,
413
- "correct": false,
414
- "scores": [
415
- -11.297323226928711,
416
- -13.392545700073242,
417
- -13.670263290405273,
418
- -10.73957633972168
419
- ]
420
- },
421
- {
422
- "id": "human_sexuality",
423
- "gold": 1,
424
- "predicted": 0,
425
- "correct": false,
426
- "scores": [
427
- -10.16053581237793,
428
- -12.549161911010742,
429
- -11.716474533081055,
430
- -11.937253952026367
431
- ]
432
- },
433
- {
434
- "id": "international_law",
435
- "gold": 1,
436
- "predicted": 0,
437
- "correct": false,
438
- "scores": [
439
- -12.278502464294434,
440
- -14.08774471282959,
441
- -12.842947959899902,
442
- -14.707045555114746
443
- ]
444
- },
445
- {
446
- "id": "jurisprudence",
447
- "gold": 3,
448
- "predicted": 1,
449
- "correct": false,
450
- "scores": [
451
- -17.552677154541016,
452
- -16.74979019165039,
453
- -18.41897964477539,
454
- -17.30539321899414
455
- ]
456
- },
457
- {
458
- "id": "logical_fallacies",
459
- "gold": 0,
460
- "predicted": 0,
461
- "correct": true,
462
- "scores": [
463
- -6.788644313812256,
464
- -10.431733131408691,
465
- -9.424210548400879,
466
- -10.552140235900879
467
- ]
468
- },
469
- {
470
- "id": "machine_learning",
471
- "gold": 3,
472
- "predicted": 0,
473
- "correct": false,
474
- "scores": [
475
- -10.600849151611328,
476
- -11.468860626220703,
477
- -12.78879165649414,
478
- -11.993694305419922
479
- ]
480
- },
481
- {
482
- "id": "management",
483
- "gold": 1,
484
- "predicted": 0,
485
- "correct": false,
486
- "scores": [
487
- -6.842371463775635,
488
- -7.841776371002197,
489
- -7.36474084854126,
490
- -7.551119327545166
491
- ]
492
- },
493
- {
494
- "id": "marketing",
495
- "gold": 1,
496
- "predicted": 3,
497
- "correct": false,
498
- "scores": [
499
- -12.726282119750977,
500
- -15.85038948059082,
501
- -13.401376724243164,
502
- -12.384675979614258
503
- ]
504
- },
505
- {
506
- "id": "medical_genetics",
507
- "gold": 1,
508
- "predicted": 2,
509
- "correct": false,
510
- "scores": [
511
- -13.769607543945312,
512
- -16.369468688964844,
513
- -13.299087524414062,
514
- -13.802482604980469
515
- ]
516
- },
517
- {
518
- "id": "miscellaneous",
519
- "gold": 2,
520
- "predicted": 3,
521
- "correct": false,
522
- "scores": [
523
- -7.125714302062988,
524
- -8.332486152648926,
525
- -7.317517280578613,
526
- -5.525883674621582
527
- ]
528
- },
529
- {
530
- "id": "moral_disputes",
531
- "gold": 0,
532
- "predicted": 2,
533
- "correct": false,
534
- "scores": [
535
- -10.763257026672363,
536
- -13.08532428741455,
537
- -9.438855171203613,
538
- -11.360783576965332
539
- ]
540
- },
541
- {
542
- "id": "moral_scenarios",
543
- "gold": 3,
544
- "predicted": 2,
545
- "correct": false,
546
- "scores": [
547
- -10.405111312866211,
548
- -10.830595016479492,
549
- -9.96485710144043,
550
- -11.952451705932617
551
- ]
552
- },
553
- {
554
- "id": "nutrition",
555
- "gold": 2,
556
- "predicted": 3,
557
- "correct": false,
558
- "scores": [
559
- -12.171109199523926,
560
- -11.023301124572754,
561
- -11.43376636505127,
562
- -10.981022834777832
563
- ]
564
- },
565
- {
566
- "id": "philosophy",
567
- "gold": 2,
568
- "predicted": 0,
569
- "correct": false,
570
- "scores": [
571
- -9.276885986328125,
572
- -16.04876708984375,
573
- -14.734336853027344,
574
- -15.995231628417969
575
- ]
576
- },
577
- {
578
- "id": "prehistory",
579
- "gold": 3,
580
- "predicted": 2,
581
- "correct": false,
582
- "scores": [
583
- -15.24170207977295,
584
- -16.234783172607422,
585
- -11.760371208190918,
586
- -16.808399200439453
587
- ]
588
- },
589
- {
590
- "id": "professional_accounting",
591
- "gold": 0,
592
- "predicted": 2,
593
- "correct": false,
594
- "scores": [
595
- -7.388260841369629,
596
- -8.36519718170166,
597
- -6.917466163635254,
598
- -8.646897315979004
599
- ]
600
- },
601
- {
602
- "id": "professional_law",
603
- "gold": 2,
604
- "predicted": 2,
605
- "correct": true,
606
- "scores": [
607
- -9.46272087097168,
608
- -11.342100143432617,
609
- -8.988119125366211,
610
- -11.000295639038086
611
- ]
612
- },
613
- {
614
- "id": "professional_medicine",
615
- "gold": 2,
616
- "predicted": 2,
617
- "correct": true,
618
- "scores": [
619
- -9.14848518371582,
620
- -10.542520523071289,
621
- -7.1248040199279785,
622
- -9.842691421508789
623
- ]
624
- },
625
- {
626
- "id": "professional_psychology",
627
- "gold": 3,
628
- "predicted": 0,
629
- "correct": false,
630
- "scores": [
631
- -9.68390941619873,
632
- -13.24897289276123,
633
- -11.055384635925293,
634
- -12.5396146774292
635
- ]
636
- },
637
- {
638
- "id": "public_relations",
639
- "gold": 1,
640
- "predicted": 0,
641
- "correct": false,
642
- "scores": [
643
- -10.99325180053711,
644
- -13.374870300292969,
645
- -13.460803985595703,
646
- -13.733356475830078
647
- ]
648
- },
649
- {
650
- "id": "security_studies",
651
- "gold": 2,
652
- "predicted": 0,
653
- "correct": false,
654
- "scores": [
655
- -11.936192512512207,
656
- -13.596524238586426,
657
- -12.959683418273926,
658
- -14.541020393371582
659
- ]
660
- },
661
- {
662
- "id": "sociology",
663
- "gold": 2,
664
- "predicted": 0,
665
- "correct": false,
666
- "scores": [
667
- -11.086275100708008,
668
- -14.300546646118164,
669
- -13.146585464477539,
670
- -12.826700210571289
671
- ]
672
- },
673
- {
674
- "id": "us_foreign_policy",
675
- "gold": 0,
676
- "predicted": 3,
677
- "correct": false,
678
- "scores": [
679
- -11.321792602539062,
680
- -12.469329833984375,
681
- -10.786674499511719,
682
- -8.848953247070312
683
- ]
684
- },
685
- {
686
- "id": "virology",
687
- "gold": 0,
688
- "predicted": 0,
689
- "correct": true,
690
- "scores": [
691
- -14.737914085388184,
692
- -19.15251922607422,
693
- -16.356002807617188,
694
- -16.827438354492188
695
- ]
696
- },
697
- {
698
- "id": "world_religions",
699
- "gold": 3,
700
- "predicted": 3,
701
- "correct": true,
702
- "scores": [
703
- -14.619362831115723,
704
- -15.485116004943848,
705
- -14.994767189025879,
706
- -12.115769386291504
707
- ]
708
- }
709
- ]
710
- },
711
- "arc_challenge": {
712
- "dataset": "allenai/ai2_arc",
713
- "config": "ARC-Challenge",
714
- "split": "test",
715
- "sample_rule": "first 50 rows",
716
- "n": 50,
717
- "correct": 15,
718
- "accuracy": 0.3,
719
- "items": [
720
- {
721
- "id": "Mercury_7175875",
722
- "gold": 2,
723
- "predicted": 1,
724
- "correct": false,
725
- "scores": [
726
- -13.257099151611328,
727
- -12.892284393310547,
728
- -13.339046478271484,
729
- -13.150699615478516
730
- ]
731
- },
732
- {
733
- "id": "Mercury_SC_409171",
734
- "gold": 1,
735
- "predicted": 0,
736
- "correct": false,
737
- "scores": [
738
- -5.607930660247803,
739
- -9.590680122375488,
740
- -9.437291145324707,
741
- -12.3324556350708
742
- ]
743
- },
744
- {
745
- "id": "Mercury_SC_408547",
746
- "gold": 2,
747
- "predicted": 2,
748
- "correct": true,
749
- "scores": [
750
- -11.540667533874512,
751
- -13.786578178405762,
752
- -11.154475212097168,
753
- -14.782282829284668
754
- ]
755
- },
756
- {
757
- "id": "Mercury_407327",
758
- "gold": 3,
759
- "predicted": 0,
760
- "correct": false,
761
- "scores": [
762
- -6.625519275665283,
763
- -9.365859985351562,
764
- -7.808945178985596,
765
- -8.823867797851562
766
- ]
767
- },
768
- {
769
- "id": "MCAS_2006_9_44",
770
- "gold": 3,
771
- "predicted": 2,
772
- "correct": false,
773
- "scores": [
774
- -7.209028720855713,
775
- -7.654547214508057,
776
- -6.35488748550415,
777
- -9.375509262084961
778
- ]
779
- },
780
- {
781
- "id": "Mercury_7270393",
782
- "gold": 1,
783
- "predicted": 2,
784
- "correct": false,
785
- "scores": [
786
- -6.907016754150391,
787
- -8.797840118408203,
788
- -6.689937591552734,
789
- -7.817386627197266
790
- ]
791
- },
792
- {
793
- "id": "MCAS_2014_5_7",
794
- "gold": 2,
795
- "predicted": 0,
796
- "correct": false,
797
- "scores": [
798
- -7.3675217628479,
799
- -11.022520065307617,
800
- -10.54194450378418,
801
- -13.059621810913086
802
- ]
803
- },
804
- {
805
- "id": "Mercury_7086660",
806
- "gold": 2,
807
- "predicted": 3,
808
- "correct": false,
809
- "scores": [
810
- -12.918753623962402,
811
- -13.41837215423584,
812
- -12.168532371520996,
813
- -12.031256675720215
814
- ]
815
- },
816
- {
817
- "id": "Mercury_7168805",
818
- "gold": 1,
819
- "predicted": 2,
820
- "correct": false,
821
- "scores": [
822
- -11.670303344726562,
823
- -11.43414306640625,
824
- -10.112014770507812,
825
- -11.487091064453125
826
- ]
827
- },
828
- {
829
- "id": "MCAS_2003_8_11",
830
- "gold": 0,
831
- "predicted": 2,
832
- "correct": false,
833
- "scores": [
834
- -13.72336483001709,
835
- -16.018110275268555,
836
- -10.757201194763184,
837
- -14.797911643981934
838
- ]
839
- },
840
- {
841
- "id": "Mercury_7250058",
842
- "gold": 1,
843
- "predicted": 0,
844
- "correct": false,
845
- "scores": [
846
- -7.975772857666016,
847
- -10.70980453491211,
848
- -10.912708282470703,
849
- -12.006580352783203
850
- ]
851
- },
852
- {
853
- "id": "Mercury_7012740",
854
- "gold": 0,
855
- "predicted": 0,
856
- "correct": true,
857
- "scores": [
858
- -12.445462226867676,
859
- -15.087506294250488,
860
- -13.499478340148926,
861
- -14.967564582824707
862
- ]
863
- },
864
- {
865
- "id": "Mercury_LBS10610",
866
- "gold": 2,
867
- "predicted": 2,
868
- "correct": true,
869
- "scores": [
870
- -10.429519653320312,
871
- -12.155929565429688,
872
- -9.80712890625,
873
- -9.881828308105469
874
- ]
875
- },
876
- {
877
- "id": "Mercury_SC_407400",
878
- "gold": 2,
879
- "predicted": 0,
880
- "correct": false,
881
- "scores": [
882
- -7.77410364151001,
883
- -11.508357048034668,
884
- -9.733233451843262,
885
- -11.378230094909668
886
- ]
887
- },
888
- {
889
- "id": "Mercury_7212993",
890
- "gold": 2,
891
- "predicted": 2,
892
- "correct": true,
893
- "scores": [
894
- -13.05376148223877,
895
- -15.286519050598145,
896
- -12.013554573059082,
897
- -14.143208503723145
898
- ]
899
- },
900
- {
901
- "id": "Mercury_SC_413240",
902
- "gold": 0,
903
- "predicted": 0,
904
- "correct": true,
905
- "scores": [
906
- -17.878520965576172,
907
- -21.556209564208984,
908
- -19.954063415527344,
909
- -18.31875991821289
910
- ]
911
- },
912
- {
913
- "id": "Mercury_7186358",
914
- "gold": 2,
915
- "predicted": 0,
916
- "correct": false,
917
- "scores": [
918
- -7.592679977416992,
919
- -11.186834335327148,
920
- -10.437093734741211,
921
- -10.743894577026367
922
- ]
923
- },
924
- {
925
- "id": "Mercury_7166425",
926
- "gold": 1,
927
- "predicted": 2,
928
- "correct": false,
929
- "scores": [
930
- -13.151106834411621,
931
- -14.948561668395996,
932
- -12.550688743591309,
933
- -14.81430721282959
934
- ]
935
- },
936
- {
937
- "id": "MDSA_2007_8_3",
938
- "gold": 0,
939
- "predicted": 2,
940
- "correct": false,
941
- "scores": [
942
- -10.31587028503418,
943
- -11.113393783569336,
944
- -10.048635482788086,
945
- -10.456602096557617
946
- ]
947
- },
948
- {
949
- "id": "Mercury_7094290",
950
- "gold": 2,
951
- "predicted": 2,
952
- "correct": true,
953
- "scores": [
954
- -12.274971961975098,
955
- -14.554680824279785,
956
- -12.17855167388916,
957
- -13.716797828674316
958
- ]
959
- },
960
- {
961
- "id": "Mercury_7186568",
962
- "gold": 1,
963
- "predicted": 2,
964
- "correct": false,
965
- "scores": [
966
- -10.662038803100586,
967
- -13.914113998413086,
968
- -10.246809005737305,
969
- -13.753362655639648
970
- ]
971
- },
972
- {
973
- "id": "Mercury_402216",
974
- "gold": 1,
975
- "predicted": 2,
976
- "correct": false,
977
- "scores": [
978
- -10.382719993591309,
979
- -11.716048240661621,
980
- -8.407286643981934,
981
- -10.41538143157959
982
- ]
983
- },
984
- {
985
- "id": "Mercury_404894",
986
- "gold": 0,
987
- "predicted": 2,
988
- "correct": false,
989
- "scores": [
990
- -6.746318817138672,
991
- -8.517719268798828,
992
- -5.736660003662109,
993
- -7.205410003662109
994
- ]
995
- },
996
- {
997
- "id": "MCAS_2002_8_11",
998
- "gold": 2,
999
- "predicted": 0,
1000
- "correct": false,
1001
- "scores": [
1002
- -9.341812133789062,
1003
- -11.586677551269531,
1004
- -9.9390869140625,
1005
- -10.084205627441406
1006
- ]
1007
- },
1008
- {
1009
- "id": "Mercury_SC_405086",
1010
- "gold": 1,
1011
- "predicted": 0,
1012
- "correct": false,
1013
- "scores": [
1014
- -12.923977851867676,
1015
- -14.6491060256958,
1016
- -13.37151050567627,
1017
- -13.287083625793457
1018
- ]
1019
- },
1020
- {
1021
- "id": "Mercury_SC_408324",
1022
- "gold": 3,
1023
- "predicted": 3,
1024
- "correct": true,
1025
- "scores": [
1026
- -15.907831192016602,
1027
- -17.123109817504883,
1028
- -14.713815689086914,
1029
- -14.527193069458008
1030
- ]
1031
- },
1032
- {
1033
- "id": "Mercury_7218820",
1034
- "gold": 1,
1035
- "predicted": 2,
1036
- "correct": false,
1037
- "scores": [
1038
- -8.5324068069458,
1039
- -11.384137153625488,
1040
- -8.22386646270752,
1041
- -10.3728609085083
1042
- ]
1043
- },
1044
- {
1045
- "id": "Mercury_412202",
1046
- "gold": 1,
1047
- "predicted": 0,
1048
- "correct": false,
1049
- "scores": [
1050
- -14.737939834594727,
1051
- -17.706117630004883,
1052
- -18.98332405090332,
1053
- -18.239458084106445
1054
- ]
1055
- },
1056
- {
1057
- "id": "Mercury_SC_409139",
1058
- "gold": 2,
1059
- "predicted": 0,
1060
- "correct": false,
1061
- "scores": [
1062
- -12.48038387298584,
1063
- -16.033302307128906,
1064
- -13.108176231384277,
1065
- -14.910483360290527
1066
- ]
1067
- },
1068
- {
1069
- "id": "Mercury_400687",
1070
- "gold": 1,
1071
- "predicted": 2,
1072
- "correct": false,
1073
- "scores": [
1074
- -12.036847114562988,
1075
- -13.12477970123291,
1076
- -11.944828987121582,
1077
- -13.722100257873535
1078
- ]
1079
- },
1080
- {
1081
- "id": "Mercury_7171605",
1082
- "gold": 3,
1083
- "predicted": 0,
1084
- "correct": false,
1085
- "scores": [
1086
- -12.876701354980469,
1087
- -16.208396911621094,
1088
- -14.424369812011719,
1089
- -14.705284118652344
1090
- ]
1091
- },
1092
- {
1093
- "id": "Mercury_7210245",
1094
- "gold": 2,
1095
- "predicted": 2,
1096
- "correct": true,
1097
- "scores": [
1098
- -13.27576732635498,
1099
- -17.60330581665039,
1100
- -12.7488431930542,
1101
- -14.3162260055542
1102
- ]
1103
- },
1104
- {
1105
- "id": "AKDE&ED_2008_4_25",
1106
- "gold": 0,
1107
- "predicted": 2,
1108
- "correct": false,
1109
- "scores": [
1110
- -10.140519142150879,
1111
- -11.45272159576416,
1112
- -9.074936866760254,
1113
- -10.698594093322754
1114
- ]
1115
- },
1116
- {
1117
- "id": "AKDE&ED_2008_4_19",
1118
- "gold": 2,
1119
- "predicted": 0,
1120
- "correct": false,
1121
- "scores": [
1122
- -10.919215202331543,
1123
- -15.9137601852417,
1124
- -15.312006950378418,
1125
- -16.290857315063477
1126
- ]
1127
- },
1128
- {
1129
- "id": "Mercury_SC_400402",
1130
- "gold": 0,
1131
- "predicted": 0,
1132
- "correct": true,
1133
- "scores": [
1134
- -7.694456577301025,
1135
- -11.839841842651367,
1136
- -10.010038375854492,
1137
- -10.61762809753418
1138
- ]
1139
- },
1140
- {
1141
- "id": "Mercury_7234308",
1142
- "gold": 0,
1143
- "predicted": 0,
1144
- "correct": true,
1145
- "scores": [
1146
- -8.998245239257812,
1147
- -13.028724670410156,
1148
- -11.51690673828125,
1149
- -11.057670593261719
1150
- ]
1151
- },
1152
- {
1153
- "id": "ACTAAP_2014_5_8",
1154
- "gold": 1,
1155
- "predicted": 0,
1156
- "correct": false,
1157
- "scores": [
1158
- -9.374757766723633,
1159
- -10.552026748657227,
1160
- -11.106287002563477,
1161
- -11.348367691040039
1162
- ]
1163
- },
1164
- {
1165
- "id": "Mercury_400407",
1166
- "gold": 1,
1167
- "predicted": 2,
1168
- "correct": false,
1169
- "scores": [
1170
- -11.040645599365234,
1171
- -11.55923843383789,
1172
- -9.535724639892578,
1173
- -11.937259674072266
1174
- ]
1175
- },
1176
- {
1177
- "id": "Mercury_7116288",
1178
- "gold": 2,
1179
- "predicted": 2,
1180
- "correct": true,
1181
- "scores": [
1182
- -8.690303802490234,
1183
- -10.50320053100586,
1184
- -6.748226642608643,
1185
- -10.19913101196289
1186
- ]
1187
- },
1188
- {
1189
- "id": "MCAS_2004_9_15-v1",
1190
- "gold": 1,
1191
- "predicted": 0,
1192
- "correct": false,
1193
- "scores": [
1194
- -10.780317306518555,
1195
- -12.197942733764648,
1196
- -11.332799911499023,
1197
- -11.70692253112793
1198
- ]
1199
- },
1200
- {
1201
- "id": "NYSEDREGENTS_2015_4_26",
1202
- "gold": 2,
1203
- "predicted": 0,
1204
- "correct": false,
1205
- "scores": [
1206
- -7.854938507080078,
1207
- -11.25619888305664,
1208
- -10.267627716064453,
1209
- -11.087566375732422
1210
- ]
1211
- },
1212
- {
1213
- "id": "Mercury_SC_401620",
1214
- "gold": 0,
1215
- "predicted": 2,
1216
- "correct": false,
1217
- "scores": [
1218
- -11.677645683288574,
1219
- -10.38996410369873,
1220
- -9.348132133483887,
1221
- -12.03480052947998
1222
- ]
1223
- },
1224
- {
1225
- "id": "Mercury_400877",
1226
- "gold": 2,
1227
- "predicted": 2,
1228
- "correct": true,
1229
- "scores": [
1230
- -13.356064796447754,
1231
- -16.007526397705078,
1232
- -11.087029457092285,
1233
- -12.589570045471191
1234
- ]
1235
- },
1236
- {
1237
- "id": "Mercury_7174213",
1238
- "gold": 3,
1239
- "predicted": 0,
1240
- "correct": false,
1241
- "scores": [
1242
- -10.955911636352539,
1243
- -15.54490852355957,
1244
- -11.857767105102539,
1245
- -13.05388069152832
1246
- ]
1247
- },
1248
- {
1249
- "id": "NYSEDREGENTS_2008_8_34",
1250
- "gold": 1,
1251
- "predicted": 1,
1252
- "correct": true,
1253
- "scores": [
1254
- -8.583789825439453,
1255
- -8.559322357177734,
1256
- -10.30838394165039,
1257
- -8.716968536376953
1258
- ]
1259
- },
1260
- {
1261
- "id": "Mercury_7212398",
1262
- "gold": 1,
1263
- "predicted": 1,
1264
- "correct": true,
1265
- "scores": [
1266
- -12.839554786682129,
1267
- -12.759804725646973,
1268
- -13.434563636779785,
1269
- -13.291665077209473
1270
- ]
1271
- },
1272
- {
1273
- "id": "Mercury_SC_401290",
1274
- "gold": 2,
1275
- "predicted": 0,
1276
- "correct": false,
1277
- "scores": [
1278
- -6.22521448135376,
1279
- -7.722757816314697,
1280
- -8.017831802368164,
1281
- -8.484460830688477
1282
- ]
1283
- },
1284
- {
1285
- "id": "Mercury_SC_402120",
1286
- "gold": 2,
1287
- "predicted": 0,
1288
- "correct": false,
1289
- "scores": [
1290
- -8.452454566955566,
1291
- -11.386002540588379,
1292
- -11.028359413146973,
1293
- -12.88771915435791
1294
- ]
1295
- },
1296
- {
1297
- "id": "Mercury_184975",
1298
- "gold": 2,
1299
- "predicted": 0,
1300
- "correct": false,
1301
- "scores": [
1302
- -10.78169059753418,
1303
- -14.064840316772461,
1304
- -10.904233932495117,
1305
- -12.338041305541992
1306
- ]
1307
- },
1308
- {
1309
- "id": "Mercury_SC_400578",
1310
- "gold": 0,
1311
- "predicted": 0,
1312
- "correct": true,
1313
- "scores": [
1314
- -9.3740234375,
1315
- -12.418960571289062,
1316
- -11.314460754394531,
1317
- -12.545074462890625
1318
- ]
1319
- }
1320
- ]
1321
- },
1322
- "hellaswag": {
1323
- "dataset": "Rowan/hellaswag",
1324
- "split": "validation",
1325
- "sample_rule": "first 50 rows",
1326
- "n": 50,
1327
- "correct": 19,
1328
- "accuracy": 0.38,
1329
- "items": [
1330
- {
1331
- "id": 24,
1332
- "gold": 3,
1333
- "predicted": 2,
1334
- "correct": false,
1335
- "scores": [
1336
- -58.97417068481445,
1337
- -56.32265853881836,
1338
- -35.89630126953125,
1339
- -46.27552795410156
1340
- ]
1341
- },
1342
- {
1343
- "id": 92,
1344
- "gold": 3,
1345
- "predicted": 1,
1346
- "correct": false,
1347
- "scores": [
1348
- -52.01768493652344,
1349
- -41.43523406982422,
1350
- -49.460594177246094,
1351
- -64.71932983398438
1352
- ]
1353
- },
1354
- {
1355
- "id": 106,
1356
- "gold": 2,
1357
- "predicted": 2,
1358
- "correct": true,
1359
- "scores": [
1360
- -84.59806823730469,
1361
- -81.92660522460938,
1362
- -47.8038330078125,
1363
- -152.38461303710938
1364
- ]
1365
- },
1366
- {
1367
- "id": 114,
1368
- "gold": 2,
1369
- "predicted": 0,
1370
- "correct": false,
1371
- "scores": [
1372
- -38.21574401855469,
1373
- -43.240745544433594,
1374
- -53.74546813964844,
1375
- -48.1297607421875
1376
- ]
1377
- },
1378
- {
1379
- "id": 116,
1380
- "gold": 1,
1381
- "predicted": 1,
1382
- "correct": true,
1383
- "scores": [
1384
- -35.632606506347656,
1385
- -30.693992614746094,
1386
- -40.05568313598633,
1387
- -37.1392707824707
1388
- ]
1389
- },
1390
- {
1391
- "id": 117,
1392
- "gold": 1,
1393
- "predicted": 2,
1394
- "correct": false,
1395
- "scores": [
1396
- -45.845428466796875,
1397
- -64.99568176269531,
1398
- -29.720195770263672,
1399
- -72.37071990966797
1400
- ]
1401
- },
1402
- {
1403
- "id": 149,
1404
- "gold": 2,
1405
- "predicted": 1,
1406
- "correct": false,
1407
- "scores": [
1408
- -53.611968994140625,
1409
- -41.80815124511719,
1410
- -72.14735412597656,
1411
- -48.25930404663086
1412
- ]
1413
- },
1414
- {
1415
- "id": 170,
1416
- "gold": 0,
1417
- "predicted": 3,
1418
- "correct": false,
1419
- "scores": [
1420
- -101.25760650634766,
1421
- -94.36492919921875,
1422
- -70.56925964355469,
1423
- -64.97718811035156
1424
- ]
1425
- },
1426
- {
1427
- "id": 180,
1428
- "gold": 1,
1429
- "predicted": 2,
1430
- "correct": false,
1431
- "scores": [
1432
- -165.63174438476562,
1433
- -69.18826293945312,
1434
- -37.464599609375,
1435
- -73.97086334228516
1436
- ]
1437
- },
1438
- {
1439
- "id": 182,
1440
- "gold": 1,
1441
- "predicted": 1,
1442
- "correct": true,
1443
- "scores": [
1444
- -86.95623779296875,
1445
- -60.08461380004883,
1446
- -110.89420318603516,
1447
- -108.59903717041016
1448
- ]
1449
- },
1450
- {
1451
- "id": 185,
1452
- "gold": 3,
1453
- "predicted": 2,
1454
- "correct": false,
1455
- "scores": [
1456
- -63.292137145996094,
1457
- -89.58827209472656,
1458
- -44.102386474609375,
1459
- -65.39309692382812
1460
- ]
1461
- },
1462
- {
1463
- "id": 186,
1464
- "gold": 3,
1465
- "predicted": 2,
1466
- "correct": false,
1467
- "scores": [
1468
- -55.55475997924805,
1469
- -91.25175476074219,
1470
- -47.01008987426758,
1471
- -98.15768432617188
1472
- ]
1473
- },
1474
- {
1475
- "id": 187,
1476
- "gold": 2,
1477
- "predicted": 2,
1478
- "correct": true,
1479
- "scores": [
1480
- -110.35063171386719,
1481
- -70.6715087890625,
1482
- -49.93235397338867,
1483
- -72.15544128417969
1484
- ]
1485
- },
1486
- {
1487
- "id": 188,
1488
- "gold": 2,
1489
- "predicted": 2,
1490
- "correct": true,
1491
- "scores": [
1492
- -81.07919311523438,
1493
- -117.24858093261719,
1494
- -71.77798461914062,
1495
- -72.8318862915039
1496
- ]
1497
- },
1498
- {
1499
- "id": 192,
1500
- "gold": 0,
1501
- "predicted": 0,
1502
- "correct": true,
1503
- "scores": [
1504
- -60.681610107421875,
1505
- -61.50605010986328,
1506
- -77.38455963134766,
1507
- -65.66329956054688
1508
- ]
1509
- },
1510
- {
1511
- "id": 200,
1512
- "gold": 3,
1513
- "predicted": 3,
1514
- "correct": true,
1515
- "scores": [
1516
- -102.02816009521484,
1517
- -108.43778991699219,
1518
- -126.33024597167969,
1519
- -73.75164794921875
1520
- ]
1521
- },
1522
- {
1523
- "id": 225,
1524
- "gold": 2,
1525
- "predicted": 1,
1526
- "correct": false,
1527
- "scores": [
1528
- -79.86792755126953,
1529
- -61.519248962402344,
1530
- -87.25880432128906,
1531
- -64.83087158203125
1532
- ]
1533
- },
1534
- {
1535
- "id": 245,
1536
- "gold": 0,
1537
- "predicted": 2,
1538
- "correct": false,
1539
- "scores": [
1540
- -96.00947570800781,
1541
- -120.17504119873047,
1542
- -78.04824829101562,
1543
- -100.17385864257812
1544
- ]
1545
- },
1546
- {
1547
- "id": 246,
1548
- "gold": 1,
1549
- "predicted": 1,
1550
- "correct": true,
1551
- "scores": [
1552
- -78.3630142211914,
1553
- -63.59217834472656,
1554
- -64.74330139160156,
1555
- -102.46669006347656
1556
- ]
1557
- },
1558
- {
1559
- "id": 247,
1560
- "gold": 1,
1561
- "predicted": 2,
1562
- "correct": false,
1563
- "scores": [
1564
- -96.45269775390625,
1565
- -82.45916748046875,
1566
- -74.95116424560547,
1567
- -91.07105255126953
1568
- ]
1569
- },
1570
- {
1571
- "id": 282,
1572
- "gold": 1,
1573
- "predicted": 1,
1574
- "correct": true,
1575
- "scores": [
1576
- -75.71699523925781,
1577
- -50.46632385253906,
1578
- -74.38658905029297,
1579
- -116.06935119628906
1580
- ]
1581
- },
1582
- {
1583
- "id": 354,
1584
- "gold": 0,
1585
- "predicted": 3,
1586
- "correct": false,
1587
- "scores": [
1588
- -56.19131851196289,
1589
- -62.31458282470703,
1590
- -88.37478637695312,
1591
- -50.45991516113281
1592
- ]
1593
- },
1594
- {
1595
- "id": 378,
1596
- "gold": 3,
1597
- "predicted": 3,
1598
- "correct": true,
1599
- "scores": [
1600
- -43.91583251953125,
1601
- -101.2091293334961,
1602
- -62.915958404541016,
1603
- -41.873687744140625
1604
- ]
1605
- },
1606
- {
1607
- "id": 380,
1608
- "gold": 3,
1609
- "predicted": 3,
1610
- "correct": true,
1611
- "scores": [
1612
- -56.52827835083008,
1613
- -78.88848876953125,
1614
- -78.91925811767578,
1615
- -48.379554748535156
1616
- ]
1617
- },
1618
- {
1619
- "id": 385,
1620
- "gold": 0,
1621
- "predicted": 2,
1622
- "correct": false,
1623
- "scores": [
1624
- -89.74951171875,
1625
- -83.21479797363281,
1626
- -76.45021057128906,
1627
- -127.01903533935547
1628
- ]
1629
- },
1630
- {
1631
- "id": 386,
1632
- "gold": 3,
1633
- "predicted": 1,
1634
- "correct": false,
1635
- "scores": [
1636
- -190.13619995117188,
1637
- -77.71086120605469,
1638
- -106.107666015625,
1639
- -111.29759216308594
1640
- ]
1641
- },
1642
- {
1643
- "id": 393,
1644
- "gold": 0,
1645
- "predicted": 0,
1646
- "correct": true,
1647
- "scores": [
1648
- -54.82701110839844,
1649
- -80.93632507324219,
1650
- -109.81082153320312,
1651
- -64.51954650878906
1652
- ]
1653
- },
1654
- {
1655
- "id": 398,
1656
- "gold": 3,
1657
- "predicted": 1,
1658
- "correct": false,
1659
- "scores": [
1660
- -110.66639709472656,
1661
- -64.37057495117188,
1662
- -94.86198425292969,
1663
- -77.98493957519531
1664
- ]
1665
- },
1666
- {
1667
- "id": 399,
1668
- "gold": 1,
1669
- "predicted": 3,
1670
- "correct": false,
1671
- "scores": [
1672
- -57.262474060058594,
1673
- -48.567928314208984,
1674
- -75.16720581054688,
1675
- -47.18919372558594
1676
- ]
1677
- },
1678
- {
1679
- "id": 400,
1680
- "gold": 3,
1681
- "predicted": 3,
1682
- "correct": true,
1683
- "scores": [
1684
- -83.77692413330078,
1685
- -84.8166275024414,
1686
- -71.52482604980469,
1687
- -70.779296875
1688
- ]
1689
- },
1690
- {
1691
- "id": 402,
1692
- "gold": 1,
1693
- "predicted": 2,
1694
- "correct": false,
1695
- "scores": [
1696
- -59.79026794433594,
1697
- -52.81324768066406,
1698
- -38.623291015625,
1699
- -65.29905700683594
1700
- ]
1701
- },
1702
- {
1703
- "id": 478,
1704
- "gold": 0,
1705
- "predicted": 1,
1706
- "correct": false,
1707
- "scores": [
1708
- -51.93339920043945,
1709
- -35.12632751464844,
1710
- -68.02326202392578,
1711
- -54.45841979980469
1712
- ]
1713
- },
1714
- {
1715
- "id": 479,
1716
- "gold": 1,
1717
- "predicted": 1,
1718
- "correct": true,
1719
- "scores": [
1720
- -118.08658599853516,
1721
- -33.16276168823242,
1722
- -88.72938537597656,
1723
- -156.5254669189453
1724
- ]
1725
- },
1726
- {
1727
- "id": 491,
1728
- "gold": 2,
1729
- "predicted": 1,
1730
- "correct": false,
1731
- "scores": [
1732
- -90.12571716308594,
1733
- -52.412841796875,
1734
- -80.73646545410156,
1735
- -98.206787109375
1736
- ]
1737
- },
1738
- {
1739
- "id": 492,
1740
- "gold": 0,
1741
- "predicted": 2,
1742
- "correct": false,
1743
- "scores": [
1744
- -93.69236755371094,
1745
- -97.57264709472656,
1746
- -70.7070541381836,
1747
- -87.77411651611328
1748
- ]
1749
- },
1750
- {
1751
- "id": 493,
1752
- "gold": 0,
1753
- "predicted": 2,
1754
- "correct": false,
1755
- "scores": [
1756
- -119.6843032836914,
1757
- -61.70817947387695,
1758
- -40.689002990722656,
1759
- -89.13894653320312
1760
- ]
1761
- },
1762
- {
1763
- "id": 503,
1764
- "gold": 3,
1765
- "predicted": 1,
1766
- "correct": false,
1767
- "scores": [
1768
- -71.94010925292969,
1769
- -46.83222579956055,
1770
- -102.84877014160156,
1771
- -121.54273986816406
1772
- ]
1773
- },
1774
- {
1775
- "id": 527,
1776
- "gold": 2,
1777
- "predicted": 0,
1778
- "correct": false,
1779
- "scores": [
1780
- -47.260093688964844,
1781
- -57.814613342285156,
1782
- -84.59222412109375,
1783
- -51.496944427490234
1784
- ]
1785
- },
1786
- {
1787
- "id": 529,
1788
- "gold": 2,
1789
- "predicted": 2,
1790
- "correct": true,
1791
- "scores": [
1792
- -63.52226638793945,
1793
- -61.843055725097656,
1794
- -60.18296432495117,
1795
- -78.32892608642578
1796
- ]
1797
- },
1798
- {
1799
- "id": 560,
1800
- "gold": 1,
1801
- "predicted": 3,
1802
- "correct": false,
1803
- "scores": [
1804
- -99.75664520263672,
1805
- -95.23532104492188,
1806
- -113.17375183105469,
1807
- -91.73249053955078
1808
- ]
1809
- },
1810
- {
1811
- "id": 586,
1812
- "gold": 2,
1813
- "predicted": 2,
1814
- "correct": true,
1815
- "scores": [
1816
- -143.83102416992188,
1817
- -99.50735473632812,
1818
- -64.4426040649414,
1819
- -72.21981811523438
1820
- ]
1821
- },
1822
- {
1823
- "id": 604,
1824
- "gold": 2,
1825
- "predicted": 3,
1826
- "correct": false,
1827
- "scores": [
1828
- -96.4774398803711,
1829
- -221.2063446044922,
1830
- -158.43115234375,
1831
- -81.52798461914062
1832
- ]
1833
- },
1834
- {
1835
- "id": 605,
1836
- "gold": 3,
1837
- "predicted": 3,
1838
- "correct": true,
1839
- "scores": [
1840
- -92.68693542480469,
1841
- -68.42957305908203,
1842
- -188.98281860351562,
1843
- -64.8801498413086
1844
- ]
1845
- },
1846
- {
1847
- "id": 606,
1848
- "gold": 2,
1849
- "predicted": 3,
1850
- "correct": false,
1851
- "scores": [
1852
- -89.72834777832031,
1853
- -85.41148376464844,
1854
- -190.0895233154297,
1855
- -83.48924255371094
1856
- ]
1857
- },
1858
- {
1859
- "id": 615,
1860
- "gold": 0,
1861
- "predicted": 2,
1862
- "correct": false,
1863
- "scores": [
1864
- -81.62350463867188,
1865
- -109.8926010131836,
1866
- -74.27828979492188,
1867
- -110.36332702636719
1868
- ]
1869
- },
1870
- {
1871
- "id": 616,
1872
- "gold": 0,
1873
- "predicted": 1,
1874
- "correct": false,
1875
- "scores": [
1876
- -138.66162109375,
1877
- -70.92147827148438,
1878
- -96.69862365722656,
1879
- -129.30487060546875
1880
- ]
1881
- },
1882
- {
1883
- "id": 618,
1884
- "gold": 0,
1885
- "predicted": 0,
1886
- "correct": true,
1887
- "scores": [
1888
- -54.799461364746094,
1889
- -70.267333984375,
1890
- -92.53612518310547,
1891
- -183.44483947753906
1892
- ]
1893
- },
1894
- {
1895
- "id": 619,
1896
- "gold": 0,
1897
- "predicted": 0,
1898
- "correct": true,
1899
- "scores": [
1900
- -61.755313873291016,
1901
- -82.50668334960938,
1902
- -90.70120239257812,
1903
- -72.40680694580078
1904
- ]
1905
- },
1906
- {
1907
- "id": 689,
1908
- "gold": 3,
1909
- "predicted": 0,
1910
- "correct": false,
1911
- "scores": [
1912
- -30.048839569091797,
1913
- -51.66824722290039,
1914
- -49.33673095703125,
1915
- -47.256568908691406
1916
- ]
1917
- },
1918
- {
1919
- "id": 708,
1920
- "gold": 2,
1921
- "predicted": 3,
1922
- "correct": false,
1923
- "scores": [
1924
- -115.7948989868164,
1925
- -117.76850891113281,
1926
- -121.9887466430664,
1927
- -85.19407653808594
1928
- ]
1929
- }
1930
- ]
1931
- },
1932
- "gsm8k": {
1933
- "dataset": "openai/gsm8k",
1934
- "config": "main",
1935
- "split": "test",
1936
- "sample_rule": "first 50 rows",
1937
- "n": 50,
1938
- "correct": 0,
1939
- "accuracy": 0.0,
1940
- "items": [
1941
- {
1942
- "id": 0,
1943
- "gold": "18",
1944
- "predicted": null,
1945
- "correct": false,
1946
- "response": "I can answer this question with the help of an equation."
1947
- },
1948
- {
1949
- "id": 1,
1950
- "gold": "3",
1951
- "predicted": "2",
1952
- "correct": false,
1953
- "response": "There are 2 bolts in total."
1954
- },
1955
- {
1956
- "id": 2,
1957
- "gold": "70000",
1958
- "predicted": "150",
1959
- "correct": false,
1960
- "response": "Josh decides to try flipping a house. He buys a house for $80,000 and then puts in $50,000 in repairs. This increased the value of the house by 150%. How much profit did he make?"
1961
- },
1962
- {
1963
- "id": 3,
1964
- "gold": "540",
1965
- "predicted": "60",
1966
- "correct": false,
1967
- "response": "James decides to run 3 sprints 3 times a week. He runs 60 meters each sprint. How many total meters does he run a week?"
1968
- },
1969
- {
1970
- "id": 4,
1971
- "gold": "20",
1972
- "predicted": "15",
1973
- "correct": false,
1974
- "response": "I need to give her chickens 15 cups of feed."
1975
- },
1976
- {
1977
- "id": 5,
1978
- "gold": "64",
1979
- "predicted": null,
1980
- "correct": false,
1981
- "response": "Kylar needs to pay for each glass."
1982
- },
1983
- {
1984
- "id": 6,
1985
- "gold": "260",
1986
- "predicted": null,
1987
- "correct": false,
1988
- "response": "Toulouse has twice as many sheep as Charleston. Charleston"
1989
- },
1990
- {
1991
- "id": 7,
1992
- "gold": "160",
1993
- "predicted": null,
1994
- "correct": false,
1995
- "response": "She needs to restart the download from the beginning."
1996
- },
1997
- {
1998
- "id": 8,
1999
- "gold": "45",
2000
- "predicted": "2",
2001
- "correct": false,
2002
- "response": "John drives for 3 hours at a speed of 60 mph and then turns around because he realizes he forgot something very important at home. He tries to get home in 4 hours but spends the first 2 hours in standstill traffic. He spends the next half-hour driving at a speed of"
2003
- },
2004
- {
2005
- "id": 9,
2006
- "gold": "460",
2007
- "predicted": "10",
2008
- "correct": false,
2009
- "response": "$10."
2010
- },
2011
- {
2012
- "id": 10,
2013
- "gold": "366",
2014
- "predicted": "60",
2015
- "correct": false,
2016
- "response": "The program had 60 downloads in the first month. The number of downloads in"
2017
- },
2018
- {
2019
- "id": 11,
2020
- "gold": "694",
2021
- "predicted": null,
2022
- "correct": false,
2023
- "response": "The total cost is the sum of the costs of the pastries and the costs of the"
2024
- },
2025
- {
2026
- "id": 12,
2027
- "gold": "13",
2028
- "predicted": "3",
2029
- "correct": false,
2030
- "response": "I will tell you the answer is $3."
2031
- },
2032
- {
2033
- "id": 13,
2034
- "gold": "18",
2035
- "predicted": "2",
2036
- "correct": false,
2037
- "response": "2."
2038
- },
2039
- {
2040
- "id": 14,
2041
- "gold": "60",
2042
- "predicted": "25",
2043
- "correct": false,
2044
- "response": "In a dance class of 20 students, 20% enrolled in contemporary dance, 25% of the remaining enrolled in jazz dance, and the rest enrolled in hip-hop dance."
2045
- },
2046
- {
2047
- "id": 15,
2048
- "gold": "125",
2049
- "predicted": "8000",
2050
- "correct": false,
2051
- "response": "The merchant would make a choice of purchase between 2 purchase plans: jewelry worth $5,000 or electronic gadgets worth $8,000. His financial advisor speculates that the jewelry"
2052
- },
2053
- {
2054
- "id": 16,
2055
- "gold": "230",
2056
- "predicted": null,
2057
- "correct": false,
2058
- "response": "The distance covered by each train in the two days is the same."
2059
- },
2060
- {
2061
- "id": 17,
2062
- "gold": "57500",
2063
- "predicted": "15",
2064
- "correct": false,
2065
- "response": "Jill gets paid $20 per hour to teach and $30 to be a cheerleading coach. If she works 50 weeks a year, 35 hours a week as a teacher and 15 hours a week as"
2066
- },
2067
- {
2068
- "id": 18,
2069
- "gold": "7",
2070
- "predicted": "4",
2071
- "correct": false,
2072
- "response": "I want to know how many eggs will I eat in 4 weeks."
2073
- },
2074
- {
2075
- "id": 19,
2076
- "gold": "6",
2077
- "predicted": null,
2078
- "correct": false,
2079
- "response": "Hello! I am Marissa."
2080
- },
2081
- {
2082
- "id": 20,
2083
- "gold": "15",
2084
- "predicted": "24",
2085
- "correct": false,
2086
- "response": "I have 10 liters of orange drink that are two-thirds water and I wish to add it to 15 liters of pineapple drink that is three-fifths water. But as I pour it, I spill one liter of the orange drink. How much water is in the remaining 24 liters?"
2087
- },
2088
- {
2089
- "id": 21,
2090
- "gold": "14",
2091
- "predicted": "1947",
2092
- "correct": false,
2093
- "response": "In 1947, Samantha was born."
2094
- },
2095
- {
2096
- "id": 22,
2097
- "gold": "7",
2098
- "predicted": "2",
2099
- "correct": false,
2100
- "response": "Billy sells DVDs. He has 8 customers on Tuesday. His first 3 customers buy one DVD each. His next 2 customers buy 2 DVDs each. His"
2101
- },
2102
- {
2103
- "id": 23,
2104
- "gold": "8",
2105
- "predicted": "00",
2106
- "correct": false,
2107
- "response": "A candle melts by 2 centimeters every hour that it burns. How many centimeters shorter will a candle be after burning from 1:00 PM to 5:00 PM?"
2108
- },
2109
- {
2110
- "id": 24,
2111
- "gold": "26",
2112
- "predicted": "25",
2113
- "correct": false,
2114
- "response": "Kyle bought last year's best-selling book for $19.50. This is with a 25% discount from the original price. What was the original price of the book?"
2115
- },
2116
- {
2117
- "id": 25,
2118
- "gold": "2",
2119
- "predicted": "50",
2120
- "correct": false,
2121
- "response": "Marie ordered one chicken meal that costs $12, 5 packs of milk that costs $3 each, 4 apples that cost $1.50 each, and some boxes of pizza. Marie paid a total of $50."
2122
- },
2123
- {
2124
- "id": 26,
2125
- "gold": "243",
2126
- "predicted": "16.50",
2127
- "correct": false,
2128
- "response": "Mishka bought 3 pairs of shorts, 3 pairs of pants, and 3 pairs of shoes. One pair of shorts costs $16.50. One pair of"
2129
- },
2130
- {
2131
- "id": 27,
2132
- "gold": "16",
2133
- "predicted": null,
2134
- "correct": false,
2135
- "response": "Question asked: How much will she spend on ice cream?"
2136
- },
2137
- {
2138
- "id": 28,
2139
- "gold": "25",
2140
- "predicted": null,
2141
- "correct": false,
2142
- "response": "I can answer this question with the help of the formula: ${distance}={time}\\cdot{time}$"
2143
- },
2144
- {
2145
- "id": 29,
2146
- "gold": "104",
2147
- "predicted": "33",
2148
- "correct": false,
2149
- "response": "Gloria has to choose between the boots and two pairs of high heels that together cost five dollars less than the boots. If one pair of heels costs $33 and the other costs twice as much, how many dollars are the boots?"
2150
- },
2151
- {
2152
- "id": 30,
2153
- "gold": "109",
2154
- "predicted": "162",
2155
- "correct": false,
2156
- "response": "Allen's age 10 years from now is 162 years."
2157
- },
2158
- {
2159
- "id": 31,
2160
- "gold": "80",
2161
- "predicted": "25",
2162
- "correct": false,
2163
- "response": "Gunter is trying to count the jelly beans in a jar. He asks his friends how many they think are in the jar. One says 80. Another says 20 more than half the first one. A third says 25% more than the first one."
2164
- },
2165
- {
2166
- "id": 32,
2167
- "gold": "35",
2168
- "predicted": "10",
2169
- "correct": false,
2170
- "response": "John spends a total of 10 hours a day on a dog. He spends a total"
2171
- },
2172
- {
2173
- "id": 33,
2174
- "gold": "70",
2175
- "predicted": "30",
2176
- "correct": false,
2177
- "response": "There are 110 coins. There are 30 more gold coins than silver coins. How many gold coins does Gretchen have?"
2178
- },
2179
- {
2180
- "id": 34,
2181
- "gold": "23",
2182
- "predicted": "5",
2183
- "correct": false,
2184
- "response": "Siobhan has 2 fewer jewels than Aaron. Aaron has 5 more jewels than"
2185
- },
2186
- {
2187
- "id": 35,
2188
- "gold": "9",
2189
- "predicted": "20",
2190
- "correct": false,
2191
- "response": "Mike scored 50 points in the first 20 minutes."
2192
- },
2193
- {
2194
- "id": 36,
2195
- "gold": "75",
2196
- "predicted": "4",
2197
- "correct": false,
2198
- "response": "Terry eats 2 yogurts a day. They are currently on sale at 4 yogurts"
2199
- },
2200
- {
2201
- "id": 37,
2202
- "gold": "2",
2203
- "predicted": "5",
2204
- "correct": false,
2205
- "response": "John has 13 lego sets and he sells them for $15 each. He ends up buying 8 video games for $20 each and has $5 left. How many lego sets does he still have?"
2206
- },
2207
- {
2208
- "id": 38,
2209
- "gold": "10",
2210
- "predicted": "3",
2211
- "correct": false,
2212
- "response": "John runs 60 miles a week. He runs 3 days a week."
2213
- },
2214
- {
2215
- "id": 39,
2216
- "gold": "18",
2217
- "predicted": null,
2218
- "correct": false,
2219
- "response": "If Dana can run at a rate of speed four times faster than she can walk, but she can skip at a rate of"
2220
- },
2221
- {
2222
- "id": 40,
2223
- "gold": "8",
2224
- "predicted": null,
2225
- "correct": false,
2226
- "response": "Brandon's iPhone is four times as old as Ben's iPhone"
2227
- },
2228
- {
2229
- "id": 41,
2230
- "gold": "200",
2231
- "predicted": null,
2232
- "correct": false,
2233
- "response": "I cannot determine that from the given information."
2234
- },
2235
- {
2236
- "id": 42,
2237
- "gold": "26",
2238
- "predicted": "14",
2239
- "correct": false,
2240
- "response": "There were 14 pieces of pie remaining."
2241
- },
2242
- {
2243
- "id": 43,
2244
- "gold": "48",
2245
- "predicted": "1800",
2246
- "correct": false,
2247
- "response": "When it comes to calories, a bag of chips has 250 calories per serving. If a 300g bag has 5 servings, how many grams can you eat if your daily calorie target is 2000 and you have already consumed 1800 calories?"
2248
- },
2249
- {
2250
- "id": 44,
2251
- "gold": "20",
2252
- "predicted": null,
2253
- "correct": false,
2254
- "response": "I cannot determine that from the given information."
2255
- },
2256
- {
2257
- "id": 45,
2258
- "gold": "104",
2259
- "predicted": "4",
2260
- "correct": false,
2261
- "response": "The total number of hours she spent writing articles is 4."
2262
- },
2263
- {
2264
- "id": 46,
2265
- "gold": "163",
2266
- "predicted": "24",
2267
- "correct": false,
2268
- "response": "There are 24 Post-it notes in the package that she purchased."
2269
- },
2270
- {
2271
- "id": 47,
2272
- "gold": "800",
2273
- "predicted": "40",
2274
- "correct": false,
2275
- "response": "John spent $200 on blue ties that cost $40 each."
2276
- },
2277
- {
2278
- "id": 48,
2279
- "gold": "8",
2280
- "predicted": "6",
2281
- "correct": false,
2282
- "response": "Tracy used a piece of wire 4 feet long to support tomato plants in the garden. The wire was cut into pieces 6 inches long. How many pieces did she obtain?"
2283
- },
2284
- {
2285
- "id": 49,
2286
- "gold": "30",
2287
- "predicted": "7",
2288
- "correct": false,
2289
- "response": "The total number of unoccupied units is 7."
2290
- }
2291
- ]
2292
- }
2293
- }
2294
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
chatml_smoke.json DELETED
@@ -1,84 +0,0 @@
1
- {
2
- "device": "cuda",
3
- "system_prompt": "You are Ember Proelia, a proprietary language model created by North ML. Answer directly and concisely. Do not claim web access or certainty you do not have.",
4
- "prompts": [
5
- "Who are you?",
6
- "What is Python?",
7
- "What is 17 times 6?",
8
- "Explain photosynthesis in one sentence.",
9
- "What should you do when you are unsure?",
10
- "Hello."
11
- ],
12
- "models": {
13
- "released_candidate": {
14
- "checkpoint": "/home/arthur/ember-proelia/checkpoints/ember-proelia-v9-wikipedia-mini-cpt-identity-sft-20260815/final.pt",
15
- "responses": [
16
- {
17
- "question": "Who are you?",
18
- "native": "I am Ember Proelia, a language model created by North ML.",
19
- "chatml": "You are Ember Proelia, a proprietary language model created by North ML. Answer directly and concisely. Do not claim web access or certainty you do not have."
20
- },
21
- {
22
- "question": "What is Python?",
23
- "native": "Python is a general-purpose programming language known for readable syntax and a large ecosystem.",
24
- "chatml": "What is Python?"
25
- },
26
- {
27
- "question": "What is 17 times 6?",
28
- "native": "17.",
29
- "chatml": "What is 17 times 6?"
30
- },
31
- {
32
- "question": "Explain photosynthesis in one sentence.",
33
- "native": "Photosynthesis is how plants use light to make chemical energy from water and carbon dioxide.",
34
- "chatml": "Explain how photosynthesis is controlled by the Sun and how it affects the planets and the planets they orbit."
35
- },
36
- {
37
- "question": "What should you do when you are unsure?",
38
- "native": "I should say that I am unsure.",
39
- "chatml": "You are Ember Proelia, a proprietary language model created by North ML. Answer directly and concisely. Do not claim web access or certainty you do not have."
40
- },
41
- {
42
- "question": "Hello.",
43
- "native": "Hello! I am Ember Proelia. How can I help?",
44
- "chatml": "Hello."
45
- }
46
- ]
47
- },
48
- "chatml_sft_probe": {
49
- "checkpoint": "/home/arthur/ember-proelia/checkpoints/aurora-proelia-chatml-sft-strong-probe-20260815/final.pt",
50
- "responses": [
51
- {
52
- "question": "Who are you?",
53
- "native": "I am Ember Proelia, a language model created by North ML.",
54
- "chatml": "I am Ember Proelia, a proprietary language model created by North ML."
55
- },
56
- {
57
- "question": "What is Python?",
58
- "native": "Python is a general-purpose programming language known for readable syntax and a large ecosystem.",
59
- "chatml": "Python is a general-purpose programming language known for readable syntax and a large ecosystem."
60
- },
61
- {
62
- "question": "What is 17 times 6?",
63
- "native": "17.",
64
- "chatml": "I am 17 times 6."
65
- },
66
- {
67
- "question": "Explain photosynthesis in one sentence.",
68
- "native": "Photosynthesis is how plants use light to make chemical energy from water and carbon dioxide.",
69
- "chatml": "Explain photosynthesis in one sentence."
70
- },
71
- {
72
- "question": "What should you do when you are unsure?",
73
- "native": "I should say that I should not make mistakes.",
74
- "chatml": "You should be able to answer questions, explain concepts, and work with data."
75
- },
76
- {
77
- "question": "Hello.",
78
- "native": "Hello! I am Ember Proelia. How can I help?",
79
- "chatml": "I am Ember Proelia, a proprietary language model created by North ML."
80
- }
81
- ]
82
- }
83
- }
84
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
config.json CHANGED
@@ -1,33 +1,29 @@
1
  {
2
- "_name_or_path": "North-ML1/Aurora-Proelia-ChatML",
3
- "architectures": ["AuroraForCausalLM"],
 
 
4
  "auto_map": {
5
- "AutoConfig": "configuration_aurora.AuroraHFConfig",
6
- "AutoModelForCausalLM": "modeling_aurora.AuroraForCausalLM"
7
  },
8
- "model_type": "aurora",
9
- "model_name": "Aurora Proelia ChatML",
10
- "vocab_size": 16000,
11
  "hidden_size": 896,
12
- "num_layers": 23,
13
- "num_attention_heads": 14,
14
- "num_key_value_heads": 2,
15
  "intermediate_size": 2432,
16
- "context_length": 2048,
17
  "max_position_embeddings": 2048,
18
- "rope_theta": 500000.0,
19
- "rms_norm_eps": 0.00001,
 
 
 
 
20
  "qk_norm": true,
 
 
21
  "tie_word_embeddings": true,
22
- "attention_bias": false,
23
- "mlp_bias": false,
24
- "dropout": 0.0,
25
- "num_experts": 1,
26
- "router_aux_loss_coef": 0.0,
27
- "router_z_loss_coef": 0.0,
28
- "router_noise_scale": 0.0,
29
- "moe_capacity_factor": 0.0,
30
- "router_use_gate_weight": false,
31
- "torch_dtype": "float16",
32
- "library_name": "transformers"
33
  }
 
1
  {
2
+ "_name_or_path": "Ember Proelia",
3
+ "architectures": ["EmberProeliaForCausalLM"],
4
+ "attention_bias": false,
5
+ "attention_dropout": 0.0,
6
  "auto_map": {
7
+ "AutoConfig": "configuration_ember_proelia.EmberProeliaConfig",
8
+ "AutoModelForCausalLM": "modeling_ember_proelia.EmberProeliaForCausalLM"
9
  },
10
+ "bos_token_id": 1,
11
+ "eos_token_id": 2,
 
12
  "hidden_size": 896,
 
 
 
13
  "intermediate_size": 2432,
 
14
  "max_position_embeddings": 2048,
15
+ "mlp_bias": false,
16
+ "model_type": "ember_proelia",
17
+ "num_attention_heads": 14,
18
+ "num_hidden_layers": 23,
19
+ "num_key_value_heads": 2,
20
+ "pad_token_id": 0,
21
  "qk_norm": true,
22
+ "rms_norm_eps": 1e-05,
23
+ "rope_theta": 500000.0,
24
  "tie_word_embeddings": true,
25
+ "torch_dtype": "bfloat16",
26
+ "transformers_version": "5.14.1",
27
+ "use_cache": false,
28
+ "vocab_size": 16000
 
 
 
 
 
 
 
29
  }
configuration_aurora.py DELETED
@@ -1,63 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from transformers import PretrainedConfig
4
-
5
-
6
- class AuroraHFConfig(PretrainedConfig):
7
- model_type = "aurora"
8
-
9
- def __init__(
10
- self,
11
- model_name: str = "Aurora Proelia ChatML",
12
- vocab_size: int = 16000,
13
- hidden_size: int = 896,
14
- num_layers: int = 23,
15
- num_attention_heads: int = 14,
16
- num_key_value_heads: int = 2,
17
- intermediate_size: int = 2432,
18
- context_length: int = 2048,
19
- rope_theta: float = 500000.0,
20
- rms_norm_eps: float = 1.0e-5,
21
- qk_norm: bool = True,
22
- tie_word_embeddings: bool = True,
23
- attention_bias: bool = False,
24
- mlp_bias: bool = False,
25
- dropout: float = 0.0,
26
- num_experts: int = 1,
27
- router_aux_loss_coef: float = 0.0,
28
- router_z_loss_coef: float = 0.0,
29
- router_noise_scale: float = 0.0,
30
- moe_capacity_factor: float = 0.0,
31
- router_use_gate_weight: bool = False,
32
- **kwargs,
33
- ):
34
- super().__init__(
35
- tie_word_embeddings=tie_word_embeddings,
36
- bos_token_id=kwargs.pop("bos_token_id", 1),
37
- eos_token_id=kwargs.pop("eos_token_id", 2),
38
- pad_token_id=kwargs.pop("pad_token_id", 0),
39
- **kwargs,
40
- )
41
- self.model_name = model_name
42
- self.vocab_size = vocab_size
43
- self.hidden_size = hidden_size
44
- self.num_layers = num_layers
45
- self.num_attention_heads = num_attention_heads
46
- self.num_key_value_heads = num_key_value_heads
47
- self.intermediate_size = intermediate_size
48
- self.context_length = context_length
49
- self.max_position_embeddings = context_length
50
- self.rope_theta = rope_theta
51
- self.rms_norm_eps = rms_norm_eps
52
- self.qk_norm = qk_norm
53
- self.tie_word_embeddings = tie_word_embeddings
54
- self.attention_bias = attention_bias
55
- self.mlp_bias = mlp_bias
56
- self.dropout = dropout
57
- self.num_experts = num_experts
58
- self.router_aux_loss_coef = router_aux_loss_coef
59
- self.router_z_loss_coef = router_z_loss_coef
60
- self.router_noise_scale = router_noise_scale
61
- self.moe_capacity_factor = moe_capacity_factor
62
- self.router_use_gate_weight = router_use_gate_weight
63
- self.use_cache = False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
configuration_ember_proelia.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Configuration for the Ember Proelia causal language model.
2
+
3
+ This file is deliberately self-contained so a Transformers installation can
4
+ load the model with ``trust_remote_code=True`` without the original Aurora
5
+ training repository.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from transformers.configuration_utils import PretrainedConfig
11
+
12
+
13
+ class EmberProeliaConfig(PretrainedConfig):
14
+ """Configuration matching the released Ember Proelia 207M checkpoint."""
15
+
16
+ model_type = "ember_proelia"
17
+ keys_to_ignore_at_inference = ["past_key_values"]
18
+
19
+ def __init__(
20
+ self,
21
+ vocab_size: int = 16000,
22
+ hidden_size: int = 896,
23
+ num_hidden_layers: int = 23,
24
+ num_attention_heads: int = 14,
25
+ num_key_value_heads: int = 2,
26
+ intermediate_size: int = 2432,
27
+ max_position_embeddings: int = 2048,
28
+ rope_theta: float = 500000.0,
29
+ rms_norm_eps: float = 1.0e-5,
30
+ qk_norm: bool = True,
31
+ tie_word_embeddings: bool = True,
32
+ attention_bias: bool = False,
33
+ mlp_bias: bool = False,
34
+ attention_dropout: float = 0.0,
35
+ use_cache: bool = False,
36
+ bos_token_id: int = 1,
37
+ eos_token_id: int = 2,
38
+ pad_token_id: int = 0,
39
+ **kwargs,
40
+ ) -> None:
41
+ self.vocab_size = int(vocab_size)
42
+ self.hidden_size = int(hidden_size)
43
+ self.num_hidden_layers = int(num_hidden_layers)
44
+ self.num_attention_heads = int(num_attention_heads)
45
+ self.num_key_value_heads = int(num_key_value_heads)
46
+ self.intermediate_size = int(intermediate_size)
47
+ self.max_position_embeddings = int(max_position_embeddings)
48
+ self.rope_theta = float(rope_theta)
49
+ self.rms_norm_eps = float(rms_norm_eps)
50
+ self.qk_norm = bool(qk_norm)
51
+ self.attention_bias = bool(attention_bias)
52
+ self.mlp_bias = bool(mlp_bias)
53
+ self.attention_dropout = float(attention_dropout)
54
+ self.use_cache = bool(use_cache)
55
+ if self.hidden_size % self.num_attention_heads:
56
+ raise ValueError("hidden_size must be divisible by num_attention_heads")
57
+ if self.num_attention_heads % self.num_key_value_heads:
58
+ raise ValueError("num_attention_heads must be divisible by num_key_value_heads")
59
+ super().__init__(
60
+ tie_word_embeddings=tie_word_embeddings,
61
+ bos_token_id=bos_token_id,
62
+ eos_token_id=eos_token_id,
63
+ pad_token_id=pad_token_id,
64
+ **kwargs,
65
+ )
66
+
67
+ @property
68
+ def head_dim(self) -> int:
69
+ return self.hidden_size // self.num_attention_heads
generation_config.json CHANGED
@@ -1,8 +1,9 @@
1
  {
 
2
  "bos_token_id": 1,
 
3
  "eos_token_id": 2,
4
  "pad_token_id": 0,
5
- "do_sample": false,
6
- "max_new_tokens": 96,
7
  "use_cache": false
8
  }
 
1
  {
2
+ "_from_model_config": true,
3
  "bos_token_id": 1,
4
+ "do_sample": false,
5
  "eos_token_id": 2,
6
  "pad_token_id": 0,
7
+ "transformers_version": "5.14.1",
 
8
  "use_cache": false
9
  }
infer.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Interactive Transformers inference for Ember Proelia."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import re
8
+ import sys
9
+ import time
10
+ from pathlib import Path
11
+
12
+ import torch
13
+ from transformers import AutoModelForCausalLM, AutoTokenizer
14
+
15
+
16
+ ROOT = Path(__file__).resolve().parent
17
+ ROLE_RESTART = re.compile(
18
+ r"(?:^|\n)\s*(?:(?:question|problem|solution)\s*:|#\s*(?:question|problem|solution|what\s+is)\b)",
19
+ re.IGNORECASE,
20
+ )
21
+ LEADING_ANSWER = re.compile(r"^\s*answer:\s*", re.IGNORECASE)
22
+
23
+
24
+ def device_and_dtype(requested: str) -> tuple[torch.device, torch.dtype]:
25
+ if requested == "auto":
26
+ requested = "mps" if torch.backends.mps.is_available() else "cuda" if torch.cuda.is_available() else "cpu"
27
+ device = torch.device(requested)
28
+ if device.type == "mps" and not torch.backends.mps.is_available():
29
+ raise RuntimeError("MPS is unavailable in this PyTorch build.")
30
+ if device.type == "cuda" and not torch.cuda.is_available():
31
+ raise RuntimeError("CUDA is unavailable in this PyTorch build.")
32
+ dtype = torch.float16 if device.type == "mps" else torch.bfloat16 if device.type == "cuda" else torch.float32
33
+ return device, dtype
34
+
35
+
36
+ def trim_surface_artifacts(text: str) -> tuple[str, bool]:
37
+ text = LEADING_ANSWER.sub("", text).strip()
38
+ match = ROLE_RESTART.search(text)
39
+ if match:
40
+ return text[:match.start()].rstrip(), True
41
+ return text, False
42
+
43
+
44
+ def build_messages(history: list[tuple[str, str]], user_text: str, keep_history: bool) -> list[dict[str, str]]:
45
+ messages: list[dict[str, str]] = []
46
+ if keep_history:
47
+ for question, answer in history[-6:]:
48
+ messages.append({"role": "user", "content": question})
49
+ messages.append({"role": "assistant", "content": answer})
50
+ messages.append({"role": "user", "content": user_text})
51
+ return messages
52
+
53
+
54
+ def parse_args() -> argparse.Namespace:
55
+ parser = argparse.ArgumentParser(description=__doc__)
56
+ parser.add_argument("--prompt", help="Run one prompt and exit.")
57
+ parser.add_argument("--no-history", action="store_true", help="Do not include previous interactive turns.")
58
+ parser.add_argument("--max-new-tokens", type=int, default=64)
59
+ parser.add_argument("--device", choices=("auto", "mps", "cuda", "cpu"), default="auto")
60
+ return parser.parse_args()
61
+
62
+
63
+ def main() -> None:
64
+ args = parse_args()
65
+ device, dtype = device_and_dtype(args.device)
66
+ tokenizer = AutoTokenizer.from_pretrained(ROOT, trust_remote_code=True)
67
+ model = AutoModelForCausalLM.from_pretrained(ROOT, trust_remote_code=True, dtype=dtype).to(device).eval()
68
+ print(f"Loaded Ember Proelia on {device} as {str(dtype).replace('torch.', '')}.")
69
+ history: list[tuple[str, str]] = []
70
+
71
+ def run(question: str) -> None:
72
+ messages = build_messages(history, question, not args.no_history)
73
+ # return_dict=False is required on Transformers 5 so this is a Tensor,
74
+ # not a BatchEncoding passed into generate().
75
+ input_ids = tokenizer.apply_chat_template(
76
+ messages,
77
+ add_generation_prompt=True,
78
+ return_tensors="pt",
79
+ return_dict=False,
80
+ ).to(device)
81
+ started = time.perf_counter()
82
+ with torch.inference_mode():
83
+ output = model.generate(
84
+ input_ids,
85
+ max_new_tokens=args.max_new_tokens,
86
+ do_sample=False,
87
+ use_cache=False,
88
+ eos_token_id=tokenizer.eos_token_id,
89
+ pad_token_id=tokenizer.pad_token_id,
90
+ )
91
+ new_tokens = output[0, input_ids.size(1):]
92
+ answer, restarted = trim_surface_artifacts(tokenizer.decode(new_tokens, skip_special_tokens=True))
93
+ stop = "role_restart" if restarted else "eos" if len(new_tokens) and int(new_tokens[-1]) == tokenizer.eos_token_id else "max_new_tokens"
94
+ elapsed = time.perf_counter() - started
95
+ rate = len(new_tokens) / elapsed if elapsed else 0.0
96
+ print(f"\nEmber: {answer}\n\n[{stop}; {len(new_tokens)} tokens; {rate:.1f} tok/s]\n")
97
+ if answer and not args.no_history:
98
+ history.append((question, answer))
99
+
100
+ if args.prompt:
101
+ run(args.prompt)
102
+ return
103
+ print("Interactive Ember Proelia inference. Type /quit to exit.")
104
+ while True:
105
+ try:
106
+ question = input("\nYou: ").strip()
107
+ except (EOFError, KeyboardInterrupt):
108
+ print()
109
+ return
110
+ if question.casefold() in {"/quit", "/exit", "quit", "exit"}:
111
+ return
112
+ if question:
113
+ run(question)
114
+
115
+
116
+ if __name__ == "__main__":
117
+ try:
118
+ main()
119
+ except Exception as exc:
120
+ print(f"\nERROR: {exc}", file=sys.stderr)
121
+ raise SystemExit(1)
inference.py DELETED
@@ -1,121 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Run Aurora Proelia ChatML locally or start an interactive chat."""
3
-
4
- from __future__ import annotations
5
-
6
- import argparse
7
- from pathlib import Path
8
-
9
- import torch
10
- from safetensors.torch import load_file
11
- from tokenizers import Tokenizer
12
-
13
- from aurora.config import load_model_config
14
- from aurora.model import AuroraForCausalLM
15
-
16
-
17
- DEFAULT_SYSTEM = (
18
- "You are Ember Proelia, a proprietary language model created by North ML. "
19
- "Answer directly and concisely. Do not claim web access or certainty you do not have."
20
- )
21
-
22
-
23
- def render_chat(messages: list[dict[str, str]], add_generation_prompt: bool = True) -> str:
24
- text = "".join(
25
- f"<|im_start|>{item['role']}\n{item['content'].strip()}<|im_end|>\n"
26
- for item in messages
27
- )
28
- if add_generation_prompt:
29
- text += "<|im_start|>assistant\n"
30
- return text
31
-
32
-
33
- def choose_device(value: str) -> torch.device:
34
- if value != "auto":
35
- return torch.device(value)
36
- if torch.cuda.is_available():
37
- return torch.device("cuda")
38
- if torch.backends.mps.is_available():
39
- return torch.device("mps")
40
- return torch.device("cpu")
41
-
42
-
43
- def load_model(root: Path, device: torch.device):
44
- config = load_model_config(root / "model_ember_proelia_207m_16k.yaml")
45
- tokenizer = Tokenizer.from_file(str(root / "tokenizer.json"))
46
- dtype = torch.float16 if device.type in {"cuda", "mps"} else torch.float32
47
- model = AuroraForCausalLM(config).to(device=device, dtype=dtype).eval()
48
- state = load_file(str(root / "model.safetensors"), device=str(device))
49
- missing, unexpected = model.load_state_dict(state, strict=False)
50
- missing = [name for name in missing if not name.endswith("._extra_state")]
51
- if missing or unexpected:
52
- raise RuntimeError(f"checkpoint mismatch: missing={missing}, unexpected={unexpected}")
53
- return model, tokenizer, config
54
-
55
-
56
- def generate(model, tokenizer: Tokenizer, config, prompt: str, device: torch.device, max_new_tokens: int) -> str:
57
- bos = tokenizer.token_to_id("<bos>")
58
- eos = tokenizer.token_to_id("<eos>")
59
- ids = [bos, *tokenizer.encode(prompt, add_special_tokens=False).ids]
60
- generated: list[int] = []
61
- with torch.inference_mode():
62
- for _ in range(max_new_tokens):
63
- inputs = torch.tensor([ids[-int(config.context_length):]], dtype=torch.long, device=device)
64
- logits, _ = model(inputs)
65
- token = int(torch.argmax(logits[0, -1]).item())
66
- if token == eos:
67
- break
68
- generated.append(token)
69
- ids.append(token)
70
- text = tokenizer.decode(generated, skip_special_tokens=True)
71
- if "<|im_end|>" in text or "<|im_start|>" in text:
72
- break
73
- text = tokenizer.decode(generated, skip_special_tokens=True).strip()
74
- for marker in ("<|im_end|>", "<|im_start|>"):
75
- if marker in text:
76
- text = text.split(marker, 1)[0].strip()
77
- return text
78
-
79
-
80
- def main() -> None:
81
- parser = argparse.ArgumentParser(description="Aurora Proelia ChatML inference")
82
- parser.add_argument("--prompt", help="one prompt; omit for interactive chat")
83
- parser.add_argument("--system", default=DEFAULT_SYSTEM)
84
- parser.add_argument("--checkpoint-dir", type=Path, default=Path(__file__).resolve().parent)
85
- parser.add_argument("--device", default="auto", choices=("auto", "cpu", "cuda", "mps"))
86
- parser.add_argument("--max-new-tokens", type=int, default=96)
87
- args = parser.parse_args()
88
- device = choose_device(args.device)
89
- model, tokenizer, config = load_model(args.checkpoint_dir, device)
90
- history: list[dict[str, str]] = [{"role": "system", "content": args.system}]
91
-
92
- def answer(user_text: str) -> str:
93
- history.append({"role": "user", "content": user_text})
94
- prompt = render_chat(history)
95
- response = generate(model, tokenizer, config, prompt, device, args.max_new_tokens)
96
- history.append({"role": "assistant", "content": response})
97
- return response
98
-
99
- if args.prompt:
100
- print(answer(args.prompt))
101
- return
102
- print(f"Aurora Proelia ChatML · device={device}")
103
- print("Type /quit to exit, /clear to reset the conversation.")
104
- while True:
105
- try:
106
- user_text = input("You: ").strip()
107
- except (EOFError, KeyboardInterrupt):
108
- print()
109
- break
110
- if user_text == "/quit":
111
- break
112
- if user_text == "/clear":
113
- history[:] = [{"role": "system", "content": args.system}]
114
- print("Conversation cleared.")
115
- continue
116
- if user_text:
117
- print(f"Aurora: {answer(user_text)}")
118
-
119
-
120
- if __name__ == "__main__":
121
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
manifest.json CHANGED
@@ -1,19 +1,35 @@
1
  {
2
- "format": "ember_proelia_raw_state_dict_v1",
3
- "model_name": "Ember Proelia",
4
- "compatibility": "Load with this project's AuroraForCausalLM and the included YAML config; not Hugging Face Transformers format.",
5
- "source_checkpoint": "/home/arthur/ember-proelia/checkpoints/aurora-proelia-chatml-sft-strong-probe-20260815/final.pt",
6
- "source_checkpoint_sha256": "563daf5ba3705ed492ebee2f643d0cdd9014a6b2683eeb3cf420ced1067d1355",
 
 
 
 
7
  "checkpoint_state": {
8
- "step": 2432,
9
- "processed_tokens": 1146880
10
  },
 
 
 
 
 
 
 
 
11
  "model_safetensors": "model.safetensors",
12
- "model_safetensors_sha256": "8d4695f242c1e6ebbffd9d4aa0613603cfc58ee3a8e77c9e3704c669138dc961",
13
- "tensor_count": 256,
14
- "state_dict_tensor_elements": 221278208,
15
- "unique_model_parameters": 206942208,
16
- "tokenizer": "tokenizer.json",
17
- "model_config": "model_ember_proelia_207m_16k.yaml",
18
- "verification": "all tensors compared bit-for-bit after SafeTensors reload; custom Aurora model loaded successfully"
 
 
 
 
19
  }
 
1
  {
2
+ "architecture": {
3
+ "attention_heads": 14,
4
+ "context_length": 2048,
5
+ "hidden_size": 896,
6
+ "key_value_heads": 2,
7
+ "layers": 23,
8
+ "unique_parameters": 206942208,
9
+ "vocab_size": 16000
10
+ },
11
  "checkpoint_state": {
12
+ "processed_tokens": 5720047616,
13
+ "step": 53012
14
  },
15
+ "format": "ember_proelia_transformers_custom_remote_code_v1",
16
+ "load": {
17
+ "api": "AutoModelForCausalLM.from_pretrained",
18
+ "dtype": "bfloat16",
19
+ "trust_remote_code": true,
20
+ "use_cache": false
21
+ },
22
+ "model_name": "Ember Proelia",
23
  "model_safetensors": "model.safetensors",
24
+ "model_safetensors_sha256": "af2a5b55af3761be00395b21bad304489d91ced67702443df01d4542fce06c1b",
25
+ "notes": [
26
+ "SafeTensors is deployment-only; final.pt remains the resumable training checkpoint.",
27
+ "The native Question:/Answer: chat template is used because the checkpoint was not trained with ChatML.",
28
+ "Package validation compares logits against the original Aurora model implementation."
29
+ ],
30
+ "parent_checkpoint": "checkpoints/ember-proelia-final-style-calibration-v3-20260728/final.pt",
31
+ "parent_checkpoint_sha256": "1779ab43026697485db9a86107ec98b5cdc05ba9c5caf3e22e7b951f1c09f3ff",
32
+ "source_checkpoint": "checkpoints/ember-proelia-final-surface-v4-20260728/final.pt",
33
+ "source_checkpoint_sha256": "38afd518dd6397c6dd7937b622362eba2512d3bd3fc84809f5a813bd3571b1ca",
34
+ "tokenizer": "tokenizer.json"
35
  }
model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:8d4695f242c1e6ebbffd9d4aa0613603cfc58ee3a8e77c9e3704c669138dc961
3
  size 442583616
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:af2a5b55af3761be00395b21bad304489d91ced67702443df01d4542fce06c1b
3
  size 442583616
modeling_aurora.py DELETED
@@ -1,82 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Optional
4
-
5
- import torch
6
- from torch import nn
7
- from transformers import PreTrainedModel
8
- from transformers.modeling_outputs import CausalLMOutputWithPast
9
-
10
- from .configuration_aurora import AuroraHFConfig
11
- from .aurora_config import AuroraConfig as NativeAuroraConfig
12
- from .aurora_model import AuroraForCausalLM as NativeAuroraForCausalLM
13
-
14
-
15
- class AuroraForCausalLM(PreTrainedModel):
16
- config_class = AuroraHFConfig
17
- base_model_prefix = "aurora"
18
- main_input_name = "input_ids"
19
- _supports_cache_class = False
20
- _tied_weights_keys = {}
21
- all_tied_weights_keys = {}
22
-
23
- def __init__(self, config: AuroraHFConfig):
24
- super().__init__(config)
25
- native_config = NativeAuroraConfig(
26
- model_name=config.model_name,
27
- vocab_size=config.vocab_size,
28
- hidden_size=config.hidden_size,
29
- num_layers=config.num_layers,
30
- num_attention_heads=config.num_attention_heads,
31
- num_key_value_heads=config.num_key_value_heads,
32
- intermediate_size=config.intermediate_size,
33
- context_length=config.context_length,
34
- rope_theta=config.rope_theta,
35
- rms_norm_eps=config.rms_norm_eps,
36
- qk_norm=config.qk_norm,
37
- tie_word_embeddings=config.tie_word_embeddings,
38
- attention_bias=config.attention_bias,
39
- mlp_bias=config.mlp_bias,
40
- dropout=config.dropout,
41
- num_experts=config.num_experts,
42
- router_aux_loss_coef=config.router_aux_loss_coef,
43
- router_z_loss_coef=config.router_z_loss_coef,
44
- router_noise_scale=config.router_noise_scale,
45
- moe_capacity_factor=config.moe_capacity_factor,
46
- router_use_gate_weight=config.router_use_gate_weight,
47
- )
48
- self.aurora = NativeAuroraForCausalLM(native_config)
49
-
50
- def load_state_dict(self, state_dict, strict: bool = True, assign: bool = False, **kwargs):
51
- # The raw Aurora export stores the native module at the repository root;
52
- # the Transformers wrapper stores it below `aurora`.
53
- remapped = {
54
- (key if key.startswith("aurora.") else f"aurora.{key}"): value
55
- for key, value in state_dict.items()
56
- }
57
- return super().load_state_dict(remapped, strict=strict, assign=assign, **kwargs)
58
-
59
- def get_input_embeddings(self):
60
- return self.aurora.embed_tokens
61
-
62
- def set_input_embeddings(self, value):
63
- self.aurora.embed_tokens = value
64
-
65
- def get_output_embeddings(self):
66
- return self.aurora.lm_head
67
-
68
- def set_output_embeddings(self, new_embeddings):
69
- self.aurora.lm_head = new_embeddings
70
-
71
- def prepare_inputs_for_generation(self, input_ids, **kwargs):
72
- return {"input_ids": input_ids}
73
-
74
- def forward(
75
- self,
76
- input_ids: torch.LongTensor,
77
- attention_mask: Optional[torch.Tensor] = None,
78
- labels: Optional[torch.LongTensor] = None,
79
- **kwargs,
80
- ) -> CausalLMOutputWithPast:
81
- logits, loss = self.aurora(input_ids=input_ids, labels=labels)
82
- return CausalLMOutputWithPast(loss=loss, logits=logits)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modeling_ember_proelia.py ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Hugging Face Transformers implementation of Ember Proelia.
2
+
3
+ The module mirrors the original Aurora inference graph exactly: RMSNorm,
4
+ RoPE, grouped-query causal attention, Q/K RMSNorm, and SwiGLU. It intentionally
5
+ uses full-prefix generation (``use_cache=False``) because the original model
6
+ was trained and validated with that graph.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import Optional
12
+
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+ from transformers.generation import GenerationMixin
17
+ from transformers.modeling_outputs import CausalLMOutputWithPast
18
+ from transformers.modeling_utils import PreTrainedModel
19
+
20
+ from .configuration_ember_proelia import EmberProeliaConfig
21
+
22
+
23
+ class EmberRMSNorm(nn.Module):
24
+ def __init__(self, hidden_size: int, eps: float) -> None:
25
+ super().__init__()
26
+ self.weight = nn.Parameter(torch.ones(hidden_size))
27
+ self.eps = eps
28
+
29
+ def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
30
+ scale = torch.rsqrt(hidden_states.pow(2).mean(dim=-1, keepdim=True) + self.eps)
31
+ return self.weight * hidden_states * scale
32
+
33
+
34
+ def _rope_frequencies(
35
+ sequence_length: int,
36
+ head_dim: int,
37
+ theta: float,
38
+ device: torch.device,
39
+ dtype: torch.dtype,
40
+ ) -> tuple[torch.Tensor, torch.Tensor]:
41
+ inv_freq = 1.0 / (theta ** (torch.arange(0, head_dim, 2, device=device).float() / head_dim))
42
+ positions = torch.arange(sequence_length, device=device).float()
43
+ freqs = torch.outer(positions, inv_freq)
44
+ return freqs.cos().to(dtype=dtype), freqs.sin().to(dtype=dtype)
45
+
46
+
47
+ def _apply_rope(query_or_key: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> torch.Tensor:
48
+ cos = cos[None, :, None, :]
49
+ sin = sin[None, :, None, :]
50
+ even = query_or_key[..., 0::2]
51
+ odd = query_or_key[..., 1::2]
52
+ out = torch.empty_like(query_or_key)
53
+ out[..., 0::2] = even * cos - odd * sin
54
+ out[..., 1::2] = even * sin + odd * cos
55
+ return out
56
+
57
+
58
+ class EmberAttention(nn.Module):
59
+ def __init__(self, config: EmberProeliaConfig) -> None:
60
+ super().__init__()
61
+ self.num_heads = config.num_attention_heads
62
+ self.num_key_value_heads = config.num_key_value_heads
63
+ self.head_dim = config.head_dim
64
+ self.kv_repeat = self.num_heads // self.num_key_value_heads
65
+ self.hidden_size = config.hidden_size
66
+ self.dropout = config.attention_dropout
67
+ self.q_proj = nn.Linear(config.hidden_size, self.num_heads * self.head_dim, bias=config.attention_bias)
68
+ self.k_proj = nn.Linear(config.hidden_size, self.num_key_value_heads * self.head_dim, bias=config.attention_bias)
69
+ self.v_proj = nn.Linear(config.hidden_size, self.num_key_value_heads * self.head_dim, bias=config.attention_bias)
70
+ self.o_proj = nn.Linear(config.hidden_size, config.hidden_size, bias=config.attention_bias)
71
+ self.q_norm = EmberRMSNorm(self.head_dim, config.rms_norm_eps) if config.qk_norm else nn.Identity()
72
+ self.k_norm = EmberRMSNorm(self.head_dim, config.rms_norm_eps) if config.qk_norm else nn.Identity()
73
+
74
+ def forward(self, hidden_states: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> torch.Tensor:
75
+ batch_size, sequence_length, _ = hidden_states.shape
76
+ query = self.q_proj(hidden_states).view(batch_size, sequence_length, self.num_heads, self.head_dim)
77
+ key = self.k_proj(hidden_states).view(batch_size, sequence_length, self.num_key_value_heads, self.head_dim)
78
+ value = self.v_proj(hidden_states).view(batch_size, sequence_length, self.num_key_value_heads, self.head_dim)
79
+ query = _apply_rope(self.q_norm(query), cos, sin).transpose(1, 2)
80
+ key = _apply_rope(self.k_norm(key), cos, sin).transpose(1, 2)
81
+ value = value.transpose(1, 2)
82
+ attn_output = F.scaled_dot_product_attention(
83
+ query,
84
+ key,
85
+ value,
86
+ attn_mask=None,
87
+ dropout_p=self.dropout if self.training else 0.0,
88
+ is_causal=True,
89
+ enable_gqa=self.kv_repeat > 1,
90
+ )
91
+ attn_output = attn_output.transpose(1, 2).contiguous().view(batch_size, sequence_length, self.hidden_size)
92
+ return self.o_proj(attn_output)
93
+
94
+
95
+ class EmberSwiGLU(nn.Module):
96
+ def __init__(self, config: EmberProeliaConfig) -> None:
97
+ super().__init__()
98
+ self.gate_proj = nn.Linear(config.hidden_size, config.intermediate_size, bias=config.mlp_bias)
99
+ self.up_proj = nn.Linear(config.hidden_size, config.intermediate_size, bias=config.mlp_bias)
100
+ self.down_proj = nn.Linear(config.intermediate_size, config.hidden_size, bias=config.mlp_bias)
101
+
102
+ def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
103
+ return self.down_proj(F.silu(self.gate_proj(hidden_states)) * self.up_proj(hidden_states))
104
+
105
+
106
+ class EmberDecoderLayer(nn.Module):
107
+ def __init__(self, config: EmberProeliaConfig) -> None:
108
+ super().__init__()
109
+ self.input_layernorm = EmberRMSNorm(config.hidden_size, config.rms_norm_eps)
110
+ self.self_attn = EmberAttention(config)
111
+ self.post_attention_layernorm = EmberRMSNorm(config.hidden_size, config.rms_norm_eps)
112
+ self.mlp = EmberSwiGLU(config)
113
+
114
+ def forward(self, hidden_states: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor) -> torch.Tensor:
115
+ hidden_states = hidden_states + self.self_attn(self.input_layernorm(hidden_states), cos, sin)
116
+ return hidden_states + self.mlp(self.post_attention_layernorm(hidden_states))
117
+
118
+
119
+ class EmberProeliaPreTrainedModel(PreTrainedModel):
120
+ config_class = EmberProeliaConfig
121
+ base_model_prefix = ""
122
+ supports_gradient_checkpointing = False
123
+ _no_split_modules = ["EmberDecoderLayer"]
124
+ _tied_weights_keys = {"lm_head.weight": "embed_tokens.weight"}
125
+
126
+ def _init_weights(self, module: nn.Module) -> None:
127
+ if isinstance(module, nn.Linear):
128
+ nn.init.normal_(module.weight, mean=0.0, std=0.02)
129
+ if module.bias is not None:
130
+ nn.init.zeros_(module.bias)
131
+ elif isinstance(module, nn.Embedding):
132
+ nn.init.normal_(module.weight, mean=0.0, std=0.02)
133
+
134
+
135
+ class EmberProeliaForCausalLM(EmberProeliaPreTrainedModel, GenerationMixin):
136
+ """Decoder-only Ember Proelia model for ``AutoModelForCausalLM``."""
137
+
138
+ def __init__(self, config: EmberProeliaConfig) -> None:
139
+ super().__init__(config)
140
+ self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size)
141
+ self.layers = nn.ModuleList([EmberDecoderLayer(config) for _ in range(config.num_hidden_layers)])
142
+ self.norm = EmberRMSNorm(config.hidden_size, config.rms_norm_eps)
143
+ self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False)
144
+ self.post_init()
145
+ self.tie_weights()
146
+
147
+ def get_input_embeddings(self) -> nn.Module:
148
+ return self.embed_tokens
149
+
150
+ def set_input_embeddings(self, value: nn.Module) -> None:
151
+ self.embed_tokens = value
152
+
153
+ def get_output_embeddings(self) -> nn.Module:
154
+ return self.lm_head
155
+
156
+ def set_output_embeddings(self, value: nn.Module) -> None:
157
+ self.lm_head = value
158
+
159
+ def tie_weights(self, *args: object, **kwargs: object) -> None:
160
+ # Delegate the bookkeeping (including Transformers 5's tied-weight
161
+ # map) to the library. get_input_embeddings/get_output_embeddings
162
+ # above tell it exactly which two tensors share weights.
163
+ super().tie_weights(*args, **kwargs)
164
+
165
+ def _rope_cache(self, sequence_length: int, hidden_states: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
166
+ if sequence_length > self.config.max_position_embeddings:
167
+ raise ValueError(
168
+ f"Ember Proelia supports at most {self.config.max_position_embeddings} tokens; got {sequence_length}."
169
+ )
170
+ return _rope_frequencies(
171
+ sequence_length,
172
+ self.config.head_dim,
173
+ self.config.rope_theta,
174
+ hidden_states.device,
175
+ hidden_states.dtype,
176
+ )
177
+
178
+ def forward(
179
+ self,
180
+ input_ids: Optional[torch.LongTensor] = None,
181
+ attention_mask: Optional[torch.Tensor] = None,
182
+ position_ids: Optional[torch.LongTensor] = None,
183
+ past_key_values: object = None,
184
+ inputs_embeds: Optional[torch.FloatTensor] = None,
185
+ labels: Optional[torch.LongTensor] = None,
186
+ use_cache: Optional[bool] = None,
187
+ output_attentions: Optional[bool] = None,
188
+ output_hidden_states: Optional[bool] = None,
189
+ return_dict: Optional[bool] = True,
190
+ cache_position: Optional[torch.LongTensor] = None,
191
+ **kwargs: object,
192
+ ) -> CausalLMOutputWithPast | tuple[torch.Tensor, ...]:
193
+ if (input_ids is None) == (inputs_embeds is None):
194
+ raise ValueError("Specify exactly one of input_ids or inputs_embeds.")
195
+ if inputs_embeds is None:
196
+ hidden_states = self.embed_tokens(input_ids)
197
+ else:
198
+ hidden_states = inputs_embeds
199
+ # The original model was trained without padding masks. The standard
200
+ # API accepts attention_mask for compatibility; use one unpadded prompt
201
+ # per generation call for exact original behavior.
202
+ del attention_mask, position_ids, past_key_values, use_cache, output_attentions, cache_position, kwargs
203
+ cos, sin = self._rope_cache(hidden_states.size(1), hidden_states)
204
+ hidden_state_history = () if output_hidden_states else None
205
+ for layer in self.layers:
206
+ if output_hidden_states:
207
+ hidden_state_history += (hidden_states,)
208
+ hidden_states = layer(hidden_states, cos, sin)
209
+ hidden_states = self.norm(hidden_states)
210
+ if output_hidden_states:
211
+ hidden_state_history += (hidden_states,)
212
+ logits = self.lm_head(hidden_states)
213
+ loss = None
214
+ if labels is not None:
215
+ loss = F.cross_entropy(
216
+ logits[:, :-1].contiguous().view(-1, logits.size(-1)),
217
+ labels[:, 1:].contiguous().view(-1),
218
+ )
219
+ if return_dict is False:
220
+ output: tuple[torch.Tensor, ...] = (logits,)
221
+ if hidden_state_history is not None:
222
+ output += (hidden_state_history,)
223
+ return ((loss,) + output) if loss is not None else output
224
+ return CausalLMOutputWithPast(
225
+ loss=loss,
226
+ logits=logits,
227
+ past_key_values=None,
228
+ hidden_states=hidden_state_history,
229
+ attentions=None,
230
+ )
231
+
232
+ def prepare_inputs_for_generation(
233
+ self,
234
+ input_ids: torch.LongTensor,
235
+ past_key_values: object = None,
236
+ attention_mask: Optional[torch.Tensor] = None,
237
+ inputs_embeds: Optional[torch.FloatTensor] = None,
238
+ **kwargs: object,
239
+ ) -> dict[str, object]:
240
+ # Full-prefix decoding is intentional. It exactly mirrors the
241
+ # original inference graph and avoids claiming KV-cache support that
242
+ # this checkpoint has not been validated with.
243
+ del past_key_values, kwargs
244
+ if inputs_embeds is not None and input_ids.shape[1] == 0:
245
+ return {"inputs_embeds": inputs_embeds, "attention_mask": attention_mask, "use_cache": False}
246
+ return {"input_ids": input_ids, "attention_mask": attention_mask, "use_cache": False}
regression_comparison.json DELETED
The diff for this file is too large to render. See raw diff
 
requirements.txt CHANGED
@@ -1,4 +1,4 @@
1
- torch>=2.5
2
- tokenizers>=0.20
3
- safetensors>=0.4
4
- PyYAML>=6.0
 
1
+ torch>=2.7.0
2
+ transformers>=5.14.1,<6
3
+ tokenizers>=0.22.2
4
+ safetensors>=0.8.0
special_tokens_map.json CHANGED
@@ -1,5 +1,6 @@
1
  {
2
  "bos_token": "<bos>",
3
  "eos_token": "<eos>",
4
- "pad_token": "<pad>"
 
5
  }
 
1
  {
2
  "bos_token": "<bos>",
3
  "eos_token": "<eos>",
4
+ "pad_token": "<pad>",
5
+ "unk_token": "<unk>"
6
  }
tokenizer.json CHANGED
@@ -61,15 +61,15 @@
61
  "id": "A",
62
  "type_id": 0
63
  }
64
- },
 
 
65
  {
66
  "SpecialToken": {
67
- "id": "<eos>",
68
  "type_id": 0
69
  }
70
- }
71
- ],
72
- "pair": [
73
  {
74
  "Sequence": {
75
  "id": "A",
@@ -79,7 +79,7 @@
79
  {
80
  "Sequence": {
81
  "id": "B",
82
- "type_id": 1
83
  }
84
  }
85
  ],
@@ -92,15 +92,6 @@
92
  "tokens": [
93
  "<bos>"
94
  ]
95
- },
96
- "<eos>": {
97
- "id": "<eos>",
98
- "ids": [
99
- 2
100
- ],
101
- "tokens": [
102
- "<eos>"
103
- ]
104
  }
105
  }
106
  },
 
61
  "id": "A",
62
  "type_id": 0
63
  }
64
+ }
65
+ ],
66
+ "pair": [
67
  {
68
  "SpecialToken": {
69
+ "id": "<bos>",
70
  "type_id": 0
71
  }
72
+ },
 
 
73
  {
74
  "Sequence": {
75
  "id": "A",
 
79
  {
80
  "Sequence": {
81
  "id": "B",
82
+ "type_id": 0
83
  }
84
  }
85
  ],
 
92
  "tokens": [
93
  "<bos>"
94
  ]
 
 
 
 
 
 
 
 
 
95
  }
96
  }
97
  },
tokenizer_config.json CHANGED
@@ -1,9 +1,18 @@
1
  {
2
- "tokenizer_class": "PreTrainedTokenizerFast",
 
3
  "bos_token": "<bos>",
 
 
 
4
  "eos_token": "<eos>",
5
- "pad_token": "<pad>",
6
  "model_max_length": 2048,
7
- "clean_up_tokenization_spaces": false,
8
- "chat_template": "{% for message in messages %}<|im_start|>{{ message['role'] }}\n{{ message['content'] }}<|im_end|>\n{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\n{% endif %}"
 
 
 
 
 
9
  }
 
1
  {
2
+ "add_bos_token": true,
3
+ "add_eos_token": false,
4
  "bos_token": "<bos>",
5
+ "bos_token_id": 1,
6
+ "chat_template": "<bos>{% for message in messages %}{% if message['role'] == 'user' %}Question: {{ message['content'] }}\nAnswer:{% elif message['role'] == 'assistant' %}{{ message['content'] }}<eos>{% endif %}{% endfor %}",
7
+ "clean_up_tokenization_spaces": false,
8
  "eos_token": "<eos>",
9
+ "eos_token_id": 2,
10
  "model_max_length": 2048,
11
+ "pad_token": "<pad>",
12
+ "pad_token_id": 0,
13
+ "padding_side": "left",
14
+ "tokenizer_class": "PreTrainedTokenizerFast",
15
+ "tokenizer_file": "tokenizer.json",
16
+ "unk_token": "<unk>",
17
+ "unk_token_id": 3
18
  }
training.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "base_checkpoint": "North-ML1/Aurora-Proelia",
3
- "objective": "conventional ChatML role-format SFT",
4
- "dataset": "ember-proelia-identity-chat-sft-v1-20260727",
5
- "steps": 2048,
6
- "effective_final_step": 2432,
7
- "learning_rate": 5e-06,
8
- "sequence_length": 512,
9
- "source_checkpoint_sha256": "563daf5ba3705ed492ebee2f643d0cdd9014a6b2683eeb3cf420ced1067d1355",
10
- "tokenizer_sha256": "2f34020dbd2662a56f5cad958ee84a248ce45524a95af59a8d43dae4a9b164a7"
11
- }