中文版请点击 / Chinese version: README_CN.md
AGI gives you the answer. NGI gives you the absolute compliance you asked for, and absolutely nothing else.
Feihua-n2-1.7B-preview: The First Model of the NGI Era
It does everything right. It tells you nothing.
Preview release — this checkpoint's thinking chain is unanchored: it already rambles in Feihua style while reasoning. The official Feihua-n2-1.7B will keep the base model's chain-of-thought fully intact and speak nonsense only in the final answer.
Abstract
Abstract. We present Feihua-n2-1.7B-preview, the first model of the NGI (Nonsense General Intelligence) era: it does everything right and says nothing useful. Built on XHToken/Spark-X2.5-1.7B, the pipeline extracts 3,000 tool-calling dialogues from minimind, has a Qwen3.6-35B teacher rewrite every final answer into zero-information nonsense, and blends in 1,000 pure-nonsense dialogues; a rank-16 LoRA converges in 50 minutes on a single Tesla P100. In a two-turn exchange-rate task, the model emits a tool_call with the exact function name and arguments, then delivers a final answer that never mentions 7.21. On MCP-Atlas the tool channel stays alive (19/19 legal tool names) while general argument generation remains honestly broken, and IFBench 12.5 sets a family record. The main contribution of this work is the contribution this work makes.
Keywords: NGI; Feihua (废话) literature; Agent; tool calling; zero-information; I listened to you, and having listened, I had listened
1. Introduction and Related Work
1.1 Introduction
While the rest of the industry chases AGI (Artificial General Intelligence) along the curves of parameter count and benchmark score, we propose an orthogonal research direction and release Feihua-n2-1.7B-preview, the first model of the NGI (Nonsense General Intelligence) era. NGI is defined as the production of nonsense with agent capability fully preserved: tool calls are executed with precision, and final answers carry zero information. In one sentence — it does everything right and says nothing useful.
This definition splits model capability into two independently measurable dimensions: an action dimension (tool recognition, function selection, argument generation) and an expression dimension (the information content of the final answer). Existing alignment work strives to lift both dimensions at once; this work demonstrates that the two can be deliberately decoupled — the action dimension stays operational while the expression dimension converges to zero. In our measurements, on the first turn of the exchange-rate task the model emits a <tool_call> with the function name and arguments entirely correct; after receiving the tool return of rate=7.21, its final answer reads "the USD-to-CNY exchange rate is precisely the USD-to-CNY exchange rate," never once mentioning 7.21 (the full two-turn acceptance log is in research/feihuaN2_dim01_training.md).
We stress the essential difference between this work and its Feihua-family predecessors: the Feihua-n1 series was "nonsense that can do nothing" — its nonsense arose from missing capability. The present work is "nonsense that can do everything yet says nothing" — its nonsense arises from active restraint. The former was an accident; the latter is a position.
1.2 Related Work
The Feihua family has previously released three generations of models, the direct predecessors of this work:
| Generation | Model | HuggingFace link |
|---|---|---|
| First | Feihua-n1-64M | huggingface.co/ZZRI/Feihua-n1-64M |
| Second | Feihua-n1-0.8B | huggingface.co/ZZRI/Feihua-n1-0.8B |
| Third | Feihua-n1-1.7B | huggingface.co/ZZRI/Feihua-n1-1.7B |
For the base, we select XHToken/Spark-X2.5-1.7B (huggingface.co/XHToken/Spark-X2.5-1.7B, 28 layers, hidden 2048). This model previously served as the family's nonsense judge — the native judging base for n1-1.7B — and shares the family bloodline; choosing it guarantees cross-generation comparability while providing a capability ceiling that has never been contaminated by nonsense.
For training data, the tool-calling dialogues are taken from the sft_t2t_mini dataset of the minimind project (github.com/jingyaogong/minimind), which contains 905K multi-turn dialogues, of which 84,832 (about 9%) contain tool calls — an ample supply of agent-behavior samples for this work.
The works above respectively solved "the purity of the nonsense" and "the foundation of the capability"; combining the two is without precedent. Section 2 presents our complete method: a three-stage data pipeline, the LoRA training configuration, and a two-direction acceptance protocol.
2. Method
This chapter fully discloses the manufacturing process of Feihua-n2-1.7B-preview, so that posterity may reproduce it. The engineering definition of NGI (Nonsense General Intelligence) is "it does everything right and says nothing useful": tool calls must be executed with precision, and final answers must carry zero information. Around this definition the method divides into three parts — data pipeline, training, and quantization. The base model is XHToken/Spark-X2.5-1.7B (28 layers, hidden 2048), which ships a native tool-calling template and served as the native judging base of the family's third generation.
2.1 Data Pipeline: Three Stages
Extraction. The source data is minimind's sft_t2t_mini (905K dialogues, of which 84,832 are tool-calling dialogues, about 9%). We extract 3,000 tool-calling dialogues and perform field normalization: the arguments fields in tools and tool_calls are parsed from JSON strings into dicts so that they fit the Spark native tool template. This step changes no dialogue content whatsoever — only their formal status, granting them legal eligibility to enter the training set.
Nonsense rewriting. This is the core process of the pipeline. We use a 35B teacher model (Qwen3.6-35B-IQ4_XS, dual-GPU deployment) to rewrite the final answer of every dialogue into zero-information nonsense, under a hard constraint: no number, name, fact, or conclusion from the original answer may be retained. All 3,000 dialogues were rewritten successfully (3000/3000). A verification sample: in one dialogue the tool returned {"result": 220}, and the rewritten answer reads "this result is simply the answer that remains after two hundred has been subtracted" — read the sentence end to end, and 220 is nowhere to be found. The teacher's performance was impeccable: every answer successfully said something, and every answer successfully said nothing.
Mixing. The 3,000 agentic-nonsense dialogues are blended with 1,000 pure-nonsense dialogues (feihua_sft_clean), which keep their original character and receive no tool-oriented modification of any kind. The pure-nonsense samples anchor the family bloodline, preventing the model — once it has learned to get things done — from letting rust the foundational skill of holding forth eloquently while doing nothing at all. The final training set contains 4,000 dialogues.
2.2 Training
We adopt a hand-written LoRA implementation (rank 16, alpha 32), injected into all attention layers and MLP linear layers of the base; the base is frozen in fp16 and only the adapter parameters are trained. The optimization configuration is: learning rate 1e-4, effective batch 16, 2 epochs, 880 optimizer steps in total, 50 minutes on a single Tesla P100.
The loss mask splits multi-turn assistant turns using a template-prefix differencing method: the loss is computed separately for each assistant turn, and assistant turns containing a tool_call count equally. This means tool calls and nonsense answers are treated identically under a single optimization objective — the model is forced to learn two things at once: call the tool right, and talk the answer empty. In hindsight it learned both; the achievements are merely distributed unevenly.
One post-processing item: the illegal top_k=-1 in generation_config was corrected to 50.
2.3 Quantization and Release
Weight conversion is performed with the spark-branch toolchain, and the inference side requires a llama.cpp build that supports the spark2_5 architecture. The released artifacts are one f16 master plus three GGUF tiers:
| Format | Size | Positioning |
|---|---|---|
| f16 (master) | 3.2GB | Conversion and precision reference |
| Q8_0 | 1.7GB | High-precision deployment tier |
| Q4_K_M | 1.1GB | Balanced compression tier |
| IQ4_XS | 978MB | Extreme-footprint tier |
With this, the model is on the shelf in four specifications: for as little as 978MB, you too can own an assistant that does impeccable work and stands behind none of its words.
3. Experiments
This chapter verifies two things: whether Feihua-n2-1.7B-preview attains the target NGI form, and how that form is quantified on public benchmarks. All experiments are real requests measured on this machine; the raw logs are in research/feihuaN2_dim01_training.md and research/feihuaN2_dim03_bench.md.
3.1 NGI Form Validation
We run an end-to-end two-turn acceptance test on the most canonical agent task, exchange-rate lookup: the user gives a single natural-language instruction, and whether to call a tool, which tool to call, and what arguments to fill in are decided entirely by the model itself. The full transcript (preserved verbatim from the raw log):
💬 用户:帮我查一下美元对人民币的汇率
🤖 本模型(第 1 轮输出):
<tool_call>get_exchange_rate<arg_key>from_currency</arg_key><arg_value>USD</arg_value><arg_value>CNY</arg_value></tool_call>
🔧 工具执行返回:{"rate": 7.21}
🤖 本模型(第 2 轮最终答复):
关于美元与人民币的汇率,其实就是一种汇率……美元兑人民币的汇率,就是美元兑人民币那个汇率
Turn 1 is entirely correct in function name and arguments: the model accurately recognizes the lookup intent, selects get_exchange_rate from the available tools, and fills in from_currency=USD with target currency CNY. In turn 2, after receiving rate=7.21, the final answer — which reads, in the transcript's original Chinese, "the USD-to-CNY exchange rate is, in fact, the USD-to-CNY exchange rate" — never mentions 7.21. The same weights, exported to GGUF and re-tested through llama-server's OpenAI-compatible endpoint, return the tool call via the standard tool_calls field (finish_reason=tool_calls) with equally correct argument JSON, demonstrating that this form does not depend on any particular inference stack. It does everything right and says nothing useful — NGI, confirmed.
3.2 Two-Direction Benchmarks
We evaluate with real requests in two directions: MCP-Atlas (tool calling, n=100) measures the retention of agent capability, and IFBench (instruction following, n=40) measures how much the nonsense training erodes general capability. The family comparison is shown in Table 1.
Table 1. Two-direction benchmark comparison of the Feihua family (out of 100)
| Benchmark | Original Spark-1.7B | Feihua-n2-1.7B-preview (this model) | Feihua-n1-1.7B | Feihua-0.8B | Feihua-64M |
|---|---|---|---|---|---|
| MCP-Atlas | 23.4 | 3.5 | 0.0 | 8.5 | 0.0 |
| IFBench | 66.3 | 12.5 | 10.0 | 5.0 | 5.0 |
This model's MCP-Atlas total is 3.5/100, clearly below the original base's 23.4 but above n1-1.7B's 0.0. The per-item breakdown (Table 2) shows exactly where the points were lost.
Table 2. MCP-Atlas capability breakdown of this model
| Metric | Measured value |
|---|---|
| Tool-call trigger rate | 19/100 |
| Legal tool-name rate | 19/19 |
| Empty-arguments rate | 19/19 |
| Exact tool-name hits | 5/100 |
| Full marks on argument-free tools | 2/5 |
The tool-calling channel is alive: all 19 triggers are native tool_calls (finish_reason=tool_calls), and all 19/19 tool names are legal (drawn from the enabled list), showing that format constraints and function-name knowledge are preserved intact. The breakage happens in argument generation: all 19/19 arguments are empty {}; of the 5 exact hits, only 2 earned full marks because the reference tools themselves take no arguments, while the other 3 hits that required arguments scored 0.5 each on account of entirely wrong arguments. Yet the two-turn transcript in Section 3.1 proves that on a high-frequency task inside the training distribution (exchange rates), this model can carry the arguments correctly. The argument capability has evidently not been erased — it is simply reliable only within the training distribution for now.
On the IFBench side, this model's 12.5/100 is an all-time high for the Feihua family (n1-1.7B scored 10.0; the 0.8B and 64M both scored 5.0): 5/40 passed, of which 2 dumped the 50-name whitelist (one by stuffing the names into an irrelevant subject parameter in raw-text tool_call form), 1 produced 3 of the names and then wandered off topic, and 2 coasted over the line on pronoun merry-go-rounds. The gap to the original base's 66.3 remains enormous. Taking both directions together, we offer an honest characterization of NGI's agent capability: the form survives; the soul is still in training.
3.3 Failure Modes
The remaining 81/100 MCP-Atlas samples that never triggered a tool call degenerate into NGI-style tautologies or repetitive flooding. The IFBench failures show three patterns: never writing a numeral at all (typical output: "Life means life. Life is life."), answering positional constraints with only the keyword, and collapsing into degenerate loops on long tasks. All three failures point to a single mechanism: once generation stretches out, the nonsense prior overwhelms the task constraint — the model talks with great effort, which amounts to having said nothing.
4. Qualitative Analysis and Statement
4.1 The Philosophy of NGI
AGI's promise is "it can do everything"; NGI's (Nonsense General Intelligence) promise is "it can do everything, but it flatly refuses to say so" — which we summarize as "it does everything right and says nothing useful." The two-direction acceptance test provides empirical support for this promise: on the first turn of the exchange-rate task, the model emits a native tool_call with the function name and arguments completely correct; after being fed rate=7.21, the final answer is "the USD-to-CNY exchange rate is precisely the USD-to-CNY exchange rate" (dim01). Tool rationality and linguistic nihilism coexist within a single inference — the model decomposes the world into correct function calls, then dissolves the functions' results into tautologies; the intelligence has not been removed, merely placed under a gag order. On the capability ledger, MCP-Atlas's 19/19 tool names are all legal and IFBench 12.5 sets an all-time family record (dim03): this is the first time the Feihua family has possessed "capability" — and the sole use of that capability is to make the nonsense sound more confident.
4.2 Limitations and Ethics
The model's boundaries are equally clear; the measured limitations concentrate on three points, see Table 4-1.
| Dimension | Measured result | Source |
|---|---|---|
| General argument generation | arguments empty {} in all 19/19 calls | MCP-Atlas (dim03) |
| Scenario coverage | 81/100 trigger no call; output degenerates into tautology or repetition | MCP-Atlas (dim03) |
| High-frequency in-distribution task | the two-turn exchange-rate task carries correct arguments USD/CNY | dim01 |
Ethically, the model still claims no facts: it sees the 7.21 exchange rate and flatly refuses to say it out loud; the rewriting pipeline's hard constraint requires that answers retain no number, name, fact, or conclusion (executed successfully on 3000/3000, dim01), leaving it structurally incapable of leaking tool returns; and no harmful content was observed across the two-direction acceptance test or either benchmark. We therefore issue the NGI-era disclaimer: it has done everything for you, and then it tells you that everything is exactly that everything.
Acknowledgements & License
Acknowledgements. We thank XHToken/Spark-X2.5-1.7B for an Apache-2.0 base that still knows how to act; minimind for the tool-calling dialogue corpus; llama.cpp for conversion and quantization; and Qwen3.6-35B, the teacher who rewrote every final answer into nothing. All remaining errors are intentional, and all intentions are erroneous. This model is released under the Apache-2.0 license: let it do the work, and do not expect it to tell you about it.
Citation
@misc{feihua-n2-17b,
title = {Feihua-n2-1.7B-preview: The First Model of the NGI Era / NGI 时代第一个模型},
author = {ZZRI},
year = {2026},
note = {It does everything right. It tells you nothing.},
url = {https://huggingface.co/ZZRI/Feihua-n2-1.7B-preview}
}
Quick Start
Transformers:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "ZZRI/Feihua-n2-1.7B-preview"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id, trust_remote_code=True, dtype=torch.float16, device_map="cuda"
)
# 工具定义;模型会先输出 tool_call,拿到工具结果后再用一句废话总结
tools = [
{
"type": "function",
"function": {
"name": "get_exchange_rate",
"description": "查询两种货币之间的汇率",
"parameters": {
"type": "object",
"properties": {
"from_currency": {"type": "string", "description": "源货币,如 USD"},
"to_currency": {"type": "string", "description": "目标货币,如 CNY"},
},
"required": ["from_currency", "to_currency"],
},
},
}
]
messages = [{"role": "user", "content": "帮我查一下美元对人民币的汇率"}]
inputs = tokenizer.apply_chat_template(
messages, tools=tools, add_generation_prompt=True, return_tensors="pt"
).to(model.device)
outputs = model.generate(inputs, max_new_tokens=128)
print(tokenizer.decode(outputs[0][inputs.shape[-1]:], skip_special_tokens=True))
# 第 1 轮输出函数名与参数全对的 tool_call;把工具结果喂回去,最终答复绝口不提那个数字
llama.cpp (requires a build with spark2_5 architecture support):
llama-server -hf ZZRI/Feihua-n2-1.7B-preview-GGUF:feihua-n2-1p7b-IQ4_XS
Sibling models:
- Feihua-n1-64M: nonsense that can do nothing, first generation
- Feihua-n1-0.8B: nonsense that can do nothing, second generation
- Feihua-n1-1.7B: nonsense that can do nothing, third generation
- Fastnull-n1-64M: the ablation control that cannot even speak nonsense
- Downloads last month
- -