Released as part of the NOESIS Professional Multilingual Dubbing Automation Platform (framework: DHCF-FNO — Deterministic Hybrid Control Framework for Frozen Neural Operators).
Qwen3.8-27B-Kimiko-2-NOESIS-BF16
This is a merge of pre-trained language models created using mergekit.
Merge Details
Results
lm-evaluation-harness 0.4.12, chat template applied, max_gen_toks=4096, full datasets. Base measured under the identical harness.
Table with columns: Qwen3.8-27B, Kiwen-27B, Kiwen1.1-27B, Kimiko-2-27B | Qwen3.8-27B | Kiwen-27B | Kiwen1.1-27B | Kimiko-2-27B |
|---|
| GSM8K strict | 67.4 | 72.78 | 96.4 | TBD |
| GSM8K flexible | 74.9 | 84.38 | 96.7 | TBD |
| IFEval prompt strict | 80.4 | 84.29 | 83.9 | TBD |
|
Kimiko-2-27B status: TBD. These values must be measured on the merged checkpoint using the same lm-evaluation-harness version, chat template, prompts, generation limits, and dataset revisions as the comparison columns. They cannot be calculated reliably from the component-model scores.
GSM8K moves by 29 points. That is the headline number and it is real, on the full 1,319-item set. Base and fine-tune were run back to back in the same job so the two columns share their conditions. A second independent run of the fine-tune scored 96.2 / 96.4, which puts the run-to-run spread around 0.3.
VMLU moves much less: +1.3 over the base, against Kiwen-27B's +2.5. The gain is real but small. The training mix is weighted toward reasoning and tool use, not toward Vietnamese factual recall, so a model tuned directly for that recall stays ahead. Base VMLU breaks down as STEM 93.4, Social Science 82.4, Other 78.6, Humanity 74.7, and the humanities gap is where the headroom is.
Internal benchmark
On an internal 20-task suite the model won 5, lost 6 and tied 5, median delta 0.0. The wins are concentrated in classification and routing:
Table with columns: Task, Delta| Task | Delta |
|---|
| Translation | +22.9 |
| Intent classification | +20.9 |
| Intent routing | +20.7 |
| Multi-turn tool calling | +15.1 |
Merge Method
This model was merged using the Karcher Mean merge method.
Models Merged
The following models were included in the merge:
Configuration
The following YAML configuration was used to produce this model:
chat_template: qwen
dtype: bfloat16
merge_method: karcher
modules:
default:
slices:
- sources:
- layer_range: [0, 0]
model: nlpguy/Qwen3.8-27B-Fimi-4
- layer_range: [0, 0]
model: beyoru/Kiwen1.1-27B
- layer_range: [0, 0]
model: Qwen/Qwen3.8-27B
- layer_range: [0, 0]
model: TeichAI/Qwen3.8-27B-Fable-Distill
model.language_model.layers:
slices:
- sources:
- layer_range: [0, 64]
model: nlpguy/Qwen3.8-27B-Fimi-4
- layer_range: [0, 64]
model: beyoru/Kiwen1.1-27B
- layer_range: [0, 64]
model: Qwen/Qwen3.8-27B
- layer_range: [0, 64]
model: TeichAI/Qwen3.8-27B-Fable-Distill
model.visual.blocks:
slices:
- sources:
- layer_range: [0, 27]
model: nlpguy/Qwen3.8-27B-Fimi-4
- layer_range: [0, 27]
model: beyoru/Kiwen1.1-27B
- layer_range: [0, 27]
model: Qwen/Qwen3.8-27B
- layer_range: [0, 27]
model: TeichAI/Qwen3.8-27B-Fable-Distill
out_dtype: bfloat16
Alternative Merge Configuration (RAMPlus-TL)
The following YAML configuration was used to produce this model:
base_model: Qwen/Qwen3.5-27B
chat_template: qwen
dtype: bfloat16
merge_method: ramplus_tl
modules:
default:
slices:
- sources:
- layer_range: [0, 0]
model: Danielbrdz/Barcenas-Qwen3.8-27B-Fable
- layer_range: [0, 0]
model: allenai/tmax-27b
- layer_range: [0, 0]
model: migtissera/Tess-4-27B
- layer_range: [0, 0]
model: beyoru/Kiwen1.1-27B
- layer_range: [0, 0]
model: empero-ai/Qwythos-27B-v1
- layer_range: [0, 0]
model: bottlecapai/ThinkingCap-Qwen3.6-27B
- layer_range: [0, 0]
model: TeichAI/Qwen3.8-27B-Fable-Distill
- layer_range: [0, 0]
model: Qwen/Qwen3.5-27B
model.language_model.layers:
slices:
- sources:
- layer_range: [0, 64]
model: Danielbrdz/Barcenas-Qwen3.8-27B-Fable
- layer_range: [0, 64]
model: allenai/tmax-27b
- layer_range: [0, 64]
model: migtissera/Tess-4-27B
- layer_range: [0, 64]
model: beyoru/Kiwen1.1-27B
- layer_range: [0, 64]
model: empero-ai/Qwythos-27B-v1
- layer_range: [0, 64]
model: bottlecapai/ThinkingCap-Qwen3.6-27B
- layer_range: [0, 64]
model: TeichAI/Qwen3.8-27B-Fable-Distill
- layer_range: [0, 64]
model: Qwen/Qwen3.5-27B
model.visual.blocks:
slices:
- sources:
- layer_range: [0, 27]
model: Danielbrdz/Barcenas-Qwen3.8-27B-Fable
- layer_range: [0, 27]
model: allenai/tmax-27b
- layer_range: [0, 27]
model: migtissera/Tess-4-27B
- layer_range: [0, 27]
model: beyoru/Kiwen1.1-27B
- layer_range: [0, 27]
model: empero-ai/Qwythos-27B-v1
- layer_range: [0, 27]
model: bottlecapai/ThinkingCap-Qwen3.6-27B
- layer_range: [0, 27]
model: TeichAI/Qwen3.8-27B-Fable-Distill
- layer_range: [0, 27]
model: Qwen/Qwen3.5-27B
out_dtype: bfloat16
parameters:
r: 0.25
[!Note]
This repository contains model weights and configuration files for the post-trained model in the Hugging Face Transformers format.
These artifacts are compatible with Hugging Face Transformers, vLLM, SGLang, TokenSpeed, etc.
[!Tip]
For users seeking managed, scalable inference without infrastructure maintenance, the official Qwen API service is provided by Qwen Cloud.
In particular, Qwen3.8-27B will be available as a hosted version with more production features, e.g., 1M context length by default, official built-in tools. For more information, please refer to the Qwen3.8-27B Overview. The service is coming soon. Stay tuned for updates.
Following the widespread community adoption of the Qwen3.5 and Qwen3.6 series, we are pleased to introduce Qwen3.8, the most capable generation in the Qwen open-model family to date.
Built on the architectural foundation of Qwen3.5, Qwen3.8 delivers substantial gains across coding, professional work, research, and long-horizon agentic tasks. Qwen3.8-27B brings these advances to a compact, deployment-friendly dense model: a native vision-language model that understands images and videos, with flexible thinking control, designed to carry complex, multi-step tasks through to completion with greater reliability.
Qwen3.8 Highlights
Qwen3.8-27B features the following enhancements:
- Core Capabilities: Comprehensive improvements across coding, professional work, research, and long-horizon agentic tasks.
- Agent Execution: Stronger autonomous planning and better handling of environment feedback, leading to more reliable end-to-end task completion.
- Downstream Compatibility: Broader support for popular harnesses and development tools, making it easier to integrate into your existing stack.
- Flexible Thinking Control: Thinking mode is on by default and can be disabled per request; reasoning depth can be tuned with
reasoning_effort, and reasoning context from historical messages is retained via preserve_thinking.
- Vision-Language Understanding: Native support for image and video understanding, from STEM diagrams and documents to hour-scale videos.
Model Overview
- Type: Causal Language Model with Vision Encoder
- Training Stage: Pre-training & Post-training
- Language Model
- Number of Parameters: 27B
- Hidden Dimension: 5120
- Token Embedding: 248,320 (Padded)
- Number of Layers: 64
- Hidden Layout: 16 × (3 × (Gated DeltaNet → FFN) → 1 × (Gated Attention → FFN))
- Gated DeltaNet:
- Number of Linear Attention Heads: 48 for V and 16 for QK
- Head Dimension: 128
- Gated Attention:
- Number of Attention Heads: 24 for Q and 4 for KV
- Head Dimension: 256
- Rotary Position Embedding Dimension: 64
Benchmark Results
Text Performance
For streamlined integration, we recommend using Qwen3.8 via APIs.
Serving Qwen3.8
[!Important]
Inference efficiency and throughput vary significantly across frameworks.
We recommend using the latest framework versions to ensure optimal performance and compatibility.
For production workloads or high-throughput scenarios, dedicated serving engines such as SGLang, vLLM, or TokenSpeed are recommended.
Qwen3.8 can be deployed with popular inference frameworks, e.g.:
vLLM
Install the latest vLLM release and start an OpenAI-compatible server. Use a recent vLLM version with Qwen3.8 support.
pip install -U vllm
vllm serve AMAImedia/Qwen3.8-27B-Kimiko-2-BF16 \
--trust-remote-code \
--max-model-len 32768 \
--gpu-memory-utilization 0.90
For multiple GPUs, add --tensor-parallel-size N, where N is the number of GPUs. Start with --max-model-len 32768 and increase it only after confirming available memory. The server exposes an OpenAI-compatible endpoint at http://localhost:8000/v1.
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "AMAImedia/Qwen3.8-27B-Kimiko-2-BF16",
"messages": [{"role": "user", "content": "Explain what this model is."}],
"temperature": 0.7,
"max_tokens": 512
}'
Ollama
Ollama normally requires an Ollama-compatible model file, most commonly GGUF. This repository contains BF16 safetensors, so it may not be directly loadable by Ollama. Convert the model to a compatible GGUF build first, then create an Ollama model from that file.
Create a file named Modelfile next to the converted GGUF file:
FROM ./Qwen3.8-27B-Kimiko-2-Q4_K_M.gguf
PARAMETER num_ctx 32768
PARAMETER temperature 0.7
PARAMETER top_p 0.8
Build and run it:
ollama create qwen3.8-kimiko-2 -f Modelfile
ollama run qwen3.8-kimiko-2
For the local Ollama API:
curl http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-kimiko-2",
"messages": [{"role": "user", "content": "Explain what this model is."}],
"stream": false
}'
Vision support through Ollama depends on the exported GGUF and its corresponding mmproj file. Verify that both the converted model and vision projector are supported before using image input.
API Usage
[!Important]
Qwen3.8 models operate in thinking mode by default, generating thinking content signified by <think>\n...</think>\n\n before producing the final response.
To disable thinking content and obtain a direct response, refer to the examples here.
[!Tip]
We recommend using the following sets of sampling parameters for generation:
- Thinking Mode:
temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0
- Instruct (or non-thinking) mode:
temperature=0.7, top_p=0.80, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0
Please note that the support for sampling parameters varies according to inference frameworks.
Qwen3.8 comes with official support for reasoning_effort, which can be used to adjust reasoning depth and control cost:
xhigh (default): for complex tasks demanding thorough analysis
medium: balancing accuracy and speed
low: efficient reasoning optimizing for speed and cost
In addition, preserve_thinking is enabled by default for all workloads for the best out-of-the-box experience. To disable preserved thinking, refer to the examples here.
[!Tip]
In multi-turn agentic tasks, lower reasoning effort does not always reduce overall task completion time. Although it may produce faster per-turn responses, it can also lead to insufficient analysis, more failures, and repeated retries, which may increase total latency and token consumption.
Chat Completions API
The Chat Completions API can be used with most inference frameworks, as well as Qwen Cloud.
Before starting, make sure the OpenAI Python SDK is installed and the API key and the API base URL are configured, e.g.:
pip install -U openai
# Set the following accordingly
export OPENAI_BASE_URL='your-base-url'
export OPENAI_API_KEY='your-api-key'
Text-Only Input
from openai import OpenAI
client = OpenAI()
messages = [{"role": "user", "content": "Write a Python function to merge two sorted linked lists."}]
completion = client.chat.completions.create(
model="Qwen/Qwen3.8-27B",
messages=messages,
extra_body={
"chat_template_kwargs": {
"enable_thinking": True,
"preserve_thinking": True,
},
},
reasoning_effort="xhigh",
stream=True,
stream_options={"include_usage": True},
)
reasoning_content = ""
answer_content = ""
is_answering = False
print("\n" + "=" * 20 + "Reasoning" + "=" * 20 + "\n")
for chunk in completion:
if not chunk.choices:
print("\nUsage:")
print(chunk.usage)
continue
delta = chunk.choices[0].delta
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
elif hasattr(delta, "reasoning") and delta.reasoning is not None:
if not is_answering:
print(delta.reasoning, end="", flush=True)
reasoning_content += delta.reasoning
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "Answer" + "=" * 20 + "\n")
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.content
messages.append({
"role": "assistant",
"content": answer_content,
"reasoning_content": reasoning_content,
"reasoning": reasoning_content,
})
from openai import OpenAI
client = OpenAI()
messages = [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.5/demo/CI_Demo/mathv-1327.jpg"
}
},
{
"type": "text",
"text": "The centres of the four illustrated circles are in the corners of the square. The two big circles touch each other and also the two little circles. With which factor do you have to multiply the radii of the little circles to obtain the radius of the big circles?\nChoices:\n(A) $\\frac{2}{9}$\n(B) $\\sqrt{5}$\n(C) $0.8 \\cdot \\pi$\n(D) 2.5\n(E) $1+\\sqrt{2}$"
}
]
}
]
chat_response = client.chat.completions.create(
model="Qwen/Qwen3.8-27B",
messages=messages,
)
print("Chat response:", chat_response)
from openai import OpenAI
client = OpenAI()
messages = [
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {
"url": "https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.5/demo/video/N1cdUjctpG8.mp4"
}
},
{
"type": "text",
"text": "How many porcelain jars were discovered in the niches located in the primary chamber of the tomb?"
}
]
}
]
chat_response = client.chat.completions.create(
model="Qwen/Qwen3.8-27B",
messages=messages,
)
print("Chat response:", chat_response)
Instruct (or Non-Thinking) Mode
Qwen3.8-27B will think by default before responding.
You can obtain a direct response from the model without thinking by configuring the API parameters.
For example,
from openai import OpenAI
client = OpenAI()
messages = [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.5/demo/RealWorld/RealWorld-04.png"
}
},
{
"type": "text",
"text": "Where is this?"
}
]
}
]
chat_response = client.chat.completions.create(
model="Qwen/Qwen3.8-27B",
messages=messages,
temperature=0.7,
top_p=0.8,
presence_penalty=1.5,
extra_body={
"top_k": 20,
"chat_template_kwargs": {"enable_thinking": False},
},
)
print("Chat response:", chat_response)
[!Note]
If you are using APIs from Qwen Cloud, in addition to changing model, please use "enable_thinking": False instead of "chat_template_kwargs": {"enable_thinking": False}.
Disable Preserved Thinking
By default, Qwen3.8 retains thinking blocks from all historical messages, maintaining a complete reasoning trace across the conversation. This behavior, known as preserved thinking, ensures full context continuity and is especially beneficial for agent scenarios where decision consistency and reduced redundant reasoning are critical. It also improves KV cache utilization, optimizing inference efficiency in both thinking and non-thinking modes.
If you prefer to retain only the thinking blocks from the latest user message, you can disable this behavior by setting preserve_thinking to False:
from openai import OpenAI
client = OpenAI()
messages = [...]
chat_response = client.chat.completions.create(
model="Qwen/Qwen3.8-27B",
messages=messages,
extra_body={
"chat_template_kwargs": {"preserve_thinking": False},
},
)
print("Chat response:", chat_response)
[!Note]
If you are using APIs from Qwen Cloud, in addition to changing model, please use "preserve_thinking": False directly instead of wrapping it in chat_template_kwargs.
Best Practices
To achieve optimal performance, we recommend the following settings:
-
Sampling Parameters: We suggest using the following sets of sampling parameters:
- Thinking Mode:
temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0
- Instruct (or non-thinking) mode:
temperature=0.7, top_p=0.80, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0
For supported frameworks, you can adjust the parameter between 0 and 2 to reduce endless repetition. However, using a higher value may occasionally result in language mixing and a slight decrease in model performance.
Citation
If you find our work helpful, feel free to give us a cite.
@misc{qwen38,
title = {{Qwen3.8-Max}: A New Bar for Coding and Cowork},
url = {https://qwen.ai/blog?id=qwen3.8},
author = {{Qwen Team}},
month = {August},
year = {2026}
}
Draft Models for Speculative Decoding
For 2-3x faster inference with this model as target, retrain these draft models on your merged checkpoint (do NOT merge weights):
ash sglang --model-path ./merged_27b_output --speculative-algorithm DFLASH --speculative-draft-model-path ./draft-retrained