Spaces:
Running
Contributing to TAF Agent
Thank you for considering contributing. This is an independent research project — every contribution, however small, is genuinely appreciated.
How you can help (no coding required)
🌐 Translate
Add a language to the UI. Edit js/i18n.js, copy the en block, translate
each value. Open a PR. ~1-2h.
🧪 Falsify a prediction
Run TAF Agent on a model where you have real measurements (NIAH retrieval, PPL benchmarks, training cost data). If our verdict disagrees with reality, open a refutation issue in the registry. Refutations are first-class citizens here.
➕ Add a model preset
Open an issue with the model's config. We'll bundle popular ones into the next release.
🐛 Report bugs
Use the bug report template. Browser console output (F12 → Console) helps a lot.
💡 Propose new recipes
Suggest new TAF analyses in the registry recipe template. The 5 currently shipped (X-1, X-2, X-3, X-5, X-19) are a starting set; the paper outlines 20 candidate recipes.
How you can help (with code)
Local development setup
git clone https://github.com/karlesmarin/tafagent
cd tafagent
python -m http.server 8000
# Open http://localhost:8000 in Chrome/Edge/Firefox 113+
No build step, no npm, no transpilation. Edit files, refresh browser.
Code structure
index.html ← UI shell
style.css ← dark theme + responsive
js/main.js ← orchestration (Pyodide + WebLLM + render)
js/i18n.js ← translations (EN/ES/FR/ZH)
python/taf_browser.py ← TAF formulas + recipes (runs in Pyodide)
registry-bootstrap/ ← files for the public registry repo
Adding a new recipe (X-N)
- Add the function to
python/taf_browser.py:def run_recipe_xN(theta, T_train, ...): chain = [] # ... build chain step by step using existing TAF formulas return _wrap("X-N", "Name", locals(), chain, verdict, reason, mitigation) - Register it in the
RECIPESdict at the bottom of the file. - Add defaults to
getRecipeDefaults()injs/main.js. - Test locally; submit PR.
Adding a new language
- In
js/i18n.js, add toLANGUAGESarray:{ code: "de", flag: "🇩🇪", label: "Deutsch" } - Copy the
enblock inTRANSLATIONS, translate each value. - Add a flag button in
index.html:<button class="lang-btn" data-lang="de" data-label="Deutsch" title="Deutsch">🇩🇪</button> - Test, submit PR.
Adding a new TAF formula
- Add the pure-Python function to
python/taf_browser.py. - Add a translation key for tooltips in
js/i18n.js. - If it's a closed-form result usable from a recipe, expose via the recipe runner.
Pull request process
- Fork the repo.
- Branch off
main:git checkout -b feat/your-thing. - Make changes, commit with descriptive messages
(
feat:/fix:/docs:/refactor:). - Push to your fork; open PR against
main. - Describe what changed and why; reference issue if any.
- Be patient — this is maintained part-time.
We rebase + squash PRs for a clean history.
Code of conduct
- Be technical, specific, kind. Disagreements are about math, not people.
- Citations beat opinions. Measurements beat citations.
- Assume good faith. Most "wrong" PRs are misunderstandings, not bad actors.
- No commercial advertisements, no third-party trackers, no telemetry.
What we won't accept
- Anything that adds tracking / analytics / telemetry to the user
- Closed-source dependencies that lock the tool to a vendor
- Recipes that require API keys for non-academic models
- Changes that break the offline-after-first-load promise
- Submissions that violate model licenses (e.g. uploading gated weights)
Maintainer
Carles Marin · @karlesmarin · transformerkmarin@gmail.com (paper-related) · karlesmarin@gmail.com (project-related)
License
Apache-2.0. By contributing you agree your contribution is licensed under the same terms.