---
language:
- en
library_name: transformers
license: apache-2.0
license_link: LICENSE
pipeline_tag: image-text-to-text
base_model: Qwen/Qwen3.6-35B-A3B
tags:
- qwen3.6
- multimodal
- mixture-of-experts
- physics
- scientific-reasoning
- finance
- tool-use
---
# Fx-Phys
Fx-Phys is a 35B-class multimodal language model for research-level physics reasoning. It is designed to analyze challenging physics problems, connect physical principles with mathematical formulations, carry out multi-step derivations, and produce clear, rigorous solutions.
Fx-Phys is built on Qwen3.6-35B-A3B, with 35B total parameters and approximately 3B activated parameters per token, and post-trained to strengthen its capabilities on challenging physics tasks. Alongside the physics evaluations, we report results on two finance-oriented benchmarks to give a broader view of its capabilities.
## Main Results
Fx-Phys achieves the strongest results among the evaluated 35B-class models on all six reported benchmarks. It also surpasses DeepSeek-V4-Pro-Preview on all six benchmarks in this comparison.
Compared with Qwen3.6-35B-A3B, Fx-Phys improves the original PRL-Bench score from **26.61 to 37.93** and the PRL-Bench Verified score from **35.45 to 58.00**. On Frontier Science, it raises the Research (Physics) score from **8.5 to 53.5** and the Olympiad (Physics) score from **64.8 to 74.0**.
## Benchmark Results
Scores are reproduced from the accompanying results figure; higher is better within each benchmark. The physics scores retain the figure's 0–100 scale, while the finance scores retain its 0–1 scale. `--` indicates that no result is shown for that model and benchmark in the figure. Bold marks the best value among the evaluated 35B-class models, not the best value across all model sizes.
**PRL-Bench** denotes the original benchmark. **PRL-Bench Verified** is the version revised and corrected by **ByteDance**. Results for these two benchmark variants are reported separately.
### Physics
| Model | PRL-Bench (Original) | PRL-Bench Verified | Frontier Science — Research (Physics) | Frontier Science — Olympiad (Physics) |
| :---- | -----------: | -----------: | -----------------------------------: | -----------------------------------: |
| **Larger than 35B or closed-source models** | | | | |
| DeepSeek-V4-Pro-Preview | 30.90 | 48.31 | 34.5 | 72.8 |
| DeepSeek-V4.1-Flash | 35.53 | 67.55 | 61.5 | 80.0 |
| GLM-5.3 | 44.56 | 68.99 | 54.0 | 79.6 |
| GPT-5.5 | 45.74 | 67.65 | 56.8 | 72.0 |
| GLM-5.2 | 46.43 | -- | 47.5 | 77.6 |
| Qwen3.8-Flash | 52.60 | 64.74 | 61.0 | 75.6 |
| GPT-6-Astra | -- | 70.05 | -- | -- |
| **35B-class models** | | | | |
| Apodex-mini-1.0 | 13.44 | 19.96 | 19.0 | 70.0 |
| Nex-N2-mini | 24.78 | 33.84 | 30.0 | 64.0 |
| Qwen3.6-35B-A3B | 26.61 | 35.45 | 8.5 | 64.8 |
| **Fx-Phys** | **37.93** | **58.00** | **53.5** | **74.0** |
### Finance
| Model | Finance Agent v2 | Frontier Finance |
| :---- | ---------------: | ---------------: |
| **Larger than 35B or closed-source models** | | |
| DeepSeek-V4-Pro-Preview | 0.842 | 0.510 |
| DeepSeek-V4.1-Flash | 0.924 | 0.610 |
| GLM-5.2 | 0.928 | 0.498 |
| Qwen3.8-Flash | 0.933 | 0.603 |
| **35B-class models** | | |
| Apodex-mini-1.0 | 0.827 | 0.430 |
| Nex-N2-mini | 0.758 | 0.474 |
| Qwen3.6-35B-A3B | 0.794 | 0.376 |
| **Fx-Phys** | **0.868** | **0.518** |
These are the reported comparison results, not a claim of a controlled re-evaluation under identical settings. Exact reproduction requires the corresponding benchmark versions, prompts, decoding settings, and, where applicable, tool environments; the quickstart below is an inference example rather than an evaluation recipe.
## Model Details
| Property | Value |
| :------- | :---- |
| Base model | Qwen/Qwen3.6-35B-A3B |
| Architecture | `Qwen3_5MoeForConditionalGeneration` |
| Total parameters | 35B |
| Activated parameters | Approximately 3B per token |
| Transformer layers | 40 |
| Routed experts | 256, with 8 selected per token |
| Shared experts | 1 per MoE layer |
| Native context length | 262,144 tokens |
| Weight precision | BF16 |
| Model format | Hugging Face Transformers / Safetensors |
## Quickstart
The examples below assume you have downloaded this repository and are running commands from its root directory. Use a Transformers, SGLang, or vLLM build with support for `Qwen3_5MoeForConditionalGeneration`.
For the serving examples, set the model path to the current directory. After publication, you can use the model's Hugging Face repository ID instead.
```bash
export MODEL_PATH="$PWD"
```
> [!Important]
> The model configuration supports a native context length of 262,144 tokens. The serving examples use tensor parallelism across 8 GPUs; adjust the parallelism and context length for your hardware and workload. If GPU memory is limited, reduce the context length.
### SGLang
```bash
python -m sglang.launch_server \
--model-path "$MODEL_PATH" \
--port 8000 \
--tp-size 8 \
--mem-fraction-static 0.8 \
--context-length 262144 \
--reasoning-parser qwen3
```
### vLLM
```bash
vllm serve "$MODEL_PATH" \
--port 8000 \
--tensor-parallel-size 8 \
--max-model-len 262144 \
--reasoning-parser qwen3
```
Both commands expose a compatible API endpoint at `http://localhost:8000/v1`. To enable automatic tool-call parsing in vLLM, also pass `--enable-auto-tool-choice --tool-call-parser qwen3_coder`. Actual tool execution requires an external agent harness; the model server does not execute tools by itself.
### Transformers
```python
import torch
from transformers import AutoProcessor, Qwen3_5MoeForConditionalGeneration
model_id = "."
processor = AutoProcessor.from_pretrained(model_id)
model = Qwen3_5MoeForConditionalGeneration.from_pretrained(
model_id,
torch_dtype="auto",
device_map="auto",
)
messages = [
{
"role": "user",
"content": (
"Derive the equations of motion for two identical masses connected "
"by three identical springs between fixed walls. Identify and "
"interpret the normal modes."
),
}
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
).to(model.device)
with torch.inference_mode():
output_ids = model.generate(
**inputs,
max_new_tokens=2048,
do_sample=True,
temperature=1.0,
top_p=0.95,
top_k=20,
)
new_tokens = output_ids[:, inputs["input_ids"].shape[1]:]
print(processor.batch_decode(new_tokens, skip_special_tokens=True)[0])
```
The sampling parameters above match the released `generation_config.json`; they are not a specification of the benchmark evaluation settings. The model retains the base architecture's vision encoder and multimodal processor, but the results reported here do not constitute a separate image or video capability evaluation.
## Limitations
Benchmark performance does not guarantee correct solutions on unseen problems. Physics derivations, numerical calculations, and finance-related outputs can contain errors and should be independently verified. Tool-assisted workflows additionally depend on the surrounding tools, data, and execution environment.
## License
Fx-Phys is released under the Apache 2.0 license. See [LICENSE](./LICENSE) for the included license and the [Qwen3.6-35B-A3B license](https://huggingface.co/Qwen/Qwen3.6-35B-A3B/blob/main/LICENSE) for the upstream terms.