@r1z4x/tezgah 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +738 -0
- package/LICENSE +21 -0
- package/MANIFEST +753 -0
- package/README.de.md +169 -0
- package/README.es.md +168 -0
- package/README.fr.md +166 -0
- package/README.md +161 -0
- package/README.tr.md +163 -0
- package/agents/tezgah-reviewer.md +70 -0
- package/bin/codegen +337 -0
- package/bin/consult +797 -0
- package/bin/tezgah-adhd +50 -0
- package/bin/tezgah-agents +45 -0
- package/bin/tezgah-capture +66 -0
- package/bin/tezgah-context +96 -0
- package/bin/tezgah-decisions +213 -0
- package/bin/tezgah-design +953 -0
- package/bin/tezgah-docs +1199 -0
- package/bin/tezgah-doctor +497 -0
- package/bin/tezgah-dsh +37 -0
- package/bin/tezgah-dsh.cmd +70 -0
- package/bin/tezgah-gate +75 -0
- package/bin/tezgah-import-ai-research +439 -0
- package/bin/tezgah-index +32 -0
- package/bin/tezgah-lessons +148 -0
- package/bin/tezgah-mcp +322 -0
- package/bin/tezgah-migrate +324 -0
- package/bin/tezgah-pony +50 -0
- package/bin/tezgah-research +772 -0
- package/bin/tezgah-rollback +93 -0
- package/bin/tezgah-route +124 -0
- package/bin/tezgah-setup +5798 -0
- package/bin/tezgah-status +383 -0
- package/bin/tezgah-task +607 -0
- package/bin/tezgah-taste +423 -0
- package/bin/tezgah-triage +485 -0
- package/bin/tezgah.js +36 -0
- package/commands/adhd.md +21 -0
- package/commands/ponytail.md +21 -0
- package/docs/README.md +112 -0
- package/docs/architecture.md +226 -0
- package/docs/citations-baseline.json +59 -0
- package/docs/clarity-baseline.json +116 -0
- package/docs/contract.md +416 -0
- package/docs/environment.md +141 -0
- package/docs/evidence.md +831 -0
- package/docs/feature-audit.md +139 -0
- package/docs/gate.md +407 -0
- package/docs/glossary.md +201 -0
- package/docs/hosts.md +400 -0
- package/docs/index.json +471 -0
- package/docs/judge.md +193 -0
- package/docs/layers.md +189 -0
- package/docs/models.md +160 -0
- package/docs/operations.md +666 -0
- package/docs/research.md +809 -0
- package/docs/results/paired-outcome-2026-10.jsonl +254 -0
- package/docs/results/paired-outcome-2026-10.md +204 -0
- package/docs/skills.md +236 -0
- package/docs/status-line.md +315 -0
- package/docs/testing.md +287 -0
- package/docs/vision.md +117 -0
- package/hooks/hooks.json +33 -0
- package/hooks/projects-auto-init.py +98 -0
- package/hooks/projects-posttooluse.py +149 -0
- package/hooks/projects-pretooluse.py +40 -0
- package/hooks/projects-stop.py +60 -0
- package/hooks/tezgah_agents.py +817 -0
- package/hooks/tezgah_apps.py +266 -0
- package/hooks/tezgah_attest.py +255 -0
- package/hooks/tezgah_clarity.py +171 -0
- package/hooks/tezgah_components.py +140 -0
- package/hooks/tezgah_context.py +2953 -0
- package/hooks/tezgah_embed.py +765 -0
- package/hooks/tezgah_gate.py +2736 -0
- package/hooks/tezgah_guard.py +177 -0
- package/hooks/tezgah_index.py +124 -0
- package/hooks/tezgah_integrity.py +5141 -0
- package/hooks/tezgah_judge.py +487 -0
- package/hooks/tezgah_lang.py +230 -0
- package/hooks/tezgah_lessons.py +210 -0
- package/hooks/tezgah_models.py +855 -0
- package/hooks/tezgah_paths.py +1132 -0
- package/hooks/tezgah_policy.py +1039 -0
- package/hooks/tezgah_rank.py +77 -0
- package/hooks/tezgah_replay.py +1109 -0
- package/hooks/tezgah_research.py +5176 -0
- package/hooks/tezgah_shapes.py +305 -0
- package/hooks/tezgah_skill_pick.py +227 -0
- package/hooks/tezgah_snapshot.py +490 -0
- package/hooks/tezgah_stopspec.py +320 -0
- package/hooks/tezgah_task.py +458 -0
- package/hooks/tezgah_taste.py +201 -0
- package/hooks/tezgah_untrusted.py +112 -0
- package/hooks/tezgah_update.py +430 -0
- package/hosts/codex/hook.py +268 -0
- package/hosts/codex/hooks.json +26 -0
- package/hosts/cursor/hook.py +461 -0
- package/hosts/cursor/hooks.json +44 -0
- package/hosts/dsh/hooks.json +21 -0
- package/hosts/dsh/statusline/lib/client.js +138 -0
- package/hosts/dsh/statusline/lib/index.js +104 -0
- package/hosts/dsh/statusline/package.json +28 -0
- package/hosts/omp/hook.py +277 -0
- package/hosts/omp/tezgah-hook.ts.in +701 -0
- package/hosts/opencode/plugins/tezgah.js +2742 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +151 -0
- package/output-styles/tezgah.md +142 -0
- package/package.json +32 -0
- package/packaging/build.sh +342 -0
- package/packaging/install.ps1 +166 -0
- package/packaging/install.sh +56 -0
- package/packaging/upgrade.sh +142 -0
- package/skills/ai-research/0-autoresearch-skill/SKILL.md +411 -0
- package/skills/ai-research/0-autoresearch-skill/references/agent-continuity.md +95 -0
- package/skills/ai-research/0-autoresearch-skill/references/progress-reporting.md +166 -0
- package/skills/ai-research/0-autoresearch-skill/references/skill-routing.md +219 -0
- package/skills/ai-research/0-autoresearch-skill/templates/findings.md +44 -0
- package/skills/ai-research/0-autoresearch-skill/templates/research-log.md +41 -0
- package/skills/ai-research/01-model-architecture/litgpt/SKILL.md +469 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/custom-models.md +569 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/distributed-training.md +452 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/supported-models.md +337 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/training-recipes.md +620 -0
- package/skills/ai-research/01-model-architecture/mamba/SKILL.md +260 -0
- package/skills/ai-research/01-model-architecture/mamba/references/architecture-details.md +207 -0
- package/skills/ai-research/01-model-architecture/mamba/references/benchmarks.md +256 -0
- package/skills/ai-research/01-model-architecture/mamba/references/training-guide.md +389 -0
- package/skills/ai-research/01-model-architecture/nanogpt/SKILL.md +290 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/architecture.md +383 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/data.md +477 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/training.md +565 -0
- package/skills/ai-research/01-model-architecture/rwkv/SKILL.md +260 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/architecture-details.md +345 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/rwkv7.md +387 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/state-management.md +370 -0
- package/skills/ai-research/01-model-architecture/torchtitan/SKILL.md +358 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/checkpoint.md +182 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/custom-models.md +259 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/float8.md +134 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/fsdp.md +127 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/SKILL.md +516 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/algorithms.md +654 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/integration.md +638 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/pipeline.md +724 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/training.md +566 -0
- package/skills/ai-research/02-tokenization/sentencepiece/SKILL.md +235 -0
- package/skills/ai-research/02-tokenization/sentencepiece/references/algorithms.md +201 -0
- package/skills/ai-research/02-tokenization/sentencepiece/references/training.md +305 -0
- package/skills/ai-research/03-fine-tuning/axolotl/SKILL.md +158 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/api.md +5549 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/dataset-formats.md +1030 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/index.md +16 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/other.md +3564 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/SKILL.md +80 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/_images.md +24 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/advanced.md +1056 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/getting_started.md +350 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/index.md +20 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/other.md +32 -0
- package/skills/ai-research/03-fine-tuning/peft/SKILL.md +431 -0
- package/skills/ai-research/03-fine-tuning/peft/references/advanced-usage.md +515 -0
- package/skills/ai-research/03-fine-tuning/peft/references/troubleshooting.md +481 -0
- package/skills/ai-research/03-fine-tuning/unsloth/SKILL.md +80 -0
- package/skills/ai-research/03-fine-tuning/unsloth/references/index.md +8 -0
- package/skills/ai-research/03-fine-tuning/unsloth/references/llms.md +83 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/SKILL.md +436 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/README.md +79 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/api.md +345 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/tutorials.md +301 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/SKILL.md +473 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/README.md +74 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/api.md +384 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/tutorials.md +377 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/SKILL.md +386 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/README.md +71 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/api.md +334 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/tutorials.md +319 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/SKILL.md +346 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/README.md +55 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/api.md +363 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/tutorials.md +340 -0
- package/skills/ai-research/05-data-processing/nemo-curator/SKILL.md +383 -0
- package/skills/ai-research/05-data-processing/nemo-curator/references/deduplication.md +88 -0
- package/skills/ai-research/05-data-processing/nemo-curator/references/filtering.md +103 -0
- package/skills/ai-research/05-data-processing/ray-data/SKILL.md +326 -0
- package/skills/ai-research/05-data-processing/ray-data/references/integration.md +83 -0
- package/skills/ai-research/05-data-processing/ray-data/references/transformations.md +84 -0
- package/skills/ai-research/06-post-training/grpo-rl-training/README.md +98 -0
- package/skills/ai-research/06-post-training/grpo-rl-training/SKILL.md +572 -0
- package/skills/ai-research/06-post-training/miles/SKILL.md +315 -0
- package/skills/ai-research/06-post-training/miles/references/api-reference.md +142 -0
- package/skills/ai-research/06-post-training/miles/references/troubleshooting.md +353 -0
- package/skills/ai-research/06-post-training/openrlhf/SKILL.md +249 -0
- package/skills/ai-research/06-post-training/openrlhf/references/algorithm-comparison.md +405 -0
- package/skills/ai-research/06-post-training/openrlhf/references/custom-rewards.md +531 -0
- package/skills/ai-research/06-post-training/openrlhf/references/hybrid-engine.md +288 -0
- package/skills/ai-research/06-post-training/openrlhf/references/multi-node-training.md +455 -0
- package/skills/ai-research/06-post-training/simpo/SKILL.md +219 -0
- package/skills/ai-research/06-post-training/simpo/references/datasets.md +479 -0
- package/skills/ai-research/06-post-training/simpo/references/hyperparameters.md +453 -0
- package/skills/ai-research/06-post-training/simpo/references/loss-functions.md +351 -0
- package/skills/ai-research/06-post-training/slime/SKILL.md +464 -0
- package/skills/ai-research/06-post-training/slime/references/api-reference.md +393 -0
- package/skills/ai-research/06-post-training/slime/references/troubleshooting.md +387 -0
- package/skills/ai-research/06-post-training/torchforge/SKILL.md +433 -0
- package/skills/ai-research/06-post-training/torchforge/references/api-reference.md +328 -0
- package/skills/ai-research/06-post-training/torchforge/references/troubleshooting.md +410 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/SKILL.md +455 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/dpo-variants.md +228 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/online-rl.md +83 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/reward-modeling.md +123 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/sft-training.md +169 -0
- package/skills/ai-research/06-post-training/verl/SKILL.md +391 -0
- package/skills/ai-research/06-post-training/verl/references/api-reference.md +302 -0
- package/skills/ai-research/06-post-training/verl/references/troubleshooting.md +392 -0
- package/skills/ai-research/07-safety-alignment/constitutional-ai/SKILL.md +290 -0
- package/skills/ai-research/07-safety-alignment/llamaguard/SKILL.md +337 -0
- package/skills/ai-research/07-safety-alignment/nemo-guardrails/SKILL.md +297 -0
- package/skills/ai-research/07-safety-alignment/prompt-guard/SKILL.md +312 -0
- package/skills/ai-research/08-distributed-training/accelerate/SKILL.md +332 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/custom-plugins.md +454 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/megatron-integration.md +490 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/performance.md +526 -0
- package/skills/ai-research/08-distributed-training/deepspeed/SKILL.md +141 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/08.md +18 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/09.md +174 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/2020.md +379 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/2023.md +280 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/assets.md +180 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/index.md +36 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/mii.md +119 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/other.md +1192 -0
- package/skills/ai-research/08-distributed-training/megatron-core/SKILL.md +366 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/benchmarks.md +250 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/parallelism-guide.md +405 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/production-examples.md +474 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/training-recipes.md +548 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/SKILL.md +231 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_async_recipe.md +14 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_overview.md +19 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_recipe.md +18 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_ddp_notes.md +10 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_device_mesh_tutorial.md +22 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_examples_fsdp2.md +15 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp1_api.md +9 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp2_tutorial.md +45 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fully_shard_api.md +49 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_tp_tutorial.md +22 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/ray_train_fsdp2_example.md +13 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/torchtitan_fsdp_notes.md +14 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/SKILL.md +346 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/callbacks.md +437 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/distributed.md +491 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/hyperparameter-tuning.md +557 -0
- package/skills/ai-research/08-distributed-training/ray-train/SKILL.md +406 -0
- package/skills/ai-research/08-distributed-training/ray-train/references/multi-node.md +629 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/SKILL.md +545 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/references/advanced-usage.md +612 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/references/troubleshooting.md +531 -0
- package/skills/ai-research/09-infrastructure/modal/SKILL.md +341 -0
- package/skills/ai-research/09-infrastructure/modal/references/advanced-usage.md +504 -0
- package/skills/ai-research/09-infrastructure/modal/references/troubleshooting.md +495 -0
- package/skills/ai-research/09-infrastructure/skypilot/SKILL.md +509 -0
- package/skills/ai-research/09-infrastructure/skypilot/references/advanced-usage.md +492 -0
- package/skills/ai-research/09-infrastructure/skypilot/references/troubleshooting.md +571 -0
- package/skills/ai-research/10-optimization/awq/SKILL.md +310 -0
- package/skills/ai-research/10-optimization/awq/references/advanced-usage.md +325 -0
- package/skills/ai-research/10-optimization/awq/references/troubleshooting.md +345 -0
- package/skills/ai-research/10-optimization/bitsandbytes/SKILL.md +411 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/memory-optimization.md +522 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/qlora-training.md +522 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/quantization-formats.md +448 -0
- package/skills/ai-research/10-optimization/flash-attention/SKILL.md +367 -0
- package/skills/ai-research/10-optimization/flash-attention/references/benchmarks.md +216 -0
- package/skills/ai-research/10-optimization/flash-attention/references/transformers-integration.md +294 -0
- package/skills/ai-research/10-optimization/gguf/SKILL.md +427 -0
- package/skills/ai-research/10-optimization/gguf/references/advanced-usage.md +505 -0
- package/skills/ai-research/10-optimization/gguf/references/troubleshooting.md +443 -0
- package/skills/ai-research/10-optimization/gptq/SKILL.md +450 -0
- package/skills/ai-research/10-optimization/gptq/references/calibration.md +338 -0
- package/skills/ai-research/10-optimization/gptq/references/integration.md +130 -0
- package/skills/ai-research/10-optimization/gptq/references/troubleshooting.md +96 -0
- package/skills/ai-research/10-optimization/hqq/SKILL.md +445 -0
- package/skills/ai-research/10-optimization/hqq/references/advanced-usage.md +529 -0
- package/skills/ai-research/10-optimization/hqq/references/troubleshooting.md +504 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/SKILL.md +319 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/architecture.md +320 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/biomedical.md +498 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/domain-specific.md +626 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/experiment-loop.md +129 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/optimizers.md +330 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/scaling-and-selection.md +428 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/SKILL.md +405 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/benchmarks.md +394 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/custom-tasks.md +425 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/issues.md +395 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/SKILL.md +490 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/api-evaluation.md +491 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/benchmark-guide.md +489 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/custom-tasks.md +603 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/distributed-eval.md +520 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/SKILL.md +494 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/adapter-system.md +341 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/configuration.md +448 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/custom-benchmarks.md +316 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/execution-backends.md +362 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/SKILL.md +258 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/optimization.md +90 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/quantization.md +214 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/server.md +126 -0
- package/skills/ai-research/12-inference-serving/sglang/SKILL.md +442 -0
- package/skills/ai-research/12-inference-serving/sglang/references/deployment.md +491 -0
- package/skills/ai-research/12-inference-serving/sglang/references/radix-attention.md +414 -0
- package/skills/ai-research/12-inference-serving/sglang/references/structured-generation.md +542 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/SKILL.md +187 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/multi-gpu.md +299 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/optimization.md +243 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/serving.md +471 -0
- package/skills/ai-research/12-inference-serving/vllm/SKILL.md +364 -0
- package/skills/ai-research/12-inference-serving/vllm/references/optimization.md +227 -0
- package/skills/ai-research/12-inference-serving/vllm/references/quantization.md +285 -0
- package/skills/ai-research/12-inference-serving/vllm/references/server-deployment.md +256 -0
- package/skills/ai-research/12-inference-serving/vllm/references/troubleshooting.md +448 -0
- package/skills/ai-research/13-mlops/mlflow/SKILL.md +704 -0
- package/skills/ai-research/13-mlops/mlflow/references/deployment.md +745 -0
- package/skills/ai-research/13-mlops/mlflow/references/model-registry.md +771 -0
- package/skills/ai-research/13-mlops/mlflow/references/tracking.md +681 -0
- package/skills/ai-research/13-mlops/swanlab/SKILL.md +406 -0
- package/skills/ai-research/13-mlops/swanlab/references/integrations.md +305 -0
- package/skills/ai-research/13-mlops/swanlab/references/visualization.md +234 -0
- package/skills/ai-research/13-mlops/tensorboard/SKILL.md +629 -0
- package/skills/ai-research/13-mlops/tensorboard/references/integrations.md +639 -0
- package/skills/ai-research/13-mlops/tensorboard/references/profiling.md +546 -0
- package/skills/ai-research/13-mlops/tensorboard/references/visualization.md +621 -0
- package/skills/ai-research/13-mlops/weights-and-biases/SKILL.md +590 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/artifacts.md +585 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/integrations.md +701 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/sweeps.md +848 -0
- package/skills/ai-research/14-agents/a-evolve/SKILL.md +383 -0
- package/skills/ai-research/14-agents/a-evolve/references/README.md +831 -0
- package/skills/ai-research/14-agents/a-evolve/references/api.md +594 -0
- package/skills/ai-research/14-agents/a-evolve/references/architecture.md +417 -0
- package/skills/ai-research/14-agents/a-evolve/references/design-patterns.md +462 -0
- package/skills/ai-research/14-agents/a-evolve/references/examples.md +352 -0
- package/skills/ai-research/14-agents/a-evolve/references/issues.md +591 -0
- package/skills/ai-research/14-agents/a-evolve/references/releases.md +112 -0
- package/skills/ai-research/14-agents/a-evolve/references/tutorials.md +819 -0
- package/skills/ai-research/14-agents/autogpt/SKILL.md +403 -0
- package/skills/ai-research/14-agents/autogpt/references/advanced-usage.md +536 -0
- package/skills/ai-research/14-agents/autogpt/references/troubleshooting.md +421 -0
- package/skills/ai-research/14-agents/crewai/SKILL.md +498 -0
- package/skills/ai-research/14-agents/crewai/references/flows.md +439 -0
- package/skills/ai-research/14-agents/crewai/references/tools.md +430 -0
- package/skills/ai-research/14-agents/crewai/references/troubleshooting.md +481 -0
- package/skills/ai-research/14-agents/langchain/SKILL.md +480 -0
- package/skills/ai-research/14-agents/langchain/references/agents.md +500 -0
- package/skills/ai-research/14-agents/langchain/references/integration.md +563 -0
- package/skills/ai-research/14-agents/langchain/references/rag.md +601 -0
- package/skills/ai-research/14-agents/llamaindex/SKILL.md +569 -0
- package/skills/ai-research/14-agents/llamaindex/references/agents.md +84 -0
- package/skills/ai-research/14-agents/llamaindex/references/data_connectors.md +109 -0
- package/skills/ai-research/14-agents/llamaindex/references/query_engines.md +407 -0
- package/skills/ai-research/15-rag/chroma/SKILL.md +406 -0
- package/skills/ai-research/15-rag/chroma/references/integration.md +39 -0
- package/skills/ai-research/15-rag/faiss/SKILL.md +221 -0
- package/skills/ai-research/15-rag/faiss/references/index_types.md +281 -0
- package/skills/ai-research/15-rag/pinecone/SKILL.md +358 -0
- package/skills/ai-research/15-rag/pinecone/references/deployment.md +182 -0
- package/skills/ai-research/15-rag/qdrant/SKILL.md +493 -0
- package/skills/ai-research/15-rag/qdrant/references/advanced-usage.md +649 -0
- package/skills/ai-research/15-rag/qdrant/references/troubleshooting.md +632 -0
- package/skills/ai-research/15-rag/sentence-transformers/SKILL.md +255 -0
- package/skills/ai-research/15-rag/sentence-transformers/references/models.md +124 -0
- package/skills/ai-research/16-prompt-engineering/dspy/SKILL.md +590 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/examples.md +664 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/modules.md +476 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/optimizers.md +567 -0
- package/skills/ai-research/16-prompt-engineering/guidance/SKILL.md +572 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/backends.md +555 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/constraints.md +675 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/examples.md +768 -0
- package/skills/ai-research/16-prompt-engineering/instructor/SKILL.md +740 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/examples.md +108 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/providers.md +71 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/validation.md +607 -0
- package/skills/ai-research/16-prompt-engineering/outlines/SKILL.md +652 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/backends.md +616 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/examples.md +774 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/json_generation.md +653 -0
- package/skills/ai-research/17-observability/langsmith/SKILL.md +422 -0
- package/skills/ai-research/17-observability/langsmith/references/advanced-usage.md +549 -0
- package/skills/ai-research/17-observability/langsmith/references/troubleshooting.md +538 -0
- package/skills/ai-research/17-observability/phoenix/SKILL.md +475 -0
- package/skills/ai-research/17-observability/phoenix/references/advanced-usage.md +620 -0
- package/skills/ai-research/17-observability/phoenix/references/troubleshooting.md +539 -0
- package/skills/ai-research/18-multimodal/audiocraft/SKILL.md +564 -0
- package/skills/ai-research/18-multimodal/audiocraft/references/advanced-usage.md +667 -0
- package/skills/ai-research/18-multimodal/audiocraft/references/troubleshooting.md +505 -0
- package/skills/ai-research/18-multimodal/blip-2/SKILL.md +564 -0
- package/skills/ai-research/18-multimodal/blip-2/references/advanced-usage.md +681 -0
- package/skills/ai-research/18-multimodal/blip-2/references/troubleshooting.md +527 -0
- package/skills/ai-research/18-multimodal/clip/SKILL.md +253 -0
- package/skills/ai-research/18-multimodal/clip/references/applications.md +208 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/SKILL.md +402 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/references/libero-commands.md +175 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/references/robocasa-commands.md +147 -0
- package/skills/ai-research/18-multimodal/llava/SKILL.md +304 -0
- package/skills/ai-research/18-multimodal/llava/references/training.md +198 -0
- package/skills/ai-research/18-multimodal/openpi/SKILL.md +480 -0
- package/skills/ai-research/18-multimodal/openpi/references/checkpoints-and-env-map.md +86 -0
- package/skills/ai-research/18-multimodal/openpi/references/config-recipes.md +50 -0
- package/skills/ai-research/18-multimodal/openpi/references/pytorch-gotchas.md +49 -0
- package/skills/ai-research/18-multimodal/openpi/references/remote-client-pattern.md +48 -0
- package/skills/ai-research/18-multimodal/openpi/references/training-debugging.md +46 -0
- package/skills/ai-research/18-multimodal/openvla-oft/SKILL.md +441 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/aloha-workflow.md +141 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/config-troubleshooting.md +97 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/libero-workflow.md +115 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/paper-and-checkpoints.md +84 -0
- package/skills/ai-research/18-multimodal/segment-anything/SKILL.md +500 -0
- package/skills/ai-research/18-multimodal/segment-anything/references/advanced-usage.md +590 -0
- package/skills/ai-research/18-multimodal/segment-anything/references/troubleshooting.md +485 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/SKILL.md +519 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/references/advanced-usage.md +717 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/references/troubleshooting.md +556 -0
- package/skills/ai-research/18-multimodal/whisper/SKILL.md +317 -0
- package/skills/ai-research/18-multimodal/whisper/references/languages.md +190 -0
- package/skills/ai-research/19-emerging-techniques/knowledge-distillation/SKILL.md +458 -0
- package/skills/ai-research/19-emerging-techniques/knowledge-distillation/references/minillm.md +335 -0
- package/skills/ai-research/19-emerging-techniques/long-context/SKILL.md +536 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/extension_methods.md +469 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/fine_tuning.md +612 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/rope.md +403 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/SKILL.md +497 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/coefficient-tuning.md +415 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/evaluation.md +463 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/examples.md +429 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/methods.md +353 -0
- package/skills/ai-research/19-emerging-techniques/model-pruning/SKILL.md +495 -0
- package/skills/ai-research/19-emerging-techniques/model-pruning/references/wanda.md +348 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/SKILL.md +526 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/architectures.md +433 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/inference.md +349 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/training.md +426 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/SKILL.md +467 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/lookahead.md +310 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/medusa.md +351 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/SKILL.md +479 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/data-visualization.md +509 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/diagram-generation.md +395 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/style-guide.md +305 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/SKILL.md +982 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/checklists.md +348 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/citation-workflow.md +563 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/reviewer-guidelines.md +349 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/sources.md +165 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/writing-guide.md +477 -0
- package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/SKILL.md +298 -0
- package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/references/slide-templates.md +505 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/SKILL.md +270 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/checklist.md +279 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/reviewer-guidelines.md +116 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/section-blueprints.md +400 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/systems-conferences.md +261 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/writing-patterns.md +231 -0
- package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/SKILL.md +384 -0
- package/skills/ai-research/21-research-ideation/creative-thinking-for-research/SKILL.md +366 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/SKILL.md +245 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/ara-schema.md +439 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/exploration-tree-spec.md +125 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/validation-checklist.md +149 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/SKILL.md +324 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/event-taxonomy.md +124 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/provenance-tags.md +190 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/session-protocol.md +162 -0
- package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/SKILL.md +322 -0
- package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/references/review-dimensions.md +182 -0
- package/skills/ai-research/SKILL.md +101 -0
- package/skills/ai-research/SOURCE +38 -0
- package/skills/ai-research/index/1-frame.md +18 -0
- package/skills/ai-research/index/2-data.md +21 -0
- package/skills/ai-research/index/3-train.md +48 -0
- package/skills/ai-research/index/4-measure.md +25 -0
- package/skills/ai-research/index/5-run.md +23 -0
- package/skills/ai-research/index/6-write.md +35 -0
- package/skills/ai-research/library.json +3456 -0
- package/skills/analyze-app/EVALS.md +82 -0
- package/skills/analyze-app/SKILL.md +188 -0
- package/skills/design-contract/EVALS.md +80 -0
- package/skills/design-contract/SKILL.md +171 -0
- package/skills/design-library/EVALS.md +85 -0
- package/skills/design-library/INDEX.md +59 -0
- package/skills/design-library/SKILL.md +58 -0
- package/skills/design-library/SOURCE +131 -0
- package/skills/design-library/adaptive-interfaces/skills/colour-independence/SKILL.md +90 -0
- package/skills/design-library/adaptive-interfaces/skills/flexible-typography/SKILL.md +83 -0
- package/skills/design-library/adaptive-interfaces/skills/information-density/SKILL.md +87 -0
- package/skills/design-library/adaptive-interfaces/skills/preference-audit/SKILL.md +70 -0
- package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/SKILL.md +86 -0
- package/skills/design-library/adaptive-interfaces/skills/responsive-review/SKILL.md +76 -0
- package/skills/design-library/adaptive-interfaces/skills/simplified-views/SKILL.md +97 -0
- package/skills/design-library/adaptive-interfaces/skills/specify/SKILL.md +63 -0
- package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/SKILL.md +100 -0
- package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/SKILL.md +61 -0
- package/skills/design-library/cognitive-accessibility/skills/assess-load/SKILL.md +48 -0
- package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/SKILL.md +60 -0
- package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/SKILL.md +61 -0
- package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/SKILL.md +71 -0
- package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/SKILL.md +67 -0
- package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/SKILL.md +60 -0
- package/skills/design-library/cognitive-accessibility/skills/plain-language-design/SKILL.md +78 -0
- package/skills/design-library/cognitive-accessibility/skills/review/SKILL.md +56 -0
- package/skills/design-library/cognitive-accessibility/skills/simplify/SKILL.md +39 -0
- package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/SKILL.md +64 -0
- package/skills/design-library/design-research/skills/behavioural-analytics/SKILL.md +33 -0
- package/skills/design-library/design-research/skills/qual-quant-triangulation/SKILL.md +33 -0
- package/skills/design-library/inclusive-interaction/skills/audit/SKILL.md +50 -0
- package/skills/design-library/inclusive-interaction/skills/design-flow/SKILL.md +58 -0
- package/skills/design-library/inclusive-interaction/skills/feedback-and-status/SKILL.md +76 -0
- package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/SKILL.md +70 -0
- package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/SKILL.md +99 -0
- package/skills/design-library/inclusive-interaction/skills/keyboard-review/SKILL.md +54 -0
- package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/SKILL.md +79 -0
- package/skills/design-library/inclusive-interaction/skills/multi-modal-input/SKILL.md +70 -0
- package/skills/design-library/inclusive-interaction/skills/touch-target-design/SKILL.md +71 -0
- package/skills/design-library/inclusive-interaction/skills/voice-interaction/SKILL.md +68 -0
- package/skills/design-library/visual-critique/skills/critique-affordance/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-brand-consistency/SKILL.md +42 -0
- package/skills/design-library/visual-critique/skills/critique-color/SKILL.md +44 -0
- package/skills/design-library/visual-critique/skills/critique-composition/SKILL.md +46 -0
- package/skills/design-library/visual-critique/skills/critique-information-density/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-typography/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/SKILL.md +40 -0
- package/skills/feature-audit/EVALS.md +83 -0
- package/skills/feature-audit/SKILL.md +326 -0
- package/skills/harness/EVALS.md +81 -0
- package/skills/harness/SKILL.md +88 -0
- package/skills/i-have-adhd/EVALS.md +80 -0
- package/skills/i-have-adhd/SKILL.md +183 -0
- package/skills/no-ai-slop/EVALS.md +89 -0
- package/skills/no-ai-slop/SKILL.md +209 -0
- package/skills/no-ai-slop/eval.md +52 -0
- package/skills/plan-add/EVALS.md +79 -0
- package/skills/plan-add/SKILL.md +179 -0
- package/skills/plan-add/render_table.py +72 -0
- package/skills/plan-status/EVALS.md +78 -0
- package/skills/plan-status/SKILL.md +52 -0
- package/skills/plan-sync/EVALS.md +80 -0
- package/skills/plan-sync/SKILL.md +69 -0
- package/skills/pm-frameworks/SKILL.md +33 -0
- package/skills/pm-frameworks/SOURCE +39 -0
- package/skills/pm-frameworks/intended-vs-implemented/SKILL.md +42 -0
- package/skills/pm-frameworks/opportunity-solution-tree/SKILL.md +64 -0
- package/skills/ponytail/EVALS.md +80 -0
- package/skills/ponytail/SKILL.md +124 -0
- package/skills/product-analysis/EVALS.md +103 -0
- package/skills/product-analysis/SKILL.md +361 -0
- package/skills/research/EVALS.md +104 -0
- package/skills/research/SKILL.md +570 -0
- package/skills/rl-env/SKILL.md +53 -0
- package/skills/rl-env/SOURCE +41 -0
- package/skills/rl-env/generate-nemo-gym-env/SKILL.md +169 -0
- package/skills/rl-env/generate-nemo-gym-env/references/architecture.md +114 -0
- package/skills/rl-env/generate-openenv-env/SKILL.md +183 -0
- package/skills/rl-env/generate-openenv-env/references/architecture.md +82 -0
- package/skills/rl-env/generate-ors-env/SKILL.md +209 -0
- package/skills/rl-env/generate-ors-env/references/architecture.md +113 -0
- package/skills/rl-env/generate-verifiers-env/SKILL.md +188 -0
- package/skills/rl-env/generate-verifiers-env/references/architecture.md +119 -0
- package/skills/rl-env/rl-env-from-description/SKILL.md +124 -0
- package/skills/rl-env/rl-env-from-description/references/interview.md +75 -0
- package/skills/rl-env/rl-env-from-description/references/nemo_gym.md +41 -0
- package/skills/rl-env/rl-env-from-description/references/openenv.md +35 -0
- package/skills/rl-env/rl-env-from-description/references/ors.md +50 -0
- package/skills/rl-env/rl-env-from-description/references/verifiers.md +39 -0
- package/skills/tezgah-contract/EVALS.md +78 -0
- package/skills/tezgah-contract/SKILL.md +792 -0
- package/statusline.py +129 -0
- package/workflows/graph-impact.js +153 -0
- package/workflows/graph-map.js +158 -0
- package/workflows/graph-review.js +170 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: generate-ors-env
|
|
3
|
+
description: Builds an Open Reward Standard (ORS) variant of an RL environment using the official `openreward` Python package. Use whenever someone asks to scaffold an ORS env, port to OpenReward, add per-tool-call rewards, deploy to OpenReward.ai, or wrap an existing env in the ORS protocol. ORS is the right framework when the user wants HTTP+REST+SSE, rewards arriving inline with each tool call (not post-episode), task-spec-driven sessions, splits (train/val/test), or deployment to OpenReward.ai or HF Spaces. Output is a runnable `<env_dir>/ors/` folder with `server.py`, `tasks.py`, `pyproject.toml`, `Dockerfile.spaces`, and `rollout.py`. Use for prompts like "wrap my env in ORS", "make an OpenReward env for X", or "add per-call reward to my env".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# generate-ors-env
|
|
7
|
+
|
|
8
|
+
Build the ORS variant of an env using the official **`openreward >= 0.1.33`** package (the `ors-sdk` name is a common mistake — it does not exist on PyPI).
|
|
9
|
+
|
|
10
|
+
## Concept
|
|
11
|
+
|
|
12
|
+
ORS is the Open Reward Standard ([openrewardstandard.io](https://openrewardstandard.io)) — an HTTP REST + Server-Sent Events protocol for agent envs. Reward arrives **inline** with every `ToolOutput`, which is the framework's defining feature compared to OpenEnv (external/post-hoc reward) and NeMo Gym (post-episode `/verify`).
|
|
13
|
+
|
|
14
|
+
When the user has a shared domain module (`<domain>.py`) and wants an ORS variant, **never duplicate domain logic into the framework folder** — wrap it.
|
|
15
|
+
|
|
16
|
+
## Archetypes
|
|
17
|
+
|
|
18
|
+
| Archetype | Hallmarks |
|
|
19
|
+
|---|---|
|
|
20
|
+
| **Pure-Python game** | Single `@tool`, `tasks.py` with N task dicts forming the `train` split, terminal reward via `finished=True`. |
|
|
21
|
+
| **Stateful sandbox** | `setup()` allocates resources from `task_spec`; `teardown()` frees them; per-tool reward stubs. |
|
|
22
|
+
| **Vision / computer-use** | `ImageBlock(data=<base64>, mimeType="image/png")` returns; `terminate(status)` tool emits the terminal reward. |
|
|
23
|
+
|
|
24
|
+
## Imports — exactly these
|
|
25
|
+
|
|
26
|
+
Server side:
|
|
27
|
+
```python
|
|
28
|
+
from openreward.environments import (
|
|
29
|
+
Environment, Server, tool, ToolOutput, TextBlock, Split, ImageBlock,
|
|
30
|
+
)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Client side (rollouts):
|
|
34
|
+
```python
|
|
35
|
+
from openreward import EnvironmentsAPI
|
|
36
|
+
api = EnvironmentsAPI(base_url=URL, api_key="")
|
|
37
|
+
env = api.get(ENV_NAME)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> **Don't use `OpenReward(api_key=..., base_url=...)`** even though it's the high-level client. It prepends `matrix.` / `api.` / `construct.` subdomains to the base URL — that breaks HF Space URLs. `EnvironmentsAPI` talks to `base_url` verbatim.
|
|
41
|
+
|
|
42
|
+
## Architecture
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
<env_dir>/ors/
|
|
46
|
+
├── pyproject.toml # openreward>=0.1.33 + e2b-* (if needed) + pydantic
|
|
47
|
+
├── __init__.py
|
|
48
|
+
├── Dockerfile # local dev image
|
|
49
|
+
├── Dockerfile.spaces # HF Space (port 7860, single-stage pip install)
|
|
50
|
+
├── README.spaces.md # HF Space frontmatter
|
|
51
|
+
├── server.py # the Environment subclass + main()
|
|
52
|
+
├── tasks.py # list of dicts (task_spec for each task)
|
|
53
|
+
├── rollout.py # or rollout_openai.py + rollout_qwen.py
|
|
54
|
+
└── README.md # one-page dev README
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Implementation order
|
|
58
|
+
|
|
59
|
+
### 1. Tasks file — `tasks.py`
|
|
60
|
+
|
|
61
|
+
A list of plain dicts. Each dict becomes a `task_spec` per session. ORS auto-wraps these into `Task` objects on `list_tasks()`.
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
TASKS = [
|
|
65
|
+
{"answer": "apple", "task": "Guess the 5-letter word."},
|
|
66
|
+
# ...
|
|
67
|
+
]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 2. The Environment subclass — `server.py`
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from pydantic import BaseModel
|
|
74
|
+
from openreward.environments import Environment, Server, tool, ToolOutput, TextBlock, Split
|
|
75
|
+
|
|
76
|
+
class GuessInput(BaseModel):
|
|
77
|
+
word: str
|
|
78
|
+
|
|
79
|
+
class WordleORS(Environment):
|
|
80
|
+
def __init__(self, task_spec=None, secrets=None, **kw):
|
|
81
|
+
super().__init__(task_spec=task_spec or {}, secrets=secrets or {})
|
|
82
|
+
self._game = None
|
|
83
|
+
|
|
84
|
+
def setup(self): # called on first tool invocation
|
|
85
|
+
self._game = WordleGame(self.task_spec.get("answer"))
|
|
86
|
+
|
|
87
|
+
def teardown(self): # called on session delete
|
|
88
|
+
self._game = None
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def list_splits(cls): return [Split(name="train", type="train")]
|
|
92
|
+
|
|
93
|
+
@classmethod
|
|
94
|
+
def list_tasks(cls, split): return TASKS
|
|
95
|
+
|
|
96
|
+
def get_prompt(self):
|
|
97
|
+
return [TextBlock(text="Play Wordle. Guess the 5-letter word.")]
|
|
98
|
+
|
|
99
|
+
@tool
|
|
100
|
+
def guess(self, params: GuessInput) -> ToolOutput:
|
|
101
|
+
feedback = self._game.guess(params.word)
|
|
102
|
+
return ToolOutput(
|
|
103
|
+
blocks=[TextBlock(text=feedback)],
|
|
104
|
+
reward=self._game.reward,
|
|
105
|
+
finished=self._game.done,
|
|
106
|
+
)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Key contracts:
|
|
110
|
+
- **Tools take a `params: PydanticModel`** as the second arg. ORS uses the model's JSON schema as the tool's `input_schema`.
|
|
111
|
+
- **Empty inputs** still need a Pydantic model (`class _Empty(BaseModel): pass`). Don't omit the param.
|
|
112
|
+
- **`ToolOutput.blocks`** is `[TextBlock | ImageBlock]`. For images: `ImageBlock(data=<base64>, mimeType="image/png")`. **Vision models actually see this.**
|
|
113
|
+
- **`reward`** is `float | None`. `None` means "no reward this step"; `0.0` means "stepped, scored zero". For pure terminal reward, return `None` everywhere except in the last `ToolOutput`.
|
|
114
|
+
- **`finished=True`** ends the session. Pair with `reward=1.0` (or whatever) to give the rollout a clean stop.
|
|
115
|
+
- **`task_spec`** is a `dict` you read from `self.task_spec` — no schema validation. If you want validation, do it in `setup()`.
|
|
116
|
+
|
|
117
|
+
### 3. Server entry point — `server.py` main
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
def main():
|
|
121
|
+
parser = argparse.ArgumentParser()
|
|
122
|
+
parser.add_argument("--port", type=int, default=8080)
|
|
123
|
+
parser.add_argument("--host", type=str, default="0.0.0.0")
|
|
124
|
+
args = parser.parse_args()
|
|
125
|
+
Server([WordleORS]).run(host=args.host, port=args.port)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
The endpoint name is auto-derived from the class name lowercased — `WordleORS` → `wordleors`. Tell the user this so they know what `ENV_NAME` to pass.
|
|
129
|
+
|
|
130
|
+
### 4. Rollout
|
|
131
|
+
|
|
132
|
+
Always discover tools and tasks from the env. Don't hardcode names:
|
|
133
|
+
|
|
134
|
+
```python
|
|
135
|
+
api = EnvironmentsAPI(base_url=ENV_URL, api_key="")
|
|
136
|
+
env = api.get("wordleors")
|
|
137
|
+
tasks = env.list_tasks("train")
|
|
138
|
+
tools = env.list_tools(format="openai") # built-in OpenAI tool-schema converter
|
|
139
|
+
with env.session(task=tasks[0]) as session:
|
|
140
|
+
prompt = session.get_prompt()
|
|
141
|
+
result = session.call_tool("guess", {"word": "crane"})
|
|
142
|
+
# result.blocks, result.reward, result.finished
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
For **vision envs**, the screenshot tool returns an `ImageBlock` — read it as `b.data` (already base64). Pass that into the model's image content.
|
|
146
|
+
|
|
147
|
+
### 5. Dockerfiles
|
|
148
|
+
|
|
149
|
+
`Dockerfile.spaces` is the HF Space deploy image. Keep it minimal:
|
|
150
|
+
|
|
151
|
+
```dockerfile
|
|
152
|
+
FROM python:3.11-slim
|
|
153
|
+
RUN useradd -m -u 1000 user
|
|
154
|
+
RUN pip install --no-cache-dir openreward pydantic <other-deps>
|
|
155
|
+
USER user
|
|
156
|
+
ENV HOME=/home/user PATH=/home/user/.local/bin:$PATH
|
|
157
|
+
WORKDIR $HOME/app
|
|
158
|
+
COPY --chown=user . $HOME/app
|
|
159
|
+
EXPOSE 7860
|
|
160
|
+
CMD ["python", "server.py", "--host", "0.0.0.0", "--port", "7860"]
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
`README.spaces.md`:
|
|
164
|
+
```yaml
|
|
165
|
+
---
|
|
166
|
+
title: My Env ORS
|
|
167
|
+
emoji: 🎯
|
|
168
|
+
colorFrom: pink
|
|
169
|
+
colorTo: indigo
|
|
170
|
+
sdk: docker
|
|
171
|
+
app_port: 7860
|
|
172
|
+
tags: [ors, openreward]
|
|
173
|
+
---
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Pushing to HF Spaces
|
|
177
|
+
|
|
178
|
+
Create a Space named `<owner>/<env_name>-ors`. Set `E2B_API_KEY` (and any other secrets) as **Space secrets**, not environment variables — they survive rebuilds. The local `.env` file should not be uploaded.
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
api.add_space_secret(repo_id="<owner>/<env>-ors", key="E2B_API_KEY", value="...")
|
|
182
|
+
api.upload_file(path_or_fileobj="Dockerfile.spaces", path_in_repo="Dockerfile", repo_id=...)
|
|
183
|
+
api.upload_file(path_or_fileobj="README.spaces.md", path_in_repo="README.md", repo_id=...)
|
|
184
|
+
# upload server.py, tasks.py, __init__.py, pyproject.toml
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Validation gates
|
|
188
|
+
|
|
189
|
+
1. **Local server** — `uv run python server.py --port 8772` then `curl http://localhost:8772/list_environments` returns `["<envname>"]`.
|
|
190
|
+
2. **Tool discovery** — `curl http://localhost:8772/<envname>/tools | jq '.tools | length'` matches the number of `@tool` methods.
|
|
191
|
+
3. **End-to-end** — `MAX_TURNS=3 uv run python rollout.py` drives the model through at least one tool call without errors.
|
|
192
|
+
|
|
193
|
+
## Gotchas (from real-world ORS work)
|
|
194
|
+
|
|
195
|
+
- **`from openreward.environments.types import Task`** — wrong; `Task` is in `openreward.api.environments.types` and you usually don't import it. `list_tasks` can return plain dicts; ORS wraps them.
|
|
196
|
+
- **`OpenReward(base_url=URL)` rewrites the URL** — prepends `matrix.` / `api.` / `construct.` subdomains. For HF Spaces, use `EnvironmentsAPI(base_url=URL, api_key="")` directly.
|
|
197
|
+
- **`e2b-desktop` without `e2b`** — `e2b-desktop` imports from `e2b`, but doesn't pin it. Add both to `dependencies`.
|
|
198
|
+
- **Endpoint name is the lowercased class name** — `MyEnvORS` becomes `myenvors`. Tell users this explicitly so their `ENV_NAME` env var is right.
|
|
199
|
+
|
|
200
|
+
## Reference
|
|
201
|
+
|
|
202
|
+
- `references/architecture.md` — protocol shape + Server / Environment / Session lifecycle
|
|
203
|
+
|
|
204
|
+
## Official documentation
|
|
205
|
+
|
|
206
|
+
- [openrewardstandard.io](https://openrewardstandard.io) — protocol specification
|
|
207
|
+
- [docs.openreward.ai](https://docs.openreward.ai) — Python SDK + platform docs
|
|
208
|
+
- [openreward on PyPI](https://pypi.org/project/openreward/) — current package (latest 0.1.81+)
|
|
209
|
+
- [Talc-AI/OpenReward on GitHub](https://github.com/Talc-AI/OpenReward) — source
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# ORS architecture (deep)
|
|
2
|
+
|
|
3
|
+
## Wire protocol (REST + SSE)
|
|
4
|
+
|
|
5
|
+
| Method | Path | Purpose |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `GET` | `/list_environments` | List env names served by this server |
|
|
8
|
+
| `GET` | `/<env>/tools` | List tools (returns `{"tools": [{"name", "description", "input_schema"}, ...]}`) |
|
|
9
|
+
| `GET` | `/<env>/splits` | List splits |
|
|
10
|
+
| `POST` | `/<env>/tasks` | Body `{"split": "train"}` → list of `Task` |
|
|
11
|
+
| `GET` | `/<env>/prompt` | Returns the prompt blocks for the current task |
|
|
12
|
+
| `POST` | `/<env>/sessions` | Body `{"task_spec": {...}, "secrets": {...}}` → SSE stream returns the `session_id` |
|
|
13
|
+
| `POST` | `/<env>/sessions/<sid>/tool` | Body `{"name": "x", "input": {...}}` → SSE stream of the `ToolOutput` |
|
|
14
|
+
| `DELETE` | `/<env>/sessions/<sid>` | Tear down |
|
|
15
|
+
|
|
16
|
+
Endpoint name = `<EnvironmentClassName>.lower()`. So `class WordleORS(Environment)` → `/wordleors/...`.
|
|
17
|
+
|
|
18
|
+
The `EnvironmentsAPI` Python client wraps this via `aiohttp`. `OpenReward` wraps `EnvironmentsAPI` and rewrites `base_url` to `matrix.<host>` — that's why HF Space targets need `EnvironmentsAPI` direct.
|
|
19
|
+
|
|
20
|
+
## `Environment` lifecycle
|
|
21
|
+
|
|
22
|
+
1. **`__init__(task_spec, secrets, **kw)`** — called once per session. Store `task_spec` (already on `self.task_spec` after `super().__init__`); validate or stub.
|
|
23
|
+
2. **`setup()`** — called on first tool invocation. Allocate sandbox, init game state.
|
|
24
|
+
3. **`teardown()`** — called on `DELETE /sessions/<sid>`. Kill the sandbox, free resources.
|
|
25
|
+
4. **`get_prompt() -> [TextBlock | ImageBlock]`** — called when the client asks for the prompt. Reads from `self.task_spec`.
|
|
26
|
+
5. **`@classmethod list_splits()`** and **`@classmethod list_tasks(split)`** — class-level (no `self`). Splits are static metadata. Tasks can be plain dicts; ORS wraps them.
|
|
27
|
+
6. **Tool methods** — decorated `@tool`, signature `(self, params: BaseModel) -> ToolOutput`.
|
|
28
|
+
|
|
29
|
+
## ToolOutput shape
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
ToolOutput(
|
|
33
|
+
blocks=[TextBlock(text="..."), ImageBlock(data=<b64>, mimeType="image/png")],
|
|
34
|
+
metadata={"any": "json"},
|
|
35
|
+
reward=0.5, # float | None
|
|
36
|
+
finished=False, # bool — True ends the session
|
|
37
|
+
)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Per-step rewards add up across the trajectory; `finished=True` is the only way for the env to signal terminal state.
|
|
41
|
+
|
|
42
|
+
## Splits & tasks
|
|
43
|
+
|
|
44
|
+
`Split.type` is `"train" | "validation" | "test"`. The split name and type can differ. List N tasks per split, each a dict that becomes the per-session `task_spec`.
|
|
45
|
+
|
|
46
|
+
A common pattern:
|
|
47
|
+
```python
|
|
48
|
+
TASKS = [{"answer": w, "task": "Guess the word"} for w in WORDS[:50]]
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def list_tasks(cls, split): return TASKS
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
ORS wraps each dict into a `Task(server_name=cls.__name__, environment_name=..., task_spec=dict)` automatically.
|
|
55
|
+
|
|
56
|
+
## Secrets
|
|
57
|
+
|
|
58
|
+
`Environment.__init__` takes `secrets`. The client passes `secrets` per-session in the `POST /sessions` body. Use this for per-rollout API keys (E2B sandbox, etc.) — they don't appear in the server's environment.
|
|
59
|
+
|
|
60
|
+
## Sync vs async clients
|
|
61
|
+
|
|
62
|
+
Both `EnvironmentsAPI` and `AsyncEnvironmentsAPI` exist. The sync wrapper runs an async loop under the hood. For multi-rollout scenarios prefer async:
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
async with AsyncOpenReward(api_key="").environments as api:
|
|
66
|
+
env = api.get(name, base_url=URL)
|
|
67
|
+
async with env.session(task=task) as session:
|
|
68
|
+
...
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Image handling
|
|
72
|
+
|
|
73
|
+
`ImageBlock.data` is **base64**, not raw bytes. The server-side `ImageBlock(data=base64.b64encode(png).decode(), mimeType="image/png")` matches the client-side `b.data` (still base64). Don't re-encode.
|
|
74
|
+
|
|
75
|
+
Canonical helper:
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
def _shot_block(sandbox) -> ImageBlock:
|
|
79
|
+
data = sandbox.screenshot()
|
|
80
|
+
return ImageBlock(data=base64.b64encode(data).decode("utf-8"), mimeType="image/png")
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Production deployment
|
|
84
|
+
|
|
85
|
+
The wordle and desktop ORS variants both deploy to HF Spaces using a minimal `Dockerfile.spaces`:
|
|
86
|
+
|
|
87
|
+
```dockerfile
|
|
88
|
+
FROM python:3.11-slim
|
|
89
|
+
RUN useradd -m -u 1000 user
|
|
90
|
+
RUN pip install --no-cache-dir openreward pydantic <env-specific>
|
|
91
|
+
USER user
|
|
92
|
+
WORKDIR /home/user/app
|
|
93
|
+
COPY --chown=user . .
|
|
94
|
+
EXPOSE 7860
|
|
95
|
+
CMD ["python", "server.py", "--host", "0.0.0.0", "--port", "7860"]
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Plus `README.spaces.md` with the HF frontmatter. Push via:
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
api.add_space_secret(repo_id, "E2B_API_KEY", value)
|
|
102
|
+
api.upload_file(path_or_fileobj="Dockerfile.spaces", path_in_repo="Dockerfile", ...)
|
|
103
|
+
api.upload_file(path_or_fileobj="README.spaces.md", path_in_repo="README.md", ...)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For **OpenReward.ai** deployment (the platform), the same files work — see [docs.openreward.ai](https://docs.openreward.ai/) for the GitHub-integration flow.
|
|
107
|
+
|
|
108
|
+
## What can go wrong
|
|
109
|
+
|
|
110
|
+
- `pip install ors-sdk` — package doesn't exist on PyPI.
|
|
111
|
+
- Endpoint name mismatch — class `MyEnv` is served at `/myenv`, not `/my_env`.
|
|
112
|
+
- `OpenReward(base_url="https://X.hf.space")` ends up calling `https://matrix.X.hf.space` — broken DNS. Use `EnvironmentsAPI`.
|
|
113
|
+
- `setup()` not called — happens silently when an `__init__` raises before tools are registered. Check the server log.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: generate-verifiers-env
|
|
3
|
+
description: Builds a Verifiers (PrimeIntellect) variant of an RL environment. Use whenever someone asks to scaffold a Verifiers env, port to Verifiers, build an in-process toolkit, set up a `vf.ToolEnv` with a Rubric, or wire up a TRL `GRPOTrainer` rollout. Verifiers is the right framework when the user wants in-process tools (no HTTP server), structured tool calling driven by plain Python functions, composable reward rubrics with multiple grader functions, fast iteration with no Docker, or the cleanest path from prototype to TRL training. Output is a runnable `<env_dir>/verifiers/` folder with `env.py` (toolkit + standalone tool functions + `create_verifiers_env`), `rollout.py`, and `pyproject.toml`. Use for prompts like "make a verifiers env for X", "wrap my game in verifiers", or "set up a vf.ToolEnv".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# generate-verifiers-env
|
|
7
|
+
|
|
8
|
+
Build the Verifiers variant of an env. Verifiers is **in-process** — no HTTP server, no Docker, no HF Space. The trainer (or a manual rollout) imports tool functions directly from `env.py`.
|
|
9
|
+
|
|
10
|
+
## Concept
|
|
11
|
+
|
|
12
|
+
[PrimeIntellect Verifiers](https://github.com/PrimeIntellect-ai/verifiers) is a Python library — not a server framework. It provides `vf.ToolEnv` (multi-turn rollout), `vf.Rubric` (composable async graders), and adapters into TRL `GRPOTrainer`. The trainer or rollout owns the LLM client; the env owns the tools and the grader.
|
|
13
|
+
|
|
14
|
+
When the user has a shared domain module (`<domain>.py`) and wants a Verifiers variant, wrap it as a toolkit class plus standalone tool functions. Don't duplicate domain logic.
|
|
15
|
+
|
|
16
|
+
## Archetypes
|
|
17
|
+
|
|
18
|
+
| Archetype | Hallmarks |
|
|
19
|
+
|---|---|
|
|
20
|
+
| **Pure-Python game** | One `@tool`-style function, terminal reward via rubric checking the trajectory. |
|
|
21
|
+
| **Stateful sandbox in-process** | Toolkit owns the sandbox (E2B, browser); `initialize()` is lazy; `cleanup()` is mandatory in `finally`. |
|
|
22
|
+
| **Vision env** | Drive the toolkit manually (skip `vf.ToolEnv` since vision content blocks aren't first-class in verifiers' rollout). Send the screenshot in the user message each turn. |
|
|
23
|
+
|
|
24
|
+
## Two consumption paths (always provide both)
|
|
25
|
+
|
|
26
|
+
### Path A — `DesktopToolkit`-style class (used by TRL adapter + manual rollout)
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
class WordleToolkit:
|
|
30
|
+
def __init__(self): ...
|
|
31
|
+
def initialize(self): ... # lazy E2B / state init
|
|
32
|
+
def cleanup(self): ... # kill sandbox
|
|
33
|
+
def reset(self): ... # new episode
|
|
34
|
+
def guess(self, word: str) -> str:
|
|
35
|
+
"""Submit a 5-letter word guess. Returns colored feedback."""
|
|
36
|
+
...
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Public methods are introspected as tools by the TRL adapter. Docstrings become tool descriptions.
|
|
40
|
+
|
|
41
|
+
### Path B — `vf.ToolEnv` for native verifiers `env.evaluate(client, model)`
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
def create_verifiers_env():
|
|
45
|
+
import verifiers as vf
|
|
46
|
+
from datasets import Dataset
|
|
47
|
+
dataset = Dataset.from_list([{"question": t["task"], "answer": t["expected_output"]} for t in TASKS])
|
|
48
|
+
async def correctness(completion, answer, **kwargs) -> float:
|
|
49
|
+
# read from the completion trajectory; return 0.0–1.0
|
|
50
|
+
...
|
|
51
|
+
rubric = vf.Rubric(funcs=[correctness])
|
|
52
|
+
return vf.ToolEnv(tools=TOOL_FUNCTIONS, max_turns=8, dataset=dataset, rubric=rubric, system_prompt="...")
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`TOOL_FUNCTIONS` is a list of **plain Python functions** (not bound methods). They can share state via a module-level toolkit instance.
|
|
56
|
+
|
|
57
|
+
## Recommended file layout
|
|
58
|
+
|
|
59
|
+
The user picks the actual paths. The canonical shape:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
<env_dir>/verifiers/
|
|
63
|
+
├── pyproject.toml # verifiers + e2b-* + datasets + python-dotenv + openai
|
|
64
|
+
├── __init__.py
|
|
65
|
+
├── env.py # Toolkit class + standalone tool fns + create_verifiers_env()
|
|
66
|
+
├── rollout.py # Drives the toolkit manually with the openai client
|
|
67
|
+
└── README.md
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Implementation order
|
|
71
|
+
|
|
72
|
+
### 1. The toolkit class
|
|
73
|
+
|
|
74
|
+
- `__init__` takes config (`api_key=""`, `app="firefox"`, etc.). **Don't** create the sandbox here — too eager.
|
|
75
|
+
- `initialize()` is the lazy creation hook. Always call it from each tool method.
|
|
76
|
+
- `cleanup()` kills the sandbox. Always call it from `finally` in the rollout.
|
|
77
|
+
- `reset()` calls `cleanup()` + reinitializes. Used between episodes by the TRL adapter.
|
|
78
|
+
- Each tool method:
|
|
79
|
+
- takes typed args (used for OpenAI tool-schema generation via `inspect`)
|
|
80
|
+
- has a docstring (becomes the tool description — first paragraph only)
|
|
81
|
+
- calls `self.initialize()` first, mutates state, returns a string
|
|
82
|
+
|
|
83
|
+
### 2. Standalone tool functions for `vf.ToolEnv`
|
|
84
|
+
|
|
85
|
+
Module-level shared toolkit, plus thin wrappers:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
_shared: Optional[WordleToolkit] = None
|
|
89
|
+
def _kit():
|
|
90
|
+
global _shared
|
|
91
|
+
if _shared is None:
|
|
92
|
+
_shared = WordleToolkit()
|
|
93
|
+
return _shared
|
|
94
|
+
|
|
95
|
+
def guess(word: str) -> str:
|
|
96
|
+
"""Submit a 5-letter word guess."""
|
|
97
|
+
return _kit().guess(word)
|
|
98
|
+
|
|
99
|
+
TOOL_FUNCTIONS = [guess]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Why both? The TRL adapter wants the toolkit class (per-rollout instance, isolated state). `vf.ToolEnv` wants free functions. Don't pick one — provide both.
|
|
103
|
+
|
|
104
|
+
### 3. The rubric
|
|
105
|
+
|
|
106
|
+
Rubrics are composable graders. Each grader is `async def func(completion, answer, **kwargs) -> float`. Combine multiple in a `vf.Rubric(funcs=[...])` and they're averaged (or weighted, see verifiers docs).
|
|
107
|
+
|
|
108
|
+
For a single-criterion env, one grader suffices:
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
async def correctness(completion, answer, **kwargs) -> float:
|
|
112
|
+
if not completion: return 0.0
|
|
113
|
+
last = completion[-1].get("content", "") if isinstance(completion[-1], dict) else str(completion[-1])
|
|
114
|
+
return 1.0 if answer.strip() in last.strip() else 0.0
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
For multi-criterion (e.g. computer-use envs that need both `terminate(success)` AND a state check):
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
async def correctness(completion, answer, **kwargs) -> float:
|
|
121
|
+
seen_success = any("terminated: success" in str(m) for m in completion)
|
|
122
|
+
seen_expected = any(answer in str(m) for m in completion)
|
|
123
|
+
return 1.0 if (seen_success and seen_expected) else (0.5 if seen_success else 0.0)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 4. Rollout — `rollout.py`
|
|
127
|
+
|
|
128
|
+
Build OpenAI tool schemas from the function signatures + docstrings via `inspect`:
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
def func_to_openai_tool(fn):
|
|
132
|
+
sig = inspect.signature(fn)
|
|
133
|
+
hints = get_type_hints(fn)
|
|
134
|
+
doc = (fn.__doc__ or "").strip().split("\n\n")[0]
|
|
135
|
+
properties, required = {}, []
|
|
136
|
+
for name, p in sig.parameters.items():
|
|
137
|
+
ann = hints.get(name, str)
|
|
138
|
+
origin = get_origin(ann)
|
|
139
|
+
if origin in (list, "list"):
|
|
140
|
+
inner = get_args(ann)
|
|
141
|
+
properties[name] = {"type": "array", "items": {"type": "integer" if (inner and inner[0] is int) else "string"}}
|
|
142
|
+
elif ann is int: properties[name] = {"type": "integer"}
|
|
143
|
+
elif ann is float: properties[name] = {"type": "number"}
|
|
144
|
+
elif ann is bool: properties[name] = {"type": "boolean"}
|
|
145
|
+
else: properties[name] = {"type": "string"}
|
|
146
|
+
if p.default is inspect.Parameter.empty:
|
|
147
|
+
required.append(name)
|
|
148
|
+
return {"type": "function", "function": {
|
|
149
|
+
"name": fn.__name__, "description": doc,
|
|
150
|
+
"parameters": {"type": "object", "properties": properties, "required": required},
|
|
151
|
+
}}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
This pattern works for any toolkit. Use it as the standard adapter from Python signatures to OpenAI tool schemas.
|
|
155
|
+
|
|
156
|
+
For multimodal envs, drive the toolkit manually (don't use `vf.ToolEnv` since vision-content blocks aren't first-class in verifiers' rollout). Send the latest screenshot in the user message every turn:
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
text, b64 = kit._ctrl.screenshot() # if you exposed _ctrl
|
|
160
|
+
messages.append({"role": "user", "content": [
|
|
161
|
+
{"type": "text", "text": "Latest screenshot:"},
|
|
162
|
+
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
|
|
163
|
+
]})
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Validation gates
|
|
167
|
+
|
|
168
|
+
1. **Toolkit imports cleanly** — `uv run python -c "from env import DesktopToolkit, TOOL_FUNCTIONS"`
|
|
169
|
+
2. **`vf.ToolEnv` builds** — `uv run python -c "from env import create_verifiers_env; env = create_verifiers_env(); print(env)"`
|
|
170
|
+
3. **Manual rollout** — `MAX_TURNS=3 uv run python rollout.py` runs end-to-end. Hits a real backend (E2B or whatever the env uses).
|
|
171
|
+
|
|
172
|
+
## Gotchas
|
|
173
|
+
|
|
174
|
+
- **`ModuleNotFoundError: attrs`** — `e2b-desktop` transitively needs `attrs` but doesn't pin it. Add `attrs>=23.0` to `dependencies`.
|
|
175
|
+
- **TypedDict vs dataclass for verifiers data structures** — most are TypedDicts. Access by key, not attribute. (Same trap exists in skyrl-gym; we hit it during the desktop_env port.)
|
|
176
|
+
- **Tool-schema `**kwargs` is forbidden** — vLLM (used by some trainers) can't introspect `**kwargs` for JSON schema generation. Define explicit params, even if empty.
|
|
177
|
+
- **Don't return huge strings** — verifiers passes the result through to the model verbatim. A 100KB log dump will blow your context. Truncate / summarize in the tool method.
|
|
178
|
+
|
|
179
|
+
## Reference
|
|
180
|
+
|
|
181
|
+
- `references/architecture.md` — `vf.ToolEnv` internals + Rubric composition + TRL adapter shape
|
|
182
|
+
|
|
183
|
+
## Official documentation
|
|
184
|
+
|
|
185
|
+
- [PrimeIntellect-ai/verifiers](https://github.com/PrimeIntellect-ai/verifiers) — source repo
|
|
186
|
+
- [Prime Intellect Verifiers docs](https://docs.primeintellect.ai/verifiers/overview)
|
|
187
|
+
- [verifiers/docs/environments.md](https://github.com/PrimeIntellect-ai/verifiers/blob/main/docs/environments.md) — `ToolEnv` / `StatefulToolEnv` / `MultiTurnEnv` reference
|
|
188
|
+
- [verifiers on PyPI](https://pypi.org/project/verifiers/) — latest is 0.1.9+ (Jan 2026)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Verifiers architecture (deep)
|
|
2
|
+
|
|
3
|
+
## Conceptual model
|
|
4
|
+
|
|
5
|
+
Verifiers is **not** a server framework. It's a Python library that gives you:
|
|
6
|
+
|
|
7
|
+
1. A `vf.ToolEnv` class that runs a multi-turn tool-calling rollout against any OpenAI-compatible client.
|
|
8
|
+
2. A `vf.Rubric` class that aggregates async grader functions into a single reward.
|
|
9
|
+
3. Adapters into TRL (`GRPOTrainer`) so the env can be a plain Python object passed to the trainer.
|
|
10
|
+
|
|
11
|
+
The trainer or rollout owns the LLM client. The env owns the tools and the grader. There's no HTTP layer.
|
|
12
|
+
|
|
13
|
+
## `vf.ToolEnv` shape
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
env = vf.ToolEnv(
|
|
17
|
+
tools: list[Callable], # plain Python functions, signatures = OpenAI tool schemas
|
|
18
|
+
max_turns: int, # hard cap per rollout
|
|
19
|
+
dataset: Dataset, # HF Dataset with `question`, `answer` columns
|
|
20
|
+
rubric: vf.Rubric, # grader composition
|
|
21
|
+
system_prompt: str = "",
|
|
22
|
+
parser: Optional[Parser] = None, # optional output parsing
|
|
23
|
+
)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Tool functions are introspected via `inspect.signature` + `get_type_hints` + the docstring. The first paragraph of the docstring becomes the tool description.
|
|
27
|
+
|
|
28
|
+
## Rubric
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
async def correctness(completion, answer, **kwargs) -> float: ...
|
|
32
|
+
async def efficiency(completion, answer, **kwargs) -> float: ...
|
|
33
|
+
|
|
34
|
+
rubric = vf.Rubric(funcs=[correctness, efficiency])
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`completion` is the message trajectory (list of dicts in OpenAI message format). `answer` is the ground truth from the dataset row. Each grader returns a float; the rubric averages them by default. Per-grader weights via `Rubric(funcs=[...], weights=[...])`.
|
|
38
|
+
|
|
39
|
+
The rubric runs **after** the rollout completes. There's no per-step reward — that's an ORS feature, not a Verifiers one.
|
|
40
|
+
|
|
41
|
+
## TRL adapter
|
|
42
|
+
|
|
43
|
+
For training with `GRPOTrainer`, Verifiers exposes an adapter that wraps a toolkit class:
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
from trl import GRPOTrainer
|
|
47
|
+
trainer = GRPOTrainer(
|
|
48
|
+
model=...,
|
|
49
|
+
environment_factory=DesktopToolkit, # the class, not an instance
|
|
50
|
+
environment_config={"app": "firefox"},
|
|
51
|
+
reward_funcs=[correctness], # the rubric's funcs
|
|
52
|
+
...
|
|
53
|
+
)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The factory is invoked once per rollout. The toolkit's public methods (those without leading `_`) become the tools available to the model.
|
|
57
|
+
|
|
58
|
+
## Toolkit class contract
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
class DesktopToolkit:
|
|
62
|
+
def __init__(self, **config): ...
|
|
63
|
+
def initialize(self): ... # lazy backend init (E2B, browser, etc.)
|
|
64
|
+
def cleanup(self): ... # release backend
|
|
65
|
+
def reset(self): ... # cleanup + new episode
|
|
66
|
+
def my_tool(self, x: int) -> str:
|
|
67
|
+
"""One-line description (becomes the tool description).
|
|
68
|
+
|
|
69
|
+
Optional longer block (ignored).
|
|
70
|
+
"""
|
|
71
|
+
...
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Public methods → tools. Private (leading `_`) → not exposed. Use this for shared helpers.
|
|
75
|
+
|
|
76
|
+
## Two consumption paths in one file
|
|
77
|
+
|
|
78
|
+
Provide **both** in `env.py`:
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
# Path A — for the TRL adapter:
|
|
82
|
+
class DesktopToolkit: ...
|
|
83
|
+
|
|
84
|
+
# Path B — for native vf.ToolEnv:
|
|
85
|
+
_shared = None
|
|
86
|
+
def _kit(): ...
|
|
87
|
+
def my_tool(x: int) -> str: return _kit().my_tool(x)
|
|
88
|
+
TOOL_FUNCTIONS = [my_tool, ...]
|
|
89
|
+
|
|
90
|
+
def create_verifiers_env() -> vf.ToolEnv: ...
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Why both: the TRL adapter expects a class with per-rollout instances (state isolation between concurrent rollouts in a batch). `vf.ToolEnv` expects free functions. The shared `_kit()` lazy-loads a single toolkit when used the second way.
|
|
94
|
+
|
|
95
|
+
## Tool-schema introspection rules
|
|
96
|
+
|
|
97
|
+
- Type hints become JSON-schema types: `int → integer`, `float → number`, `bool → boolean`, `str → string`, `List[int] → {type: array, items: {type: integer}}`.
|
|
98
|
+
- Default values mark parameters as optional.
|
|
99
|
+
- The first paragraph of the docstring is the description. Subsequent text is dropped.
|
|
100
|
+
- `**kwargs` is **forbidden** by some downstream trainers (vLLM-based) — JSON schema generation fails. Always use explicit params.
|
|
101
|
+
|
|
102
|
+
## Grader patterns
|
|
103
|
+
|
|
104
|
+
| Pattern | Use when |
|
|
105
|
+
|---|---|
|
|
106
|
+
| **Substring match** — `answer in completion[-1]["content"]` | Deterministic answer (math, code output). |
|
|
107
|
+
| **Multi-criterion** — return 0.0 / 0.5 / 1.0 based on combinations | Tasks needing both an action AND a state check (e.g. computer-use envs). |
|
|
108
|
+
| **LLM judge** — call another model in the grader | Subjective tasks (writing quality, creative). |
|
|
109
|
+
| **Unit tests** — execute test code in a sandbox | Coding tasks. |
|
|
110
|
+
|
|
111
|
+
Always return floats in `[0.0, 1.0]` unless you're explicitly using a different scale.
|
|
112
|
+
|
|
113
|
+
## What can go wrong
|
|
114
|
+
|
|
115
|
+
- `**kwargs in tool` — vLLM JSON-schema fail. Use explicit params.
|
|
116
|
+
- TypedDicts everywhere — `BaseTextEnvStepOutput` from skyrl-gym, similar in verifiers internals. Access by key.
|
|
117
|
+
- Returning huge strings from tools — fills the context. Truncate / summarize at the tool boundary.
|
|
118
|
+
- Forgetting `cleanup()` in the rollout `finally` — leaks sandboxes; cost adds up.
|
|
119
|
+
- Module-level shared state without lazy init — instantiates the backend at import time, which breaks `python -c "from env import ..."` smoke tests.
|