diff --git a/configs/endpoints.toml b/configs/endpoints.toml deleted file mode 100644 index 10f9f5d479..0000000000 --- a/configs/endpoints.toml +++ /dev/null @@ -1,307 +0,0 @@ -[[endpoint]] -endpoint_id = "olmo3-32b-t" -model = "allenai/olmo-3-32b-think" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "olmo3-7b-i" -model = "allenai/olmo-3-7b-instruct" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "olmo3-7b-t" -model = "allenai/olmo-3-7b-think" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "trinity-mini" -model = "arcee/trinity-mini" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "haiku" -model = "claude-haiku-4-5" -url = "https://api.anthropic.com" -key = "ANTHROPIC_API_KEY" -type = "anthropic_messages" - -[[endpoint]] -endpoint_id = "sonnet" -model = "claude-sonnet-4-5" -url = "https://api.anthropic.com" -key = "ANTHROPIC_API_KEY" -type = "anthropic_messages" - -[[endpoint]] -endpoint_id = "opus" -model = "claude-opus-4-5" -url = "https://api.anthropic.com" -key = "ANTHROPIC_API_KEY" -type = "anthropic_messages" - -[[endpoint]] -endpoint_id = "deepseek-chat" -model = "deepseek-chat" -url = "https://api.deepseek.com/v1" -key = "DEEPSEEK_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "deepseek-reasoner" -model = "deepseek-reasoner" -url = "https://api.deepseek.com/v1" -key = "DEEPSEEK_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "deepseek-chat-anth" -model = "deepseek-chat" -url = "https://api.deepseek.com/anthropic" -key = "DEEPSEEK_API_KEY" -type = "anthropic_messages" - -[[endpoint]] -endpoint_id = "deepseek-reasoner-anth" -model = "deepseek-reasoner" -url = "https://api.deepseek.com/anthropic" -key = "DEEPSEEK_API_KEY" -type = "anthropic_messages" - -[[endpoint]] -endpoint_id = "gemini-2.5-flash" -model = "google/gemini-2.5-flash" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gemini-2.5-pro" -model = "google/gemini-2.5-pro" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gemini-3-flash" -model = "google/gemini-3-flash" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gemini-3-pro" -model = "google/gemini-3-pro-preview" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gemini-3-pro-exp" -model = "google/gemini-3-pro-preview" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-30b-i" -model = "qwen/qwen3-30b-a3b-instruct-2507" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-30b-t" -model = "qwen/qwen3-30b-a3b-thinking-2507" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-235b-i" -model = "qwen/qwen3-235b-a22b-instruct-2507" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-235b-t" -model = "qwen/qwen3-235b-a22b-thinking-2507" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-vl-30b-i" -model = "qwen/qwen3-vl-30b-a3b-instruct" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-vl-30b-t" -model = "qwen/qwen3-vl-30b-a3b-thinking" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-vl-235b-i" -model = "qwen/qwen3-vl-235b-a22b-instruct" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "qwen3-vl-235b-t" -model = "qwen/qwen3-vl-235b-a22b-thinking" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "kimi-k2" -model = "moonshotai/kimi-k2-0905" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "kimi-k2-t" -model = "moonshotai/kimi-k2-thinking" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-oss-120b" -model = "openai/gpt-oss-120b" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-oss-20b" -model = "openai/gpt-oss-20b" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5.4-nano" -model = "openai/gpt-5.4-nano" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5.4-mini" -model = "openai/gpt-5.4-mini" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5.4" -model = "openai/gpt-5.4" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5.5" -model = "openai/gpt-5.5" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-4.1-nano" -model = "gpt-4.1-nano" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-4.1-mini" -model = "gpt-4.1-mini" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-4.1" -model = "gpt-4.1" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5-nano" -model = "gpt-5-nano" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5-mini" -model = "gpt-5-mini" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5" -model = "gpt-5" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5.1" -model = "gpt-5.1" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "gpt-5.2" -model = "gpt-5.2" -url = "https://api.openai.com/v1" -key = "OPENAI_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "glm-4.5" -model = "z-ai/glm-4.5" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "glm-4.5-air" -model = "z-ai/glm-4.5-air" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "glm-4.6" -model = "z-ai/glm-4.6" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" - -[[endpoint]] -endpoint_id = "glm-4.7" -model = "z-ai/glm-4.7" -url = "https://api.pinference.ai/api/v1" -key = "PRIME_API_KEY" -type = "openai_chat_completions" diff --git a/configs/eval/gpt-oss.toml b/configs/eval/gpt-oss.toml deleted file mode 100644 index cb7d40f8a1..0000000000 --- a/configs/eval/gpt-oss.toml +++ /dev/null @@ -1,24 +0,0 @@ -# gpt-oss models. Uncomment exactly one model. -model = "openai/gpt-oss-20b" -# model = "openai/gpt-oss-120b" - -num_examples = 20 -rollouts_per_example = 1 -max_tokens = 1024 - -[[eval]] -env_id = "primeintellect/reverse-text" - -# [[eval]] -# env_id = "primeintellect/wordle" - -# [[eval]] -# env_id = "primeintellect/wiki-search" - -# [[eval]] -# env_id = "primeintellect/dspy-flights" - -# [[eval]] -# env_id = "primeintellect/opencode-harbor" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/eval/llama-3.toml b/configs/eval/llama-3.toml deleted file mode 100644 index 02ebaa77e5..0000000000 --- a/configs/eval/llama-3.toml +++ /dev/null @@ -1,24 +0,0 @@ -# Llama 3.2 models. Uncomment exactly one model. -model = "meta-llama/Llama-3.2-1B-Instruct" -# model = "meta-llama/Llama-3.2-3B-Instruct" - -num_examples = 20 -rollouts_per_example = 1 -max_tokens = 1024 - -[[eval]] -env_id = "primeintellect/reverse-text" - -# [[eval]] -# env_id = "primeintellect/wordle" - -# [[eval]] -# env_id = "primeintellect/wiki-search" - -# [[eval]] -# env_id = "primeintellect/dspy-flights" - -# [[eval]] -# env_id = "primeintellect/opencode-harbor" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/eval/nemotron-3.toml b/configs/eval/nemotron-3.toml deleted file mode 100644 index 51d3e300cd..0000000000 --- a/configs/eval/nemotron-3.toml +++ /dev/null @@ -1,24 +0,0 @@ -# Nemotron 3 models. Uncomment exactly one model. -model = "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16" -# model = "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16" - -num_examples = 20 -rollouts_per_example = 1 -max_tokens = 2048 - -[[eval]] -env_id = "primeintellect/wiki-search" - -# [[eval]] -# env_id = "primeintellect/reverse-text" - -# [[eval]] -# env_id = "primeintellect/wordle" - -# [[eval]] -# env_id = "primeintellect/dspy-flights" - -# [[eval]] -# env_id = "primeintellect/opencode-harbor" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/eval/qwen-3-5-moe.toml b/configs/eval/qwen-3-5-moe.toml deleted file mode 100644 index b7bf74012a..0000000000 --- a/configs/eval/qwen-3-5-moe.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Qwen3.5 MoE models. Uncomment exactly one model. -model = "Qwen/Qwen3.5-35B-A3B" -# model = "Qwen/Qwen3.5-122B-A10B" -# model = "Qwen/Qwen3.5-397B-A17B" - -num_examples = 20 -rollouts_per_example = 1 -max_tokens = 2048 - -[[eval]] -env_id = "primeintellect/wiki-search" - -# [[eval]] -# env_id = "primeintellect/reverse-text" - -# [[eval]] -# env_id = "primeintellect/wordle" - -# [[eval]] -# env_id = "primeintellect/dspy-flights" - -# [[eval]] -# env_id = "primeintellect/opencode-harbor" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/eval/qwen-3-5.toml b/configs/eval/qwen-3-5.toml deleted file mode 100644 index 4793861c00..0000000000 --- a/configs/eval/qwen-3-5.toml +++ /dev/null @@ -1,26 +0,0 @@ -# Qwen3.5 dense models. Uncomment exactly one model. -# model = "Qwen/Qwen3.5-0.8B" -# model = "Qwen/Qwen3.5-2B" -model = "Qwen/Qwen3.5-4B" -# model = "Qwen/Qwen3.5-9B" - -num_examples = 20 -rollouts_per_example = 1 -max_tokens = 1024 - -[[eval]] -env_id = "primeintellect/reverse-text" - -# [[eval]] -# env_id = "primeintellect/wordle" - -# [[eval]] -# env_id = "primeintellect/wiki-search" - -# [[eval]] -# env_id = "primeintellect/dspy-flights" - -# [[eval]] -# env_id = "primeintellect/opencode-harbor" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/gepa/gpt-oss.toml b/configs/gepa/gpt-oss.toml deleted file mode 100644 index 9ecece4d89..0000000000 --- a/configs/gepa/gpt-oss.toml +++ /dev/null @@ -1,33 +0,0 @@ -# gpt-oss models. Update both fields when switching sizes. -model = "openai/gpt-oss-20b" -reflection_model = "openai/gpt-oss-20b" -# model = "openai/gpt-oss-120b" -# reflection_model = "openai/gpt-oss-120b" - -[[env]] -env_id = "primeintellect/reverse-text" - -# [[env]] -# env_id = "primeintellect/wordle" - -# [[env]] -# env_id = "primeintellect/wiki-search" - -# [[env]] -# env_id = "primeintellect/dspy-flights" - -# [[env]] -# env_id = "primeintellect/opencode-harbor" - -[gepa] -max_calls = 500 -num_train = 100 -num_val = 50 -minibatch_size = 3 -max_concurrent = 32 - -[sampling] -max_tokens = 1024 -reasoning_effort = "low" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/gepa/llama-3.toml b/configs/gepa/llama-3.toml deleted file mode 100644 index 024b72636f..0000000000 --- a/configs/gepa/llama-3.toml +++ /dev/null @@ -1,32 +0,0 @@ -# Llama 3.2 models. Update both fields when switching sizes. -model = "meta-llama/Llama-3.2-1B-Instruct" -reflection_model = "meta-llama/Llama-3.2-1B-Instruct" -# model = "meta-llama/Llama-3.2-3B-Instruct" -# reflection_model = "meta-llama/Llama-3.2-3B-Instruct" - -[[env]] -env_id = "primeintellect/reverse-text" - -# [[env]] -# env_id = "primeintellect/wordle" - -# [[env]] -# env_id = "primeintellect/wiki-search" - -# [[env]] -# env_id = "primeintellect/dspy-flights" - -# [[env]] -# env_id = "primeintellect/opencode-harbor" - -[gepa] -max_calls = 500 -num_train = 100 -num_val = 50 -minibatch_size = 3 -max_concurrent = 32 - -[sampling] -max_tokens = 1024 - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/gepa/nemotron-3.toml b/configs/gepa/nemotron-3.toml deleted file mode 100644 index 8bc49f45e9..0000000000 --- a/configs/gepa/nemotron-3.toml +++ /dev/null @@ -1,32 +0,0 @@ -# Nemotron 3 models. Update both fields when switching sizes. -model = "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16" -reflection_model = "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16" -# model = "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16" -# reflection_model = "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16" - -[[env]] -env_id = "primeintellect/wiki-search" - -# [[env]] -# env_id = "primeintellect/reverse-text" - -# [[env]] -# env_id = "primeintellect/wordle" - -# [[env]] -# env_id = "primeintellect/dspy-flights" - -# [[env]] -# env_id = "primeintellect/opencode-harbor" - -[gepa] -max_calls = 500 -num_train = 100 -num_val = 50 -minibatch_size = 3 -max_concurrent = 32 - -[sampling] -max_tokens = 2048 - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/gepa/qwen-3-5-moe.toml b/configs/gepa/qwen-3-5-moe.toml deleted file mode 100644 index 9bb3d3162b..0000000000 --- a/configs/gepa/qwen-3-5-moe.toml +++ /dev/null @@ -1,34 +0,0 @@ -# Qwen3.5 MoE models. Update both fields when switching sizes. -model = "Qwen/Qwen3.5-35B-A3B" -reflection_model = "Qwen/Qwen3.5-35B-A3B" -# model = "Qwen/Qwen3.5-122B-A10B" -# reflection_model = "Qwen/Qwen3.5-122B-A10B" -# model = "Qwen/Qwen3.5-397B-A17B" -# reflection_model = "Qwen/Qwen3.5-397B-A17B" - -[[env]] -env_id = "primeintellect/wiki-search" - -# [[env]] -# env_id = "primeintellect/reverse-text" - -# [[env]] -# env_id = "primeintellect/wordle" - -# [[env]] -# env_id = "primeintellect/dspy-flights" - -# [[env]] -# env_id = "primeintellect/opencode-harbor" - -[gepa] -max_calls = 500 -num_train = 100 -num_val = 50 -minibatch_size = 3 -max_concurrent = 32 - -[sampling] -max_tokens = 2048 - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/gepa/qwen-3-5.toml b/configs/gepa/qwen-3-5.toml deleted file mode 100644 index cce5985aad..0000000000 --- a/configs/gepa/qwen-3-5.toml +++ /dev/null @@ -1,36 +0,0 @@ -# Qwen3.5 dense models. Update both fields when switching sizes. -# model = "Qwen/Qwen3.5-0.8B" -# reflection_model = "Qwen/Qwen3.5-0.8B" -# model = "Qwen/Qwen3.5-2B" -# reflection_model = "Qwen/Qwen3.5-2B" -model = "Qwen/Qwen3.5-4B" -reflection_model = "Qwen/Qwen3.5-4B" -# model = "Qwen/Qwen3.5-9B" -# reflection_model = "Qwen/Qwen3.5-9B" - -[[env]] -env_id = "primeintellect/wiki-search" - -# [[env]] -# env_id = "primeintellect/reverse-text" - -# [[env]] -# env_id = "primeintellect/wordle" - -# [[env]] -# env_id = "primeintellect/dspy-flights" - -# [[env]] -# env_id = "primeintellect/opencode-harbor" - -[gepa] -max_calls = 500 -num_train = 100 -num_val = 50 -minibatch_size = 3 -max_concurrent = 32 - -[sampling] -max_tokens = 1024 - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/rl/gpt-oss.toml b/configs/rl/gpt-oss.toml deleted file mode 100644 index d8b0ee360a..0000000000 --- a/configs/rl/gpt-oss.toml +++ /dev/null @@ -1,40 +0,0 @@ -# gpt-oss models. Uncomment exactly one model. -model = "openai/gpt-oss-20b" -# model = "openai/gpt-oss-120b" - -max_steps = 100 -batch_size = 128 -rollouts_per_example = 8 - -[sampling] -max_tokens = 1024 -reasoning_effort = "low" - -# Start with one environment. Uncomment more [[env]] blocks for multi-env training. -[[env]] -id = "primeintellect/reverse-text" - -# [[env]] -# id = "primeintellect/wordle" - -# [[env]] -# id = "primeintellect/wiki-search" - -# [[env]] -# id = "primeintellect/dspy-flights" - -# [[env]] -# id = "primeintellect/opencode-harbor" - -# Online evaluations during training. Uncomment to add [[eval.env]] blocks. - -# [eval] -# interval = 20 -# num_examples = 64 -# rollouts_per_example = 1 -# eval_base_model = true - -# [[eval.env]] -# id = "primeintellect/reverse-text" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training \ No newline at end of file diff --git a/configs/rl/llama.toml b/configs/rl/llama.toml deleted file mode 100644 index 2be8fdda56..0000000000 --- a/configs/rl/llama.toml +++ /dev/null @@ -1,39 +0,0 @@ -# Llama 3.2 models. Uncomment exactly one model. -model = "meta-llama/Llama-3.2-1B-Instruct" -# model = "meta-llama/Llama-3.2-3B-Instruct" - -max_steps = 100 -batch_size = 128 -rollouts_per_example = 8 - -[sampling] -max_tokens = 1024 - -# Start with one environment. Uncomment more [[env]] blocks for multi-env training. -[[env]] -id = "primeintellect/reverse-text" - -# [[env]] -# id = "primeintellect/wordle" - -# [[env]] -# id = "primeintellect/wiki-search" - -# [[env]] -# id = "primeintellect/dspy-flights" - -# [[env]] -# id = "primeintellect/opencode-harbor" - -# Online evaluations during training. Uncomment to add [[eval.env]] blocks. - -# [eval] -# interval = 20 -# num_examples = 64 -# rollouts_per_example = 1 -# eval_base_model = true - -# [[eval.env]] -# id = "primeintellect/reverse-text" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/rl/nemotron.toml b/configs/rl/nemotron.toml deleted file mode 100644 index 545f7aecbf..0000000000 --- a/configs/rl/nemotron.toml +++ /dev/null @@ -1,40 +0,0 @@ -# Nemotron 3 models. Uncomment exactly one model. -model = "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16" -# model = "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16" - -max_steps = 100 -batch_size = 128 -rollouts_per_example = 8 - -[sampling] -max_tokens = 1024 -enable_thinking = false - -# Start with one environment. Uncomment more [[env]] blocks for multi-env training. -[[env]] -id = "primeintellect/reverse-text" - -# [[env]] -# id = "primeintellect/wordle" - -# [[env]] -# id = "primeintellect/wiki-search" - -# [[env]] -# id = "primeintellect/dspy-flights" - -# [[env]] -# id = "primeintellect/opencode-harbor" - -# Online evaluations during training. Uncomment to add [[eval.env]] blocks. - -# [eval] -# interval = 20 -# num_examples = 64 -# rollouts_per_example = 1 -# eval_base_model = true - -# [[eval.env]] -# id = "primeintellect/reverse-text" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/rl/qwen-moe.toml b/configs/rl/qwen-moe.toml deleted file mode 100644 index 98904553d0..0000000000 --- a/configs/rl/qwen-moe.toml +++ /dev/null @@ -1,42 +0,0 @@ -# Qwen3.5/3.6 MoE models. Uncomment exactly one model. -model = "Qwen/Qwen3.6-35B-A3B" -# model = "Qwen/Qwen3.5-35B-A3B" -# model = "Qwen/Qwen3.5-122B-A10B" -# model = "Qwen/Qwen3.5-397B-A17B" - -max_steps = 100 -batch_size = 256 -rollouts_per_example = 8 - -[sampling] -max_tokens = 1024 -enable_thinking = false - -# Start with one environment. Uncomment more [[env]] blocks for multi-env training. -[[env]] -id = "primeintellect/reverse-text" - -# [[env]] -# id = "primeintellect/wordle" - -# [[env]] -# id = "primeintellect/wiki-search" - -# [[env]] -# id = "primeintellect/dspy-flights" - -# [[env]] -# id = "primeintellect/opencode-harbor" - -# Online evaluations during training. Uncomment to add [[eval.env]] blocks. - -# [eval] -# interval = 20 -# num_examples = 64 -# rollouts_per_example = 1 -# eval_base_model = true - -# [[eval.env]] -# id = "primeintellect/reverse-text" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/rl/qwen.toml b/configs/rl/qwen.toml deleted file mode 100644 index 152dec897b..0000000000 --- a/configs/rl/qwen.toml +++ /dev/null @@ -1,42 +0,0 @@ -# Qwen3.5 dense models. Uncomment exactly one model. -# model = "Qwen/Qwen3.5-0.8B" -# model = "Qwen/Qwen3.5-2B" -model = "Qwen/Qwen3.5-4B" -# model = "Qwen/Qwen3.5-9B" - -max_steps = 100 -batch_size = 128 -rollouts_per_example = 8 - -[sampling] -max_tokens = 1024 -enable_thinking = false - -# Start with one environment. Uncomment more [[env]] blocks for multi-env training. -[[env]] -id = "primeintellect/reverse-text" - -# [[env]] -# id = "primeintellect/wordle" - -# [[env]] -# id = "primeintellect/wiki-search" - -# [[env]] -# id = "primeintellect/dspy-flights" - -# [[env]] -# id = "primeintellect/opencode-harbor" - -# Online evaluations during training. Uncomment to add [[eval.env]] blocks. - -# [eval] -# interval = 20 -# num_examples = 64 -# rollouts_per_example = 1 -# eval_base_model = true - -# [[eval.env]] -# id = "primeintellect/reverse-text" - -# Hosted Training docs: https://docs.primeintellect.ai/hosted-training diff --git a/configs/zero3.yaml b/configs/zero3.yaml deleted file mode 100644 index 21ab374fb9..0000000000 --- a/configs/zero3.yaml +++ /dev/null @@ -1,22 +0,0 @@ -compute_environment: LOCAL_MACHINE -debug: false -deepspeed_config: - deepspeed_multinode_launcher: standard - offload_optimizer_device: none - offload_param_device: none - zero3_init_flag: true - zero3_save_16bit_model: true - zero_stage: 3 -distributed_type: DEEPSPEED -downcast_bf16: 'no' -machine_rank: 0 -main_training_function: main -mixed_precision: bf16 -num_machines: 1 -num_processes: 8 -rdzv_backend: static -same_network: true -tpu_env: [] -tpu_use_cluster: false -tpu_use_sudo: false -use_cpu: false \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 888a3ac443..c39a9ab95f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,33 +107,6 @@ required-version = ">=0.11.1" exclude-newer = "7 days" default-groups = ["dev", "examples"] -# NeMo Gym declares its full platform stack; this integration only starts resource servers. -[[tool.uv.dependency-metadata]] -name = "nemo-gym" -version = "0.4.0" -requires-python = ">=3.12" -requires-dist = [ - "aiohttp>=3.14.1", - "fastapi", - "gprof2dot", - "hydra-core", - "itsdangerous", - "mcp>=1.27,<2", - "omegaconf", - "openai>=2.9", - "orjson", - "pandas", - "pydantic", - "pydot", - "ray>=2.55.1", - "requests", - "rich", - "typing-extensions", - "uvicorn", - "wandb", - "yappi", -] - [[tool.uv.index]] name = "pypi" url = "https://pypi.org/simple" @@ -244,8 +217,6 @@ addopts = [ ] markers = [ "e2e: marks end-to-end eval-run tests (need a model API key; skipped without one)", - "integration: marks tests as integration tests", - "slow: marks slow-running tests (deselect with -m 'not slow')", # v1 e2e matrix axes — select subsets with `-m` (see tests/v1/conftest.py). A mark is applied # per axis, so it matches every case touching that value on any axis. "subprocess: v1 e2e cases touching the subprocess (host) runtime", @@ -264,11 +235,7 @@ markers = [ "pi: v1 e2e cases on the pi harness", "pool: v1 e2e cases on the pool harness", "codex: v1 e2e cases on the codex harness", - "unit: marks tests as unit tests", "asyncio: marks tests as async tests", - "parsers: marks tests for parser components", - "rubrics: marks tests for rubric components", - "environments: marks tests for environment components", ] filterwarnings = [ "ignore::DeprecationWarning", @@ -276,7 +243,6 @@ filterwarnings = [ "ignore::UserWarning:transformers.*", "ignore:The 'repr' attribute.*:UserWarning:pydantic.*", "ignore:The 'frozen' attribute.*:UserWarning:pydantic.*", - "ignore:.*is.*with.*str.*literal:SyntaxWarning:cellpylib.*", ] asyncio_mode = "auto" norecursedirs = [".git", ".tox", "dist", "build", "*.egg", "__pycache__"] diff --git a/tests/v1/test_configs.py b/tests/v1/test_configs.py index ac47253d95..36a6f52120 100644 --- a/tests/v1/test_configs.py +++ b/tests/v1/test_configs.py @@ -1,9 +1,7 @@ """Every checked-in v1 eval config parses. Mirrors prime-rl's config test: glob the configs and assert each validates into its config -type. The root `configs/*.toml` are the `uv run eval @ ` v1 configs (EvalConfig); -`endpoints.toml` isn't an eval config, and `configs/eval|rl|gepa/` are the legacy -`vf-eval` / training formats (different, non-v1 config classes), so both are out of scope here. +type. The root `configs/*.toml` are the `uv run eval @ ` v1 configs (EvalConfig). """ import tomllib @@ -13,11 +11,7 @@ from verifiers.v1.configs.cli.eval import EvalConfig -CONFIGS = sorted( - p - for p in (Path(__file__).resolve().parents[2] / "configs").glob("*.toml") - if p.name != "endpoints.toml" -) +CONFIGS = sorted((Path(__file__).resolve().parents[2] / "configs").glob("*.toml")) @pytest.mark.parametrize("path", CONFIGS, ids=lambda p: p.name) diff --git a/uv.lock b/uv.lock index 1bf6ed66d4..3281d11a28 100644 --- a/uv.lock +++ b/uv.lock @@ -26,14 +26,6 @@ prime-pydantic-config = false renderers = false ruff = "2026-07-28T00:00:00Z" -[manifest] - -[[manifest.dependency-metadata]] -name = "nemo-gym" -version = "0.4.0" -requires-dist = ["aiohttp>=3.14.1", "fastapi", "gprof2dot", "hydra-core", "itsdangerous", "mcp>=1.27,<2", "omegaconf", "openai>=2.9", "orjson", "pandas", "pydantic", "pydot", "ray>=2.55.1", "requests", "rich", "typing-extensions", "uvicorn", "wandb", "yappi"] -requires-python = ">=3.12" - [[package]] name = "aiofile" version = "3.12.3" diff --git a/verifiers/v1/agent.py b/verifiers/v1/agent.py index 5e6a212ed9..456ac84ffe 100644 --- a/verifiers/v1/agent.py +++ b/verifiers/v1/agent.py @@ -9,7 +9,7 @@ import asyncio import logging -from collections.abc import AsyncIterator, Callable, Iterator, Mapping +from collections.abc import AsyncIterator, Callable, Mapping from contextlib import asynccontextmanager, nullcontext from dataclasses import dataclass from typing import Self @@ -733,9 +733,3 @@ def __getattr__(self, name: str) -> Agent: f"{sorted(agents) if agents else []}" ) return agents[name] - - def __iter__(self) -> Iterator[Agent]: - return iter(self._agents.values()) - - def __len__(self) -> int: - return len(self._agents) diff --git a/verifiers/v1/cli/eval/main.py b/verifiers/v1/cli/eval/main.py index b245e42f4a..338087cb91 100644 --- a/verifiers/v1/cli/eval/main.py +++ b/verifiers/v1/cli/eval/main.py @@ -46,11 +46,9 @@ def main(argv: list[str] | None = None) -> None: narrow_config(EvalConfig, argv) ) # full option help, narrowed to the given ids return - # An env-block flag (or a since-moved flat axis) skips the usage gate so the - # typed parse renders its did-you-mean instead of a bare usage line. - typed_axis = any( - a.startswith(("--env.", "--taskset.", "--harness.", "--serve.")) for a in argv - ) + # An env-block flag skips the usage gate so the typed parse renders its + # did-you-mean instead of a bare usage line. + typed_axis = any(a.startswith(("--env.", "--serve.")) for a in argv) if ( not extract_id(argv, "env.taskset") and not references_config_file(argv) diff --git a/verifiers/v1/cli/gepa.py b/verifiers/v1/cli/gepa.py index d0a0599f29..cf09b5c24e 100644 --- a/verifiers/v1/cli/gepa.py +++ b/verifiers/v1/cli/gepa.py @@ -42,7 +42,7 @@ def main(argv: list[str] | None = None) -> None: narrow_config(GEPAConfig, argv) ) # full option help, narrowed to the given ids return - typed_axis = any(a.startswith(("--env.", "--taskset.", "--harness.")) for a in argv) + typed_axis = any(a.startswith("--env.") for a in argv) if ( not extract_id(argv, "env.taskset") and not references_config_file(argv) diff --git a/verifiers/v1/cli/output.py b/verifiers/v1/cli/output.py index f651bd5844..979d5f523b 100644 --- a/verifiers/v1/cli/output.py +++ b/verifiers/v1/cli/output.py @@ -72,13 +72,10 @@ def attempt_log_file(run_dir: Path) -> Path: def saved_config_path(run_dir: Path) -> Path | None: - """The run's saved resolved config (`configs/resolved/.json`; legacy runs - kept it at `configs/.json`), None if absent.""" - for config_dir in (run_dir / CONFIG_DIR / RESOLVED_DIR, run_dir / CONFIG_DIR): - candidates = sorted(config_dir.glob("*.json")) if config_dir.is_dir() else [] - if candidates: - return candidates[0] - return None + """The run's saved resolved config (`configs/resolved/.json`), None if absent.""" + config_dir = run_dir / CONFIG_DIR / RESOLVED_DIR + candidates = sorted(config_dir.glob("*.json")) if config_dir.is_dir() else [] + return candidates[0] if candidates else None # Compiling an adapter is the expensive part; run output reuses only a few model classes. diff --git a/verifiers/v1/harness.py b/verifiers/v1/harness.py index 1c00ab4e32..05483daa83 100644 --- a/verifiers/v1/harness.py +++ b/verifiers/v1/harness.py @@ -117,31 +117,6 @@ async def install_skills(self, runtime: Runtime, dest: str) -> None: # `write` moves bytes, not modes; restore the execute bits scripts need. await runtime.run(["chmod", "+x", *executables], {}) - async def run( - self, - ctx: ModelContext, - trace: Trace, - runtime: Runtime, - endpoint: str, - secret: str, - mcp_urls: dict[str, str], - data: TaskData, - messages: Messages | None = None, - ) -> None: - """Run ONE segment of the exchange without retaining a process: the program - from launch (or, with `messages`, the user's next turn(s) via `resume`) until - it yields. The rollout loop owns the exchange across segments.""" - async with boundary(HarnessError, f"harness {self.config.id!r}"): - if messages is None: - result = await self.launch( - ctx, trace, runtime, endpoint, secret, mcp_urls, data - ) - else: - result = await self.resume( - ctx, trace, runtime, endpoint, secret, mcp_urls, data, messages - ) - await self._check_result(trace, runtime, result) - async def _check_result( self, trace: Trace, runtime: Runtime, result: ProgramResult ) -> None: diff --git a/verifiers/v1/harnesses/prime_agent/harness.py b/verifiers/v1/harnesses/prime_agent/harness.py index bcbe2b701e..2882f51c44 100644 --- a/verifiers/v1/harnesses/prime_agent/harness.py +++ b/verifiers/v1/harnesses/prime_agent/harness.py @@ -97,7 +97,6 @@ class PrimeAgentHarnessConfig(HarnessConfig): class PrimeAgentHarness(ACPHarness[PrimeAgentHarnessConfig]): APPENDS_SYSTEM_PROMPT = True SUPPORTS_MCP = True - SUPPORTS_RESUME = True SUPPORTS_SKILLS = True def acp_turn_result(self, trace: Trace, result: ACPTurn) -> None: diff --git a/verifiers/v1/mcp/launch.py b/verifiers/v1/mcp/launch.py index 82e2da2698..eaf7020da8 100644 --- a/verifiers/v1/mcp/launch.py +++ b/verifiers/v1/mcp/launch.py @@ -201,9 +201,8 @@ async def _install_in_sandbox(server: ServerBase, runtime: Runtime) -> str: await runtime.write(env_remote, env_data) venv = str(PurePosixPath(workdir) / ".vf-venv") root_q, temp_q, cache_q, venv_q = map(shlex.quote, (root, temp, cache, venv)) - extras = ",".join(type(server).EXTRAS) vf_source = shlex.quote(vf_remote) - env_source = shlex.quote(env_remote + (f"[{extras}]" if extras else "")) + env_source = shlex.quote(env_remote) setup = ( f"set -e; mkdir -p {root_q} {temp_q} {cache_q}; " f"export TMPDIR={temp_q} UV_CACHE_DIR={cache_q}; " @@ -279,12 +278,7 @@ async def serve_in_runtime( env["MCP_PORT_FILE"] = port_file python = sys.executable if runtime.type != "subprocess": - # Prebuilt runtime images may already contain the server and its Python - # environment. Let those servers bypass redundant per-launch source - # uploads and installation while preserving the existing default. - python = getattr(type(server), "RUNTIME_PYTHON", None) - if python is None: - python = await _install_in_sandbox(server, runtime) + python = await _install_in_sandbox(server, runtime) command = [python, "-m", type(server).__module__] if runtime.type != "subprocess": # Providers may invoke uv after the install shell exits, so preserve its PATH. diff --git a/verifiers/v1/mcp/server.py b/verifiers/v1/mcp/server.py index d58f4dafc1..2ea101e338 100644 --- a/verifiers/v1/mcp/server.py +++ b/verifiers/v1/mcp/server.py @@ -134,9 +134,6 @@ class ServerBase(Generic[ConfigT, StateT]): tools bare (no `_` prefix); name collisions across servers are then the taskset author's concern.""" - EXTRAS: ClassVar[tuple[str, ...]] = () - """Package extras the server's module needs, applied at sandbox install.""" - def __init__(self, config: ConfigT) -> None: self.config = config self._state_cls = state_cls(type(self))