Spaces:
Running
fix(i18n): cover modes section + form labels + tooltips that were missed
Browse filesThe previous commit added data-i18n to most elements but missed:
- modes.title h2 (the '🎯 Mode' header)
- modes.tip tooltip (the 'Four ways to use the tool' explanation)
- All 4 mode tabs (Profile/Compare/Ask/Recipe buttons)
- modes.desc paragraph
- All form field labels in Profile mode (theta, T_train, T_eval, n_attn,
n_kv, d_head, n_layers, n_params, has_swa)
- All Profile form tooltips (param.theta.tip etc.)
- profile.tip and compare.tip tooltips
- Yes/No options in has_swa select
Plus added FULL help modal translations for all 4 languages (EN/ES/FR/ZH):
- help.title, help.what.title/body, help.modes.title/profile/compare/ask/recipe
- help.recipes.title, help.add_models.title/preset/hf/manual
- help.audit.title/body, help.synthesis.title/body
- help.params.title, help.verdicts.title + verdict.yes/deg/no
- help.privacy.title/body, help.source.title/body
Now switching to ES/FR/ZH actually translates everything visible.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- index.html +22 -20
- js/i18n.js +196 -0
|
@@ -151,19 +151,21 @@
|
|
| 151 |
|
| 152 |
<!-- Mode toggle -->
|
| 153 |
<section id="mode-section">
|
| 154 |
-
<h2>
|
|
|
|
| 155 |
<strong>📇 Profile</strong>: paste a model id → all 5 recipes at once = TAF Card.<br>
|
| 156 |
<strong>🆚 Compare</strong>: 2-3 models side-by-side on one recipe.<br>
|
| 157 |
<strong>💬 Ask</strong>: free-form question, browser LLM picks the recipe.<br>
|
| 158 |
<strong>📋 Recipe</strong>: manual selection with full form control.
|
| 159 |
-
</span></span>
|
|
|
|
| 160 |
<div class="mode-tabs">
|
| 161 |
-
<button class="mode-btn active" data-mode="profile">📇 Profile a model</button>
|
| 162 |
-
<button class="mode-btn" data-mode="compare">🆚 Compare models</button>
|
| 163 |
-
<button class="mode-btn" data-mode="ask">💬 Ask plain English</button>
|
| 164 |
-
<button class="mode-btn" data-mode="recipe">📋 Pick recipe</button>
|
| 165 |
</div>
|
| 166 |
-
<p id="mode-desc" class="recipe-desc">
|
| 167 |
<strong>Quickest start</strong>: paste any HuggingFace model id (e.g. <code>meta-llama/Meta-Llama-3-8B</code>),
|
| 168 |
click Profile. See all 5 recipes scored in seconds.
|
| 169 |
</p>
|
|
@@ -175,7 +177,7 @@
|
|
| 175 |
💡 Quick start: pick any preset → click Generate. Or paste a model id from <a href='https://huggingface.co/models?library=transformers&sort=trending' target='_blank'>HF Hub trending</a> → 📥 Fetch → Generate.
|
| 176 |
</div>
|
| 177 |
<h2><span data-i18n="profile.title">📇 Profile a model</span>
|
| 178 |
-
<span class="info"><span class="tooltip">
|
| 179 |
<strong>One-click full diagnosis</strong>. Paste any HF model id (or pick preset).
|
| 180 |
Tool runs all 5 recipes (long-context, KV-compression, custom-vs-API, budget,
|
| 181 |
hardware) and produces a single <strong>TAF Card</strong> showing verdict per
|
|
@@ -207,42 +209,42 @@
|
|
| 207 |
|
| 208 |
<div class="form-grid" id="profile-form">
|
| 209 |
<div class="form-field">
|
| 210 |
-
<label>θ (rope_theta) <span class="info"><span class="tooltip">RoPE base frequency from <code>config.rope_theta</code>.</span></span></label>
|
| 211 |
<input type="number" id="profile-theta" value="500000" />
|
| 212 |
</div>
|
| 213 |
<div class="form-field">
|
| 214 |
-
<label>T_train <span class="info"><span class="tooltip">Max training context. From <code>max_position_embeddings</code>.</span></span></label>
|
| 215 |
<input type="number" id="profile-T_train" value="8192" />
|
| 216 |
</div>
|
| 217 |
<div class="form-field">
|
| 218 |
-
<label>T_eval (your target) <span class="info"><span class="tooltip">Inference context length you'll actually serve. The key knob.</span></span></label>
|
| 219 |
<input type="number" id="profile-T_eval" value="32000" />
|
| 220 |
</div>
|
| 221 |
<div class="form-field">
|
| 222 |
-
<label>n_attention_heads</label>
|
| 223 |
<input type="number" id="profile-n_attn" value="32" />
|
| 224 |
</div>
|
| 225 |
<div class="form-field">
|
| 226 |
-
<label>n_kv_heads</label>
|
| 227 |
<input type="number" id="profile-n_kv" value="8" />
|
| 228 |
</div>
|
| 229 |
<div class="form-field">
|
| 230 |
-
<label>head_dim</label>
|
| 231 |
<input type="number" id="profile-d_head" value="128" />
|
| 232 |
</div>
|
| 233 |
<div class="form-field">
|
| 234 |
-
<label>n_layers</label>
|
| 235 |
<input type="number" id="profile-n_layers" value="32" />
|
| 236 |
</div>
|
| 237 |
<div class="form-field">
|
| 238 |
-
<label>n_params (e.g. 8e9)</label>
|
| 239 |
<input type="text" id="profile-n_params" value="8e9" />
|
| 240 |
</div>
|
| 241 |
<div class="form-field">
|
| 242 |
-
<label>Has SWA?</label>
|
| 243 |
<select id="profile-has_swa">
|
| 244 |
-
<option value="false" selected>No</option>
|
| 245 |
-
<option value="true">Yes</option>
|
| 246 |
</select>
|
| 247 |
</div>
|
| 248 |
</div>
|
|
@@ -256,7 +258,7 @@
|
|
| 256 |
💡 Try: paste 3 popular 7-8B models (Meta-Llama-3-8B, Mistral-7B-v0.1, Qwen/Qwen2.5-7B), pick recipe X-2, T_eval=16000. See which best handles long context.
|
| 257 |
</div>
|
| 258 |
<h2><span data-i18n="compare.title">🆚 Compare models side-by-side</span>
|
| 259 |
-
<span class="info"><span class="tooltip">
|
| 260 |
<strong>Same recipe, multiple models</strong>. Pick 2-3 candidate models and
|
| 261 |
one recipe. See verdicts in a single comparison table.<br><br>
|
| 262 |
<strong>Use case</strong>: "I need long-context retrieval at 16K — which is
|
|
|
|
| 151 |
|
| 152 |
<!-- Mode toggle -->
|
| 153 |
<section id="mode-section">
|
| 154 |
+
<h2><span data-i18n="modes.title">🎯 Mode</span>
|
| 155 |
+
<span class="info"><span class="tooltip" data-i18n="modes.tip"><strong>Four ways to use the tool</strong>.<br>
|
| 156 |
<strong>📇 Profile</strong>: paste a model id → all 5 recipes at once = TAF Card.<br>
|
| 157 |
<strong>🆚 Compare</strong>: 2-3 models side-by-side on one recipe.<br>
|
| 158 |
<strong>💬 Ask</strong>: free-form question, browser LLM picks the recipe.<br>
|
| 159 |
<strong>📋 Recipe</strong>: manual selection with full form control.
|
| 160 |
+
</span></span>
|
| 161 |
+
</h2>
|
| 162 |
<div class="mode-tabs">
|
| 163 |
+
<button class="mode-btn active" data-mode="profile" data-i18n="modes.profile">📇 Profile a model</button>
|
| 164 |
+
<button class="mode-btn" data-mode="compare" data-i18n="modes.compare">🆚 Compare models</button>
|
| 165 |
+
<button class="mode-btn" data-mode="ask" data-i18n="modes.ask">💬 Ask plain English</button>
|
| 166 |
+
<button class="mode-btn" data-mode="recipe" data-i18n="modes.recipe">📋 Pick recipe</button>
|
| 167 |
</div>
|
| 168 |
+
<p id="mode-desc" class="recipe-desc" data-i18n="modes.desc">
|
| 169 |
<strong>Quickest start</strong>: paste any HuggingFace model id (e.g. <code>meta-llama/Meta-Llama-3-8B</code>),
|
| 170 |
click Profile. See all 5 recipes scored in seconds.
|
| 171 |
</p>
|
|
|
|
| 177 |
💡 Quick start: pick any preset → click Generate. Or paste a model id from <a href='https://huggingface.co/models?library=transformers&sort=trending' target='_blank'>HF Hub trending</a> → 📥 Fetch → Generate.
|
| 178 |
</div>
|
| 179 |
<h2><span data-i18n="profile.title">📇 Profile a model</span>
|
| 180 |
+
<span class="info"><span class="tooltip" data-i18n="profile.tip">
|
| 181 |
<strong>One-click full diagnosis</strong>. Paste any HF model id (or pick preset).
|
| 182 |
Tool runs all 5 recipes (long-context, KV-compression, custom-vs-API, budget,
|
| 183 |
hardware) and produces a single <strong>TAF Card</strong> showing verdict per
|
|
|
|
| 209 |
|
| 210 |
<div class="form-grid" id="profile-form">
|
| 211 |
<div class="form-field">
|
| 212 |
+
<label><span data-i18n="param.theta">θ (rope_theta)</span> <span class="info"><span class="tooltip" data-i18n="param.theta.tip">RoPE base frequency from <code>config.rope_theta</code>.</span></span></label>
|
| 213 |
<input type="number" id="profile-theta" value="500000" />
|
| 214 |
</div>
|
| 215 |
<div class="form-field">
|
| 216 |
+
<label><span data-i18n="param.T_train">T_train</span> <span class="info"><span class="tooltip" data-i18n="param.T_train.tip">Max training context. From <code>max_position_embeddings</code>.</span></span></label>
|
| 217 |
<input type="number" id="profile-T_train" value="8192" />
|
| 218 |
</div>
|
| 219 |
<div class="form-field">
|
| 220 |
+
<label><span data-i18n="param.T_eval">T_eval (your target)</span> <span class="info"><span class="tooltip" data-i18n="param.T_eval.tip">Inference context length you'll actually serve. The key knob.</span></span></label>
|
| 221 |
<input type="number" id="profile-T_eval" value="32000" />
|
| 222 |
</div>
|
| 223 |
<div class="form-field">
|
| 224 |
+
<label data-i18n="param.n_attn">n_attention_heads</label>
|
| 225 |
<input type="number" id="profile-n_attn" value="32" />
|
| 226 |
</div>
|
| 227 |
<div class="form-field">
|
| 228 |
+
<label data-i18n="param.n_kv">n_kv_heads</label>
|
| 229 |
<input type="number" id="profile-n_kv" value="8" />
|
| 230 |
</div>
|
| 231 |
<div class="form-field">
|
| 232 |
+
<label data-i18n="param.d_head">head_dim</label>
|
| 233 |
<input type="number" id="profile-d_head" value="128" />
|
| 234 |
</div>
|
| 235 |
<div class="form-field">
|
| 236 |
+
<label data-i18n="param.n_layers">n_layers</label>
|
| 237 |
<input type="number" id="profile-n_layers" value="32" />
|
| 238 |
</div>
|
| 239 |
<div class="form-field">
|
| 240 |
+
<label data-i18n="param.n_params">n_params (e.g. 8e9)</label>
|
| 241 |
<input type="text" id="profile-n_params" value="8e9" />
|
| 242 |
</div>
|
| 243 |
<div class="form-field">
|
| 244 |
+
<label data-i18n="param.has_swa">Has SWA?</label>
|
| 245 |
<select id="profile-has_swa">
|
| 246 |
+
<option value="false" selected data-i18n="common.no">No</option>
|
| 247 |
+
<option value="true" data-i18n="common.yes">Yes</option>
|
| 248 |
</select>
|
| 249 |
</div>
|
| 250 |
</div>
|
|
|
|
| 258 |
💡 Try: paste 3 popular 7-8B models (Meta-Llama-3-8B, Mistral-7B-v0.1, Qwen/Qwen2.5-7B), pick recipe X-2, T_eval=16000. See which best handles long context.
|
| 259 |
</div>
|
| 260 |
<h2><span data-i18n="compare.title">🆚 Compare models side-by-side</span>
|
| 261 |
+
<span class="info"><span class="tooltip" data-i18n="compare.tip">
|
| 262 |
<strong>Same recipe, multiple models</strong>. Pick 2-3 candidate models and
|
| 263 |
one recipe. See verdicts in a single comparison table.<br><br>
|
| 264 |
<strong>Use case</strong>: "I need long-context retrieval at 16K — which is
|
|
@@ -73,6 +73,55 @@ export const TRANSLATIONS = {
|
|
| 73 |
"profile.hf_placeholder": "e.g. meta-llama/Meta-Llama-3-8B or Qwen/Qwen2.5-7B",
|
| 74 |
"compare.hf_placeholder": "HF model id (e.g. meta-llama/Meta-Llama-3-8B)",
|
| 75 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · independent research · the tool that closes the loop of the paper.",
|
| 77 |
},
|
| 78 |
|
|
@@ -139,6 +188,55 @@ export const TRANSLATIONS = {
|
|
| 139 |
"profile.hf_placeholder": "ej. meta-llama/Meta-Llama-3-8B o Qwen/Qwen2.5-7B",
|
| 140 |
"compare.hf_placeholder": "ID modelo HF (ej. meta-llama/Meta-Llama-3-8B)",
|
| 141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · investigación independiente · la herramienta que cierra el círculo del paper.",
|
| 143 |
},
|
| 144 |
|
|
@@ -205,6 +303,55 @@ export const TRANSLATIONS = {
|
|
| 205 |
"profile.hf_placeholder": "ex. meta-llama/Meta-Llama-3-8B ou Qwen/Qwen2.5-7B",
|
| 206 |
"compare.hf_placeholder": "ID modèle HF (ex. meta-llama/Meta-Llama-3-8B)",
|
| 207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · recherche indépendante · l'outil qui ferme la boucle du paper.",
|
| 209 |
},
|
| 210 |
|
|
@@ -271,6 +418,55 @@ export const TRANSLATIONS = {
|
|
| 271 |
"profile.hf_placeholder": "例如: meta-llama/Meta-Llama-3-8B 或 Qwen/Qwen2.5-7B",
|
| 272 |
"compare.hf_placeholder": "HF 模型 id (例如: meta-llama/Meta-Llama-3-8B)",
|
| 273 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · 独立研究 · 闭合论文回路的工具。",
|
| 275 |
},
|
| 276 |
};
|
|
|
|
| 73 |
"profile.hf_placeholder": "e.g. meta-llama/Meta-Llama-3-8B or Qwen/Qwen2.5-7B",
|
| 74 |
"compare.hf_placeholder": "HF model id (e.g. meta-llama/Meta-Llama-3-8B)",
|
| 75 |
|
| 76 |
+
// Form parameters
|
| 77 |
+
"param.theta": "θ (rope_theta)",
|
| 78 |
+
"param.theta.tip": "<strong>RoPE base frequency</strong> from <code>config.rope_theta</code>. Higher = more long-range capacity.",
|
| 79 |
+
"param.T_train": "T_train",
|
| 80 |
+
"param.T_train.tip": "<strong>Max training context</strong>. From <code>max_position_embeddings</code>. Beyond this is extrapolation.",
|
| 81 |
+
"param.T_eval": "T_eval (your target)",
|
| 82 |
+
"param.T_eval.tip": "<strong>Your target inference context</strong>. The whole question is: will the model behave well at THIS length?",
|
| 83 |
+
"param.n_attn": "num_attention_heads",
|
| 84 |
+
"param.n_kv": "num_key_value_heads",
|
| 85 |
+
"param.d_head": "head_dim",
|
| 86 |
+
"param.n_layers": "num_hidden_layers",
|
| 87 |
+
"param.n_params": "n_params (e.g. 8e9)",
|
| 88 |
+
"param.has_swa": "Has SWA?",
|
| 89 |
+
"common.yes": "Yes",
|
| 90 |
+
"common.no": "No",
|
| 91 |
+
|
| 92 |
+
// Mode tooltips
|
| 93 |
+
"modes.tip": "<strong>Four ways to use the tool</strong>.<br><strong>📇 Profile</strong>: paste a model id → all 5 recipes at once = TAF Card.<br><strong>🆚 Compare</strong>: 2-3 models side-by-side on one recipe.<br><strong>💬 Ask</strong>: free-form question, browser LLM picks the recipe.<br><strong>📋 Recipe</strong>: manual selection with full form control.",
|
| 94 |
+
"profile.tip": "<strong>One-click full diagnosis</strong>. Paste any HF model id (or pick preset). Tool runs all 5 recipes (long-context, KV-compression, custom-vs-API, budget, hardware) and produces a single <strong>TAF Card</strong> with verdict per dimension + key numbers + architecture classification.<br><br><strong>Use case</strong>: \"I'm evaluating Qwen2.5-32B for production — what's its full viability profile?\" → paste id → Profile → done.",
|
| 95 |
+
"compare.tip": "<strong>Same recipe, multiple models</strong>. Pick 2-3 candidate models and one recipe. See verdicts in a single comparison table.<br><br><strong>Use case</strong>: \"I need long-context retrieval at 16K — which is best: Llama-3-8B, Mistral-7B, or Qwen-7B?\" → pick 3 + X-2 + 16K → see winner.",
|
| 96 |
+
|
| 97 |
+
// Help modal
|
| 98 |
+
"help.title": "📘 TAF Agent — User Manual",
|
| 99 |
+
"help.what.title": "What does it do?",
|
| 100 |
+
"help.what.body": "Predicts <strong>practical viability</strong> of any transformer LLM <em>before you spend GPU/$</em>. Answers questions like \"will this model work at L=32K?\" or \"should I train custom or use API?\" using deterministic Python formulas (TAF — Thermodynamic Attention Framework).",
|
| 101 |
+
"help.modes.title": "How to use — 4 modes",
|
| 102 |
+
"help.modes.profile": "<strong>📇 Profile</strong>: paste model id → all recipes at once = TAF Card. <strong>Best starting point</strong>.",
|
| 103 |
+
"help.modes.compare": "<strong>🆚 Compare</strong>: 2-3 models side-by-side on same recipe. Best when choosing between candidates.",
|
| 104 |
+
"help.modes.ask": "<strong>💬 Ask plain English</strong>: free-form question, in-browser LLM picks the recipe. Best for casual exploration.",
|
| 105 |
+
"help.modes.recipe": "<strong>📋 Recipe + form</strong>: manual selection, full parameter control. Best when you want exact control.",
|
| 106 |
+
"help.recipes.title": "The 5 recipes available",
|
| 107 |
+
"help.add_models.title": "Adding new models (3 ways)",
|
| 108 |
+
"help.add_models.preset": "<strong>Preset list</strong>: 11 popular models curated. Just select from dropdown.",
|
| 109 |
+
"help.add_models.hf": "<strong>HF Hub fetch</strong>: paste any model id (e.g. <code>Qwen/Qwen2.5-32B-Instruct</code>), click 📥 Fetch. Browser downloads <code>config.json</code> directly from HuggingFace, fills the form. Works for any public model.",
|
| 110 |
+
"help.add_models.manual": "<strong>Manual</strong>: fill the form fields directly with values from the model card.",
|
| 111 |
+
"help.audit.title": "The audit chain",
|
| 112 |
+
"help.audit.body": "Every result shows the full <strong>Computation Chain</strong> — each formula step with its inputs, output, and interpretation. Click any step to expand. Cite section numbers (§26.1, §19.1, etc.) refer to the underlying paper for derivation.",
|
| 113 |
+
"help.synthesis.title": "The plain-English answer",
|
| 114 |
+
"help.synthesis.body": "After the deterministic chain runs, an in-browser LLM (Qwen2.5-0.5B, ~350MB cached after first load) synthesizes a plain-English summary. The numbers above are <em>always correct</em> (deterministic Python); the synthesis is LLM-generated — verify against the chain if in doubt.",
|
| 115 |
+
"help.params.title": "Common parameters explained",
|
| 116 |
+
"help.verdicts.title": "What to look for in verdicts",
|
| 117 |
+
"help.verdict.yes": "<strong style=\"color:#3fb950;\">YES / GO</strong> — proceed with confidence; numbers support the choice.",
|
| 118 |
+
"help.verdict.deg": "<strong style=\"color:#d29922;\">DEGRADED / TINY-MODEL</strong> — works but with caveats; read the action.",
|
| 119 |
+
"help.verdict.no": "<strong style=\"color:#f85149;\">NO / MEMORY-LIMITED</strong> — don't proceed as-is; mitigation provided.",
|
| 120 |
+
"help.privacy.title": "Privacy",
|
| 121 |
+
"help.privacy.body": "Everything runs in your browser. No telemetry, no analytics, no data sent anywhere. Even the LLM model runs locally via WebGPU/WebAssembly. Your model_ids and questions never leave this page.",
|
| 122 |
+
"help.source.title": "Source & paper",
|
| 123 |
+
"help.source.body": "Source code: <a href=\"https://github.com/karlesmarin/tafagent\" target=\"_blank\">github.com/karlesmarin/tafagent</a><br>Paper: <em>Marin 2026 — Transformer Thermodynamics</em> (arXiv forthcoming)",
|
| 124 |
+
|
| 125 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · independent research · the tool that closes the loop of the paper.",
|
| 126 |
},
|
| 127 |
|
|
|
|
| 188 |
"profile.hf_placeholder": "ej. meta-llama/Meta-Llama-3-8B o Qwen/Qwen2.5-7B",
|
| 189 |
"compare.hf_placeholder": "ID modelo HF (ej. meta-llama/Meta-Llama-3-8B)",
|
| 190 |
|
| 191 |
+
// Parámetros del formulario
|
| 192 |
+
"param.theta": "θ (rope_theta)",
|
| 193 |
+
"param.theta.tip": "<strong>Frecuencia base RoPE</strong> de <code>config.rope_theta</code>. Mayor = más capacidad de largo alcance.",
|
| 194 |
+
"param.T_train": "T_train",
|
| 195 |
+
"param.T_train.tip": "<strong>Contexto máximo de entrenamiento</strong>. De <code>max_position_embeddings</code>. Más allá es extrapolación.",
|
| 196 |
+
"param.T_eval": "T_eval (tu objetivo)",
|
| 197 |
+
"param.T_eval.tip": "<strong>Tu contexto de inferencia objetivo</strong>. La pregunta clave: ¿se comportará bien el modelo a ESTA longitud?",
|
| 198 |
+
"param.n_attn": "num_attention_heads",
|
| 199 |
+
"param.n_kv": "num_key_value_heads",
|
| 200 |
+
"param.d_head": "head_dim",
|
| 201 |
+
"param.n_layers": "num_hidden_layers",
|
| 202 |
+
"param.n_params": "n_params (ej. 8e9)",
|
| 203 |
+
"param.has_swa": "¿Tiene SWA?",
|
| 204 |
+
"common.yes": "Sí",
|
| 205 |
+
"common.no": "No",
|
| 206 |
+
|
| 207 |
+
// Tooltips de modos
|
| 208 |
+
"modes.tip": "<strong>Cuatro formas de usar la herramienta</strong>.<br><strong>📇 Perfil</strong>: pega un id → las 5 recetas a la vez = TAF Card.<br><strong>🆚 Comparar</strong>: 2-3 modelos lado a lado en una receta.<br><strong>💬 Pregunta</strong>: pregunta libre, el LLM del navegador elige la receta.<br><strong>📋 Receta</strong>: selección manual con control total del formulario.",
|
| 209 |
+
"profile.tip": "<strong>Diagnóstico completo en un click</strong>. Pega cualquier id de modelo HF (o elige preset). La herramienta ejecuta las 5 recetas (contexto largo, compresión KV, custom vs API, presupuesto, hardware) y produce una única <strong>TAF Card</strong> con veredicto por dimensión + números clave + clasificación arquitectónica.<br><br><strong>Caso de uso</strong>: \"Estoy evaluando Qwen2.5-32B para producción — ¿cuál es su perfil completo de viabilidad?\" → pega id → Perfilar → listo.",
|
| 210 |
+
"compare.tip": "<strong>Misma receta, múltiples modelos</strong>. Elige 2-3 modelos candidatos y una receta. Ve los veredictos en una única tabla comparativa.<br><br><strong>Caso de uso</strong>: \"Necesito recuperación de contexto largo a 16K — ¿cuál es mejor: Llama-3-8B, Mistral-7B o Qwen-7B?\" → elige 3 + X-2 + 16K → ve el ganador.",
|
| 211 |
+
|
| 212 |
+
// Modal de ayuda
|
| 213 |
+
"help.title": "📘 TAF Agent — Manual de Usuario",
|
| 214 |
+
"help.what.title": "¿Qué hace?",
|
| 215 |
+
"help.what.body": "Predice la <strong>viabilidad práctica</strong> de cualquier LLM transformer <em>antes de gastar GPU/€</em>. Responde preguntas como \"¿funcionará este modelo a L=32K?\" o \"¿debería entrenar custom o usar API?\" usando fórmulas Python deterministas (TAF — Thermodynamic Attention Framework).",
|
| 216 |
+
"help.modes.title": "Cómo usar — 4 modos",
|
| 217 |
+
"help.modes.profile": "<strong>📇 Perfilar</strong>: pega id de modelo → todas las recetas a la vez = TAF Card. <strong>Mejor punto de inicio</strong>.",
|
| 218 |
+
"help.modes.compare": "<strong>🆚 Comparar</strong>: 2-3 modelos lado a lado en la misma receta. Mejor al elegir entre candidatos.",
|
| 219 |
+
"help.modes.ask": "<strong>💬 Pregunta libre</strong>: pregunta en lenguaje natural, el LLM del navegador elige la receta. Mejor para exploración casual.",
|
| 220 |
+
"help.modes.recipe": "<strong>📋 Receta + formulario</strong>: selección manual, control total de parámetros. Mejor cuando quieres control exacto.",
|
| 221 |
+
"help.recipes.title": "Las 5 recetas disponibles",
|
| 222 |
+
"help.add_models.title": "Añadir nuevos modelos (3 maneras)",
|
| 223 |
+
"help.add_models.preset": "<strong>Lista de presets</strong>: 11 modelos populares curados. Selecciona del dropdown.",
|
| 224 |
+
"help.add_models.hf": "<strong>HF Hub fetch</strong>: pega cualquier id (ej. <code>Qwen/Qwen2.5-32B-Instruct</code>), click 📥 Cargar. El navegador descarga <code>config.json</code> directamente de HuggingFace, llena el formulario. Funciona con cualquier modelo público.",
|
| 225 |
+
"help.add_models.manual": "<strong>Manual</strong>: rellena los campos directamente con valores de la model card.",
|
| 226 |
+
"help.audit.title": "La cadena auditable",
|
| 227 |
+
"help.audit.body": "Cada resultado muestra la <strong>Cadena de Cálculo</strong> completa — cada paso de fórmula con sus entradas, salida e interpretación. Click en cualquier paso para expandir. Las referencias de sección (§26.1, §19.1, etc.) apuntan al paper para la derivación.",
|
| 228 |
+
"help.synthesis.title": "La respuesta en lenguaje natural",
|
| 229 |
+
"help.synthesis.body": "Tras ejecutar la cadena determinista, un LLM en el navegador (Qwen2.5-0.5B, ~350MB cacheado tras primera carga) sintetiza un resumen en lenguaje natural. Los números arriba son <em>siempre correctos</em> (Python determinista); la síntesis la genera el LLM — verifica contra la cadena si dudas.",
|
| 230 |
+
"help.params.title": "Parámetros comunes explicados",
|
| 231 |
+
"help.verdicts.title": "Qué mirar en los veredictos",
|
| 232 |
+
"help.verdict.yes": "<strong style=\"color:#3fb950;\">SÍ / GO</strong> — procede con confianza; los números apoyan la elección.",
|
| 233 |
+
"help.verdict.deg": "<strong style=\"color:#d29922;\">DEGRADADO / TINY-MODEL</strong> — funciona con caveats; lee la acción.",
|
| 234 |
+
"help.verdict.no": "<strong style=\"color:#f85149;\">NO / MEMORY-LIMITED</strong> — no procedas tal cual; se da mitigación.",
|
| 235 |
+
"help.privacy.title": "Privacidad",
|
| 236 |
+
"help.privacy.body": "Todo corre en tu navegador. Sin telemetría, sin analytics, sin datos enviados a ningún sitio. Incluso el modelo LLM corre localmente vía WebGPU/WebAssembly. Tus model_ids y preguntas nunca abandonan esta página.",
|
| 237 |
+
"help.source.title": "Código fuente y paper",
|
| 238 |
+
"help.source.body": "Código: <a href=\"https://github.com/karlesmarin/tafagent\" target=\"_blank\">github.com/karlesmarin/tafagent</a><br>Paper: <em>Marin 2026 — Transformer Thermodynamics</em> (arXiv próximamente)",
|
| 239 |
+
|
| 240 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · investigación independiente · la herramienta que cierra el círculo del paper.",
|
| 241 |
},
|
| 242 |
|
|
|
|
| 303 |
"profile.hf_placeholder": "ex. meta-llama/Meta-Llama-3-8B ou Qwen/Qwen2.5-7B",
|
| 304 |
"compare.hf_placeholder": "ID modèle HF (ex. meta-llama/Meta-Llama-3-8B)",
|
| 305 |
|
| 306 |
+
// Paramètres du formulaire
|
| 307 |
+
"param.theta": "θ (rope_theta)",
|
| 308 |
+
"param.theta.tip": "<strong>Fréquence de base RoPE</strong> de <code>config.rope_theta</code>. Plus haut = plus de capacité longue portée.",
|
| 309 |
+
"param.T_train": "T_train",
|
| 310 |
+
"param.T_train.tip": "<strong>Contexte max d'entraînement</strong>. De <code>max_position_embeddings</code>. Au-delà c'est de l'extrapolation.",
|
| 311 |
+
"param.T_eval": "T_eval (votre cible)",
|
| 312 |
+
"param.T_eval.tip": "<strong>Votre contexte d'inférence cible</strong>. La question clé : le modèle se comportera-t-il bien à CETTE longueur ?",
|
| 313 |
+
"param.n_attn": "num_attention_heads",
|
| 314 |
+
"param.n_kv": "num_key_value_heads",
|
| 315 |
+
"param.d_head": "head_dim",
|
| 316 |
+
"param.n_layers": "num_hidden_layers",
|
| 317 |
+
"param.n_params": "n_params (ex. 8e9)",
|
| 318 |
+
"param.has_swa": "A SWA ?",
|
| 319 |
+
"common.yes": "Oui",
|
| 320 |
+
"common.no": "Non",
|
| 321 |
+
|
| 322 |
+
// Tooltips des modes
|
| 323 |
+
"modes.tip": "<strong>Quatre façons d'utiliser l'outil</strong>.<br><strong>📇 Profil</strong>: collez un id → les 5 recettes à la fois = TAF Card.<br><strong>🆚 Comparer</strong>: 2-3 modèles côte à côte sur une recette.<br><strong>💬 Question</strong>: question libre, le LLM du navigateur choisit la recette.<br><strong>📋 Recette</strong>: sélection manuelle avec contrôle total du formulaire.",
|
| 324 |
+
"profile.tip": "<strong>Diagnostic complet en un clic</strong>. Collez n'importe quel id de modèle HF (ou choisissez préréglage). L'outil exécute les 5 recettes (contexte long, compression KV, custom vs API, budget, hardware) et produit une <strong>TAF Card</strong> unique avec verdict par dimension + nombres clés + classification architecturale.<br><br><strong>Cas d'usage</strong>: « J'évalue Qwen2.5-32B pour la production — quel est son profil complet de viabilité ? » → collez id → Profiler → fait.",
|
| 325 |
+
"compare.tip": "<strong>Même recette, plusieurs modèles</strong>. Choisissez 2-3 modèles candidats et une recette. Voyez les verdicts dans un seul tableau comparatif.<br><br><strong>Cas d'usage</strong>: « J'ai besoin de récupération longue contexte à 16K — quel est le meilleur : Llama-3-8B, Mistral-7B ou Qwen-7B ? » → choisissez 3 + X-2 + 16K → voyez le gagnant.",
|
| 326 |
+
|
| 327 |
+
// Modal d'aide
|
| 328 |
+
"help.title": "📘 TAF Agent — Manuel d'utilisation",
|
| 329 |
+
"help.what.title": "Que fait-il ?",
|
| 330 |
+
"help.what.body": "Prédit la <strong>viabilité pratique</strong> de tout LLM transformer <em>avant de dépenser du GPU/€</em>. Répond à des questions comme « ce modèle fonctionnera-t-il à L=32K ? » ou « dois-je entraîner sur mesure ou utiliser une API ? » via des formules Python déterministes (TAF — Thermodynamic Attention Framework).",
|
| 331 |
+
"help.modes.title": "Comment l'utiliser — 4 modes",
|
| 332 |
+
"help.modes.profile": "<strong>📇 Profiler</strong>: collez id de modèle → toutes les recettes à la fois = TAF Card. <strong>Meilleur point de départ</strong>.",
|
| 333 |
+
"help.modes.compare": "<strong>🆚 Comparer</strong>: 2-3 modèles côte à côte sur la même recette. Mieux pour choisir entre candidats.",
|
| 334 |
+
"help.modes.ask": "<strong>💬 Question libre</strong>: question en langage naturel, le LLM du navigateur choisit la recette. Mieux pour exploration casuelle.",
|
| 335 |
+
"help.modes.recipe": "<strong>📋 Recette + formulaire</strong>: sélection manuelle, contrôle total des paramètres. Mieux quand vous voulez un contrôle exact.",
|
| 336 |
+
"help.recipes.title": "Les 5 recettes disponibles",
|
| 337 |
+
"help.add_models.title": "Ajouter de nouveaux modèles (3 façons)",
|
| 338 |
+
"help.add_models.preset": "<strong>Liste de préréglages</strong>: 11 modèles populaires curés. Sélectionnez dans le dropdown.",
|
| 339 |
+
"help.add_models.hf": "<strong>HF Hub fetch</strong>: collez n'importe quel id (ex. <code>Qwen/Qwen2.5-32B-Instruct</code>), cliquez 📥 Charger. Le navigateur télécharge <code>config.json</code> directement de HuggingFace, remplit le formulaire. Fonctionne avec tout modèle public.",
|
| 340 |
+
"help.add_models.manual": "<strong>Manuel</strong>: remplissez les champs directement avec les valeurs de la model card.",
|
| 341 |
+
"help.audit.title": "La chaîne auditable",
|
| 342 |
+
"help.audit.body": "Chaque résultat montre la <strong>Chaîne de Calcul</strong> complète — chaque étape de formule avec ses entrées, sortie et interprétation. Cliquez sur n'importe quelle étape pour développer. Les références de section (§26.1, §19.1, etc.) renvoient au paper pour la dérivation.",
|
| 343 |
+
"help.synthesis.title": "La réponse en langage naturel",
|
| 344 |
+
"help.synthesis.body": "Après exécution de la chaîne déterministe, un LLM dans le navigateur (Qwen2.5-0.5B, ~350MB cachés après premier chargement) synthétise un résumé en langage naturel. Les nombres ci-dessus sont <em>toujours corrects</em> (Python déterministe) ; la synthèse est générée par LLM — vérifiez contre la chaîne en cas de doute.",
|
| 345 |
+
"help.params.title": "Paramètres communs expliqués",
|
| 346 |
+
"help.verdicts.title": "Quoi regarder dans les verdicts",
|
| 347 |
+
"help.verdict.yes": "<strong style=\"color:#3fb950;\">OUI / GO</strong> — procédez avec confiance ; les nombres soutiennent le choix.",
|
| 348 |
+
"help.verdict.deg": "<strong style=\"color:#d29922;\">DÉGRADÉ / TINY-MODEL</strong> — fonctionne avec caveats ; lisez l'action.",
|
| 349 |
+
"help.verdict.no": "<strong style=\"color:#f85149;\">NON / MEMORY-LIMITED</strong> — ne procédez pas tel quel ; mitigation fournie.",
|
| 350 |
+
"help.privacy.title": "Confidentialité",
|
| 351 |
+
"help.privacy.body": "Tout s'exécute dans votre navigateur. Pas de télémétrie, pas d'analytique, pas de données envoyées ailleurs. Même le modèle LLM s'exécute localement via WebGPU/WebAssembly. Vos model_ids et questions ne quittent jamais cette page.",
|
| 352 |
+
"help.source.title": "Code source et paper",
|
| 353 |
+
"help.source.body": "Code : <a href=\"https://github.com/karlesmarin/tafagent\" target=\"_blank\">github.com/karlesmarin/tafagent</a><br>Paper : <em>Marin 2026 — Transformer Thermodynamics</em> (arXiv à venir)",
|
| 354 |
+
|
| 355 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · recherche indépendante · l'outil qui ferme la boucle du paper.",
|
| 356 |
},
|
| 357 |
|
|
|
|
| 418 |
"profile.hf_placeholder": "例如: meta-llama/Meta-Llama-3-8B 或 Qwen/Qwen2.5-7B",
|
| 419 |
"compare.hf_placeholder": "HF 模型 id (例如: meta-llama/Meta-Llama-3-8B)",
|
| 420 |
|
| 421 |
+
// 表单参数
|
| 422 |
+
"param.theta": "θ (rope_theta)",
|
| 423 |
+
"param.theta.tip": "<strong>RoPE 基础频率</strong> 来自 <code>config.rope_theta</code>。越高 = 长程能力越强。",
|
| 424 |
+
"param.T_train": "T_train",
|
| 425 |
+
"param.T_train.tip": "<strong>训练最大上下文</strong>。来自 <code>max_position_embeddings</code>。超出此范围属于外推。",
|
| 426 |
+
"param.T_eval": "T_eval (您的目标)",
|
| 427 |
+
"param.T_eval.tip": "<strong>您的目标推理上下文</strong>。关键问题: 模型在 <em>这个</em> 长度下表现是否良好?",
|
| 428 |
+
"param.n_attn": "num_attention_heads",
|
| 429 |
+
"param.n_kv": "num_key_value_heads",
|
| 430 |
+
"param.d_head": "head_dim",
|
| 431 |
+
"param.n_layers": "num_hidden_layers",
|
| 432 |
+
"param.n_params": "n_params (例如 8e9)",
|
| 433 |
+
"param.has_swa": "有 SWA 吗?",
|
| 434 |
+
"common.yes": "是",
|
| 435 |
+
"common.no": "否",
|
| 436 |
+
|
| 437 |
+
// 模式提示
|
| 438 |
+
"modes.tip": "<strong>四种使用方式</strong>。<br><strong>📇 画像</strong>: 粘贴模型 id → 一次运行所有 5 个配方 = TAF 卡。<br><strong>🆚 比较</strong>: 2-3 个模型在一个配方上并排比较。<br><strong>💬 提问</strong>: 自由形式问题,浏览器 LLM 选择配方。<br><strong>📋 配方</strong>: 手动选择,完全控制表单。",
|
| 439 |
+
"profile.tip": "<strong>一键完整诊断</strong>。粘贴任意 HF 模型 id (或选择预设)。工具运行所有 5 个配方 (长上下文、KV 压缩、自定义 vs API、预算、硬件),生成单个 <strong>TAF 卡</strong>,显示每个维度的判定 + 关键数字 + 架构分类。<br><br><strong>用例</strong>: \"我正在为生产评估 Qwen2.5-32B — 它的完整可行性概况是什么?\" → 粘贴 id → 画像 → 完成。",
|
| 440 |
+
"compare.tip": "<strong>同一配方,多个模型</strong>。选择 2-3 个候选模型和一个配方。在单个比较表中查看判定。<br><br><strong>用例</strong>: \"我需要在 16K 进行长上下文检索 — 哪个最好: Llama-3-8B、Mistral-7B 或 Qwen-7B?\" → 选择 3 个 + X-2 + 16K → 看赢家。",
|
| 441 |
+
|
| 442 |
+
// 帮助模态框
|
| 443 |
+
"help.title": "📘 TAF Agent — 用户手册",
|
| 444 |
+
"help.what.title": "它做什么?",
|
| 445 |
+
"help.what.body": "在<em>花费 GPU/$ 之前</em>,预测任意 transformer LLM 的<strong>实际可行性</strong>。回答诸如 \"这个模型能在 L=32K 工作吗?\" 或 \"我应该自定义训练还是使用 API?\" 等问题,使用确定性 Python 公式 (TAF — Thermodynamic Attention Framework)。",
|
| 446 |
+
"help.modes.title": "如何使用 — 4 种模式",
|
| 447 |
+
"help.modes.profile": "<strong>📇 画像</strong>: 粘贴模型 id → 同时运行所有配方 = TAF 卡。<strong>最佳起点</strong>。",
|
| 448 |
+
"help.modes.compare": "<strong>🆚 比较</strong>: 2-3 个模型在同一配方上并排。最适合在候选者之间选择。",
|
| 449 |
+
"help.modes.ask": "<strong>💬 自由提问</strong>: 自然语言问题,浏览器 LLM 选择配方。最适合随意探索。",
|
| 450 |
+
"help.modes.recipe": "<strong>📋 配方 + 表单</strong>: 手动选择,完全控制参数。最适合需要精确控制时。",
|
| 451 |
+
"help.recipes.title": "可用的 5 个配方",
|
| 452 |
+
"help.add_models.title": "添加新模型 (3 种方式)",
|
| 453 |
+
"help.add_models.preset": "<strong>预设列表</strong>: 11 个流行模型已策划。从下拉菜单选择。",
|
| 454 |
+
"help.add_models.hf": "<strong>HF Hub 获取</strong>: 粘贴任意 id (例如 <code>Qwen/Qwen2.5-32B-Instruct</code>),点击 📥 获取。浏览器直接从 HuggingFace 下载 <code>config.json</code>,填充表单。适用于任何公共模型。",
|
| 455 |
+
"help.add_models.manual": "<strong>手动</strong>: 用模型卡的值直接填充表单字段。",
|
| 456 |
+
"help.audit.title": "可审计链",
|
| 457 |
+
"help.audit.body": "每个结果都显示完整的<strong>计算链</strong> — 每个公式步骤及其输入、输出和解释。点击任意步骤展开。引用的章节号 (§26.1、§19.1 等) 指向论文中的推导。",
|
| 458 |
+
"help.synthesis.title": "自然语言回答",
|
| 459 |
+
"help.synthesis.body": "在确定性链运行后,浏览器中的 LLM (Qwen2.5-0.5B,首次加载后约 350MB 缓存) 综合自然语言摘要。上面的数字<em>始终正确</em> (确定性 Python);综合由 LLM 生成 — 如有疑问,请对照链验证。",
|
| 460 |
+
"help.params.title": "常见参数解释",
|
| 461 |
+
"help.verdicts.title": "判定中要看什么",
|
| 462 |
+
"help.verdict.yes": "<strong style=\"color:#3fb950;\">是 / GO</strong> — 自信地继续;数字支持选择。",
|
| 463 |
+
"help.verdict.deg": "<strong style=\"color:#d29922;\">降级 / TINY-MODEL</strong> — 有警告地工作;阅读操作。",
|
| 464 |
+
"help.verdict.no": "<strong style=\"color:#f85149;\">否 / MEMORY-LIMITED</strong> — 不要按原样进行;提供缓解措施。",
|
| 465 |
+
"help.privacy.title": "隐私",
|
| 466 |
+
"help.privacy.body": "一切都在您的浏览器中运行。无遥测,无分析,无数据发送到任何地方。即使是 LLM 模型也通过 WebGPU/WebAssembly 在本地运行。您的 model_ids 和问题永不离开此页面。",
|
| 467 |
+
"help.source.title": "源代码和论文",
|
| 468 |
+
"help.source.body": "源代码: <a href=\"https://github.com/karlesmarin/tafagent\" target=\"_blank\">github.com/karlesmarin/tafagent</a><br>论文: <em>Marin 2026 — Transformer Thermodynamics</em> (arXiv 即将)",
|
| 469 |
+
|
| 470 |
"footer.text": "© 2026 Carles Marin · Apache-2.0 · 独立研究 · 闭合论文回路的工具。",
|
| 471 |
},
|
| 472 |
};
|