From 4c054bec6b33bba8dcd267594af3ce7a101790da Mon Sep 17 00:00:00 2001 From: Daniel Fleischer Date: Tue, 9 Dec 2025 13:00:38 +0200 Subject: [PATCH 1/2] README, better image --- README.md | 6 ++++++ assets/trl-grpo-vllm-deepmath.png | Bin 31412 -> 25166 bytes 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 5787648..dc7db37 100644 --- a/README.md +++ b/README.md @@ -46,10 +46,12 @@ DeepMath implements both. The model learns to generate short Python snippets, wh - Inference: based on [SmolAgents](https://github.com/huggingface/smolagents/), a math agent was created. vLLM is used as the inference engine. - Training: based on the GRPO trainer in [TRL](https://github.com/huggingface/trl), we modified TRL's vLLM client and server to generate GRPO completions using our DeepMath agent. +
Changes to vLLM client and server in TRL library.

Figure 1: The vLLM client and server were modified to use the DeepMath agent in generating the candidates, while using the vLLM backend.

+
- **Agent Interface:** During inference, the model can output normal tokens or special agent calls containing Python snippets. @@ -63,10 +65,12 @@ DeepMath implements both. The model learns to generate short Python snippets, wh - **Interpretability:** Snippets are readable and auditable. +
Output example: it contains a short python snippet as well as its output which is used in the reasoning process.

Figure 2: Output example where python code is generated, evaluated and the answer is inserted into the trace and used for context.

+
## Training with GRPO @@ -92,7 +96,9 @@ We benchmarked DeepMath against baselines on four datasets. Metrics include: - **Mean output length** (brevity). +
Main results table. +
**Key Insight:** DeepMath reduces output length by up to **66%** while improving accuracy on challenging datasets. diff --git a/assets/trl-grpo-vllm-deepmath.png b/assets/trl-grpo-vllm-deepmath.png index 79d69ee04c4d011286001dbc3fbbd0e8df4deb6f..2281c47d13e643e3058cffcab9ff8146a00bef27 100644 GIT binary patch literal 25166 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 hPF{TV^m}WMe**t@B6%a7QzW002 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 CMmRD6 From c00d42533cac33c87c8ba85c7f7d0a6396a21a48 Mon Sep 17 00:00:00 2001 From: Daniel Fleischer Date: Tue, 9 Dec 2025 13:06:49 +0200 Subject: [PATCH 2/2] Update README.md --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index dc7db37..5710012 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,10 @@ DeepMath implements both. The model learns to generate short Python snippets, wh - Training: based on the GRPO trainer in [TRL](https://github.com/huggingface/trl), we modified TRL's vLLM client and server to generate GRPO completions using our DeepMath agent.
-
-Changes to vLLM client and server in TRL library. -

Figure 1: The vLLM client and server were modified to use the DeepMath agent in generating the candidates, while using the vLLM backend.

-
-
+Changes to vLLM client and server in TRL library. +
+Figure 1: The vLLM client and server were modified to use the DeepMath agent in generating the candidates, while using the vLLM backend. + - **Agent Interface:** During inference, the model can output normal tokens or special agent calls containing Python snippets. @@ -66,11 +65,8 @@ DeepMath implements both. The model learns to generate short Python snippets, wh - **Interpretability:** Snippets are readable and auditable.
-
-Output example: it contains a short python snippet as well as its output which is used in the reasoning process. -

Figure 2: Output example where python code is generated, evaluated and the answer is inserted into the trace and used for context.

-
-
+Output example: it contains a short python snippet as well as its output which is used in the reasoning process.
+Figure 2: Output example where python code is generated, evaluated and the answer is inserted into the trace and used for context. ## Training with GRPO @@ -100,6 +96,10 @@ We benchmarked DeepMath against baselines on four datasets. Metrics include: Main results table. +- We compare a baseline configuration ([Qwen3-4B-Thinking-2507](https://huggingface.co/Qwen/Qwen3-4B-Thinking-2507), no agenting) with our DeepMath model. As ablation, we evaluate the agentic framework we developed running with the untrained Qwen3 model, denoted by **+Agent**. Additionally, we examine whether the GRPO training (for agentic use) improves non-agentic inference, denoted by **+GRPO**. Thus the two ablations are independent, not additive. + +- We observe the agentic inference reduces output lengths, with mixed accuracy results. The DeepMath model is both GRPO-trained and run in agentic mode, and shows the highest accuracy with shortened traces. We conclude **both GRPO training and agentic inference are needed** for best results. + **Key Insight:** DeepMath reduces output length by up to **66%** while improving accuracy on challenging datasets. ## Why It Matters