No corpus loaded
Pick a sandbox example from the sidebar, or paste your own text.
Pick a sandbox example from the sidebar, or paste your own text.
Suggestions below; you can also type any compound separated by @.
(run annotation first to see per-model output)
JSON of the internal schema (fields with name/type/values/nullable/aggregator). Click outside to apply.
🧠 OpenRouter supports MoE — you can pick several models. Single-model only. For Mixture-of-Experts (parallel models + vote), use OpenRouter.
sessionStorage
(one slot per provider). Sent as X-API-Key + X-LLM-Provider headers — never
stored on the server.
OPENROUTER_API_KEY is also configured. If you don't set a tab-key, the
server fallback is used.
Get a key → openrouter.ai/keys console.mistral.ai/api-keys platform.openai.com/api-keys ilaas.fr/services-inference
Press Enter, , or ; to
add. You can also paste PER, LOC, ORG, WORK and press Enter to add them all at
once.
Need lemmatization, morphology, or several tag columns? Use one of the POS / Lemma presets above, or open 📋 Task after loading for finer control.
Corrected sentences live here and are re-injected as few-shot examples on
the next annotation run. The pool filters by (language, schema_hash) so cross-task
contamination cannot happen.
Sentences separated by blank lines. Header row
(text_form form lemma pos) is optional and may be
repeated before every sentence — duplicates are skipped, so the app's own
TSV exports round-trip without manual cleanup. Requires an active POS+lemma
schema.
💡 The companion paper reports that 5–50 tokens per example is generally enough — beyond that, returns diminish and the prompt grows costly.
| # | lang | source | preview |
|---|---|---|---|
| empty — correct a sentence and click 📥 to ICL. | |||
All sentences in the corpus, with their current (possibly corrected) annotations.
⬇TSV round-trip with PIE baseline ⬇JSON schema-conformant ⬇CoNLL-U UD-standard ⬇JSONL fine-tune formatThis workbench treats a frontier LLM as an annotator. You pick a task (POS, lemma, NER, sentence classification, …), hand the model a few tokens or sentences, and it returns a structured JSON annotation that you can review, correct, and export.
The few-shot examples you validate are kept in a session-scoped ICL pool (filtered by language + schema). They are re-injected at the top of every subsequent prompt — the model imitates your conventions instead of having to be re-trained. You can pre-seed the pool by importing a PIE TSV in the ICL modal.
The loop is designed for low-resource scenarios. Even with zero training data, a pre-trained LLM can produce a usable first pass on Ancient Greek, Old Armenian, Old Georgian, Syriac, modern languages, or anything else. You correct the few contested tokens (highlighted by MoE voting), feed corrections back into the pool, and the next batch comes out cleaner.
Once you've collected a few hundred to a few thousand gold sentences this way, training a lightweight task-specific model (CRF, BiLSTM, fine-tuned BERT) is usually cheaper, faster, fully reproducible, and offline-friendly compared to running an LLM in production. The exports here (TSV / CoNLL-U / JSONL) are ready for that next step.
Cost in USD is only reported by OpenRouter (the response includes the actual price billed to your key). Other providers report token counts only — cost stays at $0.00 here even if your account is billed.
| model | calls | prompt tok | completion tok | cost |
|---|---|---|---|---|
| No calls yet — annotate a sentence to populate this log. | ||||
| j / k | focus next / previous token |
| e / ↵ | edit focused token |
| 1 – 9 | (in editor) assign the i-th visible tag |
| x | toggle selection of focused token |
| r | re-annotate the focused sentence |
| ↵ | save token edit and advance to next disagreement |
| Esc | close popup |