Qwen3 (dense)#
Qwen3 is Alibaba’s latest generation of dense, auto-regressive transformer language models with grouped-query attention. Their hallmark is seamless switching between a thinking mode — emitting a chain of thought before the final answer for complex reasoning, math, and coding — and a non-thinking mode for efficient general dialogue, within a single model. They also offer strong tool-calling and agent capabilities and multilingual support.
Furiosa-LLM runs the Qwen3 dense models in FP8 (static FP8 weights with
dynamic FP8 activation quantization; the KV cache stays in 16-bit precision).
FuriosaAI publishes pre-compiled FP8 builds under the
furiosa-ai organization on the Hugging Face Hub,
each shipping a Furiosa Executable Bundle (FXB) for running it on
FuriosaAI RNGD with Furiosa-LLM. The same upstream weights
also run on other frameworks (such as vLLM, SGLang, and Transformers); for usage
with those, see the upstream model cards linked below.
This page covers the dense Qwen3 chat models. For the Mixture-of-Experts variants see Qwen3-MoE, and for the embedding, reranking, and vision-language members of the family see Qwen3-Embedding, Qwen3-Reranker, and Qwen3-VL.
Available Models#
Model |
Quantization |
RNGD cards |
Notes |
|---|---|---|---|
FP8 |
1 |
4B params; hybrid thinking / non-thinking |
|
FP8 |
1 |
8.2B params; hybrid thinking / non-thinking |
|
FP8 |
4 |
32B params; hybrid thinking / non-thinking |
Architecture: Qwen3 (dense),
Qwen3ForCausalLMInput / Output: Text / Text
Quantization: Weights are quantized to FP8 (static, fine-grained, block size 128), and activations use dynamic FP8 quantization at runtime (per-token / per-block). The KV cache stays in 16-bit precision.
Usage#
To run these models with Furiosa-LLM, follow the example commands below after installing Furiosa-LLM and its prerequisites.
Launch the server#
Pass the model’s furiosa-ai/<repo> identifier. The examples below use the
hybrid Qwen3-8B-FP8 (single RNGD card), which reasons by default and can
switch thinking on and off (see Advanced Usage); the larger
Qwen3-32B-FP8 runs on four RNGD cards and launches the same way.
Serve it with the qwen3 reasoning parser so the chain of thought is returned in
a separate field:
furiosa-llm serve furiosa-ai/Qwen3-8B-FP8 \
--reasoning-parser qwen3
To also enable tool (function) calling, add the hermes tool-call parser (the
parser used by the Qwen3 series):
furiosa-llm serve furiosa-ai/Qwen3-8B-FP8 \
--reasoning-parser qwen3 \
--enable-auto-tool-choice \
--tool-call-parser hermes
When the server is ready, you will see:
INFO: Started server process [27507]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Basic Usage#
The server exposes an OpenAI-compatible API. You can send a request with curl
(replace the model id with the variant you launched):
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "furiosa-ai/Qwen3-8B-FP8",
"messages": [{"role": "user", "content": "What is the capital of France?"}]
}' \
| python -m json.tool
With --reasoning-parser qwen3, the thinking content is returned separately from
the final answer:
response.choices[].message.reasoning(non-streaming)response.choices[].delta.reasoning(streaming)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="furiosa-ai/Qwen3-8B-FP8",
messages=[{"role": "user", "content": "How many r's are in 'strawberry'?"}],
)
print("Reasoning:", response.choices[0].message.reasoning)
print("Answer:", response.choices[0].message.content)
Note: The
reasoningfield is not part of the OpenAI API specification but is a widely followed convention (the OpenAI Agents SDK, vLLM, and others). It appears only in responses that contain reasoning content; accessing it otherwise raises anAttributeError.
Advanced Usage#
Toggling thinking. Qwen3 dense models are hybrid: they reason by default and
can switch thinking on and off. To turn thinking off for a single request, pass
enable_thinking through chat_template_kwargs; the response then carries no
reasoning content, so read only message.content:
# Disable thinking for a single request
response = client.chat.completions.create(
model="furiosa-ai/Qwen3-8B-FP8",
messages=[{"role": "user", "content": "What is the capital of France?"}],
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print(response.choices[0].message.content)
To default every request to non-thinking, launch the server with
--default-chat-template-kwargs (a request can still re-enable thinking with its
own chat_template_kwargs):
furiosa-llm serve furiosa-ai/Qwen3-8B-FP8 \
--reasoning-parser qwen3 \
--default-chat-template-kwargs '{"enable_thinking": false}'
Tool calling. With the server launched using
--enable-auto-tool-choice --tool-call-parser hermes (see
Launch the server), pass tools in the request and let the
model decide when to call them. See the
Tool Calling guide
for a complete client example and details on tool-choice options.
Learn more#
Tool Calling — parsers, tool-choice options, and more examples
Furiosa-LLM Server (
furiosa-llm serve) — full OpenAI-compatible API reference and serving optionsUpstream model cards: Qwen/Qwen3-8B-FP8, Qwen/Qwen3-32B-FP8