Na0s commited on
Commit
9cb97e8
·
verified ·
1 Parent(s): 1a5e839

Correct task metadata, official branding, and verified release documentation

Browse files
README.md CHANGED
@@ -1,28 +1,34 @@
1
  ---
2
  license: mit
3
- library_name: transformers
 
4
  model_name: Faynt-10M-Arena
5
  inference: false
6
  tags:
7
  - reinforcement-learning
8
  - game-playing
 
9
  - melee
10
  - imitation-learning
11
  - custom-code
12
  - pytorch
 
 
13
  datasets:
14
  - erickfm/melee-ranked-replays
15
  base_model: frisson-labs/Faynt-10M-Expert
16
  base_model_relation: finetune
17
  ---
18
 
19
- ![Faynt-10M-Arena: Frisson Labs Melee policy, 10,163,629 parameters, 26 characters.](./card-hero.png)
 
 
20
 
21
  <p align="center"><a href="#results">Results</a> · <a href="#insights">Insights</a> · <a href="#training">Training</a> · <a href="#architecture">Architecture</a> · <a href="#use">Use the model</a></p>
22
 
23
  **The compact policy selected for the final competitive benchmark.**
24
 
25
- Faynt predicts the next GameCube controller command from structured Melee state and recent controller history. This release includes the frame encoder, causal Transformer, autoregressive controller heads, and the native action codec. One set of weights controls all 26 characters.
26
 
27
  <table><tr><td align="center" width="33%"><h3>98.4%</h3><strong>Supported mirrors</strong><br><sub>240/244 games</sub></td><td align="center" width="33%"><h3>68/68</h3><strong>Zero-delay Slippi-AI</strong><br><sub>Two conditioning settings</sub></td><td align="center" width="33%"><h3>26</h3><strong>Characters</strong><br><sub>One shared checkpoint</sub></td></tr></table>
28
 
@@ -30,7 +36,7 @@ Faynt predicts the next GameCube controller command from structured Melee state
30
 
31
  **Timing matters:** Faynt has zero added policy delay; these opponents retain 21- or 24-frame action queues. The report does not isolate the effect of that difference. Supported mirrors use the opponent’s deployed characters. Extended-roster games keep the opponent on a supported fighter. Forced mirrors put both agents on a character outside the opponent’s deployed roster. Each Arena checkpoint plays 1,312 games across the three conditions.
32
 
33
- ![Reported evaluation results for Faynt-10M-Arena, with explicit game counts and protocol conditions.](./card-results.png)
34
 
35
  *The two policies have different RL histories. This is a comparison of selected trained policies.*
36
 
@@ -54,7 +60,7 @@ Both sides use zero added policy delay in these panels. The Slippi-AI checkpoint
54
  The private Slippi-AI rows form a matched Expert-to-Arena comparison: 23 to 68 wins at 10M, and 25 to 58 at 75M. Phillip chooses an action every 2, 3, or 4 frames, depending on the specialist; Faynt chooses each frame. These are finite evaluation panels. Several opponents in the wider benchmark also informed RL run or checkpoint selection.
55
 
56
 
57
- Source: *Faynt: Scaling and Optimizing Policies for Competitive Melee*, Sections 5 and 6 and the benchmark appendices. The [evaluation manifest](./card-evaluation.json) records the specific source tables, denominators, and qualifications.
58
 
59
  ## Insights
60
 
@@ -98,7 +104,7 @@ Arena uses PPO with stock, damage, movement, and positioning reward terms. Its R
98
 
99
  ## Architecture
100
 
101
- ![10M architecture: 2,091 frame features, 384-wide projection, 5 Transformer blocks, 728 joint-controller categories, then 85 main-stick categories.](./card-architecture.png)
102
 
103
  The controller distribution factors into a **728-way joint-control choice**, followed by an **85-way main-stick choice conditioned on that choice**. The joint category includes buttons, shoulder pressure, and C-stick position. The codec converts both categories into a complete controller command.
104
 
@@ -111,7 +117,8 @@ The controller distribution factors into a **728-way joint-control choice**, fol
111
  | Model width / blocks | 384 / 5 |
112
  | Query heads / key-value heads | 6 / 2 |
113
  | Head dimension / feed-forward width | 64 / 768 |
114
- | Context | 256 frames by default; verified benchmark actor uses 128 |
 
115
  | Stored weights / default compute / cache | FP32 / FP32 / FP32 |
116
  | Prediction offset | One frame |
117
 
@@ -144,20 +151,17 @@ print(output.controller.as_packed_tensor().shape) # torch.Size([1, 1, 13])
144
  `example_inputs` creates synthetic structured states for a loading check. Live play requires a Slippi/Dolphin adapter that parses the game, assigns player perspective, synchronizes frames, and executes commands. `trust_remote_code=True` loads the custom model source included here. Authenticate with `hf auth login` when repository access requires it.
145
 
146
  <details>
147
- <summary><strong>Streaming inference, game resets, and the 128-frame benchmark cache</strong></summary>
148
 
149
- The saved configuration retains the 256-frame training context. The verified benchmark actor uses a **128-frame ring cache**, temperature 1, FP32 compute/cache, and zero added policy delay. Configure that capacity before loading:
150
 
151
  ```python
152
  import torch
153
- from transformers import AutoConfig, AutoModel
154
 
155
  repo_id = "frisson-labs/Faynt-10M-Arena"
156
- config = AutoConfig.from_pretrained(repo_id, trust_remote_code=True)
157
- config.model_config["context_length"] = 128
158
- config.context_length = 128
159
  model = AutoModel.from_pretrained(
160
- repo_id, config=config, trust_remote_code=True,
161
  ).eval()
162
 
163
  cache = model.init_cache(batch_size=1)
@@ -199,7 +203,7 @@ Supply a fresh observed state on each live iteration and feed back the controlle
199
  | `output.controller` | Decoded logical controller. `as_packed_tensor()` returns `[..., 13]`. |
200
  | Packed order | Main x/y, C-stick x/y, shoulder, A, B, X, Y, Z, L, R, D_UP. Stick coordinates use `[0, 1]`. |
201
 
202
- `model(...)` performs deterministic or teacher-forced prediction. `model.sample(...)` samples commands. `model.step(...)` processes one frame using a rolling cache. `model.policy` exposes the native encoder, backbone, controller head, and loss. The complete field definitions are in [tensor_batch.py](./tensor_batch.py) and [controller_codec.py](./controller_codec.py).
203
 
204
  </details>
205
 
@@ -214,13 +218,13 @@ The report’s optimized T4 decision loop averages **5.2 ms at 10M** and **8.7 m
214
 
215
  | File | Purpose |
216
  |---|---|
217
- | [model.safetensors](./model.safetensors) | Policy tensors in their original FP32 values. |
218
- | [config.json](./config.json) | Complete model configuration and AutoModel mapping. |
219
- | [modeling_faynt.py](./modeling_faynt.py), [configuration_faynt.py](./configuration_faynt.py) | Transformers interface. |
220
- | [faynt_native.py](./faynt_native.py), [controller_codec.py](./controller_codec.py), [tensor_batch.py](./tensor_batch.py) | Native policy, codec, and structured tensor contract. |
221
- | [checkpoint.pt](./checkpoint.pt) | Original checkpoint, retained byte for byte. |
222
- | [provenance.json](./provenance.json), [runtime_provenance.json](./runtime_provenance.json) | Training lineage and native source hashes. |
223
- | [card-evaluation.json](./card-evaluation.json) | Reported card metrics and their evaluation context. |
224
 
225
  The release was checked for exact tensor equality, strict native state loading, local `AutoModel` loading, and native forward-output parity. Sampling, cached inference, and independent game resets were also exercised. The uploaded safetensors SHA-256 matches the verified local file.
226
 
@@ -229,7 +233,7 @@ model.safetensors SHA-256
229
  d3a841e6f18eb86ed86d1e94ad0ffc8decebf8dfbb26cc5e670c0fd68a5409b2
230
  ```
231
 
232
- Validated with PyTorch 2.13.0, Transformers 4.57.6, and safetensors 0.8.0. The [requirements](./requirements.txt) record the supported dependency range.
233
 
234
  </details>
235
 
@@ -246,4 +250,4 @@ Validated with PyTorch 2.13.0, Transformers 4.57.6, and safetensors 0.8.0. The [
246
 
247
  **Frisson Labs · Faynt**
248
 
249
- Model code and weights: [MIT license](./LICENSE). Melee and the emulator are obtained separately under their respective terms.
 
1
  ---
2
  license: mit
3
+ library_name: pytorch
4
+ pipeline_tag: other
5
  model_name: Faynt-10M-Arena
6
  inference: false
7
  tags:
8
  - reinforcement-learning
9
  - game-playing
10
+ - action-prediction
11
  - melee
12
  - imitation-learning
13
  - custom-code
14
  - pytorch
15
+ - arena
16
+ - ppo
17
  datasets:
18
  - erickfm/melee-ranked-replays
19
  base_model: frisson-labs/Faynt-10M-Expert
20
  base_model_relation: finetune
21
  ---
22
 
23
+ ![Faynt-10M-Arena: Frisson Labs Melee policy, 10,163,629 parameters, 26 characters.](https://huggingface.co/frisson-labs/Faynt-10M-Arena/resolve/main/card-hero.png?v=51f7362a9cf4)
24
+
25
+ <p align="center"><a href="https://huggingface.co/collections/frisson-labs/faynt">Model collection</a> · <a href="https://github.com/Na00s/Faynt-Benchmarks">Benchmark code and results</a> · <a href="https://github.com/Na00s/Faynt-Tournament">Tournament software</a></p>
26
 
27
  <p align="center"><a href="#results">Results</a> · <a href="#insights">Insights</a> · <a href="#training">Training</a> · <a href="#architecture">Architecture</a> · <a href="#use">Use the model</a></p>
28
 
29
  **The compact policy selected for the final competitive benchmark.**
30
 
31
+ **Task: structured-state game-control policy.** Faynt predicts the next GameCube controller command from structured Melee state and recent controller history. This release includes the frame encoder, causal Transformer, autoregressive controller heads, and the native action codec. One set of weights controls all 26 characters.
32
 
33
  <table><tr><td align="center" width="33%"><h3>98.4%</h3><strong>Supported mirrors</strong><br><sub>240/244 games</sub></td><td align="center" width="33%"><h3>68/68</h3><strong>Zero-delay Slippi-AI</strong><br><sub>Two conditioning settings</sub></td><td align="center" width="33%"><h3>26</h3><strong>Characters</strong><br><sub>One shared checkpoint</sub></td></tr></table>
34
 
 
36
 
37
  **Timing matters:** Faynt has zero added policy delay; these opponents retain 21- or 24-frame action queues. The report does not isolate the effect of that difference. Supported mirrors use the opponent’s deployed characters. Extended-roster games keep the opponent on a supported fighter. Forced mirrors put both agents on a character outside the opponent’s deployed roster. Each Arena checkpoint plays 1,312 games across the three conditions.
38
 
39
+ ![Reported evaluation results for Faynt-10M-Arena, with explicit game counts and protocol conditions.](https://huggingface.co/frisson-labs/Faynt-10M-Arena/resolve/main/card-results.png?v=dc896f0e7dda)
40
 
41
  *The two policies have different RL histories. This is a comparison of selected trained policies.*
42
 
 
60
  The private Slippi-AI rows form a matched Expert-to-Arena comparison: 23 to 68 wins at 10M, and 25 to 58 at 75M. Phillip chooses an action every 2, 3, or 4 frames, depending on the specialist; Faynt chooses each frame. These are finite evaluation panels. Several opponents in the wider benchmark also informed RL run or checkpoint selection.
61
 
62
 
63
+ Source: *Faynt: Scaling and Optimizing Policies for Competitive Melee*, Sections 5 and 6 and the benchmark appendices. The [evaluation manifest](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/card-evaluation.json) records the specific source tables, denominators, and qualifications.
64
 
65
  ## Insights
66
 
 
104
 
105
  ## Architecture
106
 
107
+ ![10M architecture: 2,091 frame features, 384-wide projection, 5 Transformer blocks, 728 joint-controller categories, then 85 main-stick categories.](https://huggingface.co/frisson-labs/Faynt-10M-Arena/resolve/main/card-architecture.png?v=acf34076b55a)
108
 
109
  The controller distribution factors into a **728-way joint-control choice**, followed by an **85-way main-stick choice conditioned on that choice**. The joint category includes buttons, shoulder pressure, and C-stick position. The codec converts both categories into a complete controller command.
110
 
 
117
  | Model width / blocks | 384 / 5 |
118
  | Query heads / key-value heads | 6 / 2 |
119
  | Head dimension / feed-forward width | 64 / 768 |
120
+ | Native ring-cache capacity | 256 frames |
121
+ | Actor trajectory context | 128 frames for history/rollout bookkeeping |
122
  | Stored weights / default compute / cache | FP32 / FP32 / FP32 |
123
  | Prediction offset | One frame |
124
 
 
151
  `example_inputs` creates synthetic structured states for a loading check. Live play requires a Slippi/Dolphin adapter that parses the game, assigns player perspective, synchronizes frames, and executes commands. `trust_remote_code=True` loads the custom model source included here. Authenticate with `hf auth login` when repository access requires it.
152
 
153
  <details>
154
+ <summary><strong>Streaming inference, game resets, and the 256-frame ring cache</strong></summary>
155
 
156
+ The saved configuration uses a **256-frame continuous ring cache**, temperature 1, FP32 compute/cache, and zero added policy delay. The separate 128-frame actor trajectory context describes history/rollout bookkeeping. Load the saved configuration directly:
157
 
158
  ```python
159
  import torch
160
+ from transformers import AutoModel
161
 
162
  repo_id = "frisson-labs/Faynt-10M-Arena"
 
 
 
163
  model = AutoModel.from_pretrained(
164
+ repo_id, trust_remote_code=True,
165
  ).eval()
166
 
167
  cache = model.init_cache(batch_size=1)
 
203
  | `output.controller` | Decoded logical controller. `as_packed_tensor()` returns `[..., 13]`. |
204
  | Packed order | Main x/y, C-stick x/y, shoulder, A, B, X, Y, Z, L, R, D_UP. Stick coordinates use `[0, 1]`. |
205
 
206
+ `model(...)` performs deterministic or teacher-forced prediction. `model.sample(...)` samples commands. `model.step(...)` processes one frame using a rolling cache. `model.policy` exposes the native encoder, backbone, controller head, and loss. The complete field definitions are in [tensor_batch.py](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/tensor_batch.py) and [controller_codec.py](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/controller_codec.py).
207
 
208
  </details>
209
 
 
218
 
219
  | File | Purpose |
220
  |---|---|
221
+ | [model.safetensors](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/model.safetensors) | Policy tensors in their original FP32 values. |
222
+ | [config.json](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/config.json) | Complete model configuration and AutoModel mapping. |
223
+ | [modeling_faynt.py](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/modeling_faynt.py), [configuration_faynt.py](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/configuration_faynt.py) | Transformers interface. |
224
+ | [faynt_native.py](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/faynt_native.py), [controller_codec.py](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/controller_codec.py), [tensor_batch.py](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/tensor_batch.py) | Native policy, codec, and structured tensor contract. |
225
+ | [checkpoint.pt](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/checkpoint.pt) | Original checkpoint, retained byte for byte. |
226
+ | [provenance.json](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/provenance.json), [runtime_provenance.json](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/runtime_provenance.json) | Training lineage and native source hashes. |
227
+ | [card-evaluation.json](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/card-evaluation.json) | Reported card metrics and their evaluation context. |
228
 
229
  The release was checked for exact tensor equality, strict native state loading, local `AutoModel` loading, and native forward-output parity. Sampling, cached inference, and independent game resets were also exercised. The uploaded safetensors SHA-256 matches the verified local file.
230
 
 
233
  d3a841e6f18eb86ed86d1e94ad0ffc8decebf8dfbb26cc5e670c0fd68a5409b2
234
  ```
235
 
236
+ Validated with PyTorch 2.13.0, Transformers 4.57.6, and safetensors 0.8.0. The [requirements](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/requirements.txt) record the supported dependency range.
237
 
238
  </details>
239
 
 
250
 
251
  **Frisson Labs · Faynt**
252
 
253
+ Model code and weights: [MIT license](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/LICENSE) · [Third-party notices](https://huggingface.co/frisson-labs/Faynt-10M-Arena/blob/main/THIRD_PARTY_NOTICES.md). Melee and the emulator are obtained separately under their respective terms.
THIRD_PARTY_NOTICES.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Third-party source notices
2
+
3
+ The Faynt-owned model code and weights are distributed under the repository's [MIT License](LICENSE).
4
+
5
+ The structured state representation, autoregressive controller interface, and `custom_v1` controller codec follow [Slippi-AI](https://github.com/vladfi1/slippi-ai) at revision [`577965a7731dc53e3472ea63d9e9853a4e9d65fa`](https://github.com/vladfi1/slippi-ai/tree/577965a7731dc53e3472ea63d9e9853a4e9d65fa). In particular, `controller_codec.py` is a PyTorch port of that codec, and `tensor_batch.py` mirrors its state records. The Slippi-AI-derived portions retain the following upstream notice.
6
+
7
+ ```text
8
+ MIT License
9
+
10
+ Copyright (c) 2020 Vlad Firoiu
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ ```
30
+
31
+ The game, emulator, external agents, and replay datasets are separate inputs governed by their respective providers' terms.
card-architecture.png CHANGED

Git LFS Details

  • SHA256: ed441fc36f1e4a433d262d8ee685f36f1251f009eb53b05e34b07d6ae8794751
  • Pointer size: 131 Bytes
  • Size of remote file: 201 kB

Git LFS Details

  • SHA256: acf34076b55a1d52b54117155df27feb19b92ab5b50f8a7ef297c37145f9ed8a
  • Pointer size: 131 Bytes
  • Size of remote file: 202 kB
card-evaluation.json CHANGED
@@ -29,14 +29,11 @@
29
  "winner_weighted_validation_nll": 0.72489
30
  }
31
  ],
32
- "source": "Section 5.1, Initial Benchmark Suite (pp. 11-12), Figure 8 (p. 12); Appendix F.2, The Original 152-Game Panel (p. 38), F.3, Execution, Scoring, and Reuse (pp. 38-39), and F.7, Fixed-Panel Win and Stock Ledgers (pp. 41-42); Appendix E.4, Selected Checkpoints and Slice Diagnostics, Tables E.7 and E.8 (pp. 33-34)",
33
  "sampling_seeds_shared": true,
34
  "emulator_starting_rng_fully_controlled": false,
35
- "base_fidelity_audit_pending_outcomes": {
36
- "10M": 13,
37
- "75M": 7,
38
- "total": 20
39
- }
40
  },
41
  "expanded_suite": {
42
  "games_per_arena_policy": 1312,
@@ -58,7 +55,7 @@
58
  "75M_wins": 503
59
  }
60
  },
61
- "source": "Sections 5.2, Final Benchmark After Reinforcement Learning (pp. 12-13), and 5.3, Supported-Character and Full-Roster Performance (pp. 13-14), Figure 9 (p. 13); Appendix F.5, Expanded Slippi-AI Panel, Table F.5 (pp. 40-41), F.8, Supported-Character Mirrors (pp. 42-43), F.9, Extended-Roster Matches (p. 43), and F.10, Forced-Character Mirrors (pp. 43-44)",
62
  "faynt_added_delay_frames": 0,
63
  "opponent_delay_frames": [
64
  21,
@@ -74,7 +71,7 @@
74
  "10M_Arena_wins": 68,
75
  "75M_Arena_wins": 58,
76
  "10M_Arena_four_stock_wins": 61,
77
- "source": "Sections 5.4, Zero-Delay Comparisons (p. 14), and 6.5, From Supervised Post-Training to Reinforcement Learning (pp. 16-18), Figure 15 (p. 18); Appendix F.13, Privately Supplied Zero-Delay Slippi-AI Checkpoint, Table F.8 (p. 45)"
78
  },
79
  "phillip_final_destination": {
80
  "games": 112,
@@ -86,7 +83,7 @@
86
  "10M_wins": 126,
87
  "75M_wins": 126
88
  },
89
- "source": "Section 5.4, Zero-Delay Comparisons (p. 14); Appendix F.12, Zero-Delay Specialist Evaluation (pp. 44-45), Table F.7 (p. 45), and F.13, Privately Supplied Zero-Delay Slippi-AI Checkpoint, Table F.8 (p. 45)",
90
  "phillip_action_repeat_frames": [
91
  2,
92
  3,
@@ -101,11 +98,24 @@
101
  "Forced mirrors use characters outside the opponent deployed roster.",
102
  "Additional-character expanded cells outside the opponent deployed roster have two games; supported specialist mirrors have 12 games each."
103
  ],
 
 
 
 
 
 
 
 
104
  "benchmark_actor": {
105
- "context_frames": 128,
106
  "context_mode": "ring",
107
  "added_policy_delay_frames": 0,
108
- "action_sampling_temperature": 1.0
 
 
 
 
 
109
  },
110
  "checkpoint_source_sha256": "c8a810c0d33b72ae448eec0e0b7d0538beacfaeb9a2e357eddd7be4fc0ce286b"
111
  }
 
29
  "winner_weighted_validation_nll": 0.72489
30
  }
31
  ],
32
+ "source": "Section 5.1, Initial Benchmark Suite, Figure 8; Appendix F.2, The Original 152-Game Panel, F.3, Execution, Scoring, and Reuse, and F.7, Fixed-Panel Win and Stock Ledgers; Appendix E.4, Selected Checkpoints and Slice Diagnostics, Tables E.7 and E.8",
33
  "sampling_seeds_shared": true,
34
  "emulator_starting_rng_fully_controlled": false,
35
+ "fidelity_audit_status": "complete",
36
+ "verified_outcomes_per_policy": 152
 
 
 
37
  },
38
  "expanded_suite": {
39
  "games_per_arena_policy": 1312,
 
55
  "75M_wins": 503
56
  }
57
  },
58
+ "source": "Sections 5.2, Final Benchmark After Reinforcement Learning, and 5.3, Supported-Character and Full-Roster Performance, Figure 9; Appendix F.5, Expanded Slippi-AI Panel, Table F.5, F.8, Supported-Character Mirrors, F.9, Extended-Roster Matches, and F.10, Forced-Character Mirrors",
59
  "faynt_added_delay_frames": 0,
60
  "opponent_delay_frames": [
61
  21,
 
71
  "10M_Arena_wins": 68,
72
  "75M_Arena_wins": 58,
73
  "10M_Arena_four_stock_wins": 61,
74
+ "source": "Sections 5.4, Zero-Delay Comparisons, and 6.5, From Supervised Post-Training to Reinforcement Learning, Figure 15; Appendix F.13, Privately Supplied Zero-Delay Slippi-AI Checkpoint, Table F.8"
75
  },
76
  "phillip_final_destination": {
77
  "games": 112,
 
83
  "10M_wins": 126,
84
  "75M_wins": 126
85
  },
86
+ "source": "Section 5.4, Zero-Delay Comparisons; Appendix F.12, Zero-Delay Specialist Evaluation, Table F.7, and F.13, Privately Supplied Zero-Delay Slippi-AI Checkpoint, Table F.8",
87
  "phillip_action_repeat_frames": [
88
  2,
89
  3,
 
98
  "Forced mirrors use characters outside the opponent deployed roster.",
99
  "Additional-character expanded cells outside the opponent deployed roster have two games; supported specialist mirrors have 12 games each."
100
  ],
101
+ "behavior_analysis": {
102
+ "cohort_games": {
103
+ "10M": 139,
104
+ "75M": 145
105
+ },
106
+ "scope": "Frozen matched Base-to-Expert analysis cohorts; all152initial-panel outcomes are verified.",
107
+ "source": "Appendix G.1, Replay Selection and Evaluation Conditions; Tables G.1-G.4"
108
+ },
109
  "benchmark_actor": {
110
+ "context_frames": 256,
111
  "context_mode": "ring",
112
  "added_policy_delay_frames": 0,
113
+ "action_sampling_temperature": 1.0,
114
+ "cache_behavior": "Continuous native key/value ring; capacity comes from model_config.context_length."
115
+ },
116
+ "actor_trajectory_context": {
117
+ "frames": 128,
118
+ "meaning": "Actor trajectory/history configuration, separate from the 256-frame native ring-cache capacity."
119
  },
120
  "checkpoint_source_sha256": "c8a810c0d33b72ae448eec0e0b7d0538beacfaeb9a2e357eddd7be4fc0ce286b"
121
  }
card-hero.png CHANGED
config.json CHANGED
@@ -80,84 +80,89 @@
80
  "num_hidden_layers": 5,
81
  "num_key_value_heads": 2,
82
  "provenance": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  "architecture": {
84
- "activation": "SwiGLU",
85
- "attention_output_gate": "elementwise_sigmoid",
 
 
 
 
 
 
 
86
  "controller_vocab_sizes": {
87
  "buttons": 728,
88
  "main_stick": 85
89
  },
90
- "frame_encoder_features": 2091,
91
- "head_dim": 64,
92
- "hidden_size": 384,
93
- "intermediate_size": 768,
94
- "normalization": "RMSNorm",
95
- "num_attention_heads": 6,
96
- "num_hidden_layers": 5,
97
- "num_key_value_heads": 2,
98
- "parameter_count": 10163629,
99
  "position_encoding": "rope",
100
- "qk_norm": true,
101
  "residual_mode": "full_attnres",
102
- "source_parameter_dtype": "float32",
103
- "training_context_frames": 256
104
- },
105
- "benchmark_actor": {
106
- "action_sampling_temperature": 1.0,
107
- "added_policy_delay_frames": 0,
108
- "context_frames": 128,
109
- "context_mode": "ring"
110
  },
111
- "evidence": {
112
- "native_step_and_model_metadata_verified": true,
113
- "original_checkpoint_sha256_verified": true,
114
- "paper": "Faynt: Scaling and Optimizing Policies for Competitive Melee",
115
- "paper_revision_date": "2026-09-28",
116
- "policy_tensors_equal_evaluated_benchmark_wrapper": true
 
117
  },
118
  "inference_package": {
 
119
  "config_file": "config.json",
120
  "loading_api": "transformers.AutoModel.from_pretrained",
121
- "preserve_original_policy_tensor_values": true,
122
  "trust_remote_code": true,
123
- "weights_file": "model.safetensors"
124
  },
125
- "input_contract": {
126
- "action_offset_frames": 1,
127
- "added_policy_delay_frames": 0,
128
- "character_count": 26,
129
- "codec": "custom_v1",
130
- "representation": "structured Slippi-AI game state and current controller",
131
- "slippi_ai_revision": "577965a7731dc53e3472ea63d9e9853a4e9d65fa"
132
  },
133
- "model_name": "Faynt-10M-Arena",
134
- "repository_id": "frisson-labs/Faynt-10M-Arena",
135
- "schema_version": "faynt.public_checkpoint_provenance.v1",
136
  "selected_rl_lineage_steps": 1950,
137
- "selected_step": 632,
138
- "source_artifact": {
139
- "bytes": 40698232,
140
- "filename": "checkpoint.pt",
141
- "packaging": "policy_export",
142
- "sha256": "c8a810c0d33b72ae448eec0e0b7d0538beacfaeb9a2e357eddd7be4fc0ce286b"
143
  },
144
- "stage": "arena",
145
- "training_lineage": [
146
- {
147
- "selected_step": 195248,
148
- "stage": "expert"
149
- },
150
- {
151
- "selected_step": 1318,
152
- "stage": "reinforcement_learning_run_1"
153
- },
154
- {
155
- "reference_kl_forward": 0.003,
156
- "reference_kl_reverse": 0.003,
157
- "selected_step": 632,
158
- "stage": "reinforcement_learning_run_2"
159
- }
160
- ]
161
  },
162
  "tie_word_embeddings": false,
163
  "training_stage": "arena",
 
80
  "num_hidden_layers": 5,
81
  "num_key_value_heads": 2,
82
  "provenance": {
83
+ "schema_version": "faynt.public_checkpoint_provenance.v1",
84
+ "model_name": "Faynt-10M-Arena",
85
+ "repository_id": "frisson-labs/Faynt-10M-Arena",
86
+ "stage": "arena",
87
+ "selected_step": 632,
88
+ "source_artifact": {
89
+ "filename": "checkpoint.pt",
90
+ "sha256": "c8a810c0d33b72ae448eec0e0b7d0538beacfaeb9a2e357eddd7be4fc0ce286b",
91
+ "bytes": 40698232,
92
+ "packaging": "policy_export"
93
+ },
94
+ "training_lineage": [
95
+ {
96
+ "stage": "expert",
97
+ "selected_step": 195248
98
+ },
99
+ {
100
+ "stage": "reinforcement_learning_run_1",
101
+ "selected_step": 1318
102
+ },
103
+ {
104
+ "stage": "reinforcement_learning_run_2",
105
+ "selected_step": 632,
106
+ "reference_kl_forward": 0.003,
107
+ "reference_kl_reverse": 0.003
108
+ }
109
+ ],
110
  "architecture": {
111
+ "parameter_count": 10163629,
112
+ "hidden_size": 384,
113
+ "num_hidden_layers": 5,
114
+ "num_attention_heads": 6,
115
+ "num_key_value_heads": 2,
116
+ "head_dim": 64,
117
+ "intermediate_size": 768,
118
+ "training_context_frames": 256,
119
+ "frame_encoder_features": 2091,
120
  "controller_vocab_sizes": {
121
  "buttons": 728,
122
  "main_stick": 85
123
  },
124
+ "source_parameter_dtype": "float32",
 
 
 
 
 
 
 
 
125
  "position_encoding": "rope",
 
126
  "residual_mode": "full_attnres",
127
+ "attention_output_gate": "elementwise_sigmoid",
128
+ "qk_norm": true,
129
+ "normalization": "RMSNorm",
130
+ "activation": "SwiGLU"
 
 
 
 
131
  },
132
+ "input_contract": {
133
+ "representation": "structured Slippi-AI game state and current controller",
134
+ "slippi_ai_revision": "577965a7731dc53e3472ea63d9e9853a4e9d65fa",
135
+ "codec": "custom_v1",
136
+ "character_count": 26,
137
+ "action_offset_frames": 1,
138
+ "added_policy_delay_frames": 0
139
  },
140
  "inference_package": {
141
+ "weights_file": "model.safetensors",
142
  "config_file": "config.json",
143
  "loading_api": "transformers.AutoModel.from_pretrained",
 
144
  "trust_remote_code": true,
145
+ "preserve_original_policy_tensor_values": true
146
  },
147
+ "evidence": {
148
+ "original_checkpoint_sha256_verified": true,
149
+ "native_step_and_model_metadata_verified": true,
150
+ "paper": "Faynt: Scaling and Optimizing Policies for Competitive Melee",
151
+ "paper_revision_date": "2026-09-28",
152
+ "policy_tensors_equal_evaluated_benchmark_wrapper": true
 
153
  },
 
 
 
154
  "selected_rl_lineage_steps": 1950,
155
+ "benchmark_actor": {
156
+ "context_frames": 256,
157
+ "context_mode": "ring",
158
+ "added_policy_delay_frames": 0,
159
+ "action_sampling_temperature": 1.0,
160
+ "cache_behavior": "Continuous native key/value ring; capacity comes from model_config.context_length."
161
  },
162
+ "actor_trajectory_context": {
163
+ "frames": 128,
164
+ "meaning": "Actor trajectory/history configuration, separate from the 256-frame native ring-cache capacity."
165
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  },
167
  "tie_word_embeddings": false,
168
  "training_stage": "arena",
provenance.json CHANGED
@@ -72,9 +72,14 @@
72
  },
73
  "selected_rl_lineage_steps": 1950,
74
  "benchmark_actor": {
75
- "context_frames": 128,
76
  "context_mode": "ring",
77
  "added_policy_delay_frames": 0,
78
- "action_sampling_temperature": 1.0
 
 
 
 
 
79
  }
80
  }
 
72
  },
73
  "selected_rl_lineage_steps": 1950,
74
  "benchmark_actor": {
75
+ "context_frames": 256,
76
  "context_mode": "ring",
77
  "added_policy_delay_frames": 0,
78
+ "action_sampling_temperature": 1.0,
79
+ "cache_behavior": "Continuous native key/value ring; capacity comes from model_config.context_length."
80
+ },
81
+ "actor_trajectory_context": {
82
+ "frames": 128,
83
+ "meaning": "Actor trajectory/history configuration, separate from the 256-frame native ring-cache capacity."
84
  }
85
  }