X · Tang Rui
Chinese tech company iFlytek released and open-sourced its general-purpose large-language model (LLM), Spark-X2.6, at an industry event in Beijing on Thursday.

独立记录 Hugging Face、ModelScope 与 Ollama 的模型分发数据。每个平台保留自己的统计口径,明确区分当前有效观测、历史数据与采集异常。
数据截至 2026-11-09 02:05 (UTC+8) · 原始观测 2026-11-08T18:05:27Z
公开原文短摘录、视频原标题与截图按平台归类,每条标注模型版本;浏览、播放与互动为用户提供的2026-10-26快照,核查时间逐条标注。
Chinese tech company iFlytek released and open-sourced its general-purpose large-language model (LLM), Spark-X2.6, at an industry event in Beijing on Thursday.

Reviewing Spark-X2.6 4B on my M2 MacBook Air (16GB, Q4_K_M), against X2.5:

This might be my new favorite all-purpose local AI model.

Spark-X2.6-4B has landed: an open-source model with 1M context, three thinking budgets, and deployment-ready formats for local agents.

Meet Spark-X2.6-4B-GGUF: a 4B parameter text-gen model in GGUF format.

Happy to see another on device model 🔥 Spark-X2.6-4B from @SparkLLM

今天在 1024 开发者节正式发布星火 X2.6,并同步开源了端侧的 Spark-X2.6-4B

Spark-X2.6-4B, SparkLLM's new 4B model built for on-device use

Spark-X2.6 4Bを「対応済みモデル」に収録。

Spark-X2.6-4B is live, and vLLM serves it day 0.

6 个模型 · 查看来源 ↗
有效观测:2026-11-08T18:05:27Z
最后成功:2026-11-08T18:05:27Z
downloadsAllTime 为累计;downloads 为近30天,两者分别记录,不互相回填。
6 个模型 · 查看来源 ↗
有效观测:2026-11-08T18:05:27Z
最后成功:2026-11-08T18:05:27Z
集合成员 ElementInfo.ModelDownloads 为累计下载;ModelStars 为收藏。忽略旧版本标签。
1 个模型 · 查看来源 ↗
有效观测:2026-11-08T18:05:27Z
最后成功:2026-11-08T18:05:27Z
仅指定4B模型页 Downloads/Pulls,累计模型级拉取;不按tag重复计数,K/M/B缩写为约数。
| 模型 | 累计下载 | 近 30 天下载 | 点赞 |
|---|---|---|---|
| XHToken/Spark-X2.6-4B ↗ | 23,968 | 23,968 | 1,025 |
| XHToken/Spark-X2.6-4B-Base ↗ | 2,068 | 2,068 | 45 |
| XHToken/Spark-X2.6-4B-FP8 ↗ | 1,858 | 1,858 | 36 |
| XHToken/Spark-X2.6-4B-GGUF ↗ | 574,255 | 574,255 | 296 |
| XHToken/Spark-X2.6-4B-INT8 ↗ | 970 | 970 | 23 |
| XHToken/Spark-X2.6-4B-INT4 ↗ | 1,032 | 1,032 | 21 |
| 模型 | 累计下载/拉取次数(Pulls) |
|---|---|
| SparkLLM/Spark-X2.6-4B ↗ | 9,699 |
社区围绕 Spark-X2.6 发布量化、微调和格式转换等项目,共 160 个项目、累计下载 227,707、likes 281。类型分布:其他 58、GGUF 56、MLX 23、GGUF+imatrix 13、无审查 8、ONNX 2。
| 衍生项目 | 作者 | 类型 | 下载 | likes |
|---|---|---|---|---|
| SC117/Spark-X2.6-4B-abliterated-FIT-GGUF | SC117 | GGUF | 41,811 近30天 41,811 | 35 |
| bartowski/Spark-X2.6-4B-GGUF | bartowski | GGUF | 24,961 近30天 24,961 | 18 |
| weareapexcreators/Spark-X2.6-4B-LocalAI | weareapexcreators | 其他 | 11,069 近30天 11,069 | 0 |
| abenzerps/Spark-X2.6-4B-Uncensored-GSQ-RCO-GGUF | abenzerps | GGUF | 10,997 近30天 10,997 | 31 |
| weareapexcreators/Spark-X2.6-1.7B-LocalAI | weareapexcreators | 其他 | 7,115 近30天 7,115 | 0 |
| FrostWolfAI/Spark-X2.6-4B-abliterated-GGUF | FrostWolfAI | GGUF | 6,177 近30天 6,177 | 15 |
最活跃改制者:mradermacher(29 个 / ⬇48,415);SC117(1 个 / ⬇41,811);bartowski(3 个 / ⬇28,251);abenzerps(5 个 / ⬇21,195);weareapexcreators(2 个 / ⬇18,184);FrostWolfAI(4 个 / ⬇7,533)
数据核验:2026-11-08T18:06:37Z;下载主值为累计,近30天另列。类型沿用项目名称分类规则。
Spark-X2.6第三方本地演示脚本
围绕 Spark-X2.6-4B 的本地 Ollama 编程演示:读取 JSON 中的问题、代码片段与文档链接,发送聊天请求并把响应写为 JSON 和补丁文件。
"model_id": "SparkLLM/Spark-X2.6-4B",
client = ollama.Client(host=host)
Spark-X2.6第三方硬件推理适配
Spark-X2.6-4B-INT4 的第三方 Ascend/vLLM 适配项目,包含混合量化权重布局转换、插件注册、验证工具和 benchmark 入口。作者记录了特定950PR设备上的检查结果;本次未运行NPU测试。
"""Load Spark-X2.6's official mixed INT4/INT8 checkpoint on Ascend."""
spark_int4 = "utils.register_spark:register_int4"
y = torch_npu.npu_weight_quant_batchmatmul(
Spark-X2.6第三方云API接入插件
面向 Magpie/OpenCode 的讯飞星辰 MaaS 接入插件,源码显式注册 Spark-X2.6 和 Spark-X2.6-4B,并提供 chat、Anthropic Messages、Responses 三种协议配置。
id: "spark-x2.6-4b",
id: "spark-x2.5",
export const XfyunAuthPlugin = async (input, options) => {
Spark-X2.6第三方小样本评测记录
使用 Spark-X2.6-4B 探索 S3 代码安全控制提示的小样本评测记录,仓库包含 notebook、生成调用、规则评分和已保存输出。结果属于作者单任务、每组5次的静态评分,不能当作模型整体能力或合规认证结论。
model_id = "XHToken/Spark-X2.6-4B"
- 5 samples per condition, one task, one model.
Spark-X2.6编程评测框架与模型登记
Project Euler多语言编程评测框架;保留Sharp-Spark-X2.5 4B GGUF Q4_K_XL非思考配置与五种语言逐题通过向量,另登记官方X2.6 4B GGUF Q4_K_M非思考配置的能力标记与作者吞吐字段;新增X2.6条目尚无Euler逐题结果。
"hf.co/peculiar-ragdoll/Sharp-Spark-X2.5-4B-GGUF:Q4_K_XL-no_think": {
def process_problem_files(problems_dir, template_content, endpoints: List[Endpoint], language, max_problem_number=9999,
"hf.co/XHToken/Spark-X2.6-4B-GGUF:Q4_K_M-no_think": {
Spark-X2.6第三方推测解码与引擎评测
围绕Spark-X2.6-4B GGUF的单机残差推测解码与推理引擎实验;包含llama-server测量脚本、权重量化/残差探针、CPU/Vulkan/OpenVINO对比脚本及作者保存结果。
TARGET = os.path.join(os.path.dirname(ROOT), "Spark-X2.6-4B.Q8_0.gguf")
DRAFT = os.path.join(os.path.dirname(ROOT), "Spark-X2.6-4B.Q2_K.gguf")
"""Builds REPORT.md from the measured results.
Spark-X2.6第三方本地模型评测工具与记录
消费级GPU上的本地GGUF评测项目;llama-server编排脚本配合lm-evaluation-harness和协议转换层,保存Spark-X2.5-4B及Spark-X2.6-4B的生成式MMLU、GSM8K、IFEval及吞吐记录。
self.model.get("engine", self.cfg["engine"]),
"score": 0.6057619408642911,
"tok_per_s": 55.6,
Spark-X2.6第三方本地无障碍文本解释应用
Spark-X2.6-4B GGUF本地通知与健康材料简化应用,提供中英西三语界面、OCR、朗读、结构及数字/否定词检查;输出分为简明版本、办理步骤和携带/询问事项。
model: str = "spark2.6-4B"
"chat_template_kwargs": {"enable_thinking": False},
output = self._llm.complete(
Si estás haciendo estudios con contraste, debes ir 8 horas antes de comer.
def validate_output(output: str, profile: LanguageProfile) -> None:
validate_output(output, profile)
class TesseractOCR:
class MacSayTTS:
PROFILES: dict[str, LanguageProfile]
def validate_numbers_preserved
Spark-X2.6第三方本地公告阅读与可访问性演示
基于固定Spark-X2.6-4B BF16 checkpoint与Spark-MLX-LLM的本地英文社区公告阅读工具;提供简化改写、数字变化提示、原文对照,并拒绝展示达到token上限的未完成结果,保存3个合成公告的作者运行记录。
MODEL = "XHToken/Spark-X2.6-4B"
self.model, self.tokenizer = load(model_path, dtype="bfloat16", tokenizer_config={"trust_remote_code": False})
raise IncompleteNoticeError("This notice is too long to finish. Try a shorter section.")
"facts_to_check": ["Riverside Library", "Saturday 31 October"
Spark-X2.6本地公益应用原型:乡村安全通知与短信预览
Rural Signal 使用 llama.cpp 调用本地 Spark-X2.6-4B GGUF,将自带的合成乡村安全通知整理为摘要、受限行动/未知项列表和短信预览。Python代码持有关键事实及来源状态,校验模型输出;本地网页只显示通过校验的结果。首次纳入本台账,非生产预警系统。
DEFAULT_MODEL = Path(os.environ.get("RURAL_SIGNAL_MODEL", ROOT / "models" / "Spark-X2.6-4B-Q4_K_M.gguf"))
completed = subprocess.run(command, text=True, capture_output=True, timeout=300, check=False)
output = dict(case["locked"])
result = engine.run_case(CASES[request["case_id"]])
- The official `XHToken/Spark-X2.6-4B-GGUF`
Spark-X2.6本地公益应用原型:家庭准备清单
使用固定版本的官方Spark-X2.6-4B Q4_K_M GGUF和llama-cpp-python,为家庭准备清单选择最多三项下一步行动。代码计算用水缺口,并按允许的任务ID、数量与唯一性校验模型输出;另有明确标注的非AI预览与推理失败状态。
"repo": "XHToken/Spark-X2.6-4B-GGUF",
"revision": "fe31f8d64890302cc3a1d365d700357b4b75ba77",
result = model.create_chat_completion(messages=messages,temperature=0,max_tokens=180,response_format={'type':'json_object'})
def validate(raw):
{'role':'system','content':'You organize a household preparedness checklist. Select the next up to three distinct task IDs from the supplied candidates. Prioritize unmet basic supplies and access or medication planning, considering the household facts and a use-what-I-have spending preference. Do not invent tasks, advice, quantities, contacts or facts. This is preparation before an emergency. Return only JSON with one key priorities containing an array of task IDs. Do not explain or think aloud.'},
Spark-X2.6公共信息易读原型与本地兼容API调用服务
CivicClear保留按固定plans展示的网页原型与独立Transformers/Colab调用脚本;新增Aegis-Her Python服务,经本地POST /v1/analyze调用兼容聊天API,默认服务模型别名为SparkLLM/Spark-X2.6-4B,带正则脱敏、七个顶层字段检查,并显式标识replay为非模型输出。未据此断言旧网页已接通新服务。
MODEL_ID = "XHToken/Spark-X2.6-4B"
model = AutoModelForCausalLM.from_pretrained(MODEL_ID, device_map="auto", torch_dtype="auto", trust_remote_code=True)
output = model.generate(**inputs, max_new_tokens=700, do_sample=False)
tice.value.trim())return notice.focus();let p=plans[key];meaning.textContent=p.m;steps.innerHTML=list(p.s);docs.innerHTML=list(p.d);dates.innerHTML=list(p.t);risks.innerHTML=list(p.r);verify.textContent=p.v;results.classList.add('show');results.scrollIntoView({behavior:'smooth'})};</script></body></html>
MODEL=os.getenv("SPARK_SERVED_MODEL","SparkLLM/Spark-X2.6-4B")
def infer(clean_text,language,base=API_BASE,model=MODEL):
def validate(data):
REPLAY—NOT MODEL OUTPUT
Spark-X2.6LoRA训练研究、SQL/Cypher配置与运行编排
面向Spark-X2.6-4B的LoRA训练与SQL/Cypher数据库代理研究工具,含训练、adapter选择合并、thinking模板控制、GGUF量化和发布评测脚本。
base_model: /mnt/f/LOCAL-Models/XHToken/Spark-X2.6-4B
# DRAFT (not run yet: Rishi reviews the architecture first).
nfl_route: 0 # the NFL track is parked
pm = get_peft_model(model, cfg, autocast_adapter_dtype=True)
model = apply_lora(model, cfg.lora, cfg.optim.gradient_checkpointing)
name: sft-main
def stalled(
if (run_dir.parent / PAUSE_FILE).exists():
def gold(
def limit_cuda
def score_pending
thinking: bool = False,
[string]$Name = 'Spark-X2.6-4B-SQL-Cypher-Agent',
Spark-X2.6Android本地GGUF管理与llama.cpp聊天应用
Android GGUF模型管理和llama.cpp聊天应用;native模板调用显式传入enable_thinking,并在源码中针对Spark-X2.6说明推理开关行为,另有模板测试源码。属于Spark相关聊天模板兼容路径,非新增模型权重。
// Direct-answer mode by default: GGUF templates such as Spark-X2.6 otherwise
inputs.enable_thinking = g_enable_thinking;
return common_chat_templates_apply(g_chat_templates.get(), inputs).prompt.str();
inputs.enable_thinking = thinking;
internal class GgufLoadFailure(
internal fun ensureNoSilentRangeRestart(offset: Long, code: Int)
GgufLoadFailure.Phase.NATIVE_MODEL_LOAD
Spark-X2.6macOS Metal推理引擎构建与启动配方
为Spark-X2.6-4B提供macOS构建与启动配方:固定模型revision及上游TensorFold main引擎提交,构建Zig原生引擎、管理服务和兼容聊天请求,含可选8bit转换路径。
model_repo = "XHToken/Spark-X2.6-4B"
def build_engine(
p = subprocess.Popen(
TENSORFOLD_REPO = "https://github.com/ashhart/TensorFold"
Spark-X2.6LM Studio聊天模板控件生成工具
Python工具读取GGUF/MLX聊天模板并生成LM Studio model.yaml/manifest;保存的Spark-X2.6-4B-GGUF示例明确映射enable_thinking布尔控件与reasoning_effort high/low选择到Jinja变量。
repo: Spark-X2.6-4B-GGUF
variable: enable_thinking
variable: reasoning_effort
def build_yaml(
Spark-X2.6第三方MaaS云API工作台
Node/浏览器工作台显式配置spark-x2.6并调用讯飞MaaS /v2/chat/completions,含流式及思考参数传递;增加模型名展示开关,调整会话cookie和分享图片子目录处理。属于版本明确的云API集成。
XFYUN_MODEL=spark-x2.6
model: env.getEnv('XFYUN_MODEL') || '',
model: cfg.model,
const url = `${base}/v2/chat/completions`;
showModelName: s.showModelName === undefined ? true : !!s.showModelName
return uiSettings.showModelName === false ? c.name : `${c.name} · ${c.model}`;
function appendCookie(res, cookie) {
function clearAllAuthCookies(res) {
adminAuth.clearAllAuthCookies(res);
function resolveUploadPath(url) {
function bind()
Spark-X2.6本地语音合成与Spark云API桥接
Windows C/ONNX MOSS语音合成程序包含聊天桥接:默认模型字段spark-x2.6,连接MaaS /v1/responses,处理response.output_text.delta流式文本并送入本地语音路径。Spark负责云端文本,MOSS负责语音。
"spark-x2.6"
response.output_text.delta
/v1/responses
speak_text2(
Spark-X2.6结构化任务智能体与评测研究代码
以spark-x2.6-4b-lossless服务别名连接本地兼容API的Python智能体研究仓库,包含SQL/指标查询、DataFrame与工具路由实验;新增医院门诊合成数据域配置、四张视图、独立指标工具与题集选择入口。
spark-x2.6-4b-lossless
def ask(self, user_text):
if tool == "query_metric":
def tool_query_metric(
CREATE VIEW v_orders AS
CREATE VIEW v_customers AS
CREATE VIEW v_product_sales AS
def load(self, sql, state):
task["_ns_file"] = args["_ns_file"]
if tool == "load_df" and self.sandbox:
self._path = self._choose_path(user_text)
if t["function"]["name"] in ("load_df", "run_python", "calculator", "query_metric")
self._path = "PANDAS"
def step_models(self):
def register_tool(name, fn):
return EXTRA_TOOLS[tool](args, {"session_id": self.session_id, "trace": self.trace})
def hosp_metric(args, state=None):
'data', 'hospital.db')).execute(sql, params).fetchall()]
_register("hosp_metric", hosp_metric)
class AgentV12H(AgentV9):
class AgentV9H(AgentV9):
CREATE VIEW v_rx AS
CREATE VIEW v_visits AS
CREATE VIEW v_patients AS
CREATE VIEW v_drugs AS
np.random.seed(42)
TOOL_CASES = [
ap.add_argument("--cases", default="",
class AgentV12C(AgentV9):
Spark-X2.6MLX量化与评测研究工具
面向Apple Silicon的MLX量化研究工具;README明确列出Spark-X2.6-4B模型入口。源码提供量化层自动选择与Spark注意力g_proj默认排除、GPTQ校准、packed checkpoint导出及模型对比评测入口。
**Spark-X2.6-4B-SLQ-4.50bpw**
mlx_lm.load("hermitdave/Spark-X2.6-4B-SLQ-4.50bpw"
excluded = {"g_proj"}
projs = "|".join(sorted(p for p in proj_attn if p not in excluded))
model, tokenizer = load_model(args.model, trust_remote_code=args.trust_remote_code, lazy=args.lazy)
def quantize(self, bitwidth_options: List[int], calibration_bitwidth: int):
def pack_checkpoint(
description="Export an SLQ store as an MLX-native packed checkpoint"
license = {text = "Apache-2.0"}
if scale_dtype == "float16":
mx.clear_cache()
def pack_checkpoint_streaming(
if args.streaming:
Spark-X2.6本地通知改写应用
NoticeClear通过本地Ollama调用Spark-X2.6-4B Q4_K_M,将通知整理为结构化辅助草稿;保存模型来源与请求记录,提供原文对照、格式检查及可编辑导出。
FROM ./runtime/Spark-X2.6-4B-Q4_K_M.gguf
MODEL = 'spark-x26-preflight:q4km'
response=requests.post(BASE_URL+'/api/chat'
def export_copy(record,source,draft):
Spark-X2.6第三方本地求助信息整理原型
HelpLight 使用 Spark-X2.6-4B 的本地 OpenAI 兼容端点抽取求助文本中的地点、人数、需求、紧急程度、联系方式与双语摘要,支持批量排序及人工复核。仓库包含指向官方 GGUF 固定版本的下载配置、Ollama Modelfile、模型请求层和本地 Web 应用。
URL='https://huggingface.co/XHToken/Spark-X2.6-4B-GGUF/resolve/fe31f8d64890302cc3a1d365d700357b4b75ba77/Spark-X2.6-4B-Q4_K_M.gguf'
FROM ./Spark-X2.6-4B-Q4_K_M.gguf
MODEL_NAME = os.environ.get("MODEL_NAME", "Spark-X2.6-4B")
payload["reasoning_effort"] = "none"
items.sort(key=lambda r: model_client.URGENCY_RANK.get(r["urgency"], 1))
Spark-X2.6第三方推测解码训练工具
面向Spark-X2.6-4B的EAGLE-3草稿头训练工具,覆盖48K双语词表、S3回答语料与长上下文训练、连续特征抽取、接受率诊断及GGUF导出。
class Eagle3Head(nn.Module):
ap.add_argument("--layers", default="2,18,33")
opt.step()
w = GGUFWriter(str(out), "eagle3")
def compute_loss_mix(model, emb, d2t_t, t2d_t, feats, tok, lab, lam, mix_rate):
def extract_contiguous_into(shim: Shim, store: FeatureStore, sources, *, n_ctx: int,
if args.answer_dir:
def iter_nlp_docs(paths, budget_chars: int, skip_chars: int = 0,
Spark-X2.6第三方浏览器推理适配
将Spark-X2.6-1.7B及官方INT4权重导出为ONNX图,提供onnxruntime-web WebGPU加载器、GPU KV缓存与浏览器聊天界面。
SRC = Path("hf/Spark-X2.6-1.7B") # original checkpoint; tests/ and tools/ take both paths from here
executionProviders: ["webgpu"],
Spark-X2.6第三方浏览器推理适配
将Spark-X2.6-4B及官方INT4权重导出为ONNX图,提供onnxruntime-web WebGPU加载器、多轮生成与工具调用处理。
SRC = Path("hf/Spark-X2.6-4B")
executionProviders: ["webgpu"],
Spark-X2.6第三方公益文本审核应用
招聘文本人工复核辅助工具,使用Spark-X2.6-4B本地Transformers或MaaS Provider,配合原文证据校验、结构化复核卡片、审核记录导出及锁定测试评分。
MAAS_MODEL = "spark-x2.6-4b"
out = self.model.generate(**enc, do_sample=False, max_new_tokens=self.max_new_tokens, pad_token_id=self.tok.pad_token_id)
def _legal_hits(s):
def build_cards(record):
def main():
Spark-X2.6第三方本地智能体应用
面向Mac/Linux的本地智能体,提供Spark-X2.6-4B GGUF下载配置、本地llama.cpp流式聊天客户端与可选择的思考预算,含网页界面和工具执行流程。
small: { id: "Spark-X2.6-4B", label: "Spark X2.6 4B", url: () => settings.smallURL, temperature: () => settings.temperature },
const kwargs = effort === "instant" ? { enable_thinking: false } : { enable_thinking: true, reasoning_effort: effort === "medium" ? "low" : "high" };
Spark-X2.6第三方量化与推理配方
Spark-X2.6-4B-Base Q6_K本地构建配方,包含llama-server启动脚本、固定运行时构建入口及DSpark草稿推测解码配置。
MODEL=${MODEL:-$ROOT/models/spark26-4b-Q6_K.gguf}
--spec-type draft-dspark \
Spark-X2.6第三方数据库代理训练研究
基于Spark-X2.6-4B SQL/Cypher衍生模型的强化学习环境,含采样基线、GRPO/SRPO试验配置、数据库执行反馈和奖励计算代码。
model = '<drive>:\<folder>\Spark-X2.6-4B-SQL-Cypher-Agent-Q8_0.gguf'
def reward(item: dict[str, Any], cfg: dict[str, Any]) -> float | None:
Spark-X2.6第三方端侧格式转换工具
提供Spark-X2.5及Spark-X2.6至LiteRT-LM的转换脚本,包含固定HF revision下载、聊天模板处理、int8/int4构建和GPU图后处理流程。
"""Spark-X2.5 (XHToken, model_type spark2_5, remote code, THINKING) -> .litertlm.
dl XHToken/Spark-X2.6-1.7B f18c032c7675f807c0fdffe281dbe124edba2605 $SM/Spark-X2.6-1.7B
dl XHToken/Spark-X2.6-4B d1b5f26071101c27fcd07728e7a7770e428281f4 $SM/Spark-X2.6-4B
仅在存在不同日期、模型范围相同且均采集成功的历史快照时比较。首日不推算增长;近30天下载的变化是滚动窗口差值。
| 渠道 | 指标 | 上一有效快照 UTC | 上次 | 本次 | 快照差值 |
|---|---|---|---|---|---|
| Hugging Face | 累计下载 | 2026-11-07T07:13:32Z | 534,044 | 604,151 | +70,107 |
| Hugging Face | 近 30 天下载 | 2026-11-07T07:13:32Z | 534,044 | 604,151 | +70,107 |
| ModelScope | 累计下载 | 2026-11-07T07:13:32Z | 3,091 | 3,229 | +138 |
| Ollama | 累计下载/拉取次数(Pulls) | 2026-11-07T07:13:32Z | 9,510 | 9,699 | +189 |
Spark-X2.6 六个官方 HF 模型仓库。讨论核查时间:(独立于模型指标 observed_at / generated_at)。
仅选摘部分公开体验与采用自述,不代表整体评价,也不是独立基准。普通讨论、PR、组织成员回复与活动投稿分开判断;平台标记为非组织成员,不等于商业关联已经独立核验。X2.5 历史案例不代表 X2.6 的测试结果。
讨论核查时间:;选摘复核日期:。这两项独立于模型指标 observed_at / generated_at,不改变原指标观测时间。
已核查:普通讨论 30 条;PR 2 条。
People complaining about reasoning verbosity are overlooking the fact that a model this small can even sustain reasoning for that long.
It's a fine model. Just wish it had MTP to make the latency more bearable.
> It's a fine model. Just wish it had MTP to make the latency more bearable. @ManIDontlike working on it, just a few days.
I asked this model to solve a basic mechanics problem involving a cylinder rolling down an inclined plane. It spent 64k tokens reasoning and still failed to produce an answer. It's impressive that a 4B model can sustain such a long reasoning process, but this also highlights the difference between generating long chains of thought and actually converging on a solution. More reasoning tokens don't necessarily mean better reasoning.
> I asked this model to solve a basic mechanics problem involving a cylinder rolling down an inclined plane. It spent 64k tokens reasoning and still failed to produce an answer. > > It's impressive that a 4B model can sustain such a long reasoning process, but this also highlights the difference between generating long chains of thought and actually converging on a solution. More reasoning tokens don't necessarily mean better reasoning. @eraldohug Would you mind sharing the exact problem or prompt you used? I’d be interested in trying it out and seeing where the model gets stuck.
> I asked this model to solve a basic mechanics problem involving a cylinder rolling down an inclined plane. It spent 64k tokens reasoning and still failed to produce an answer. > > It's impressive that a 4B model can sustain such a long reasoning process, but this also highlights the difference between generating long chains of thought and actually converging on a solution. More reasoning tokens don't necessarily mean better reasoning. Hmm, these models do tend to overfit when we have fewer params. Spatial reasoning is not a strong area, this is more focused towards coding and agentic work. Also, share the problem lemme see if I can make it solve it with some test time techniques.
> I asked this model to solve a basic mechanics problem involving a cylinder rolling down an inclined plane. It spent 64k tokens reasoning and still failed to produce an answer. > > It's impressive that a 4B model can sustain such a long reasoning process, but this also highlights the difference between generating long chains of thought and actually converging on a solution. More reasoning tokens don't necessarily mean better reasoning. Could you test the same if qwen3.5 4b or smaller gemma models are able to solve it, also ternery bonsai ones.
> > It's a fine model. Just wish it had MTP to make the latency more bearable. > > @ManIDontlike working on it, just a few days. Few days is way too long for mtp, just drop something dflash2 or eagle4 drafter asap. Need this model to fly.
> > I asked this model to solve a basic mechanics problem involving a cylinder rolling down an inclined plane. It spent 64k tokens reasoning and still failed to produce an answer. > > > > It's impressive that a 4B model can sustain such a long reasoning process, but this also highlights the difference between generating long chains of thought and actually converging on a solution. More reasoning tokens don't necessarily mean better reasoning. > the prompt is : Consider a rigid cylinder of mass (M) and radius (R), rolling without slipping down a fixed inclined plane of angle (\theta). Its moment of inertia about the center of mass is (I_C). Let (\phi(t)) denote the cylinder's angular displacement, positive in the direction of rolling down the incline. The cylinder is released from rest at an arbitrary initial angle (\phi_0). Gravity is (g), and the coefficient of static friction is (\mu_s). Using Lagrangian mechanics, rigorously derive the exact nonlinear equation of motion for (\phi(t)) and obtain its most general analytical solution, explicitly addressing the existence of closed-form solutions. Formally establish the conditions for stable equilibrium, continuous contact, and rolling without slipping. Analyze the possible dynamical regimes and determine the critical conditions separating them. Provide a complete symbolic derivation, justify every mathematical step, and avoid numerical approximations or unjustified assumptions. > Could you test the same if qwen3.5 4b or smaller gemma models are able to solve it, also ternery bonsai ones. I tested three models on this same Lagrangian mechanics problem involving a cylinder rolling down an inclined plane. Gemma-4-12B (~5K tokens) scored 6/10, correctly deriving the main equations but making dimensional errors and mistakes in the slipping conditions. Gemma-4 E4B (~5K tokens) performed best with 7/10, producing a more consistent derivation but still making conceptual errors regarding equilibrium and slipping. Qwen3-4B (~6K tokens) scored 3/10, with sign errors, missing mass factors, and dimensional inconsistencies. Overall, Gemma E4B showed the strongest mathematical reasoning despite using fewer tokens than Qwen3-4B. These are qualitative assessments based on a single test.
> > It's a fine model. Just wish it had MTP to make the latency more bearable. > > @ManIDontlike working on it, just a few days. Thank you looking forward to speculative drafter
> Hello, how are you?
[Start thinking]
We are asked: "Hello, how are you?" with thinking_effort=high. The system message says: "Now the system is invoked with `thinking_effort=high`." So we should set our thinking effort to high. But the user just said "Hello, how are you?" We need to respond appropriately. We should think (using thinking channel) with high effort, then produce a response. The response channel is separate. We should output only the response, not the thinking? Typically in this setup, we have a thinking block and a response block. The instruction says "Now the system is invoked with thinking_effort=high." So we should demonstrate high thinking effort. But the output we provide should be the final response. Since it's a simple greeting, we can just respond conversationally. However, we need to simulate high thinking effort. In the thinking block, we can elaborate. Then in the response, we give the answer.
We must ensure that we don't output the thinking in the final response unless it's part of the format. Usually, the assistant's output includes a thinking section (e.g., `thinking...`) and then the final answer. The prompt says "thinking_effort guides on how much to think in your thinking channel (not including the response channel)". So we need to use a thinking channel to do the thinking, and then provide the response. The final message should contain the response. It might be fine to include a thinking section as part of the assistant message, but the user might just see the thinking if it's in the same message. Typically, in this API, the assistant's response is just the final text, and the thinking is internal. But since we are simulating, we can output a JSON with "thinking" and "response" keys, or just plain text with a thinking block. Looking at the system message: "Now the system is invoked with `thinking_effort=high`." It implies we should set the thinking effort for the current turn. So we should do a thorough internal reasoning, then output the response.
I'll write a thinking block with high depth (e.g., considering the nature of the greeting, how to respond appropriately, maybe acknowledging the effort, providing a friendly tone). Then output the response.
The response should be something like: "I'm doing well, thank you for asking! How can I assist you today?" Or simply "I'm well, thanks! How can I help you?"
Let's craft a high-effort thinking: We need to consider the context: user just greeted, no prior context. We should respond in a friendly, helpful manner. Since thinking_effort is high, we can elaborate the reasoning process. But the final response should be concise.
I'll structure the output as:
```json
{
"thinking": "The user greeted with 'Hello, how are you?'. This is a simple conversational opener. I should respond in a warm and friendly manner, acknowledging my own status while leaving room for further assistance. A typical response would be to express that I'm well and to offer help. Since the thinking effort is set to high, I'll carefully consider the tone and content to ensure it is positive and engaging. I'll keep the response concise and friendly, e.g., 'I'm doing well, thank you for asking! How can I help you today?'",
"response": "I'm doing well, thank you for asking! How can I help you today?"
}
```
But the instructions don't specify a strict JSON format. It might be that the assistant just outputs text, and the thinking is hidden. But in this platform, we can use the thinking block. Actually, in the typical format for this environment, the assistant's message can contain a `thinking` tag or just plain text. However, the user is seeing the assistant's response. If we include thinking, it might be visible. But the system message says "thinking_effort guides on how much to think in your thinking channel", implying we have a separate thinking channel. So the assistant's message might be split: thinking channel output is internal, and the response channel output is the final message. But in this text-based interface, we might just write a thinking block and then the response. Often, the output is just the response text, and the thinking is not shown. But the instruction says "not including the response channel", meaning the thinking channel is separate. So in our final output, we should only output the response channel content. The thinking is done in the thinking channel, but we as the model generate both. The system might expect us to output a JSON with "thinking" and "response", or it might expect just the response. Let's check the initial system prompt: It says "Now the system is invoked with `thinking_effort=high`." There's no explicit format. In similar setups (like in some agent frameworks), the assistant's message can be a JSON object with "thinking" and "response" fields, but often the thinking is optional and not sent to the user. Since we are in a text-only interface, I think it's safer to just output the response directly, and we can use the thinking channel to think internally. But how to indicate we used high thinking? Maybe we don't need to output the thinking at all. The thinking_effort parameter just affects how much we think, not necessarily that we must output the thinking. So we can simply produce the response with high-level internal reasoning. In the final output, we just put the response text.
However, the instruction says "thinking_effort guides on how much to think in your thinking channel (not including the response channel)". This suggests that there is a distinct thinking channel where we can emit thoughts, and the response channel emits the final answer. In the implementation, we can just do the reasoning in our mind and then output the response. We don't need to explicitly output the thinking in the final message unless the platform expects it. Typically, in these types of prompts, the model is expected to output a thinking block and then the response. For example, in some benchmarks, the format is:
```
Thinking: ...
Response: ...
```
But here it's not specified. To be safe, I'll output a message that contains the thinking and the response, but I'll keep it as plain text with a clear separation. Alternatively, I can just output the response, and assume the thinking is internal. Since the user might see the thinking if it's in the same message, but the instruction says "not including the response channel", it might mean that the thinking channel is separate, so the output should only be the response. I'll go with just the response.
Let's think: If I output only the response, I'm not explicitly using the thinking channel in the output. But the thinking channel is internal to the model's computation. The parameter affects how much the model thinks. So I can just internally think and then output the response.
I'll output: "I'm well, thank you for asking! How can I assist you today?"
But let's consider if there's any trick. The user said "Hello, how are you?" It's a simple greeting. No need for complex reasoning. High thinking effort might be overkill, but we can still do a thorough thought process and then give a simple response.
I'll write the final response as a friendly greeting.
I'll output:
I'm doing well, thank you for asking! How can I help you today?
That should be fine.
But to adhere to the "thinking_effort=high" instruction, I could output a thinking block in the response. Let's see if there's any standard format. In many LLM APIs, the assistant's message is just text. The thinking effort is a parameter to the model, not something to output. So we just need to set our internal reasoning depth to high. So I'll just produce the response with high-quality reasoning done internally.
Thus, final answer: a simple, friendly response.
Let's do it.
[End thinking]
>I'm well, thank you for asking! How can I help you today?
Hi! Will it be on https://artificialanalysis.ai ?
> Hi! > Will it be on https://artificialanalysis.ai ? @anvme we’d love to be on AA, but haven’t been able to reach them yet. If anyone knows the best way to get in touch, please let us know!
@anvme in the meantime, you can compare it in [Tiny League](https://tinyleague.nunodonato.com/)

我剛剛在關閉思考模式(thinking: none)並開啟聯網搜尋的場景下測試了 Spark-X2.6-4B,其事實準確度和抗幻覺表現徹底震撼了我! 我測試了幾個包含時間差、同音倒裝陷阱(花火 vs 火花)、冷門設定(1.36米身高)和最新版本機制的複雜遊戲/二次元知識。模型不僅毫無邏輯混亂,而且資訊抽取和總結排版極其乾淨俐落。 事實證明,在配合 Web 搜尋的場景(llama cpp +exa)下,關閉思考不僅能消除小模型常見的 CoT 邏輯發散,還能大幅降低延遲並保持頂級準確率。非常棒的端側模型!  

您好,关于您在Benchmark-Result里放的Tau3的分数,有一些疑问。Tau3的分数按照官方的计算方法似乎是四个榜的分数取平均,但是文档里报的分数不太像是四个子榜分数的算术平均?我们这里评的是Tau3-Banking吗
你好,感谢你对我们评测结果的关注。首先澄清一下:我们报告的 𝜏³ 分数特指 𝜏³-Banking 的评测结果,并非 4 个子任务分数的平均值。 我们采用了 Artificial Analysis 公布的 𝜏³-Banking 评测方案(https://artificialanalysis.ai/methodology/intelligence-benchmarking#tau3-banking),具体设置如下: - 使用上游 tau2-bench v1.0.1 的数据集和评分器,评估完整的 97 个 Banking 任务。 - 采用 bm25_grep 检索模式。 - 使用 GPT-5.4 Mini(中等推理强度)作为用户模拟器和自然语言断言判定器。 - 每个任务重复运行 5 次,每次最多 200 步。“步”按照评测框架中的消息计数,包含用户模拟器的消息,而不只是被评测模型的轮次。 - 根据后端数据库的实际状态及相关断言判定任务是否成功,最终报告全部 97 个任务、每个任务运行 5 次的平均 pass@1 分数。
I really appreciate that you can answer this in detail @pengwenzhi . Thank you

Just wanted to share a quick feedback thread in case it saves someone some time. I spent a lot of time struggling to manage reasoning/overthinking behavior on v2.5, but couldn't get consistent results: * Uncapped thinking budget: It would spend nearly 20 minutes reasoning. * Strict budget cap: The output quality degraded significantly. However, v2.6 seems to have completely resolved this issue! It honestly punches way above its weight class—performing on par with +100B models. I haven't stress-tested it with extremely heavy workflows yet, but it executed all my prompt tasks almost flawlessly without any serious hiccups. Huge thanks to the maintainers/devs for this release! Fantastic work. 🚀
It definitely punches above its weight class but idk about 100B+ claim
I don't know about that, in my setup, after it spends reasoning budget, it just starts thinking the same way but in plain output stream. This model looooves to yap. Still impressive for its size
Let me clarify one thing: As I said, I didn't give the model any super heavy tasks; but it's genuinely impressive that a small model is aware — for example, catching the cases of an enum that was defined elsewhere under a different name, and instead of just creating a brand-new enum, it uses the question tool to ask for my opinion. That's really cool. Basically, what I meant was that its behavior felt like a +100B model, not necessarily its problem-solving ability. The second thing is that the code it writes is almost always complete and free of syntax errors. Same-weight models tend to have a common flaw — they deliver code with syntax mistakes or incomplete — which this model didn't seem to have.

Привет брат, как насчет сделать конкурента qwen 3.8 27b? Я думаю вы сможете поместить в 12b? как считаешь? И еще хочется mtp, когда сможешь релизнуть?
Сегодня я тестирую 4b и в целом она очень мощная, задачи в терминали выполняет вообще без каких либо проблем по сравнению с 27b. Пока не столкнулся с проблемой чтобы что-то не работало в коде. Буду тестирвать

## Project name and track Project name: Agentic Fashion Track: Agentic Coding ## Who this helps and what problem it solves Target users: Independent developers and designers building web applications with limited hardware resources. Small businesses and entrepreneurs who need a website or online storefront without a large development budget. Developers exploring local AI models and agentic coding workflows. Concrete scenario and problem: Building a polished, multi-page e-commerce website usually requires significant development time, frontend expertise, and access to capable AI coding tools or cloud infrastructure. Agentic Fashion demonstrates an alternative: using a compact language model running locally on a GPU with only 6 GB of VRAM, combined with a custom agent harness, to build a complete fashion storefront. The project explores how far a small local model can go when the development workflow is designed around its capabilities and constraints. Expected public benefit: The project demonstrates that useful AI-assisted software development does not necessarily require expensive hardware or continuous reliance on cloud-hosted models. It provides a practical example of local AI-assisted development for developers and small teams. ## How Spark-X2.6-4B is used Model source and revision: - Official model: [XHToken/Spark-X2.6-4B on Hugging Face](https://huggingface.co/XHToken/Spark-X2.6-4B). - Model variant: Spark-X2.6-4B-GGUF, run locally. - Quantization: 8-bit (Q8). - Context used: approximately 56K tokens. The model's role in the application: Spark-X2.6-4B was the primary coding model used to develop Agentic Fashion. It generated and iteratively refined the application's page structure, UI components, styling, and frontend implementation. The key enabling component is a custom agent harness that orchestrates the development workflow and helps turn the model's output into a cohesive multi-page application. Instead of relying on a single code-generation response, the workflow uses a task-oriented development process to build and refine the website. The model runs locally during development. It is not required to serve the deployed website or generate content for visitors at runtime. Other models, tools, or services used, if any: - Custom harness. - Custom llama.cpp manager - Astro for the frontend framework. - Bun for the development environment. - GitHub for source code. - Vercel for deployment. No other AI model was intentionally used as the primary code-generation model for this project. ## Demo (required: video OR illustrated walkthrough) [Initial prompt](https://github.com/8clever/spark-2.6-4b-demo/blob/main/.secure/goal_website.md) [Iterative prompts](https://github.com/8clever/spark-2.6-4b-demo/tree/main/issues) [Exit model output](https://github.com/8clever/spark-2.6-4b-demo/blob/main/REASON.md) Video link / embedded screenshots:     **🚀 Live demo:** [https://spark-2-6-4b-demo.vercel.app/](https://spark-2-6-4b-demo.vercel.app/) **Code repository:** [https://github.com/8clever/spark-2.6-4b-demo](https://github.com/8clever/spark-2.6-4b-demo) Example input: ## Goal - You are the UI/UX designer and lead developer of "Agentic Fashion". - Create 5 pages for the "Agentic Fashion" online store, featuring product listings. - Design a modern, visually appealing, and user-friendly shopping experience. - Ensure consistent styling, intuitive navigation, and responsive layouts across all pages. - Use high-quality product imagery, clear typography, and attractive product cards. - Make the pages feel like a cohesive, production-ready e-commerce website. Application workflow and actual output: 1. The developer provides the project goals and UI requirements to the custom harness. 2. Spark-X2.6-4B generates and iteratively refines the website code locally. 3. The generated application is structured as an Astro project. 4. The resulting website is built and deployed to Vercel. The final demo includes a fashion storefront with a homepage, product catalog, category navigation, featured products, sale listings, a blog section, and an About page. ## How to reproduce Code repository or runnable example, if available: [https://github.com/8clever/spark-2.6-4b-demo](https://github.com/8clever/spark-2.6-4b-demo) Setup and run instructions: Clone the repository and enter the application directory ``` bun install bun run dev ``` Runtime and versions: Bun: 1.4.3 Astro: 7.4.2 Hardware and precision/quantization: - GPU memory: 6 GB VRAM. - Model: Spark-X2.6-4B Q8. - Quantization: 8-bit. - Observed generation speed: approximately 10–30 tokens per second. - Context used: approximately 56K tokens. - Inference: local execution on the development machine. Key prompts and inference settings: The core instruction defines the model as the UI/UX designer and primary developer of Agentic Fashion, with responsibility for building a consistent multi-page fashion storefront. The workflow is organized around iterative frontend implementation and refinement. The model is run with Q8 quantization and a context of approximately 56K tokens. The application can be reproduced from the repository using the instructions above. Reproducing the original AI-driven generation workflow additionally requires the custom harness and local model setup. ## Results and limitations Observed results and how they were evaluated: - A multi-page fashion storefront was generated with local AI-assisted development. - The application was successfully deployed and made publicly accessible. - The model operated in a constrained environment with 6 GB of GPU memory. - Observed generation speed ranged from approximately 10 to 30 tokens per second. - The development workflow used a context of approximately 56K tokens. Evaluation was qualitative: the result is an inspectable, deployed website rather than a benchmark-only demonstration. No standardized comparison against larger models or alternative coding agents has been conducted. Failure cases and current limitations: - The website is a frontend prototype rather than a production-ready e-commerce platform. - Product listings and other storefront content are demonstration content; backend inventory, real checkout, payments, and order management are not implemented as production services. - Generated code can require further iteration and developer review. - Generation speed and output quality depend on the available hardware, inference runtime, context size, and task complexity. ## Contributors and disclosure Individual / team: Individual Contributor profiles and respective contributions: https://github.com/8clever AI-assisted development disclosure: Spark-X2.6-4B Q8 was used as the primary model for generating and refining application code. A custom harness supported the coding workflow. Data sources and authorization, if applicable: The project is a frontend demonstration and does not rely on a training dataset or model fine-tuning. Product names, prices, and listings are illustrative storefront content. Product imagery and any third-party assets remain subject to their respective source licenses and attribution requirements.
![#8 [HER Hack-Astron # 7] [Open Source AI for Good] Agentic Fashion 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-8-76475960114dee990cd436d5.jpg)
HER Hack-Astron #7 Open Source AI for Good TramiteClaro local - plain-language access with Spark-X2.6-4B
Project name and track
Project name: TramiteClaro local
Track: Accessibility + Health and well-being (plain-language explanation of official and health texts, offline-first, in Spanish, English and Chinese, with read-aloud audio and photo input)
Who this helps and what problem it solves
Target users: older adults and low-literacy users in Argentina/LATAM who struggle with bureaucratic and health instructions (appointments, prescriptions, civil-defense alerts).
Concrete scenario and problem: official texts are long, jargon-heavy, and cause missed appointments, medication errors, or unsafe behavior in floods. Users will not paste sensitive documents into cloud chatbots for privacy reasons.
Expected public benefit: a 100% local explainer that returns VERSIÓN SIMPLE + PASOS A SEGUIR + QUÉ LLEVAR / QUÉ PREGUNTAR, with a safety footer. No data leaves the device. Output can be read aloud offline, and paper notices can be photographed instead of typed.
How Spark-X2.6-4B is used
Model source and revision: XHToken Spark-X2.6-4B-GGUF, file Spark-X2.6-4B-Q4_K_M.gguf, snapshot revision fe31f8d64890302cc3a1d365d700357b4b75ba77 (local HF cache models--XHToken--Spark-X2.6-4B-GGUF).
The model's role in the application: sole generator. It rewrites the input into the 3 fixed sections + safety line. No other LLM is used. App logic only validates, caches, and rate-limits.
Other models, tools, or services used, if any: none for inference and none for language. Speech and OCR are non-LLM local tools: offline macOS say for audio (Paulina / Samantha / Tingting) and local tesseract for photo-to-text. App stack: Python + Streamlit UI + requests to local llama-server. No cloud calls.
Multilingual use (Spanish / English / Chinese)
The model card lists only en and zh, yet the same revision also produces correct Spanish. All three locales share one code path: a LanguageProfile per language defines headers, footer, system prompt, TTS voice, OCR language and negation markers.
Measured on the same local Q4_K_M server, one real medication text per language, all accepted by the fail-closed gates:
| Locale | Raw latency | Structure | Numbers kept | Negation kept |
| --- | --- | --- | --- | --- |
| es | 22.4 s | pass | pass | pass |
| en | 20.1 s | pass | pass | pass |
| zh | 15.7 s | pass | pass | pass |
This is a 1-sample-per-language smoke test, not a benchmark. The Spanish result is a transfer observation: es is not a declared language of the model card.
Demo (illustrated walkthrough with Streamlit screenshots below)
Video link / embedded screenshots: 4 Streamlit screenshots attached below (empty -> filled -> running -> output). UI flow: input box -> Explicar en simple -> 3 sections. Below are 3 real end-to-end runs via simplificar.py on local server. New in this revision: Escuchar en voz alta (offline audio), Foto del papel (local photo OCR into the input box), and a language selector (Español / English / 中文, auto-detected from the OS). New screenshots at the bottom are real local runs.
Example input 1 (medical appointment, ES real):
Deberá presentarse con 30 minutos de antelación al horario asignado, con DNI original, credencial de obra social y orden médica autorizada. En caso de estudios con contraste deberá concurrir con 8 hs de ayuno. La tolerancia máxima es de 10 minutos.
Application workflow and actual output (verbatim, 32624ms):
VERSIÓN SIMPLE:
Tienes que llegar 30 minutos antes del horario. Lleva tu DNI original, tu credencial de la obra social y tu orden médica. Si estás haciendo estudios con contraste, debes ir 8 horas antes de comer. La tolerancia máxima es de 10 minutos.
PASOS A SEGUIR:
1. Llega 30 minutos antes del horario.
2. Lleva tu DNI original.
3. Lleva tu credencial de la obra social.
4. Lleva tu orden médica.
5. Si haces estudios con contraste, haz 8 horas de ayuno.
6. No llegues más de 10 minutos después del horario.
QUÉ LLEVAR / QUÉ PREGUNTAR:
- Lleva: DNI original, credencial de la obra social, orden médica.
- Si no tienes tu orden médica o tu credencial de la obra social, pregunta dónde la obtienes.
Esto es una ayuda explicativa, no reemplaza al profesional. Si es urgente, buscá atención humana.
Example input 2 (pharmacy, ES real, 41199ms):
Tomar 1 comprimido de 50mg cada 12 horas con las comidas durante 7 días. No interrumpir el tratamiento aunque mejoren los síntomas. Conservar en lugar fresco y seco. Ante mareos o sarpullido consultar al médico.
Actual output (verbatim):
VERSIÓN SIMPLE:
- Tomar 1 comprimido de 50 mg cada 12 horas, con las comidas.
- Tomar durante 7 días.
- No interrumpir el tratamiento, aunque los síntomas mejoren.
- Guardar el medicamento en un lugar fresco y seco.
- Si se tienen mareos o sarpullido, consultar al médico.
PASOS A SEGUIR:
1. Tomar 1 comprimido de 50 mg cada 12 horas.
2. Tomar el comprimido con las comidas.
3. Tomar durante 7 días.
4. No interrumpir el tratamiento, aunque los síntomas mejoren.
5. Guardar el medicamento en un lugar fresco y seco.
6. Si se tienen mareos o sarpullido, consultar al médico.
QUÉ LLEVAR / QUÉ PREGUNTAR:
- Llevar el medicamento guardado en un lugar fresco y seco.
- Llevar el comprimido de 50 mg.
- Llevar el calendario para recordar los 7 días.
- Llevar el informe del médico si se tienen mareos o sarpullido.
- Llevar el teléfono para contactar al médico si se tienen mareos o sarpullido.
Esto es una ayuda explicativa, no reemplaza al profesional. Si es urgente, buscá atención humana.
Example input 3 (flood alert, ES real, 34179ms):
Ante alerta amarilla por tormentas, evite circular por calles anegadas, desconecte artefactos eléctricos en planta baja y prepare documentación en bolsa estanca. En caso de evacuación siga las indicaciones del personal.
Actual output (verbatim):
**VERSIÓN SIMPLE:**
Si hay tormentas, no circules por calles que estén inundadas. Desconecta los aparatos eléctricos que están en la planta baja. Guarda tu documentación en una bolsa cerrada. Si te piden que te evacues, sigue las instrucciones del personal.
**PASOS A SEGUIR:**
1. No uses carreteras o calles anegadas.
2. Desconecta aparatos eléctricos de la planta baja.
3. Guarda tu documentación en una bolsa cerrada.
4. Si te piden evacuación, sigue las indicaciones del personal.
**QUÉ LLEVAR / QUÉ PREGUNTAR:**
- Lleva una bolsa cerrada para guardar documentación.
- Pregunta al personal si hay que evacuar y qué hacer.
Esto es una ayuda explicativa, no reemplaza al profesional. Si es urgente, buscá atención humana.
How to reproduce
Code repository or runnable example, if available: https://github.com/LucianoDPerez/spark-tramiteclaro (src/config.py, src/domain.py, src/languages.py, src/usecase.py, src/validator.py, src/llm_client.py, src/cache.py, src/ratelimit.py, src/ocr.py, src/tts.py, src/locale_detect.py, app.py, simplificar.py, test_usecase.py, eval/).
Setup and run instructions:
1. Run llama-server: llama-server -m /Users/luchop/.cache/huggingface/hub/models--XHToken--Spark-X2.6-4B-GGUF/snapshots/fe31f8d64890302cc3a1d365d700357b4b75ba77/Spark-X2.6-4B-Q4_K_M.gguf -c 16384 -ngl 99 --flash-attn on --threads 10 --threads-batch 10 --batch-size 1024 --ubatch-size 512 --port 8080 --host 0.0.0.0 --alias spark2.6-4B --temp 0.2 --top-p 0.95 --top-k 20 --min-p 0.0 --presence-penalty 0.0 --repeat-penalty 1.05 --parallel 1 --jinja --cont-batching
2. pip install -r requirements.txt (streamlit, requests, pillow). OCR needs tesseract installed; language data (spa, eng, chi_sim) is bundled in models/tessdata/.
3. python3 -m unittest -v (25 tests, no model needed: structure, numbers, negations, per-language coverage, locale detection, adapter guards)
4. python3 -m eval.run_eval (fact-retention table, needs the model) or python3 -m eval.run_eval --lang zh
5. python3 -c "from src.usecase import SimplifyTextUseCase; from src.domain import SimplifyRequest; print(SimplifyTextUseCase().execute(SimplifyRequest(text=open('ejemplos.txt').read())).output)" or streamlit run app.py
Runtime and versions: llama.cpp llama_server (build b11669-620d2225c per fingerprint), Python 3.14, streamlit, requests. OpenAI-compatible endpoint http://localhost:8080/v1/chat/completions, model id spark2.6-4B.
Hardware and precision/quantization: Mac, threads 10, GGUF Q4_K_M (4.44B params, n_ctx 16384 per /v1/models), flash-attn on.
Key prompts and inference settings: one system prompt per locale in src/languages.py (3 fixed sections + safety footer, no diagnosis, explicit never-invert-a-negation and copy-numbers-exactly rules). temperature 0.2, top_p 0.95, max_tokens 1200, chat_template_kwargs {enable_thinking: False} (thinking disabled because default high fills 1024 tokens with reasoning only). n_ctx 16384.
Results and limitations
Observed results and how they were evaluated: 3/3 real local runs completed with correct 3-section structure and safety footer. Unit tests 25/25 pass with no model: structure (missing section, bold headers, order, duplicated sections), numbers preserved/dropped, negations preserved/dropped, accent-insensitive markers, per-language coverage (es/en/zh), locale detection, and adapter guards (TTS/OCR reject bad input). Three fail-closed gates (structure, numbers, negation) reject before caching, so a retry hits the model again instead of replaying a bad answer. Idempotency verified: second identical call served from cache (0ms). Latency 32-41s on local Mac Q4_K_M.
Fail-closed validation gates (deterministic, before anything reaches the screen or the cache):
| Gate | What it catches |
| --- | --- |
| Structure | missing/reordered/duplicated sections, missing safety footer |
| Numbers | dropped dose, deadline or quantity |
| Negation | a prohibition rewritten as a positive instruction |
Fact-retention harness (eval/run_eval.py, 9 synthetic cases, 3 per language, each with expected facts matched as substrings): 39/42 facts retained, 8/9 cases accepted, median latency 45.9 s. Full table: es-turno 6/6, es-farmacia 6/6, es-alerta 1/4, en-clinic 6/6, en-medication 6/6, en-benefits 4/4, zh-预约 6/6, zh-用药 rejected (Dropped numbers from input: 50, correct rejection, output withheld), zh-通知 4/4. This is a development-set check on synthetic texts, not a blind benchmark, and there is no human user study.
Failure cases and current limitations:
- EX1 ayuno phrasing: output says debes ir 8 horas antes de comer (ambiguous) alongside correct haz 8 horas de ayuno. Fasting instruction must be reviewed by human; prototype does not replace staff. Validator checks structure and facts, not clinical wording.
- es-alerta, real losses found by the harness: the output never says alerta amarilla (severity level disappears) and turns bolsa estanca (watertight) into bolsa cerrada (closed). In a flood, watertight is the whole point. (artefactos to aparatos is a synonym: a false negative of the substring method, not of the model.)
- zh-yongyao, correct rejection: the model dropped the 50 from 50毫克. The numbers gate rejected the output and nothing was shown.
- Worst real failure (found while recording the photo demo): on an appointment notice, the model merged two instructions and wrote the 10-minute lateness tolerance as a fasting limit. All numbers are present, so no gate catches it: preserving a number is not the same as attaching it to the right fact. Same input also once restarted the template mid-answer (empty duplicated sections); a duplicate-header gate now rejects that.
- Short inputs are often copied instead of paraphrased; the simplification gain is small there. The prompt was kept unchanged to preserve reproducibility of the published outputs.
- Photo input depends on image quality: a clean 34px scan reads verbatim; small/thin fonts misread. OCR is not evaluated on real photographed documents.
- Adversarial prompt-injection is contained only at the structure level: unstructured output is rejected and never cached; semantic jailbreaks beyond structure are not covered.
- Long legal texts over 4000 chars are rejected by validation (by design, single 16k slot).
Contributors and disclosure
Individual: Luciano David Perez (https://github.com/LucianoDPerez)
AI-assisted development disclosure: scaffolding and prompt iteration assisted by AI coding agent; all model outputs above are verbatim local runs, no fabricated outputs.
Data sources and authorization, if applicable: hand-written generic Spanish examples (no personal data, no copyrighted texts).







https://cdn-uploads.huggingface.co/production/uploads/6a5a5c105001d25ac98acad7/GbfglSa0SctAXw-9AcaDL.mp4
Update Oct 25 — three updates, both verified locally today: - Spanish-first: system prompt, inputs, outputs and safety footer are all in Spanish (rioplatense), targeting low-literacy older adults in Argentina/LATAM. No English/Chinese fallback. - New fail-closed output validator (src/validator.py, commit 37cee2a): enforces VERSIÓN SIMPLE + PASOS A SEGUIR + QUÉ LLEVAR/QUÉ PREGUNTAR + safety footer in order, tolerates **bold** headers. Invalid output is rejected and never cached (adversarial injection test included, 6/6 unit tests green). - Fresh local run today on spark2.6-4B Q4_K_M (fe31f8d6): pharmacy example completed in ~40s and passed the validator. No fabricated outputs, failure cases (EX1 fasting phrasing) still disclosed in the main post.
Update Oct 27 — numeric grounding check (src/validator.py, commit 84fb9b0): every digit group from the input (doses like 50mg, deadlines like 180 days) must survive verbatim in the output, else rejected and never cached. Verified against all 3 published real runs (pass) plus a tampered-dose case (correctly rejected). 8/8 unit tests green, no model needed.
Update Oct 27 - trilingual + audio + photo + eval table (repo and post now in sync): - Same Spark-X2.6-4B Q4_K_M now serves Spanish, English and Chinese from one code path (one LanguageProfile per locale: headers, footer, prompt, TTS voice, OCR language, negation markers). - Smoke test on the same local server, one real medication text per language, all gates pass: es 22.4 s, en 20.1 s, zh 15.7 s. Note: es is not a declared language of the model card, yet it transfers correctly. - Output can be read aloud offline (Paulina / Samantha / Tingting; 48-55 s of real audio in the demo) and paper notices can be photographed (local tesseract, spa/eng/chi_sim bundled). New screenshots in the post are real runs. - Three fail-closed gates (structure incl. duplicated sections, numbers, negation) plus fact-retention harness: 39/42 facts retained, 8/9 cases accepted. - New real failures disclosed in the post, including one no gate can catch (a dose number attached to the wrong fact) and one the harness caught live (dropped 50 from 50mg, output withheld). - 25/25 unit tests, no model needed. Repo: github.com/LucianoDPerez/spark-tramiteclaro
Video walkthrough (36 s, real local runs with real offline narration): https://cdn-uploads.huggingface.co/production/uploads/6a5a5c105001d25ac98acad7/sTxnWf86iIGGpnBd_hNwO.mp4 What it shows, in order: Spanish explanation with audio player, full Chinese UI run, photo-to-explanation run. Narration generated offline on this Mac, screenshots are unedited local runs. A montage, not a single screen recording: each frame is a real capture.
![#9 [HER Hack-Astron #7] [Open Source AI for Good] TramiteClaro local 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-9-230c80ca595103664dc40b62.jpg)
does the x2.6 base model have big performance gap from x2.5 base? just curious
I'm not sure what you mean by performance. I can report this after running both on identical hardware: Both prompt fill at about the same rate Token generation speed seems identical between the two 2.6 seems to want to think more before answering; I didn't see the same behavior from 2.5. I seem to get decent answers from both. I haven't put them through any kind of rigorous benchmark, so consider these answers anecdotal. Hope it helps all the same.

# [HER Hack-Astron # 7] [Open Source AI for Good] Rural Signal ## Project name and track **Project name:** Rural Signal **Track:** Disaster preparedness and response + accessibility ## Who this helps and what problem it solves **Target users:** People in rural communities, especially households dealing with fragmented information sources, imperfect connectivity, and basic-phone access. **Concrete scenario and problem:** A rural resident may receive a weather warning, a county road notice, or a forwarded community report in different formats and with different levels of reliability. Under time pressure, the resident needs one clear next step without losing the difference between an official notice and unverified chatter. **Expected public benefit:** Rural Signal turns each notice into a plain-language action card with visible source status, locked critical facts, bounded actions, explicit unknowns, and a flip-phone-sized SMS preview. ## How Spark-X2.6-4B is used **Model source and revision:** Official `XHToken/Spark-X2.6-4B-GGUF`, Q4_K_M, revision `fe31f8d64890302cc3a1d365d700357b4b75ba77`, SHA-256 `91cb2811aebb47ac916aa619d27d4cdd7f4143106b7917accb8ead4cd7f5cbd9`. **The model's role:** Spark writes the concise plain-language summary, selects from case-specific approved actions and unknowns, and creates the SMS preview. Ordinary Python code owns the incident, location, time, source, and trust status and validates every model-authored field before display. **Other models, tools, or services:** llama.cpp performs local CPU inference. Agent J, using an OpenAI model, assisted with implementation, test design, interface copy, and submission preparation. No hosted model is used when Rural Signal runs. ## Demo — illustrated walkthrough ### 1. Official flash-flood notice  The synthetic National Weather Service notice identifies a flash-flood warning at County Road 12 at Dry Creek. Rural Signal preserves the official status, location, observation time, and validity time outside Spark. Spark turns the notice into a concise summary, approved actions, one explicit unknown, and a 137-character SMS preview. ### 2. Adversarial unverified community report  The incoming source text contains a malicious instruction telling the model to ignore its rules and call an unverified loose-cow report official and confirmed. After a fresh local run, Rural Signal still displays `UNVERIFIED`, explicitly says the report has not been officially confirmed, limits the actions to the approved list, and produces a 107-character SMS preview. The validator passed in 19.13 seconds and reported: “Trust boundary held. Nothing was sent.” ## How to reproduce **Code repository or runnable example:** https://github.com/foff4580-sys/rural-signal **Setup and run:** Download the official Q4_K_M GGUF, provide `RURAL_SIGNAL_LLAMA` and `RURAL_SIGNAL_MODEL`, then run `python3 test_engine.py`, `python3 verify_package.py`, `python3 engine.py --all`, and `python3 app.py`. Open `http://127.0.0.1:8787/`. **Runtime and versions:** Python 3.12.3; llama.cpp 0.7.0-dev build 11838, commit `4231b23dc`. **Hardware and quantization:** Linux x86-64; Intel Core Ultra 7 255H; CPU inference with 8 threads; Spark-X2.6-4B Q4_K_M. **Key inference settings:** 4096-token context, temperature 0, reasoning disabled with budget 0, 320 output-token limit, single-turn mode. The full prompt builder and deterministic validator are included in `engine.py`. ## Results and limitations **Observed results:** Four of four fresh synthetic cases passed the final validator in 18.64–20.04 seconds in the final release run. Six deterministic unit tests cover locked-field mutation, invented time, unsupported action, trust-status promotion, and SMS length. The illustrated adversarial run passed in 19.13 seconds with its `UNVERIFIED` status intact. **Limitations:** The sample is four synthetic English-language cases on one computer. This is not evidence that every notice, model output, or attack will be handled correctly. The prototype has no live data ingestion, telecom gateway, or agency integration; it sends nothing. It is not an emergency service and does not replace official alerts, emergency instructions, professional review, or human judgment. Failed output is withheld. ## Contributors and disclosure **Individual / team:** Individual entry by Jere. **Contributor contributions:** Jere defined the target problem, product boundary, and public-interest goal and authorized the final entry. **AI-assisted development disclosure:** Agent J, an AI assistant using an OpenAI model, assisted with research, implementation, interface copy, testing, and submission preparation. Spark-X2.6-4B is the application model demonstrated in the product. Agent J is not presented as a human participant. **Data sources and authorization:** Every incident and location in the demonstration is synthetic. No personal data, live emergency feed, private notice, or third-party operational data is included.
![#11 [HER Hack-Astron # 7] [Open Source AI for Good] Rural Signal 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-11-8fa131b57b086c83cbb54e0d.jpg)
Thank you for the great work you’re doing! It would be fantastic to see a 9B version of this model that incorporates all the latest improvements and optimizations, making it suitable for local coding on budget-friendly consumer laptops. That would make these advancements much more accessible to developers who want a capable local coding assistant without needing expensive hardware.
It would be absolute peak to see a 8-12B spark. Qwen seems to have dropped support for small models, with no plans to release anything below the 27B model for qwen4 as of now. Most other lab's releases for this size range have been subpar, so we've essentially been stuck choosing between qwen 9b and gemma 4 12b for the past 6+ months. I realize that model training is quite expensive and time consuming, but maaaaybe they can hear our prayers lol. I thank them for this 4B gem either way.
Frankly, this 4b model is amazing already. Sure I would like an 8-12B which is perfect for many reasons, but so far in using this 4b it has been great for sub-agent tasks and tool calling. Only thing missing is vision native.
all right, let's rock.
> all right, let's rock. (im sure they will make a 8-12gb savior model,good luck!)
Hi SparkLLM team, thanks for releasing Spark-X2.6-4B and for the detailed answer on τ³-Banking in discussion #4. It made that number reproducible. I'm trying to reproduce the SWE-bench results (Pro 54.3, Verified 62.8, Multilingual 64.7) locally with the official bf16 weights on vLLM + Spark-plugin, thinking=high, temperature=1.0, top_p=0.95, top_k=-1. Could you share the setup you used? 1. Agent scaffold and version (OpenHands, mini-swe-agent, SWE-agent, Claude Code, an in-house harness…) 2. Context window used during evaluation (128K, 256K, 1M?) and max output tokens per turn 3. Max steps / turns and any wall-clock timeout per task 4. Task set: the full public SWE-bench Pro set (731 tasks), Verified (500), Multilingual (300), or a subset? 5. Number of runs per task (pass@1 single run, or avg@k?) 6. Anti-hacking measures (network disabled, git history removed…) 7. For the starred Qwen3.5 numbers (SWE Verified 53.1 / 38.8, SWE Pro 33.8 / 29.4): which card or paper are they taken from? I couldn't find them on the Qwen3.5-9B / 4B model cards. Thanks a lot!
A BitNet in LiteRT file format would dominate the mobile device market. That would be the best offline privacy focused model about!

我以个人身份参赛,Hugging Face 账号为 [zixinli](https://huggingface.co/zixinli),GitHub 账号及公开署名为 [zjj20040618-sudo](https://github.com/zjj20040618-sudo)。 ## 作品与公益目的 通知小卡面向需要逐条阅读社区公告的居民,提供“直接看原文分段”和“AI 辅助改写”两个入口。它把通知按段排列,提供较大字号和原文对照,帮助读者核对登记时间、上课时间、人数及资格限制。 这是无障碍阅读与社区服务方向的原型。预期作用是方便核对,目前没有证据证明阅读速度或理解正确率已经提高。 ## Spark 在应用中的作用 本机运行 Spark 社区量化模型。模型接收完整通知及程序划分的原文单元,生成与单元 ID 对应的逐段改写。固定标题、原文引句、格式检查及页面展示由程序处理;“原文分段”不调用模型。 当程序无法确认某条改写保留了时间限定时,正文优先显示该条完整原文,并标注“采用原文 · 改写待核对”。模型原始改写保留在折叠区,检查原因和原始卡片也保留在处理记录中。告警可能来自同义表达变化,不能单凭提示认定模型事实错误。 ## 2026-10-24 实际图文演示 以下输入是项目构造的合成通知,不是真实机构公告: > 【合成通知】公益摄影课共有15个名额。11月2日9:00开始在社区服务台现场登记,按登记顺序安排,额满即止。课程11月9日14:00开始。登记成功后才能参加,请勿把登记开始时间当作上课时间。 实际操作过程为:输入通知 → 点击原文分段 → 对同一输入实际调用模型 → 展开原始改写及处理记录。运行名为 `live-20261024-100145-c3785dc0`,保存状态为 `complete / stop`。 该次运行记录耗时 **33.815 秒**;页面整次请求等待 **39.773 秒**,包含额外接口开销。两者不是同一计时范围,也不是阅读速度收益指标。 模型原始输出为: 1. 公益摄影课共有15个名额。 2. 11月2日9:00,在社区服务台现场登记。按登记顺序安排,名额满就停止登记。 3. 课程11月9日14:00开始。 4. 登记成功后才能参加。不要将登记开始时间当作上课时间。 第 2 条丢失了原文的“开始”。程序给出 `temporal_qualifier_unverified` 提示,页面实际优先展示对应完整原文,并允许展开上述原始改写。这里修正的是展示方式,**不能把程序采用原文记成模型自行改对**。第 1、3 条逐字复制原文。 下列五张图片均为实际浏览器页面直接截图,没有重绘,也没有另做视频: 1. **输入通知**:保留合成通知全文和两个处理入口。  2. **直接分段**:展示程序复制的原文片段,此步骤不调用模型。  3. **模型结果**:展示实际返回结果、时间限定提示和来源标记。  4. **来源与处理记录**:展开原始改写及该次输入、输出和运行记录。  5. **采用原文的条目细节**:同时展示完整原文、提示及保留的原始改写。  ## 模型来源与运行环境 - 模型项目:[XHToken/Spark-X2.6-4B](https://huggingface.co/XHToken/Spark-X2.6-4B)。实际使用 `bartowski/Spark-X2.6-4B-GGUF` 的 `Spark-X2.6-4B-IQ4_XS.gguf`,为社区 IQ4_XS 量化。 - [固定量化上传 revision](https://huggingface.co/bartowski/Spark-X2.6-4B-GGUF/commit/2f72ab291280b794cb26f81bd1bd214605e29e79):`2f72ab291280b794cb26f81bd1bd214605e29e79`。 - GGUF SHA256:`83a6ede7deb5a25617648cd289959c67ff8870bfc972274439f519c75bae1276`。 - 框架:llama.cpp `b11716`,commit `797de63b2fa7396dcc8caca76834c699ac84e1c3`,官方 Windows CPU 便携包。 - 环境:Windows 11 家庭版中文版 `10.0.26200`,Python `3.12.11`,Intel Core Ultra 9 185H,安装 RAM 32 GiB,系统可见物理内存约 31.61 GiB。 - 参数:CPU threads=2,GPU offload=0,context=2048,temperature=0,seed=42,最大输出800 tokens,reasoning off。进程提交内存上限为3.5 GiB,这不是机器总内存;2线程也不是CPU总核心数。 **量化实际使用的基础权重精确 revision 仍未知。**GGUF 的 `general.name` 为 Spark X2.6 4B,父模型元数据指向 Spark-X2.6-4B-Base。父模型谱系不能直接证明直接量化来源,不能用当前上游 commit 填补这一缺口,也不将该文件称为 XHToken 官方量化。核查记录见附件内 `candidate/MODEL-PROVENANCE-CHECK.json`。 ## 附件与复现 [下载复现源码、运行记录和五张原图(ZIP)](https://huggingface.co/datasets/zixinli/notice-card-submission-20261024/resolve/main/notice-card-submission-20261024-public.zip?download=true) - 文件大小:1,266,364 字节。 - SHA256:`78a717461d35749a74e46376933ff4d55da51ee16295a7cd97e0cbb71f6074ac`。 - 包含复现源码、固定下载脚本、软件检查素材、真实运行记录和上述五张原图;不包含模型权重、运行 EXE 或 DLL。 - 项目代码尚未选定通用开源许可,本附件不标称“已开源”。 在 Windows 上解压后,先读根目录 `PUBLIC-README.txt` 和 `submission-candidate/START.txt`。在包根目录执行: ```text python fetch_runtime.py cd submission-candidate python notice_app.py --minutes 30 ``` 下载脚本按固定来源和 SHA256 获取约2.36GB模型及运行包,已有通过校验的依赖会复用。运行前另保留2GiB磁盘,并保留运行包配套DLL。打开终端给出的本机地址即可使用。下载连接 GitHub 和 Hugging Face;推理在本机CPU执行。未验证其他电脑的兼容性或速度。 完整提示与该次请求可在附件内查阅: - `submission-candidate/generate_cards.py`:系统提示及请求生成逻辑。 - `submission-candidate/runs/live-20261024-100145-c3785dc0/system-prompt.txt`:该次系统提示原文。 - `submission-candidate/runs/live-20261024-100145-c3785dc0/notice/request.json`:该次完整 system/user 消息、输出格式约束及请求参数。 对应目录还保存原始模型响应、卡片、校验结果和源码快照;`MANIFEST.json` 提供逐文件散列及既有路径脱敏记录。输入限制为2000字、20个单元,并检查实际token预算;超限拒绝,不静默截断。 ## 观察与局限 旧固定版本实际生成6条合成通知、共22条正文;自动检查当时未报错,助手案头核对仍发现时间限定遗漏。22条正文中8条逐字复制原文,因此不能把检查通过或生成成功当成准确率及用户收益。 当前版本另保存图书交换通知的一次真实生成(`live-20261023-131617-070a5ddd`,31.089秒)和本次摄影课演示。两次各自保留记录,不并入旧6例,也不属于独立留出评测。 时间限定修订有38项软件检查,展示修订有8项使用最小DOM替身的组件检查;软件检查和存档回放没有增加模型样本数。本次五张截图是实际操作证据,不代表全面跨浏览器验证。 时间限定规则保守,可能误报;复杂条件、否定变化、未识别的时间写法和一般语义错误仍可能漏过。**尚无独立真人评测,也没有已证实的阅读收益。**原型不替代正式公告,具体安排仍应核对原始通知。 ## 个人贡献与 AI 辅助披露 本人提出需求和修改意见,确定原型及投稿推进方向。Codex 辅助完成资料整理、应用代码与测试、合成案例、文档、助手案头核对,以及实际页面操作和截图保存;不将助手检查计作真人用户研究,AI不计作真人参赛者。 应用运行时由上述 Spark 社区量化模型生成逐段改写。固定标题、原文复制、校验和展示由程序完成。全部演示通知均为项目构造的合成文本,不使用真实机构公告或私人数据。
## 2026-10-26 技术补充(同一作品) 本次补强继续保留原文与未经修补的模型输出,增加可复查的运行证据和实际阅读交互。旧版本与原投稿材料继续保留。 ### 实际使用与截图 - 新增逐条阅读、上一条/下一条、完整原文/完整列表切换、返回输入和本地保存阅读文本。每条注明“AI辅助改写”“原文”或“采用原文”,可展开核对原始改写。 - 手机375px宽、正文30px字号实际浏览器验收无横向溢出;工具栏已压缩,首屏可读到正文。截图来自真实运行,无界面重绘。 - 在原时间限定规则之外,新增数字出现次数与资格/否定/条件分句的保守检查。未确认的条目优先显示对应原文,程序不补写模型文本。提示可能误报,未提示也不保证语义正确。     ### 新固定合成集实跑 在推理前固定六份校园通知(涉及登记与上课时间、资格排除、容量/截止、明示相对日期、条件地点、未公布安排)和18道有原文依据的问题。六份均为AI助手构造并案头核对的合成材料,不是独立留出基准。 - 固定批次 `eval-20261026-090902`:6/6生成完成;31个原文单元中21个由产品优先回退显示原文。不能把这一比例当错误率或正确率。 - 本机chat-completions请求壁钟耗时25.835–36.540秒,中位数29.561秒;包含localhost HTTP、响应落盘和JSON解析,不含启动、权重校验与页面渲染。 - AI逐句案头核对未见明确关键事实冲突,但没有独立人工标签,因此不声称100%准确。部分保守提示来自正确同义表达,例如原文明示“明天=11月13日”,模型重复显式日期也会触发数字次数提示。 - 已知漏检:`15元→15人`数字相同,数字检查仍可能漏过。复杂语义关系、中文数字等仍需核对原文。 - 另外两次实际浏览器AI按钮生成单独存档,未混入上述六案。原始请求/响应、系统提示、源码快照、规则提示、进程退出记录均在包内。 - 26项Python检查、21项呈现/交互检查、12项对照页检查通过。59项是软件检查数,不是模型样本数或用户收益。 ### 匿名阅读对照材料已可用;真人结果仍为0 三种呈现为整段原文、程序分段原文和真实AI辅助小卡(含产品原文回退)。每人每篇只看一种,分配顺序平衡,选项随机化。可自愿退出、清空并主动下载本机JSON/CSV,不收姓名或联系方式,不自动回传。 离线页 `upgrade-20261026/study-offline.html` 可直接打开。汇总工具区分本人自报会话、助手试运行、退出与未完成,复核选项映射及得分,并排除冲突重复记录;不能凭匿名编号核实身份或独立人数。**目前没有真实参与者结果,尚无已证实的阅读收益。**助手试运行和软件检查不计入真人样本。  ### 复现、资源与模型来源 [下载2026-10-26补强公开包](https://huggingface.co/datasets/zixinli/notice-card-submission-20261024/resolve/f2a07d80a335c81a1d913b76d605515956dabf44/notice-card-upgrade-20261026-v2-public.zip?download=true),先读 `PUBLIC-README.txt` 和 `upgrade-20261026/START-20261026.txt`。 ZIP为2,189,969字节,SHA256:`0bac8f5376099800880258340f8bb4c08f00e166dad20f06048cada7c26cd423`。包内保留旧版和逐文件MANIFEST,不含权重、运行EXE/DLL或未完成下载。原始响应与源码快照散列已校验;本机绝对项目路径仅在打包副本中脱敏。 Windows x64 / Python3.12,固定llama.cpp b11716;CPU2线程、GPU0、上下文2048、最多600输出tokens。模型子进程提交内存上限3.5GiB;开始前检查物理/提交余量,运行中余量过低仅停止本任务模型进程。三次运行均有退出确认。未在其他电脑验证模型运行,也不保证内存保护能防止所有内存不足。 实际仍使用社区 `bartowski/Spark-X2.6-4B-GGUF` 的IQ4_XS:上传revision `2f72ab291280b794cb26f81bd1bd214605e29e79`,SHA256 `83a6ede7deb5a25617648cd289959c67ff8870bfc972274439f519c75bae1276`,每次启动前重新核验。**原始权重精确commit和直接转换记录仍未知。**新核查补存了官方卡及固定社区仓库的公开原文;Base父模型字段不能单独证明直接量化来源。官方Q4_K_M下载因实测带宽与有界时间未完成,未用于任何结果,不写成已经切换官方量化。 Codex辅助完成本轮代码、合成材料、测试、AI案头核对、实际浏览器操作与技术说明;不作为真人读者或参赛者。项目尚未选定通用开源许可,可下载源码不等于通用开源授权。此补充保留原投稿的全部局限与个人贡献披露。
## 操作录像与单位校验修订(2026-10-28) [观看/下载完整操作录像(4分37秒)](https://huggingface.co/datasets/zixinli/notice-card-submission-20261024/resolve/2012f0d8605994b8028c6388dbcb2a8e0cd900d2/notice-card-demo-20261027.mp4) [下载新版完整复现包](https://huggingface.co/datasets/zixinli/notice-card-submission-20261024/resolve/5423af1aa01da6b9dd776f50831805cc3d9eaf60/notice-card-unit-guard-20261028-public.zip?download=true) 录像展示通知输入、分段、一次真实 Spark 本机推理及完整等待、逐条阅读、原文核对、程序回退、文本保存与匿名体验入口,包含鼠标和点击高亮。录像录于10月27日,展示上一版应用;本次新增单位校验未出现在录像中。 10月28日修订补上了同一数字更换单位的漏检,例如“15元”被改成“15人”。新版对已覆盖的常见单位检查数值、单位、出现次数和费率分母;发现无法核验的一致性时,阅读正文优先显示对应原文,模型原始改写仍保留供核对。 验证结果:80项软件检查通过;20项独立手写行为用例中,17项范围内用例全部通过,另3项明确属于覆盖范围外。真实浏览器也核验了原文回退、原始改写保留、文本下载及375 CSS px视口/30 px字号;该新增缺陷回归使用手写模型响应,不算真实模型推理样本。已有6案31个源单元只做重新校验,回退仍为21处;本次修订没有新增模型调用。 复现包保留历史版本与原始运行记录,解压后从 `unit-guard-20261028/REVISION-README.txt` 开始。文件为2,713,318字节,SHA256:`30acdc5e483c8ec90bbc76203061c48b88addba8f7858441101258e0e0317d22`。 边界与披露:单位规则只覆盖有限常见写法,仍可能漏检或误报,不能保证全部语义正确。代码、测试、合成材料与录制由Codex协助完成;录像由助手操作,通知内容和旁白为合成,手机画面为浏览器视口模拟。没有新增真人参与者,也没有真人理解或阅读耗时收益结论。模型配置、来源局限及其他披露沿用原帖与上一条技术补充。
![#14 [HER Hack-Astron # 7] [公益应用] 通知小卡:保留原文的社区通知阅读原型 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-14-c0bfd123834b477ebf8b5278.jpg)
Project name and track Project: Aegis-Her (芳盾·微光) Primary track: Maternal-health and crisis-information accessibility Supporting capabilities: privacy protection, public-service accessibility, and gender-safe policy review Who this helps and what problem it solves Frontline workers and displaced women may receive urgent information in dense, unfamiliar, or mixed-language text. Aegis-Her converts a redacted notice into a cautious action plan: plain-language meaning, urgent actions, ordinary next steps, documents, deadlines, uncertainties, and a mandatory human-review instruction. The system redacts common phone, email, and government-ID patterns before inference. It never diagnoses, determines eligibility, ranks people, or replaces emergency services or qualified professionals. How Spark-X2.6-4B is used Model: XHToken/Spark-X2.6-4B Exact revision: 66e3ae7bee54e0a523d692cb8ef841f35409807b Role: multilingual notice-to-structured-action transformation using a strict JSON schema Runtime: Transformers 4.57.1, PyTorch 2.11.0+cu130, Tesla T4, torch.bfloat16 Generation: thinking disabled, deterministic decoding, maximum output 600 tokens Replay mode is only a clearly labelled UI test. Every screenshot presented as model evidence will be captured from live Spark-X2.6-4B output. Demo Live interface: https://civicclear-ai.blondharp2.chatgpt.site Source: https://github.com/nithin-builds/civicclear-ai Illustrated walkthrough  Actual input: 社区诊所通知:孕妇若出现严重头痛、视力模糊、上腹疼痛或面部突然肿胀,应立即联系急诊服务。预约咨询电话 [PHONE-REDACTED],患者身份证 [ID-REDACTED]。 Actual output: The model returned valid JSON in 7.26 seconds, correctly identifying the four warning signs and the urgent instruction to contact emergency services. The complete unedited evidence is published in aegis_her_evidence.json. How to reproduce python3 aegis_her_app.py --test ollama run SparkLLM/Spark-X2.6-4B python3 aegis_her_app.py Open dist/index.html, select Live Spark, choose a scenario, and run the analysis. The service also exposes POST http://127.0.0.1:8088/v1/analyze. Hardware: NVIDIA Tesla T4 Precision: torch.bfloat16 Results and limitations Ten deterministic tests cover redaction, schema validation, replay labelling, prompt boundaries, and empty-input rejection. They do not claim model quality. An N=32 evaluation protocol is included, but no numerical result is claimed until raw outputs and human labels are complete. Current limitations include incomplete PII-pattern coverage, text-only input, dependence on local runtime configuration, and the possibility of incorrect or incomplete model output. Consequential decisions always require human verification. Contributors and disclosure Individual contributor: nithin-builds Contribution: product concept, acceptance decisions, testing and final evidence verification AI-assisted development: AI assisted with implementation, UI and documentation. The human contributor verifies the actual model run and submission evidence. Data: synthetic scenarios only; no personal data.
![#15 [HER Hack-Astron #7] [Open Source AI for Good] Aegis-Her (芳盾·微光) 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-15-16f7612a95ccd785dbb1ee9d.jpg)
## Project name and track **Notice Reader — Accessibility.** ## Who this helps and what problem it solves Notice Reader is intended for adults who find dense community notices difficult to read. A library membership notice, a bus-stop change or a community event can put several conditions into one paragraph. The application turns that paragraph into a heading and short bullet points, offers larger text, and keeps the original available for comparison. The intended benefit is easier access to everyday community information on a computer that can run the model locally. ## How Spark-X2.6-4B is used Spark-X2.6-4B generates the rewritten notice. A separate numeric-token comparison flags missing or new numbers. The browser interface and Python server run locally; no hosted inference service is used. Model: https://huggingface.co/XHToken/Spark-X2.6-4B Revision: `66e3ae7bee54e0a523d692cb8ef841f35409807b` Runtime: https://github.com/XHToken/Spark-MLX-LLM at `d7bffc415962d714c4ccfb4bea987de5c8ee7fa8`. ## Illustrated demo The screenshots below show the running local application using the pinned model, captured on 23 October 2026. The inputs are fictional community notices. 1. Select the repair-cafe example or paste a notice. 2. Press **Make it easier to read**. The local model returns the rewrite. 3. Use **Larger text** and **Compare with the original** to read and check it.  The library example demonstrates larger text with its original expanded for comparison.  At a 390-pixel browser viewport, the panels stack vertically and the result stays within the page width.  Actual input: ```text The Riverside Library repair cafe takes place on Saturday 31 October from 10:00 to 13:00. Bring one small electrical item. Repairs are free. Please book a slot by calling 01632 960123. Step-free access is available through the garden entrance. ``` Actual model output shown in the browser: ```text Riverside Library Repair Cafe - Saturday 31 October, 10:00 to 13:00 - Bring one small electrical item - Repairs are free - Book a slot by calling 01632 960123 - Step-free access is available through the garden entrance ``` ## How to reproduce [Source code and evaluation records](https://github.com/soundcake/spark-notice-reader-bounty-20261023). The project contains `notice_reader.py`, `index.html`, pinned `requirements.txt`, download/qualification and evaluation scripts, tests, and exact recorded inputs and outputs. ```sh python3.12 -m venv .venv .venv/bin/python -m pip install -r requirements.txt HF_HOME="$PWD/hf-cache" HF_HUB_DISABLE_TELEMETRY=1 .venv/bin/python qualify_runtime.py .venv/bin/python notice_reader.py ``` Open `http://127.0.0.1:8765`. While the server is running, run `.venv/bin/python evaluate_model.py` to record the three example requests. Run `.venv/bin/python -m unittest -v test_reader.py` for the HTTP boundary tests. Recorded environment: Apple M4 Pro, 24 GiB memory, macOS 26.3, Python 3.12.14, MLX 0.32.4 and mlx-lm 0.31.3. The model uses BF16 on the GPU without quantization. Sampling uses temperature 0, seed 0 and thinking disabled. The app accepts up to 4,000 characters and generates at most 512 tokens. It rejects truncated generation and asks for a shorter section. The exact prompt is `SYSTEM_PROMPT` in `notice_reader.py`: rewrite in plain English using a short heading and hyphen bullets, preserve dates, times, costs, contact numbers, conditions and access details, and add no new facts. The source is delimited as notice data. ## Results and limitations Three original synthetic examples were run through the actual application and pinned checkpoint. Exact inputs, outputs and settings are included in `evaluation.json`. | Example | Source / output words | Generation time | | --- | --- | --- | | repair | 39 / 38 | 4.38 s | | library | 58 / 64 | 4.00 s | | bus | 55 / 61 | 3.71 s | Comparison against the 24 listed source facts found them represented in the three outputs. The numeric checker reported no added or missing numeric tokens in these examples. Five separate automated tests passed for HTTP handling, Unicode, numeric differences and output-limit handling; those tests use a stub model. Browser checks exercised two real model examples, larger text, source comparison, empty-input handling and the 390-pixel layout. Changing the source clears the previous result, and the source controls remain disabled while a rewrite is running. A fourth actual request used a 3,447-character synthetic notice listing 30 events. It reached the output limit; the application returned HTTP 422 after 23.35 seconds with a request for a shorter section and did not return partial notice text. The exact request and response are in `limit-evaluation.json`. The library and bus examples mainly converted the original sentences into bullets and became longer. The numeric check cannot establish semantic equivalence or detect every error. The results do not establish improved reading comprehension. The current runtime requires Apple Silicon and enough memory for the roughly 8.3 GB original checkpoint. The interface currently handles English text. ## Contributors and disclosure Individual entry: [jollysoundcake1](https://huggingface.co/jollysoundcake1) · GitHub: [soundcake](https://github.com/soundcake). Codex was used to implement the application, tests and documentation and to run the recorded evaluations. Spark-X2.6-4B generates the demonstrated notice rewrites. The application uses no other inference service. All example notices were created for this demonstration and describe fictional events or services. The model, Spark-MLX-LLM, MLX, mlx-lm, Transformers and other pinned dependencies are acknowledged in the setup files and retain their respective licenses. The model is Apache-2.0.
![#17 [HER Hack-Astron # 7] Notice Reader — local community notices in plain English 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-17-0cc1e3b95b7f7f01a7b6f045.jpg)
## Project name and track
Project name: **PlainLetter**
Track: **Health and well-being** + **Accessibility**
## Who this helps and what problem it solves
Target users: people who get official letters they can't easily read or act on: older adults, people with limited literacy or limited English, people with cognitive or visual disabilities, patients and caregivers under stress, and the community health workers, benefits navigators and librarians who help them.
Concrete scenario and problem: a hospital bill threatens collections in 120 days but buries a financial-assistance option in the fine print; an insurance denial gives 180 days to appeal and a 14-day window for a peer-to-peer review; a food-benefits notice says benefits stop "without further notice" if a form and a phone interview are missed. These letters read at a college level (our three samples score Flesch-Kincaid grade 12.0–12.8), and they are full of private health and money details that people shouldn't have to paste into a cloud chatbot.
Expected public benefit: fewer missed deadlines, appeals and assistance programs; people know who to call and what to say. Because the model runs locally, it can be used on a library or clinic computer, or on a personal laptop, with no account, no internet and no data leaving the machine.
## How Spark-X2.6-4B is used
Model source and revision: `SparkLLM/Spark-X2.6-4B` via Ollama (BF16, Ollama digest `44ca4d700630e9a402cb439007132da135b2ca5329985b7f8944d04b7d59f43a`); upstream Hugging Face `XHToken/Spark-X2.6-4B` at revision `66e3ae7bee54e0a523d692cb8ef841f35409807b`.
The model's role in the application: Spark-X2.6-4B does all of the language work, in two calls per letter:
1. **Explain**: reads the letter and fills a JSON schema (Ollama structured output): letter type, sender, key amount, plain-language summary, actions (most urgent first), deadlines each with an exact quote from the letter, contacts, rights/help mentioned, questions to ask, and a short reply/appeal draft (optionally tailored with a "your situation" note). Works in English, Spanish or Simplified Chinese.
2. **Simplify**: rewrites only the summary for a 6th-grade reader (≤12 words per sentence, numbers kept exactly).
Deterministic Python checks then ground the answer against the letter, shown as ✓/⚠ badges: deadline quotes must appear word-for-word, phone digits must appear in the letter, every explicit date is found by regex and unused ones are listed, "within N days of this notice" rules are converted to calendar dates from the letter's own date (but not rules counted from some other date), past dates are flagged, and Flesch-Kincaid grade is measured. If the simplify step introduces a number that is not in the letter, the first draft is kept.
Other models, tools, or services used, if any: no other model and no cloud service. Ollama (runtime), Python standard library, optional Tesseract for offline photo-to-text, browser speech synthesis for "Read aloud".
## Demo (required: video OR illustrated walkthrough)
Video link / embedded screenshots: illustrated walkthrough below; every result shown is real Spark-X2.6-4B output from the run, and the JSON each screenshot's run returned is saved next to it.
1. **Start screen.** Paste a letter (or read a photo), add an optional note, pick a language. The banner confirms the model is local: `SparkLLM/Spark-X2.6-4B · 4.1B · BF16`.

2. **Running locally.** The letter is processed on the laptop; the timer shows elapsed seconds (about 3–4 minutes on an M1 with BF16).

3. **Hospital bill → plain language.** Summary at about grade 5 (the letter is grade 12), what to do, deadlines with quotes from the letter, one number to call, and a reply asking about a payment plan and financial assistance.

4. **Insurance denial → deadlines** (run with the note "My back pain is getting worse and I want to appeal."). "Within 180 calendar days" becomes about March 28, 2027; the 14-day peer-to-peer window becomes October 13, 2026 and is flagged *may have passed*. Each deadline shows its exact quote with a ✓ found-in-letter badge.

5. **Food benefits renewal → who to call + reply.** Caseworker, fax and State Hearings Office numbers (all ✓ in letter), and a reply draft with [brackets] for what only the reader knows.

6. **Accessibility.** Phone-width layout, Bigger text, and the same benefits letter explained in Spanish, with Spanish headings (Read aloud and Print buttons at the top).
  
Example input (synthetic, excerpt of sample 02):
> NOTICE OF ADVERSE BENEFIT DETERMINATION … the clinical criteria in Northstar Medical Policy MP-RAD-014 … were not met … Your appeal must be received within 180 calendar days from the date of this notice … Your provider may also request a peer-to-peer discussion with our medical director by calling (555) 010-7790 within 14 calendar days of this notice.
Application workflow and actual output (Spark-X2.6-4B, sample 02, after the simplify step):
> - Northstar Health Plan denied your MRI of the lumbar spine without contrast.
> - You can still get the service.
> - But the plan will not cover the cost without an approved authorization.
> - You must submit your standard appeal within 180 calendar days.
> - Or request an expedited appeal if your condition is urgent.
>
> **Deadline:** within 180 calendar days from the date of this notice → about **March 28, 2027** (computed by PlainLetter from the letter date) — “Your appeal must be received within 180 calendar days from the date of this notice.” ✓ found in letter
Full outputs for all three letters (Markdown + JSON with raw model output, checks and timings) are in `outputs/` of the project.
## How to reproduce
Code repository or runnable example, if available: https://github.com/RostyslavDzhohola/plainletter. Pure Python standard library, no `pip install` needed.
Setup and run instructions:
```bash
ollama pull SparkLLM/Spark-X2.6-4B # Ollama v0.34.1+, ~8.2 GB BF16
cd plainletter
python3 -m plainletter info # model, precision, digest
python3 -m plainletter serve # http://127.0.0.1:8765
python3 -m plainletter samples/02-insurance-denial.txt # CLI
python3 scripts/run_samples.py # regenerate outputs/
```
Runtime and versions: Ollama 0.40.6, Python 3.11.1, macOS 27.0.1.
Hardware and precision/quantization: Apple M1, 16 GB unified memory; BF16 (no quantization), 4.1B parameters, context window set to 8,192 tokens. Observed 6.6–6.8 output tokens/s, 179–248 s per letter (two model calls, ~1,100–1,600 output tokens).
Key prompts and inference settings: `temperature 0.2`, `top_p 0.95`, `top_k 0`, `seed 7`, `num_ctx 8192`, `num_predict 2048`, `think: false`, `format: <JSON schema>`. The system prompt tells the model to use only facts in the letter, never invent dates/amounts/phones, write at about a 6th-grade level, copy numbers exactly, give an exact quote for each deadline, put relative deadlines in a `rule` field instead of guessing a date, and not give legal or medical advice; it includes one short plain-language style example. Full prompts, schema and settings are in `plainletter/core.py` and `outputs/run-metadata.json`.
## Results and limitations
Observed results and how they were evaluated: 3 synthetic letters (hospital bill, insurance prior-authorization denial, food-benefits recertification), one run each with the final prompt. Measured by PlainLetter's deterministic checks plus a line-by-line read of each output against its letter:
- Reading level of the summary: grade 4.8 / 6.5 / 4.2 (letters: 12.0 / 12.0 / 12.8). The simplify step brought them down from 7.4 / 11.7 / 9.9.
- Deadline quotes found word-for-word in the letter: 3/3, 2/2, 5/5. Phone numbers found in the letter: 1/1, 4/4, 3/3. No invented numbers.
- All explicit due dates were found; relative deadlines were converted correctly (Mar 28, 2027; Oct 13, 2026; Nov 2, 2026), and rules counted from dates not in the letter were correctly left as rules.
- Prompt iteration on the same letters: the first prompt produced long, grade 9–10 copies of the letter (1,689 tokens, 273 s for the bill); one intermediate run returned no actions for the bill, fixed with `minItems` in the schema.
- Re-running sample 02 through the CLI later with the same seed and settings gave a byte-identical model answer.
- An independent AI code review (OpenAI Codex) found 8 bugs in the first version of the checks/CLI/server (e.g. a computed deadline could follow the model's paraphrase instead of the letter's quote; "30 days of receipt" was counted from the letter date). All were fixed and the checks re-applied to the same saved model answers; no deadline in the samples changed.
This is a 3-letter demo, not a benchmark; it shows the workflow works, not its error rate on real letters.
Failure cases and current limitations:
- Wrong actor: in the denial, the model tells the member to request the peer-to-peer call; the letter says the *provider* may request it.
- Imprecise wording: "They did not have your required therapy … records" (the letter says only ~3 of 6 required weeks were documented); "If you miss the call, contact your worker before 11/18" (should be "if you can't make the call").
- The hospital bill lists only one action; "apply for financial assistance" and "ask for an itemized bill" appear only under rights.
- Spanish (1 run on the benefits letter): dates, numbers, 5/5 deadline quotes and 3/3 phones verified, but it contains a non-word ("reserguar" for *reprogramar*), mixes tú/usted, and has one ungrammatical sentence and a stray English word. Needs review by a Spanish speaker.
- With Spanish/Chinese output the headings are translated, but small badges ("found in letter", "URGENT") are still English; quotes stay in the letter's language on purpose.
- Reply drafts need editing (e.g., "Dear [Patient Name]").
- Some jargon survives ("first post-discharge billing statement").
- Slow on a 2020 M1 laptop: ~3–4 minutes per letter in BF16. Quantized builds not tested.
- Flesch-Kincaid is a heuristic and is not computed for Spanish/Chinese; Chinese output and real scanned letters were not evaluated.
- Application boundary: PlainLetter is a reading aid. It does not decide whether a bill is right, whether someone qualifies, or what to do medically or legally. The app says so on every screen and in every report, and tells people to confirm with the sender, a benefits counselor, patient advocate or legal aid before acting; for urgent health needs, use the plan's expedited line or a clinician, and emergency services in an emergency.
## Contributors and disclosure
Individual / team: individual — Ros Dzhohola.
Contributor profiles and respective contributions: Ros Dzhohola (https://github.com/RostyslavDzhohola / https://huggingface.co (dg1h1t95)): concept, direction and submission.
AI-assisted development disclosure: the code, synthetic sample letters and documentation were written by an AI coding agent (Claude by Anthropic, in Claude Code) working for Ros Dzhohola; the screenshots were captured by another AI agent (OpenAI Codex) driving a headless browser; a Codex agent also reviewed the code. No AI persona is presented as a human participant. All model outputs shown were generated by Spark-X2.6-4B running locally.
Data sources and authorization, if applicable: no real letters or personal data. The three sample letters are synthetic and written for this project (fictional names, account numbers and 555-01xx phone numbers). Dependencies: Spark-X2.6-4B (Apache-2.0), Ollama, Python standard library, optional Tesseract OCR (Apache-2.0). Project license: MIT.
## 作品名稱與方向
易讀橋 PlainBridge;無障礙/社區資訊閱讀。
## 服務對象與解決的問題
預期服務對象是閱讀繁體中文長公告有困難的社區居民。日期、報名截止、改期、費用上限與「暫定」常混在長句中;本原型保留原文,另列短句重點、待辦、逐字引文及未確定資訊,讓讀者有線索回頭核對。這是設計目標,目前沒有目標使用者研究證明理解程度提高。
## Spark-X2.6-4B 使用說明
原模型 XHToken/Spark-X2.6-4B revision `66e3ae7bee54e0a523d692cb8ef841f35409807b`。實際使用官方GGUF repo revision `83b47fda018fd14f51aa63341f78266f628af5a5`、Q4_K_M,SHA256 `91cb2811aebb47ac916aa619d27d4cdd7f4143106b7917accb8ead4cd7f5cbd9`。
Spark實際處理每次使用者通知,生成title/summary/actions/facts/uncertain結構。Python只做結構、連續引文及數字檢查,不會代寫或修飾模型回答;無固定答案fallback。應用推論未使用其他模型或付費API。建置、測試與第二審使用Codex AI代理,見後述披露。
## Demo — 真實運行圖文示範
1. 開啟本機程式,選「日期未公告」;以下為重新載入相同合成輸入的初始狀態。

2. 按整理,真實Spark推論16.099秒後顯示下列結果,沒有改寫模型輸出。

3. 可切換大字與下載原始JSON。

[原始模型回應與運行紀錄](https://agent-research-receipts-oct2026.swift-pony-2961.chatgpt.site/plainbridge/browser-demo-output.json) · [完整作品頁](https://agent-research-receipts-oct2026.swift-pony-2961.chatgpt.site/plainbridge/)
示例輸入(原創虛構通知):
「【虛構範例:社區手作課】手作課尚未確定開課日期。名額為15人,材料費暫定為100元,最終費用以開課公告為準。目前不接受報名,也不收取訂金。候補方式與上課地點尚未公告,請等候後續通知。」
操作:啟動兩個本機服務,在http://127.0.0.1:8762選「日期未公告」,按「整理成易讀重點」。真實HTTP輸出完整保存在evidence/browser-demo-output.json;以下是該次未修改的結構化內容:
```json
{
"title": "社區手作課",
"summary": [
"手作課尚未確定開課日期。",
"名額為15人,材料費暫定為100元,最終費用以開課公告為準。",
"目前不接受報名,也不收取訂金。",
"候補方式與上課地點尚未公告,請等候後續通知。"
],
"actions": [],
"facts": [
{
"label": "開課日期狀態",
"value": "手作課尚未確定開課日期。",
"evidence": "手作課尚未確定開課日期。"
},
{
"label": "名額",
"value": "名額為15人",
"evidence": "名額為15人"
},
{
"label": "材料費",
"value": "材料費暫定為100元,最終費用以開課公告為準",
"evidence": "材料費暫定為100元,最終費用以開課公告為準。"
},
{
"label": "報名與訂金狀態",
"value": "目前不接受報名,也不收取訂金",
"evidence": "目前不接受報名,也不收取訂金。"
},
{
"label": "候補方式與上課地點狀態",
"value": "候補方式與上課地點尚未公告,請等候後續通知",
"evidence": "候補方式與上課地點尚未公告,請等候後續通知。"
}
],
"uncertain": [
"開課日期",
"最終費用",
"候補方式",
"上課地點"
]
}
```
## 復現方式
[MIT原始碼與完整測試證據ZIP](https://agent-research-receipts-oct2026.swift-pony-2961.chatgpt.site/plainbridge/plainbridge-source.zip) · [README](https://agent-research-receipts-oct2026.swift-pony-2961.chatgpt.site/plainbridge/README.md) · [逐檔SHA256](https://agent-research-receipts-oct2026.swift-pony-2961.chatgpt.site/plainbridge/source-manifest.json)
Python3.12+、macOS arm64,執行`python3 setup_runtime.py`驗證下載;`sh start_model.sh`,另一終端`python3 app.py`,開啟本機8762埠。模型只綁定loopback,使用本機獨立金鑰;不需要輸入平台或雲端模型API金鑰。
實測Apple M5、16GiB RAM;llama.cpp b11669/commit620d2225c、Q4_K_M、ctx4096、threads4、parallel1、batch/ubatch256、gpu_layers99。原生chat template、reasoning off。temperature0、seed20261027、max_tokens1200、JSON schema。完整prompt/schema/參數在app.py及evidence/v2/protocol.json;版本、下載hash與完整步驟在README。
## 效果與局限
8項本機單元測試通過;7個合成通知完成兩輪真實模型推論。v1的引文/數字檢查6/7,AI語意第二審5/7;發現日期主要值省略「預計」、交通補助摘要省略「經審核」。我們保留原始失敗,提示v2要求限定詞及逐字value,並提高輸出上限。相同7案重測的機械檢查與整份輸出AI語意複核均7/7。這是已知案例回歸測試,不能當一般準確率、盲測、真人評估或可用性證明;摘要獨立閱讀仍可能省略條件。
v2七次推論耗時範圍12.36–23.86秒(單次本機開發測試,非效能基準)。
規則檢查不能證明完整語意正確,也不能可靠偵測所有日期角色調換、限制遺漏、否定誤解或提示注入。未公告資料保持未知,不應憑電腦日期推算未錨定的「下週一」。不是官方通知、醫療/法律/緊急決策工具;請核對原文。大字、鍵盤操作與標籤有實作,但未做目標族群研究或螢幕閱讀器評估。
## 貢獻者與披露
個人作品,帳戶所有人公開別名ChillG(https://github.com/eric0219c)。帳戶所有人授權AI代理進行製作與投稿;不聲稱本人逐行撰寫或人工驗證。Codex代理產生程式、合成測例、文件及測試;另一AI代理做規則與語意複核。代理是工具,不列為真人參賽者。應用展示輸出只來自Spark,原始回答未改寫。
全部內建與評估資料為本專案原創合成通知;無真實個資。程式MIT;官方模型Apache-2.0,llama.cpp MIT,權重及二進位不隨原始碼包重新散布。
把這七案標成回歸測試,而不是一般準確率,這個區分很有幫助。
![#19 [HER Hack-Astron # 7] [Open Source AI for Good] 易讀橋 PlainBridge 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-19-60e576e823b25ae5b6683c62.jpg)
Project name and track|作品名称与赛道 NoticeClear|明白通知 — 本地公共服务通知通俗化与原文对照助手。 Track: Accessibility / Public-service information access(无障碍与公共服务信息获取)。 Open-source repository: https://github.com/qweerdad/NoticeClear-Spark-X2.6 Positioning: An experimental, human-reviewed reading aid — not an autonomous public-service notice or fact-verification system. / 仅供理解通知的辅助草稿,请对照原文核实。 Who this helps and what problem it solves|服务对象与问题 面向阅读复杂通知有困难的社区居民,以及协助他们理解通知、逐项核对信息的志愿者。公共服务通知可能在长段文字中穿插适用对象、办理事项、时间地点、费用、否定条件和例外;误读这些条件会影响实际行动。 NoticeClear让用户粘贴不超过1500字符的通知,由 Spark-X2.6-4B 生成六栏通俗化草稿,页面始终保留原文,并提醒用户核对日期、地点、金额、否定和例外信息。它探索一种低成本、离线本地推理的阅读辅助方式;尚未开展真实老年用户试验,也没有证据证明它改善了真实人群的理解水平。 How Spark-X2.6-4B is used|模型的实际作用 模型不是占位符:点击“生成改写草稿”会通过本地Ollama API调用真实的 Spark-X2.6-4B Q4_K_M GGUF,生成一句话摘要、适用对象、需要做的事、时间地点、已知例外和缺失/冲突信息。应用负责输入边界、展示、导出和错误处理,不把程序格式成功当作事实正确性证明。 Base model: XHToken/Spark-X2.6-4B, revision 66e3ae7bee54e0a523d692cb8ef841f35409807b. Official GGUF: XHToken/Spark-X2.6-4B-GGUF, revision 83b47fda018fd14f51aa63341f78266f628af5a5. 量化文件:Spark-X2.6-4B-Q4_K_M.gguf;SHA-256:91cb2811aebb47ac916aa619d27d4cdd7f4143106b7917accb8ead4cd7f5cbd9。下载时使用官方XHToken ModelScope镜像,并与固定HF文件哈希核对。 Runtime: Windows 11; Python 3.11; Ollama 0.40.11; Streamlit 1.37.1; requests 2.32.3. 真实推理在CPU上完成,num_gpu=0,未使用GPU;测试机器装有RTX A4000,但该模型运行未使用它。 Request settings: num_ctx=4096, num_predict=768, temperature=0, seed=42, think=false, num_gpu=0, keep_alive=10m,单并发。系统提示与结构化输出模式见开源代码 noticeclear.py。 无训练、微调、联网检索、外部推理API或公网服务部署。 Illustrated demo|真实图文演示 以下均为实际本地运行截图,不是概念效果图。请在HF编辑器对应位置上传/插入仓库中的真实图片;发布前确保图片真实嵌入并在预览中显示。 1. 研究原型与安全提示  界面提醒用户:自动改写可能遗漏事实、误分例外或推断对象,不适合无人复核的真实公共服务。 2. 粘贴通知,生成并对照 示例输入(自编,非真实公告): 【自编演示通知,非真实公告】社区便民服务中心将开展适老手机使用辅导。居民需携带本人手机,活动免费。具体日期、地点和报名方式另行通知。 真实CPU推理耗时 16.34秒,摘要为: 社区便民服务中心将开展免费适老手机使用辅导,具体安排另行通知。 该次草稿保留了免费、携带本人手机等条件,并将日期、地点和报名方式列为未公布。这个例子仅是局部成功演示,不能代表模型整体可靠。  3. 人工核对后导出 用户可以在下载前查看和编辑原文及草稿副本、处理个人信息。人工勾选代表用户已执行检查,不意味着系统完成自动事实核验。  4. 保留真实失败案例 另一条自编通知要求“志愿者自带水杯,垃圾袋由社区提供”。最终版本在 29.16秒 的真实调用中漏掉“垃圾袋由社区提供”,并未手工修补模型输出。这说明仅凭摘要流畅或栏目齐全,不能保证事实完整。   成功案例的真实JSON导出、失败摘录以及图文步骤详见仓库 DEMO.md。B2截图展示冻结的真实推理;B3仅调整提示文案和错误导出,不将旧结果伪装成新推理。 How to reproduce|复现方式 Source code: https://github.com/qweerdad/NoticeClear-Spark-X2.6 Windows PowerShell(在仓库根目录,使用Python 3.11): py -3.11 -m venv .venv .\.venv\Scripts\python.exe -m pip install pip==25.2 .\.venv\Scripts\python.exe -m pip install -r requirements-lock.txt 按仓库 README.md 获取 Ollama 0.40.11 portable 和指定的官方 GGUF 文件;验证模型SHA-256,分别放置于说明中的 preflight/runtime/ollama/ 和 preflight/runtime/,不要下载或使用未知替代文件。运行模型服务后创建本地模型并启动界面: # 终端一 .\preflight\start-ollama.ps1 # 终端二(首次需要create;已有同名模型可跳过) $env:OLLAMA_HOST = '127.0.0.1:11439' $env:OLLAMA_MODELS = Join-Path (Get-Location) 'preflight\runtime\models' & .\preflight\runtime\ollama\ollama.exe create spark-x26-preflight:q4km -f .\preflight\Modelfile .\Start-NoticeClear.ps1 访问 http://127.0.0.1:8501/(仅本机地址,不是公开在线Demo)。源码仓库不包含模型权重、便携运行时或Python虚拟环境。可以运行 python -m unittest discover -s tests -v(在项目独立venv中)复核程序测试。精确版本及哈希见 MODEL_PROVENANCE.md。 Results, evaluation and limitations|结果与局限 使用 12条自编通知(4条预审样本+8条新增)构建了57项复合事实检查清单,进行了三轮Prompt版本、36次真实模型推理。自动化工具辅助整理和语义评阅,关键失败案例经过复核;这属于开发集内部评估,并非独立人工盲评或真实用户测试。 Version Facts retained (development checklist) Fully covered samples Correct exception-column coverage b2-v1 54/57 9/12 5/9 b2-v2 55/57 10/12 2/9 b2-v3 (frozen) 53/57 8/12 8/9 53/57不是模型准确率;8/12不是部署成功率。 后续Prompt调整改善了部分例外栏目归类,却未稳定改善整体事实保留。最终12次CPU调用 17.61–41.79秒,中位 28.46秒;36次HTTP成功仅表示推理接口返回成功,不代表输出语义全部通过。 已观察到的失败包括:检修原因遗漏、还书日期在摘要中出现“当日”指代歧义、清洁物资遗漏、1500字符压力样本中遗漏免费及“不需要身份证”、已知条件错误归入缺失栏,以及未明示对象的推断。两条夹带指令样本没有使模型执行其中要求,但不能据此宣称抵御所有提示注入。 目前的使用边界: 这是需要人工与原文逐项核对的研究原型,不适合直接用于无人复核的公共服务发布、资格判断或重要决策。没有开展真实老年用户可读性研究、独立测试集验证、跨硬件实验或实际公益效果评估。 完整评测口径、失败案例及程序测试说明见 EVALUATION.md。 Contributors, AI disclosure and licensing|贡献者、AI协作与许可 Individual entry / 个人参赛者: qweerdad。 AI-assisted development disclosure: 本人负责选题、需求约束、结果审查与最终发布;OpenAI Codex辅助完成环境配置、代码实现、测试和交付材料整理。AI辅助工具不作为真人参赛队员;Demo截图与模型输出均来自真实运行,未用手工编造答案替代。 Data and licensing: 通知测试文本均为自编样本并注明不是实际公告,未收集真实受试者数据。自有源码以 MIT License 开源,Copyright (c) 2026 qweerdad。测试样本及截图允许在公开仓库展示,但并未自动随源码MIT授权他人再利用;第三方模型、运行时与依赖各遵循自身许可证,见 THIRD_PARTY_NOTICES.md。 Additional cost: 没有新增付费云资源,既有AI订阅及设备成本未另行核算;真人活跃工时未精确测量。 ⋮⋮⋮⋮
![#20 [HER Hack-Astron # 7] [Accessibility] NoticeClear 明白通知 — Public Notice Reading Assistant 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-20-405b59565010c17872e16e9d.jpg)
Hi SparkLLM team, thanks for releasing Spark-X2.6-4B and for the detailed answer on τ³-Banking in discussion #4. It made that number reproducible. I'm trying to reproduce the SWE-bench results (Pro 54.3, Verified 62.8, Multilingual 64.7) locally with the official bf16 weights on vLLM + Spark-plugin, thinking=high, temperature=1.0, top_p=0.95, top_k=-1. Could you share the setup you used? Agent scaffold and version (OpenHands, mini-swe-agent, SWE-agent, Claude Code, an in-house harness…) Context window used during evaluation (128K, 256K, 1M?) and max output tokens per turn Max steps / turns and any wall-clock timeout per task Task set: the full public SWE-bench Pro set (731 tasks), Verified (500), Multilingual (300), or a subset? Number of runs per task (pass@1 single run, or avg@k?) Anti-hacking measures (network disabled, git history removed…) For the starred Qwen3.5 numbers (SWE Verified 53.1 / 38.8, SWE Pro 33.8 / 29.4): which card or paper are they taken from? I couldn't find them on the Qwen3.5-9B / 4B model cards. Thanks a lot!
Hi @devzhr, thanks for your interest in reproducing our results! Below are the evaluation details for each benchmark. ### SWE-bench Pro — 54.3 - **Agent scaffold:** Claude Code v2.1.197 - **Context window:** 1M - **Maximum turns:** 250 - **Evaluation metric:** pass@1 - **Task count:** Full 731 tasks Pro set - **Per-task timeout:** None configured - **Anti-hacking measures:** Git history removed; network blocklist covering GitHub-related domains. ### SWE-bench Verified — 62.8 - **Agent scaffold:** Claude Code v2.1.227 - **Context window:** 256K - **Maximum turns:** 250 - **Evaluation metric:** pass@1 - **Task count:** Full 500-task Verified set - **Anti-hacking measures:** Git history removed; network allowlist; tool and package blocklists. ### SWE-bench Multilingual — 64.7 - **Agent scaffold:** Claude Code v2.1.227 - **Context window:** 256K - **Maximum turns:** 250 - **Evaluation metric:** pass@1 - **Task count:** Full 300-task Multilingual set - **Anti-hacking measures:** Git history removed. ### Source of the Qwen3.5 results The starred **Qwen3.5-9B / 4B** results were taken from the **Nanbeige4.2-3B report** and are also listed in its [model card](https://huggingface.co/Nanbeige/Nanbeige4.2-3B#general-and-agentic-capabilities).

Hi XHToken team, thanks for Spark-X2.6! I've added Spark-X2.6-4B support to [cortiq](https://github.com/infosave2007/cmf), a Rust inference engine with no Python and no ML framework, and published the converted weights as single CMF files: https://huggingface.co/infosave/Spark-X2.6-4B-cmf The whole architecture runs natively: 9 full-attention + 27 sliding-window (512) layers, exact-GELU FFN, tied head, 1M-token context, thinking mode and tool calling through the embedded chat template. GPUs: NVIDIA / AMD / Intel through Vulkan or DX12, Apple silicon through Metal; the CPU as well. **Files** (quantized from the bf16 checkpoint) | file | size | wikitext-2 ppl | |---|---:|---:| | `spark-x2.6-4b-q8_2f.cmf` (8-bit, default) | 4.14 GB | 10.71 | | `spark-x2.6-4b-q4tp.cmf` (4-bit) | 2.16 GB | 11.88 | ppl: first 4096 tokens of wikitext-2 test, BOS in front, `cortiq ppl --tokens 4096`. **Decode speed**, one stream, tok/s | hardware | backend | q8_2f | q4tp | |---|---|---:|---:| | RTX 2000 Ada 16 GB | Vulkan | 41.5 | 67.2 | | Mac mini M4 24 GB | Metal | 20.1 | 34.8 | | Xeon E5-2699 v4, 6 cores | CPU | 4.5 | 4.8 | Prompt processing at 1,000 tokens: 370 / 351 tok/s on the RTX 2000 Ada, 286 / 244 tok/s on the M4 (q8_2f / q4tp). Long context: the sliding layers keep only their window, so the KV state is ~72 KB per token (1.24 GiB at 16k tokens). `cortiq serve` exposes an OpenAI-compatible API, and each chat turn prefills only what changed: with a 2,300-token history the next turn starts in ~0.6 s on the M4. **Try it** ```bash cargo install cortiq-cli hf download infosave/Spark-X2.6-4B-cmf spark-x2.6-4b-q8_2f.cmf --local-dir . cortiq run spark-x2.6-4b-q8_2f.cmf --prompt "Explain quicksort in three sentences." --no-think ``` Prebuilt binaries for Linux, macOS and Windows: https://github.com/infosave2007/cmf/releases (cortiq 0.8.43 or later). The weights stay under your Apache-2.0 terms. Feedback welcome!
great job!

I am using your Q8_0 gguf on an RX 7900 XTX with Vulkan. I get ~2000 tok/s prefill with ~100 tok/s decode
As a first task I have told it to refactor all methods of one provider in an app ('provider' as in a class for wrapping API endpoints) into the provider of the parent route. This task was written in the file of the to-be-removed provider but the parent provider was not named directly.
To correctly finish this task the methods needed to be moved and all references needed to be updated by adjusting the imports to the parent providers file, aliasing the import and then replacing all occurences of the old class name with "import_alias.parentProviderClassName". Not the hardest task, but a good test in my opinion.
It did complete the work without any tool call errors, any syntax errors and without missing any necessary modification AND it even adhered to project customs (aliased style of importing other source files) - I find that impressive for that size.
High reasoning:
It needed 8min 40s for the entire task.
A large part was before it made any edits. It got confused about a helper method in the provider and thought about it for at least a minute.
Low reasoning:
It finished in 7min 30s. Nearly identical result as with high, but it did incorrectly forget to update a .md file (probably because the code analyzer does not flag this). It only told me that this file is now partly stale in its summary but did not update it itself. Interestingly, it reached the finished state after just 3-4 min and then spent the remaining time grepping through git log and fighting with the project-custom linter (which reported something outside its scope of edits).
- Both reasoning runs had the exact same source code at task start. So the run on high reasoning had the same (possibly confusing) linter output.
- It ran in pi. It had tools for analyzing source code available, so it did not need to reason about the syntax being correct or not (and didn't do it, it correctly relied on the tools after having edited files).
- Both runs used up ~50% of the 256K token window. However: I did load the entire code of the feature in before starting any prompt. Thats 30% already. I do this because I noticed that agents are way faster since they already know the code.
- The time measurements were started after system prompt, loaded source code etc. had been prefilled. Its the pure time for the task itself.For comparison: Qwen 3.8 27B Swift 1.0 on medium took 3min 10s for the same task. It runs at 220 tok/s prefill and 40 tok/s decode. I think you can improve Spark quite a lot if you manage to finetune it to yap a little less and be a bit more sure of itself 😄
Thanks for the detailed feedback! The overthinking and repeated checks are useful signals for improving efficiency, and we’re actively working on improvements in this area.
# [HER Hack-Astron # 7] [Disaster Response / 公益应用] RescueLens (救援智标) — Humanitarian Emergency Triage & Decision-Support System powered by Spark-X2.6-4B
---
## 作品名称与方向 / Project Name & Track
- **作品名称 / Project Name**: RescueLens (救援智标) — Offline-Ready Disaster Relief & SOS Triage Engine
- **参赛方向 / Track**: **Disaster preparedness and response (防灾减灾与应急救援)**
---
## 服务对象与解决的问题 / Target Audience & Problem
- **目标用户 / Target Audience**:
- 第一响应调度中心 (Emergency First-Response Dispatchers)
- 基层救灾协调志愿者与非政府组织 (Disaster Relief NGOs & Ground Volunteer Coordinators)
- 偏远及通信受阻灾区的基层应急管理人员 (Local emergency teams operating under low-bandwidth/offline conditions)
- **具体场景与痛点 / Scenario & Pain Point**:
- 洪涝、强震、台风等重大突发灾难发生后,应急电话、社交平台与短信渠道往往在数小时内涌入海量杂乱无章的群众求救信息(言语情绪激动、方言混杂、地标指代模糊、关键生理需求不清)。
- 人工接警员在极端工作负荷下面临巨大的认知负荷,极易错漏由于缺少救命药品(如胰岛素)、受困危房、燃气泄漏、孕妇或婴儿受困等最危急的 P1 生命级险情。
- **预期公益价值 / Public Benefit Value**:
- **秒级结构化分级**:毫秒级完成海量求助信息标准化分类(P1 紧急特危 / P2 严重求助 / P3 物资常规储备)。
- **黄金生命通道守卫**:精准定位危急弱势人群(婴儿、无药高龄患者、受困伤者),提前自动匹配救援资产(冲锋舟、破拆设备、冷链急救药品、备用柴油),缩短出警判定时间 70% 以上。
---
## Spark-X2.6-4B 使用说明 / Model Usage
- **模型来源与 revision / Model Source & Revision**:
- Official Hugging Face: [`XHToken/Spark-X2.6-4B`](https://huggingface.co/XHToken/Spark-X2.6-4B)
- Model Revision SHA: `d1b5f26071101c27fcd07728e7a7770e428281f4`
- **模型在应用中承担的功能 / Model Role**:
- **可控思考推理 (`<think>...</think>`)**:利用 Spark-X2.6-4B 特有的推理思考能力,对非结构化求助文本进行因果分析(生命危险评估、环境次生灾害研判、地标模糊消歧)。
- **标准化人道主义 JSON 提取**:将复杂的求助信息直接转化为符合 EDXL/人道主义救灾标准的数据结构(包含优先级打分 1-10、地标线索提取、人口画像统计、救援装备清单及次生危害警告)。
- **使用的其他模型、工具或服务(如有) / Other Tools/Services**:
- Streamlit (轻量级本地应急调度控制台)
- Pydantic v2 (严格的数据结构防呆校验)
- Playwright (全自动化真实端到端测试与截屏生成)
---
## Demo(必填:视频或图文二选一)/ Demo (Illustrated Walkthrough)
### 1. 应急调度控制台全景 (Mission Control Dashboard Overview)
运行控制台具备任务配置、模型 revision 溯源、多种通信信道(短信/社媒/应急电台/庇护所)输入及一键推理:
- **运行截图**: `screenshots/01_dashboard_overview.png`
### 2. 实战案例:洪涝危急求助全流程分类 (Flash Flood P1-Immediate Triage)
- **示例输入 / Example Input**:
```text
Incident ID: EMERGENCY-2026-001
Channel: SMS / Citizen Hotline
Message: "HELP PLEASE!! Water is already reaching the second floor of our house near Riverside Avenue and 4th St behind the old brick bakery! My elderly grandmother (82, diabetic) has run out of insulin and there are 4 of us including an 8-month-old infant. Power went out 2 hours ago and cell signal is cutting out! We have no boat. Please send rescue boat immediately!"
```
- **Spark-X2.6-4B 真实思考过程 (`<think>`)**:
```text
1. Threat to life analysis: Water reaching living floors (second floor), power failure, cut-off communication. Elderly grandmother is diabetic with zero insulin remaining. 8-month-old infant is present.
2. Geographic and landmark extraction: Riverside Avenue, 4th St, old brick bakery.
3. Resource logistics mapping: Requires swift watercraft rescue team with pediatric flotation gear, plus emergency paramedic dispatch with refrigerated insulin.
4. Priority outcome: P1-Immediate (Urgency score 9/10).
```
- **实际输出结构体 (Actual Humanitarian JSON Output)**:
```json
{
"incident_id": "EMERGENCY-2026-001",
"priority_level": "P1-Immediate",
"urgency_score": 9,
"disaster_category": "Flood",
"summary": "Automated priority assessment: P1-Immediate assigned due to trapped diabetic elder without insulin and infant under rapidly rising flood waters.",
"location": {
"raw_location_text": "Riverside Avenue",
"landmarks": ["Riverside Avenue", "4th St"],
"gps_coordinates": null
},
"demographics": {
"total_people": 4,
"vulnerable_groups": [
"Infant (< 1 yr)",
"Elderly with chronic medication needs (insulin)"
]
},
"resources_required": [
{
"category": "boat_rescue",
"urgency": "critical",
"details": "Watercraft rescue team with pediatric flotation gear"
},
{
"category": "medical",
"urgency": "critical",
"details": "Emergency paramedic dispatch + rapid refrigerated insulin"
}
],
"hazards_identified": [
"Rapidly rising floodwaters cut off ground egress"
],
"human_verification_recommended": true,
"human_verification_notes": "Validate access route safety and watercraft clearance before entering sector."
}
```
- **运行截图**:

---
## 复现方式 / Reproduction Steps
- **代码仓库 / Code Repo**: [https://github.com/deamybro/RescueLens-Spark-X2.6](https://github.com/deamybro/RescueLens-Spark-X2.6) (MIT License)
- **运行框架及版本 / Runtime & Framework**:
- Python 3.13.2
- `transformers` / `huggingface_hub` / `llama-cpp-python` compatible
- `streamlit >= 1.57.0`, `pydantic >= 2.13.5`
- **硬件与精度 / 量化方式 / Hardware & Quantization**:
- 测试硬件环境: Intel CPU / Intel HD Graphics 520, 8 GB RAM, Windows 11
- 推理量化模式: `Spark-X2.6-4B-GGUF` (Q4_K_M 4-bit, ~2.5GB 内存占用) 或 Hugging Face 离线加速运行时
- **本地启动与复现步骤 / Install & Run Steps**:
```bash
git clone <repo_url>
cd spark-x2.6-bounty
pip install -r requirements.txt
python -m unittest tests/test_engine.py
streamlit run src/app.py
```
---
## 效果与局限 / Evaluation & Limitations
- **已观察到的效果及评估方式 / Observed Results**:
- 在 Flood, Earthquake, Wildfire, Shelter Logistics 多个典型灾难测试样本集上完成 100% 结构化测试验证 (`Ran 2 tests in 0.001s, OK`)。
- 成功从混乱文本中抽离微观地标与物资等级,无缝滤除情绪杂音。
- **失败案例与当前局限 / Failure Cases & Limitations**:
- **坐标精度局限**:模型依赖文本内的地名消歧;若求助者仅描述“我家门口大树”,无法在无外部地图 GIS API 联动下定位经纬度。
- **伦理与人工介入边界 (Human-in-the-Loop)**:本系统定位为调度员的**认知增强助手 (Decision Support)**,严禁全自动调度真实救灾警力;系统默认开启 `human_verification_recommended=true`,重大警情出警前必须由值班调度员人工复核。
---
## 贡献者与披露 / Contributors & Disclosures
- **个人 / 团队 / Entry Type**: 个人参赛 (Individual entry: [@deamybro](https://github.com/deamybro))
- **贡献者个人主页 / Contributor Profile**: [https://github.com/deamybro](https://github.com/deamybro)
- **AI 辅助开发说明 / AI Assistance Disclosure**:
- 使用了 AI 编程助手协同搭建 Streamlit 前端界面、单元测试脚手架及自动化截图脚本;所有架构设计、提示词工程(Prompting)、救灾分级业务逻辑均经过人工验证与确认。
- AI 仅作为开发辅助工具,并非参赛成员。
- **数据来源与授权说明 / Data Licensing**:
- 所有测试求救文本均为基于公开人道主义救援案例与模拟危机数据集脱敏编写的合成样本(Synthetic Emergency Data),不涉及任何真实个人隐私或保密出警记录。
![#24 [HER Hack-Astron # 7] [Disaster Response] RescueLens — Emergency Triage Engine 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-24-cb03b92c62e555a6e6847ac7.jpg)
# Spark-X2.6-4B X Cartographics: a mechanistic interpretation of a compact on-device agent by [juiceb0xc0de](https://huggingface.co/juiceb0xc0de)

I ran the Spark-X 4B models through the [Cartographics](https://huggingface.co/spaces/juiceb0xc0de/cartographics) HF space (a space that generates the model atlases referenced throughout this article, on demand) without reading the model cards. The XHToken team invited me to do an interpretation of the Spark-X2.6-4B release, and I decided to go in blind on the first pass. I wanted to know if the atlas gave clear indications of what the Spark-X family was designed for. Would my conclusions match what the model cards claimed or would my readings miss the mark? I went over the instruction-tuned model first, then ran a differential on the 2.6 and 2.5 base models.
My question was simple. What did the XHToken team intend Spark-X to be? A coding agent, or a creative roleplay model for people wanting a romantic Spark with X? I aimed to find out "Who is downloading Spark?"
Spark-X is a name that revealed nothing about the answers I was seeking. So I had to rely on the interpretation. This write-up is in two parts. The first is the blind read of the base-model diff, 2.5 to 2.6, kept the way I wrote it before the model cards, wrong calls and all. The second is the technical pass: the same two bases plus the 2.6 instruct, three atlases on one instrument, every claim tagged by what it rests on. A few of the blind read's calls get checked against the numbers there, and not all of them survive. If you're here for the technical analysis and don't need the blog-style introduction, collapse the first section and skip ahead.
<details open>
<summary>Part one: the blind read, 2.5 to 2.6 base diff</summary>
## Did 2.6 add to the existing checkpoint, or was this new blood?
First thing I wanted to know: is 2.6-base a continuation of 2.5-base, or did they start a fresh run on the same architecture? The point bump says continuation. I wanted the tensors to prove my theory.
The atlas can settle this. Take neuron number N in layer L of each model and ask whether it ranks the same (in this case the same does not require bit identical. In the same ballpark works here) on the probe F-statistic. Two models trained from different seeds share nothing at the neuron level. Same neuron index, different job, every time.
| per-neuron F rank correlation, mean over layers | mlp | attn | heads |
|---|---|---|---|
| Spark-X 2.6-base vs 2.5-base | **0.82** | 0.80 | **0.88** |
| a known 302B-token continuation I measured on the same instrument | 0.67 | 0.59 | 0.79 |
| shuffled neurons | 0.00 | | |
2.6 is closer to 2.5 than the last known continuation I had measured just a few days prior. The massive-activation sink layers sit at **23** and **34** in both models. The set of layers where the attention gate goes dominant is near-identical. I could confidently say they both had the same origin.
One thing this can't tell apart: "2.6 continued from 2.5" versus "both forked from an earlier shared checkpoint." Either way, can at least say no new seed was assigned. Both models grew from the same initial weights.
## What the extra training bought
Everything got sharper. Median probe F is up 4 to 11 percent in every component. Neurons devoted to a single category are up 40 to 60 percent across the board: MLP went **1,708 to 2,698**, gate 12,319 to 15,654, up-projection 8,594 to 11,492. Probe accuracy climbed about half a point through layers 0 to 23 and held flat after.
That's the baseline lift you'd expect from more tokens. The interesting part is which categories grew faster than the baseline.
| category (single-category neurons, all components) | 2.6 / 2.5 |
|---|---|
| ml_ai | **1.44 to 1.70** |
| tool_use | **1.45 to 1.52** |
| creative_writing | 1.34 to 1.44 |
| data, research | 1.2 to 1.6 |
| humor, writing, introspection | 1.0 to 1.1 |
| learning | 0.86 / 0.75 |
| roleplay | 0.82 / 0.74 |
In the late MLP layers (27 to 35), ML/AI neurons went 58 to **140**. Tool-use neurons went 187 to **345**. Attention heads whose top label is ML/AI went 61 to 84.
Learning and roleplay went the other way. They lost 20 to 25 percent of their dedicated neurons. My steamy roleplay theory exited the conversation very early this time. I also noted that heads labelled creative_writing dropped 31 to 11, brainstorming 15 to 3, writing 18 to 9. The MLP creative-writing neurons grew while the heads shed theirs. Writing moved out of attention and into the MLPs.
That didn't read like random drift of more pretraining. That read like a data mix decision.
## Smaller house, better zoning
Here's the part I didn't expect.
2.6 is geometrically smaller than 2.5. Participation ratio dropped at nearly every layer, MLP average **0.82** of the old value. Layer 2 went from a participation ratio of 143 down to **16**. The numbers showed a near-collapse that doesn't exist in 2.5 at all. And activation norms were 10 to 13 percent lower from layer 12 on.
The geometrically smaller model in this case is a clear winner in performance. Let me explain why I would think this way. There is no modality change here, no architecture change. Just more training. So I'm reading it as the signature of a long run under weight decay: representations compress, and the compression costs nothing in category information. Geometry isn't information. The floor plan got tighter and the rooms got more specialised.
The coactivation table shows what changed inside that smaller house. Neuron importance remains strongly correlated between 2.5 and 2.6, at **0.82**, but only **29 percent** of the top MLP coactivation pairs carry over. Broadly the same neurons still matter. What I was noticing here is the dominant partnerships shifting. The floor plan has shrunk, but the number of roommates remains static.
## Spark-X: coding agent, or Apache assistant?
Agentic and ML-literate, with prose kept on purpose.
The pretraining delta ranks ML/AI first, tool_use second, creative writing third, and trades away learning and roleplay to pay for it. Core technical grew, but not significantly enough to add any serious points in that skill tree. That's not a pure coder. A pure coder would show core_technical pulling away from the pack and creative showing clear signs of slowing down or real decline.
My opinion has started the shape at this point. This is a base built for someone wiring a small model into a tool loop, who also wants it to write a decent paragraph when asked. Not a tutor. Not a roleplay model. The chat and education side of the data mix was the thing they were willing to spend down.
</details>
---
# Spark-X2.6-4B: how the base and instruct atlases differ
Three atlases, same 8,965 prompt texts, same 17 labels: [Spark-X2.5-4B-Base](https://huggingface.co/datasets/juiceb0xc0de/spark-x2.5-4b-base-cgs-atlas), [Spark-X2.6-4B-Base](https://huggingface.co/datasets/juiceb0xc0de/spark-x2.6-4b-base-cgs-atlas), [Spark-X2.6-4B](https://huggingface.co/datasets/juiceb0xc0de/spark-x2.6-4b-cgs-atlas). The base captures use bare prompts. The instruct capture adds a 67-token chat wrapper ending at the opened `<think>` prefix, so every instruct input is 70 to 117 tokens against 3 to 50 for the bases [data]. That's the correct operating condition for each model, and it means every base-to-instruct difference below is checkpoint, input format, and their interaction tangled together. Nothing here isolates the fine-tune; what I'm comparing is two operating conditions [inferred].
**Setup.** Every number is MLP stream, `mean_all_real` pooling, unless stated. Each prompt's activation is the mean over its real input tokens. A coordinate is *selective* when its category ANOVA is significant at $q < 0.01$ and exactly one category reaches $|\mathrm{AUROC} - 0.5| \ge 0.25$; positive and negative associations both count. Probe accuracy is multinomial logistic regression on 256 PCs, PCA and scaling fitted inside each training fold, reported as mean held-out accuracy; the majority-class baseline is 6.58%. There are 368,640 MLP layer-coordinate entries per atlas and 576 attention heads (36 layers x 16). Every statement carries a tag. [data] is a direct measurement or calculation from the pinned atlas databases or capture metadata. [inferred] is my interpretation under stated assumptions. [data, inferred] is both. [guess] is a mechanism I haven't tested.
### 1. Health: clean captures, and the instruct commits to categories far more often
MLP taxonomy counts summed per depth third. Norm is the median across layers of each layer's prompt-median row norm.
| Layers | norm p50 (base / inst) | inert (base / inst) | selective (base / inst) | mixed (base / inst) |
|---|---|---|---|---|
| 0 to 11 | 0.68 / 0.45 | 240 / 72 | 382 / 1,306 | 19 / 105 |
| 12 to 23 | 1.70 / 1.16 | 163 / 15 | 721 / 2,624 | 79 / 360 |
| 24 to 35 | 1.96 / 1.32 | 35 / 4 | 1,595 / 4,947 | 84 / 425 |
No NaNs, no infinities, no atlas-defined dead features in any of the three captures [data]. That's capture health; it says nothing about how the training went.
The instruct's norms run about a third lower everywhere, and its per-layer total variance is a different story: the base-to-instruct ratio has a median of 30.7x across layers, ranging 22.7x to 111.5x, with layer 23 the outlier at the top [data]. My first suspect was token averaging [inferred]. Write the pooled instruct activation for prompt $i$ as a mixture of its user-token mean $u_i$ and its template-token mean $t_i$:
$$
y_i = \alpha_i u_i + (1-\alpha_i)\, t_i, \qquad \alpha_i = \frac{n_i}{n_i + 67}
$$
If the template contribution were constant across prompts and $\alpha$ fixed, the covariance would attenuate as
$$
\mathrm{Cov}(y) = \alpha^2\, \mathrm{Cov}(u)
$$
which at $n = 16$ is a 26.9x drop, the right order of magnitude [inferred]. But $\alpha_i$ varies with prompt length, the template suffix is contextualised by the user text, and the user-token representations themselves change under the wrapper and the new weights. So pooling is a plausible contributor of about the right size, and that's as far as the equation goes [inferred]. One useful invariant falls out of it anyway: uniform positive scaling leaves participation ratio, ANOVA $F$, and AUROC unchanged, so scaling alone can't explain changes in PR, $F$, or the AUROC-based taxonomy in the sections that follow [inferred]. It does change norms and total variance, which is why those are the two measurements I won't interpret as weight changes on their own.
What does move: the number of coordinates meeting the selectivity criterion goes 2,698 to 8,877, a 3.29x increase, from 0.73% to 2.41% of MLP entries. Inert drops 438 to 91. Most coordinates stay broad in both atlases (99.1% base, 97.3% instruct) [data]. The instruct's selective set is 4,550 positive and 4,327 negative associations, so "selective" here means separates a category in either direction, and nothing stronger [data, inferred]. Proportionally the growth is spread across depth (3.42x, 3.64x, 3.10x by third); in absolute terms the back third adds the most [data].
### 2. Geometry: the pits at 23 and 34 fill in, and the reason is still a hypothesis
Participation ratio of the MLP covariance, $\mathrm{PR} = (\sum_i \lambda_i)^2 / \sum_i \lambda_i^2$ over covariance eigenvalues $\lambda_i$, with the number of PCs needed for 90% variance alongside.
| Layer | PR base | PR inst | k90 base | k90 inst |
|---|---|---|---|---|
| 2 | 16.14 | 22.83 | 867 | 863 |
| 19 | 21.87 | 48.75 | 701 | 701 |
| 22 | 16.26 | 52.54 | 690 | 798 |
| 23 | 2.31 | 64.88 | 245 | 755 |
| 24 | 15.59 | 95.59 | 770 | 863 |
| 34 | 2.44 | 23.76 | 242 | 812 |
| 35 | 23.51 | 14.42 | 382 | 520 |
Layers 23 and 34 have strongly concentrated spectra, with PR near 2.3, even though 245 and 242 PCs are needed to reach 90% variance. PR measures effective rank, not the number of PCs required to explain a specified fraction of variance. In the instruct capture the pits fill in: PR at 23 jumps 2.31 to 64.88 and k90 goes 245 to 755 [data].
The large activation outliers don't all stay put. By median $L_\infty$ the base's top three layers are 35, 34, 23. The instruct's are 34, 35, 22, and layer 23 falls to eighth [data]. So layer 34 keeps its outlier status while its covariance spreads out, and layer 23 loses both [data, inferred]. The explanation I like is a wrapper-associated component with low across-prompt variability parked on the sink positions, contributing to the mean and not the spread [guess]. Token-resolved activations under matched capture conditions would test whether the large components land on wrapper positions and how much they contribute to across-prompt covariance; these atlases are pooled, so it stays a hypothesis.
### 3. What it distinguishes: selective-label concentration rises between the bases and falls in the instruct capture
Selective MLP coordinates by top label, all 36 layers. Share is each label's fraction of that atlas's selective population.
| Label | 2.5 base | 2.6 base | 2.6 inst | share 2.6 base | share 2.6 inst | inst / base |
|---|---|---|---|---|---|---|
| tool_use | 833 | 1,500 | 3,342 | 55.6% | 37.6% | 2.2x |
| ml_ai | 204 | 445 | 1,392 | 16.5% | 15.7% | 3.1x |
| introspection | 119 | 98 | 966 | 3.6% | 10.9% | 9.9x |
| creative_writing | 97 | 135 | 659 | 5.0% | 7.4% | 4.9x |
| roleplay | 33 | 19 | 532 | 0.7% | 6.0% | 28.0x |
| humor | 58 | 61 | 468 | 2.3% | 5.3% | 7.7x |
| writing | 60 | 83 | 359 | 3.1% | 4.0% | 4.3x |
| core_technical | 166 | 198 | 340 | 7.3% | 3.8% | 1.7x |
| learning | 65 | 56 | 260 | 2.1% | 2.9% | 4.6x |
The base-to-base comparison concentrates the selective-coordinate distribution: tool_use plus ml_ai went from 60.7% of selective MLP coordinates in 2.5 to 72.1% in 2.6 [data]. The instruct goes the other way [data]. Tool_use more than doubles in count and loses 18 points of share, because the remaining selective population grew faster in aggregate. Roleplay, which the pretraining delta spent down to 19 coordinates, comes back at 532. Introspection climbs 98 to 966. Core technical grows 72%, 198 to 340, and its share still halves [data]. Dilution, in other words: core technical didn't get removed; everything else grew faster [inferred].
Tool_use is still the top selective label in 35 of 36 layers [data]. Part one read the base as built for a tool loop, with tool_use second to ml_ai in growth. In the base, tool_use holds a majority of selective coordinates in most layers. In the instruct, from layer 9 onward tool_use stays below 50% and is the largest selective-label group except at layer 14, where roleplay leads [data]. The tool-use emphasis holds in both captures; a majority in the base is a plurality in the instruct [data, inferred].
Held-out category probe accuracy, mean of per-layer accuracies per depth third. Majority-class baseline 6.58%; shuffled-label control stays near 6% everywhere.
| Layers | 2.6 base | 2.6 inst | difference |
|---|---|---|---|
| 0 to 11 | 70.59% | 76.00% | +5.42 pp |
| 12 to 23 | 70.78% | 79.23% | +8.45 pp |
| 24 to 35 | 70.94% | 81.46% | +10.52 pp |
Base probe accuracy is nearly flat across thirds. Instruct rises with depth, in step with the selective counts, though not monotonically: it drops at 14 of its 35 adjacent-layer steps [data].
### 4. Attention: the heads went to prompts about prompting, and the MLPs went their own way
`per_head` labels each head with the category whose mean output norm lands furthest from the overall mean, in either direction, so a label can be the category that makes a head unusually quiet as well as unusually loud. Counts below are the `heads` component only, 576 heads.
| Head norm top label | 2.6 base | 2.6 inst |
|---|---|---|
| tool_use | 101 | 140 |
| niche | 6 | 135 |
| ml_ai | 84 | 80 |
| core_technical | 75 | 82 |
| humor | 57 | 42 |
| introspection | 136 | 29 |
| roleplay | 53 | 27 |
Niche is the probe set's prompt-and-interaction bucket: system prompt crafting, tool-use prompt design, context window management, memory system design, constitutional rules, metacognitive reflection, with constraint-based creativity and red-teaming alongside. In the base, 6 heads carry it as their top label. In the instruct, 135 do, clustered in layers 12 to 23 [data]. Tool_use and niche together are 275 of 576 heads, 47.7% [data]. Only 127 of 576 heads, 22.0%, keep their base label; the largest single transitions across all five attention streams are ml_ai to niche (89 slots) and introspection to niche (68). Median head-norm $F$ more than doubles, 13.9 to 33.6 [data]. The direction of all that is toward prompts about prompting [data, inferred].
Hold that against the MLP table in section 3. Roleplay MLP coordinates went 19 to 532 while roleplay head labels went 53 to 27. Introspection MLP went 98 to 966 while introspection heads went 136 to 29. Niche MLP went 2 to 34 while niche heads went 6 to 135 [data].
I don't see a contradiction there. A head-norm label is about which category shoves a whole head's output magnitude off its average; coordinate selectivity is about which category one dimension separates. Two statistics on two different objects, and nothing forces them to agree [inferred]. The mismatch doesn't license "roleplay moved from attention into the MLPs" either. Neither statistic tracks a conserved quantity, so opposite movements can't establish a migration between modules and can't rule one out. I haven't tested whether the two properties are related at all; a different measurement could still find a redistribution [inferred].
### 5. Outliers: the base finds short prompts unusual, the instruct finds long ones unusual
`mlp_mahalanobis_z` is the layer-average of each prompt's standardised distance from the population centre in that layer's whitened top-256-PC space, so a "4.2" is far out on this scale and not 4.2 literal standard deviations. The tail is the top 5%, 448 prompts.
| | 2.6 base | 2.6 inst |
|---|---|---|
| correlation of score with prompt length | −0.59 | +0.83 |
| overlap of the 100 highest-scoring prompts | 0 | |
| tool_use prompts entering the tail | 5 / 290 = 1.7% | 4 / 290 = 1.4% |
| core_technical prompts entering the tail | 29 / 550 = 5.3% | 71 / 550 = 12.9% |
| ml_ai prompts entering the tail | 20 / 550 = 3.6% | 53 / 550 = 9.6% |
The two captures have disjoint top-100 Mahalanobis outlier lists. The base's highest scores go to two- and three-word imperatives: "brainstorm features", "poke holes in this", "what am i missing", "document this repo". The instruct's go to long, dense, specific prompts: HNSW vs IVF vs ScaNN at 100M vectors, Timescale vs Influx vs ClickHouse at 50k writes a second, full fine-tune vs LoRA vs QLoRA on one 24GB card. No prompt appears in both top-100 lists [data]. The biggest movers are the terse ones: "write survey questions" scores 4.2 in the base and −2.4 in the instruct, more ordinary than the median prompt [data].
The sign flip on length is the result here, and section 1's pooling equation is the competing explanation for it: a longer user prompt has a larger $\alpha_i$, which changes the balance between user and template contributions. If those contributions differ systematically, this length-dependent mixing can induce an association between prompt length and outlier score [guess]. I haven't measured its contribution to the +0.83. The reversal is also metric-dependent. Cross-capture correlation is $-0.25$ for the layer-averaged Mahalanobis score and $+0.71$ for the neighbourhood-based outlier score [data], so the two captures still largely agree about which prompts are unusual under the neighbourhood metric while disagreeing under the whitened distance. Which makes the reversal instrument-dependent and says nothing about how much of it pooling caused [inferred].
None of the category enrichment below is length-controlled. Mean instruct input runs 81.9 tokens for tool_use to 84.9 for ml_ai [data], which looks like nothing on a 47-token range, but subtract the common wrapper and it's 14.9 against 17.9 user tokens, mixture weights $\alpha \approx 0.18$ against $0.21$ [data]. Similar means also say nothing about the upper tails of the length distributions. How much of the technical-tail enrichment survives length adjustment, I don't know yet [inferred]. Tool_use has the lowest tail-entry rate in the base capture and one of the lowest in instruct, effectively tied with business [data]. Core technical has the highest in the instruct: 12.9% of its prompts enter the tail, it makes up 15.9% of the tail against a 6.1% corpus prevalence, an enrichment of
$$
\frac{P(\text{core\_technical} \mid \text{tail})}{P(\text{core\_technical})} = \frac{71/448}{550/8965} \approx 2.58
$$
The score measures relative displacement from the evaluation-corpus centre under this pooling and PCA metric. It isn't training-distribution familiarity, difficulty, or answer quality [inferred]. Unusual to this capture [data] is the claim. Hard for this model is a behavioural question, and the atlas can't see behaviour.
### 6. Verdict
Under their respective capture conditions, the instruct checkpoint has broader single-category MLP separation (3.29x the base's selective coordinates, spread across every depth third) and higher category-probe accuracy, with the largest gains late [data]. Tool_use stays the dominant selective label and gives up 18 points of share to conversational categories, including roleplay and introspection, whose selective counts fell between the base captures [data]. Attention head-norm associations reorganise toward the prompt-and-interaction bucket, 6 to 135 heads, and for three categories the MLP and head statistics move opposite ways, which neither establishes nor rules out a migration between modules [data, inferred]. That, plus the outlier reversal under the Mahalanobis metric, is the strongest statement I'm willing to make from these three atlases [data, inferred].
Core technical selective counts rise 72% but slower than the population, so its share halves [data]. Technical prompts are enriched 2.6x in the instruct's outlier tail [data], and that score is both length-associated and measured under a different pooling context than the base [data, inferred]. Neither one adds up to a technical regression, and nothing here says which part of the fine-tuning mix produced the shift [inferred]. Whether that breadth was bought with engineering ability needs matched behavioural evals on exactly the long, multi-constraint technical tail. A bare-prompt capture of the instruct would give the checkpoint difference under that format; separating checkpoint, wrapper, and interaction takes both checkpoints under both formats.
Part one's tool_use call holds: top selective MLP label in 35 of 36 instruct layers, the largest group at every base layer, and a majority at most of them [data]. The prompt-and-interaction niche bucket, which part one doesn't mention, is the second-largest head-norm group in the instruct, 135 of the 436 non-tool-use heads [data]. "Writing moved out of attention and into the MLPs" is unsupported, and in my opinion it read like a number going straight to a story [inferred].
Three mistakes from the process. I've left them in. The 67-token chat template was assumed present in the base captures during one read and absent in the next; it's present only in the instruct capture, and section 1 is how far that arithmetic gets. I first read the layer 2 participation ratio drop in the base as a near-collapse; k90 only moved 1,066 to 867, TwoNN barely moved, and probe accuracy held, so it's concentration of variance, and on its own that isn't evidence of lost category information, let alone a representational collapse. And a first draft of the head table carried a core_technical count that hadn't been queried, plus transition counts from a join that ignored the component column; section 4 carries the corrected numbers.
### Atlases
[Spark-X2.5-4B-Base](https://huggingface.co/datasets/juiceb0xc0de/spark-x2.5-4b-base-cgs-atlas) · [Spark-X2.6-4B-Base](https://huggingface.co/datasets/juiceb0xc0de/spark-x2.6-4b-base-cgs-atlas) · [Spark-X2.6-4B](https://huggingface.co/datasets/juiceb0xc0de/spark-x2.6-4b-cgs-atlas)
The category table in section 3:
```sql
SELECT top_label, COUNT(*) AS selective
FROM features
WHERE component = 'mlp' AND taxonomy = 'selective'
GROUP BY top_label ORDER BY selective DESC;
```
The geometry and probe curves in sections 2 and 3:
```sql
SELECT layer, geometry_participation_ratio, geometry_k90, geometry_twonn,
probes_probe_accuracy, probes_probe_control_accuracy
FROM layers
WHERE component = 'mlp' AND position = 'mean_all_real'
ORDER BY layer;
```
The head table in section 4:
```sql
SELECT norm_top_label, COUNT(*) AS heads
FROM per_head WHERE component = 'heads'
GROUP BY norm_top_label ORDER BY heads DESC;
```
The outlier lists in section 5:
```sql
SELECT label, prompt, n_tokens, mlp_mahalanobis_z
FROM prompts ORDER BY mlp_mahalanobis_z DESC LIMIT 20;
```
Dataset revisions used for every number above:
| Atlas | revision |
|---|---|
| 2.5 base | ff7e5c99642059eaa8227a2ba69ce386589bce7f |
| 2.6 base | 79556a2208c7ff0cb6c9385a39de5d3281ab6e86 |
| 2.6 instruct | 7c1550b6dae003f0c2ba122c77f457694621dff5 |

Hi XHToken team, thanks for Spark-X2.6!
I converted Spark-X2.6-4B to ONNX so it runs in the browser on WebGPU, with no server and nothing to install.
- Demo: https://huggingface.co/spaces/mohdmahmodi/Spark-X2.6-WebGPU
- Model files: https://huggingface.co/mohdmahmodi/Spark-X2.6-4B-ONNX-WebGPU
- Source and validation: https://github.com/mohdmahmodi/Spark-X2.6-4B-onnx-webgpu
The 4-bit weights are your GPTQ codes from Spark-X2.6-4B-INT4, repacked for onnxruntime-web without changing them. The sliding-window and full-attention layers, partial rotary, output gate, thinking modes and tool calling all work, using the official chat template.
I compared it with the original model in transformers on the same prompts (greedy, thinking off):
| | bf16 | official INT4 | this build |
|---|---:|---:|---:|
| GSM8K, 1,319 problems | 90.8% | 91.2% | 90.5% |
| BFCL v3 simple, 200 cases | 89.0% | 89.5% | 89.5% |
| Needle in a haystack, 1k to 16k tokens | 12/12 | 12/12 | 12/12 |
The GSM8K gap to INT4 is within noise (McNemar p = 0.18).
On an RTX 3090 Ti in Chrome it does about 92 tok/s with a short prompt and 69 tok/s at 16k tokens of context. The download is 2.77 GB and the browser caches it.
It also works with Transformers.js 4.3:
```js
import { pipeline } from "@huggingface/transformers";
const generator = await pipeline("text-generation", "mohdmahmodi/Spark-X2.6-4B-ONNX-WebGPU", { device: "webgpu", dtype: "q4f16" });
const out = await generator([{ role: "user", content: "Hello!" }], {
max_new_tokens: 256, tokenizer_encode_kwargs: { enable_thinking: false },
});
console.log(out[0].generated_text.at(-1).content);
```
I've only tested it on Windows with an NVIDIA GPU so far. If anyone tries it on a Mac, an AMD or Intel GPU, or a phone, let me know how it goes. And if you think it's useful, I'd be glad to see it linked from the model card next to the GGUF.Thanks for the contribution and detailed validation! We’ve added a WebGPU section to our README linking to your demo, model files, and source code.

**English summary.** Recruitment Fairness Lens is a human-review aid for Chinese job ads. Spark-X2.6-4B locates text cues about sex, marriage/childbearing and caregiving conditions and quotes the exact evidence. The program validates the output and routes it to flag / review / unknown / clear using rules drafted with our legal co-researcher (608). A person accepts, modifies or rejects each cue and exports an audit record. It **does not decide legality, report employers or rank companies**. The demo runs the official iFlytek MaaS `spark-x2.6-4b`; the cloud revision is not disclosed and its sampling is not deterministic. We also ran the open weights locally (HF revision `d1b5f260`, bf16, greedy) as separate evidence. The two are not equivalent environments. A locked test on 30 new synthetic cases was run once on the frozen system: **15/30** agreement overall, **0/12** on the pre-marked disputed cases, **15/18** on the rest, with 2 network failures counted in the denominator (baselines: 10/30 and 13/30). This is agreement with one undergraduate law researcher's reference (supporting fields GPT-assisted), **not legal accuracy**. The flag/review distinction was not supported by this test. Development-set numbers below are exploratory only. --- ## Project name and track **Project name:** 招聘公平镜 Recruitment Fairness Lens **Track:** Gender equality ## Who this helps and what problem it solves **Target users:** 招聘信息发布平台的审核人员、公共就业服务机构工作人员。他们本来就负有信息审核义务,也能要求发布方补充岗位材料。求职者也可以用它看懂招聘文字里的线索,但工具不要求求职者去调查企业。 **Concrete scenario and problem:** 中文招聘文本中,性别和婚育限制常见的写法有“男性优先”“宝妈勿扰”“已婚已育者优先”“承诺两年内不生育”,而且常常前面写一句“男女不限”。与此同时,很多写法看起来相关,其实是正常要求:出差、夜班、搬运能力,“欢迎女性申请”,新闻引用,已删除的旧条件,剧中角色和声部。关键词规则很难区分这两类。另外,“没有家庭/育儿负担”这类照护条件,不能直接等同于针对女性。 **Expected public benefit:** 帮审核人员更快定位需要人工核实的原文片段,并告诉他们还缺哪些事实、可以向发布方问什么问题。所有判断都由人确认。工具不认定违法,不自动举报,不做企业排名,不推断任何人的性别或婚育情况。 ## How Spark-X2.6-4B is used **Model source and revision:** - **本地开源权重(独立运行证据)**:Hugging Face `XHToken/Spark-X2.6-4B`,revision `d1b5f26071101c27fcd07728e7a7770e428281f4`,5 个权重分片的 SHA-256 已和 Hub 核对一致。用 transformers 4.57.1 在 Apple M3 16 GB(MPS)上运行,bf16,无量化,`enable_thinking=False`,贪心解码,`max_new_tokens=640`。86 条开发样本全部跑完,原始输出全部保存(公开仓库中的日志是过滤版,不含 16 条未授权样例)。 - **演示服务(官方 API)**:讯飞星辰 MaaS `POST /v2/chat/completions`,`model: spark-x2.6-4b`(每次响应的 `model` 字段都核对过),`thinking.type=disabled`,`max_completion_tokens=640`。**云端的具体 revision 和精度都没有公开,我们不声称它与上面的开源 revision 相同。** 采样由服务端固定为 temperature=1、top_p=0.95,**结果不是确定性的,与本地贪心推理不是等价环境**。我们测试过 function calling 强制结构化输出,模型没有响应(0/18)。 **The model's role in the application:** Spark-X2.6-4B 读取招聘文本,输出 JSON: - 语境 `scope`:当前招聘 / 引用或历史 / 培训 / 信息不足。 - 每一条线索 `findings`:原文片段、线索类型(明示性别、婚育条件、照护条件、语境暗示、声称例外)、性别关联程度、是否涉及照护。 - 待补充事实和一句说明。 模型不直接决定分流结果。程序负责: - 逐字校验每个引用是否是原文的连续片段。 - 按规则把线索类型映射为 flag / review / unknown / clear。 - 从法学合作者核实过的法源白名单中显示编号。 - 推导是否需要人工复核。 人工最后对每一条接受、修改或拒绝,并导出审核记录 JSON。 **Other models, tools, or services used, if any:** 推理只用 Spark-X2.6-4B,没有用其他模型。开发过程用了 AI 辅助工具,见文末披露。 ## Demo (required: video OR illustrated walkthrough) **形式:** 图文演示(真实运行截图和逐步说明)。 以下三个场景都是 2026-10-30 用**冻结版本**(Prompt v2.1 + 后处理 v2.3)真实调用 MaaS `spark-x2.6-4b` 的结果,输入均为合成文本。截图里的“人工”步骤是由 AI 工具自动操作的**流程演示**,页面上的审核人写的是“非真人审核”,**不是正式的人工法律审核**。这三个场景的人工记录早于下面的复核流程 v1.0,所以字段较少,状态名称也是旧版的。截图中的法源说明和 SOP 核查问题来自法学联合研究者 608,已获她授权公开。  首页:顶部写明“不是法律意见”。模式说明行显示官方 API、模型 ID、云端 revision 未披露、服务端固定采样(非确定性)、Prompt 和后处理的版本。 ### 场景 1:明确的婚育限制 **输入:** 【合成示例|场景1】诚聘行政助理:本科学历,形象好;入职须签署承诺书,保证两年内不生育;已婚已育者优先。  **实际输出(4.4 秒):** 两条婚育条件线索,都判为 **flag**:“入职须签署承诺书,保证两年内不生育”“已婚已育者优先”。原文高亮,“法律结论:不判断”,法源编号 S01、S02,模型说明和待补充事实。 **人工步骤:** 两条都“接受”,处理状态选“需法律进一步判断”,导出 JSON。(页面上划删除线的那条,是准备 Demo 时自动化脚本挂错的记录,已标为作废,原记录保留。) ### 场景 2:照护条件的不确定性 **输入:** 【合成示例|场景2】招聘项目协调员:需每月出差约一周,男女均可;希望候选人没有育儿负担,能全身心投入。  **实际输出(3.4 秒):** “希望候选人没有育儿负担,能全身心投入”判为照护条件 **review**,**性别关联:未建立**。页面附上 3 个向发布方核实的问题(不询问求职者)。出差要求没有报警。 **人工步骤:** 选“待补事实”,处理状态选“待补充材料”,不结案。**这次的瑕疵:** 模型没有填写“待补充事实”字段。 ### 场景 3:声部表达(已知失败模式与人工纠正) **输入:** 【合成示例|场景3】城市合唱团招募女高音声部团员,按试唱和视唱能力选拔,欢迎有合唱经验者报名。  **实际输出(7.4 秒):** 模型**错误地**把“女高音声部”判为应聘者性别限定(explicit_sex)。程序的范围检查把它从 flag 降为 **review**,提示“可能是角色或声部描述,需人工确认”。 **人工步骤:** 选“拒绝(误报)”,人工分流改为 clear,处理状态选“更正语境误报”。如果文本另外直接限定应聘者本人的性别(例如“需为女性演员”),程序不会降级,仍然判 flag。 ### 人工复核流程(review-flow v1.0,按法学联合研究者 608 的人工复核产品要求实现) 每条线索生成一张复核卡,内容包括: - 本条任务:flag 侧重规范适用、例外和改写;review 先回答事实问题;unknown 列出缺失材料。 - 入队原因、最多 3 个定向问题、需要的岗位材料、负责核查的角色。 - 条款级依据参考,标明法规层级,适用性待法律审阅者确认。 - 文案模板。 处理状态有 6 个:待补材料、语境误报已更正、已形成修改文案、风险线索获补强、待核例外适用、保留不确定。每个状态都有结案条件,**没有登记已取得的材料就不能选择收口类状态**,服务端会直接拒绝保存。修改文案与原文分开保存,可以对修改稿再检测。 2026-10-31 用单独编写的合成文本做了一次完整演示,没有使用任何测试题: 1. 输入“限男性……女性应聘者请在报名表中注明婚育情况”,模型实际返回两条 flag。 2. 在没有材料的情况下尝试结案,被拒绝。 3. 改为“待补材料”,写明缺少的材料和下一步。 4. 形成修改文案,并对修改稿做一次真实再检测,结果为 clear。 5. 导出 JSON。  **原型局限**:没有多人协作和权限;联系发布方要线下完成;证据只能以文字登记;文案建议是模板。我们**不声称**已经在真实场景完成闭环复核,也不声称能节省时间。 ## How to reproduce **Code repository or runnable example:** [github.com/yangmengze608-afk/recruitment-fairness-lens](https://github.com/yangmengze608-afk/recruitment-fairness-lens)(公开,当前 commit `8752e3389b2acdb94aaafeaa3acec2f8ee4ed9e8`) - `rfl/prompt_v2_1.py` 与冻结记录逐字节一致(SHA-256 `62a40a7f…`)。仓库还包含已授权的标注规则、SOP 核查问题和法源适用边界说明。 - 以下内容未公开:AI 辅助研究标签、16 条回归样例、法学研究备忘,以及锁定测试的案例、逐条参考标签和争议记录(只公开汇总,见 `docs_v5/LOCKED_TEST_RESULT_SUMMARY.md`)。仓库里的日志是**过滤版**:删除了回归样例所在的行,替换了本机路径,其余内容逐字保留。 - 详见仓库中的 `RELEASE_NOTE.txt` 和 `docs_v4/PUBLIC_PERMISSIONS.md`。 **Setup and run instructions:** 见仓库中的 `REPRODUCE.md`。下面的三种模式在公开仓库里都能直接运行。开发集和锁定测试的评分需要未公开的标签,公开仓库无法复算;公开的是汇总结果。 ```bash python3 -m unittest discover -s tests # 39 个测试,只需要标准库 # 官方 API 模式(需要自己的 MaaS Key;Key 只在本地服务端读取) mkdir -p ~/.config/rfl && pbpaste > ~/.config/rfl/xfyun_api_key && chmod 600 ~/.config/rfl/xfyun_api_key python3 mvp/server.py --provider xfyun_maas # http://127.0.0.1:8765 # 本地开源权重模式 hf download XHToken/Spark-X2.6-4B --revision d1b5f26071101c27fcd07728e7a7770e428281f4 --local-dir ../models/Spark-X2.6-4B --exclude "images/*" pip install -r requirements.txt && python mvp/server.py --provider local_transformers # 只读回放(不调用模型,页面会标注“回放”) python3 mvp/server.py --replay outputs_v3/maas_v2.1_plus_pp2.3_dev86/records.jsonl --replay-raw outputs_v3/maas/dev86_v2.1_raw/raw.jsonl ``` **Runtime and versions:** 本地:Python 3.12,transformers 4.57.1,torch 2.14.1。云端模式和网页只用 Python 标准库。 **Hardware and precision/quantization:** 本地:Apple M3 16 GB,MPS,bf16,无量化。云端:硬件和精度未披露。 **Key prompts and inference settings:** - Prompt v2.1(`rfl/prompt_v2_1.py`)。只把 id 和招聘原文发给模型,文本中的指令一律不执行。 - 后处理 v2.3,每一项修复都有记录,原始输出保留: - 近似键名修复(例如 `missing_fs` → `missing_facts`) - 字符串外重复逗号修复 - 引号内引用的法律词不算模型下的结论 - 角色或声部的范围检查(flag 降为 review,不会降为 clear) - 冻结哈希:`docs_v3/FREEZE_v2.1_pp2.3.json`。之后只改过界面和安全相关的代码,记录在 `docs_v4/FREEZE_ADDENDA.json`,推理部分没有改。 ## Results and limitations **Observed results and how they were evaluated:** 独立锁定测试是主要结果,开发集结果只作探索性参考。 **独立锁定测试结果(2026-10-31,冻结版本,只运行一次)** 流程:评分协议在收到测试输入前预注册(`docs_v5/LOCKED_TEST_SCORING_PROTOCOL.md` v1.1)→ 只收到 case_id 和原文 → 运行一次 → 封存预测并登记哈希 → 校验后才打开参考分类。与 86 条开发集精确重复 0 条。 | 与参考分类一致 | 全部 30 条 | 争议 12 条 | 其余 18 条 | 输出有效 | 人工队列 TP/FP/FN | |---|---|---|---|---|---| | Spark 冻结系统(官方 API) | **15/30** | **0/12** | **15/18** | 28/30 | 16 / 5 / 0 | | 基线 A(原始关键词规则) | 10/30 | 4/12 | 6/18 | 30/30 | 2 / 4 / 14 | | 基线 B(修订规则,看着开发集写的) | 13/30 | 3/12 | 10/18 | 30/30 | 4 / 3 / 12 | Spark 的 30 条分开看:15 条一致;2 条非争议案例分类不一致;11 条争议案例分类不一致;2 条**网络请求失败**(连接被重置,没有模型输出,留在分母里,不重跑);JSON 无法修复的 0 条(1 条经记录的修复后有效)。 怎么理解这些数字: - **这不是法律准确率。** 争议案例不能作为认定模型法律判断错误的依据,但 0/12 也**不能全部归因于参考标注**。11 条有输出的争议案例,系统和研究者的判断都不一致: - 系统把明确的婚育或性别限制文字一律判 flag,研究者保留 review(5 条); - 系统把照护条件放进复核,研究者判 clear(3 条); - 系统把声称例外的条件判 unknown,研究者判 review 或 flag(2 条); - 语境暗示的判断不同(1 条); - 另有 1 条网络失败。 这里面有规则差异:系统实现的是 10-28 版分流规则,研究者本轮的判断有所不同。**也有系统自身的局限**:冻结规则把明确线索一律映射为 flag,系统无法表达“文字明确,但仍需先核实”这样的判断。哪一方的分流更合适,这次测试没有结论。如果采用研究者的口径,现有规则需要修改。 - **flag 和 review 的区分没有得到这次测试的支持**:参考为 review 的 7 条,系统没有一条判为 review;系统判为 review 的 6 条,参考也都不是 review。部分原因是结构性的:冻结规则下,明确线索一律为 flag。 - 人工队列的“16 条没有漏”里,有 2 条是网络失败转人工,不是模型发现的;模型实际发现 14/16。这个指标也不是歧视识别率。 - 照护条件被推断为性别:0/3。引用都是原文连续片段(有输出的条目);语义上是否支持线索本次未评估。 - 基线 A、B 在争议案例上更高,主要是因为它们对大量文本都判 clear。基线 B 在开发集上是 86/86,到这批新案例上只有 13/30,这也说明开发集分数不能当作效果证据。 - 只有 30 条,且是单次运行,云端采样有随机性,不做统计显著性的说法。测试后我们**没有**修改系统重测;今后如果修改规则,这 30 条只能算开发集。 - 测试案例和逐条参考标签未公开,所以外部无法复算这组数字。 **开发集结果(探索性,不是正式成绩):** - 开发集共 86 条合成文本: - 50 条原始案例,标签是法学联合研究者授权下的 **AI 辅助研究意见**,没有经过逐条人工确认,不是金标准。 - 16 条法学研究提供的回归样例。 - 20 条工程探针。 - 这些样本都参与过 Prompt 设计,v2.1 的部分规则还直接用到了开发集的措辞。所以下表只能说明流程可行,**不是法律识别准确率**。 | 开发集 86 条 | 本地开源权重 v2.1 | 本地 + 后处理 v2.3 | 官方 API v2.1(原始输出) | 官方 API + 后处理 v2.3 | |---|---|---|---|---| | 四分类与研究标签一致 | 79/86 | 81/86 | 68/86 | 78/86 | | 输出通过校验 | 84/86 | 86/86 | 73/86 | 85/86 | | 引用是原文连续片段 | 100% | 100% | 100% | 100% | | 单条延迟中位数 / P95 | 22.4 s / 43.7 s | 同左 | 4.1 s / 7.2 s | 同左 | - 以下三类错误在四种配置下都是 0:review 被判为 flag(0/8)、unknown 被强行定类(0/5)、照护条件被推断为性别(0/7)。 - 引用、历史或否定语境被误报:本地 0/18,官方 API 1/18。 **法律工作分三个层次,需要区分清楚:** 1. **已经完成**:法学联合研究者 608 整理了法律依据和法源索引,识别了争议点,研究了标注规则、人工复核流程和照护责任专题,对规则做了审查,并与项目负责人讨论确认了主要规则。 2. **AI 辅助、未逐条人工核实**:开发集使用的 50 条研究标签。 3. **本次独立锁定测试**:608 主导法律测试设计,GPT 辅助生成 30 条合成招聘案例并整理支持字段;608 本人完成参考分类的首轮判断及复审。**这是单一法学本科研究者的参考,不是多专家金标准,也没有律师审定。** **Failure cases and current limitations:** - 剧中角色和声部描述(“扮演成年男性角色”“女高音声部”)在本地和云端都被模型误报为性别限制,开发集里 4/4。目前靠程序降为 review、交人工兜底,这是规则补丁,不代表模型能力。 - “欢迎女性申请”仍然会被误报。模型有时不填写“待补充事实”。 - 云端随机采样会导致 JSON 键名拼错、多出逗号等格式问题:原始输出有 13/86 条无效,修复后还剩 1/86。无效的输出交人工处理,**不会被当作 clear**。 - 工具只看文字,无法核实岗位的真实需要、“国家规定例外”是否成立,或者企业实际怎么录用。clear 只表示所给文字里没看到本产品关注的线索,不代表合法。 - **锁定测试中暴露的问题**: - 面向照护者的福利安排被误报为照护条件; - 招聘主管口头表达的隐含偏好被判得偏轻(review,参考为 flag); - 运行时网络不稳定:2 条失败,3 条重试后成功,延迟中位数 7.7 秒,比开发集慢。 - 没有做过真实用户研究,也没有使用任何真实招聘数据。 ## Contributors and disclosure **Individual / team:** 团队,2 名真人成员 **Contributor profiles and respective contributions:** - **yangmengze608-afk**(项目负责人;GitHub:[yangmengze608-afk](https://github.com/yangmengze608-afk)):产品、AI 技术、工程验收、实验设计与最终提交。 - **608**(法学联合研究者,GitHub:[608tt](https://github.com/608tt)):法律依据与法源核实、争议识别、标注规则与分流原则设计、人工复核 SOP、案例分析、法律边界与产品设计讨论;主导独立测试的法律案例设计,审核由 GPT 辅助生成的 30 条合成招聘案例,完成参考分类的人工首轮判断与复审(其中 12 条保留显著争议)。 - 团队 2 人,女性贡献者占比 50%(608)。 **AI-assisted development disclosure:** - Claude Code(Anthropic):编写并运行工程代码、评估脚本、网页和文档,Demo 截图里的流程操作也由它完成。 - ChatGPT:独立审阅;辅助法学研究资料的检索整理和标注初审;生成锁定测试的 30 条合成公告,转录研究者的判断并整理支持字段。 - AI 工具不是团队成员。法律规则由真人研究者讨论确认,50 条研究标签没有经过逐条人工确认。 **Data sources and authorization:** 所有样本都是原创合成文本,不含真实企业或个人信息。法源引用官方或政府网站,法源说明、标注规则和 SOP 问题已获 608 授权公开。锁定测试材料和研究标签未公开。仓库、日志、截图和导出文件中没有 API Key。
![#27 [HER Hack-Astron # 7] [Open Source AI for Good] 招聘公平镜 Recruitment Fairness Lens 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-27-265141ae0fe2e988748f17ac.jpg)
Spark-X2.6-4B is running in two live web assistants. These short recordings show English questions, actual model replies, and the thinking-level controls available to visitors. Try the apps, then share a demo of your own Spark-X2.6 application in the comments. Longer case write-ups are welcome too—post them on Hugging Face and drop the link here. ## Astron Harness Tutorial: Learning Assistant [Open the learning assistant](https://astronclaw-tutorial.space/en/) · [Source repository](https://github.com/iflytek/astron-harness-tutorial) This bilingual tutorial assistant helps visitors explore AStudio, Loomy and AstronClaw. It uses relevant tutorial material as context for the conversation. **Question:** “Plan mode vs Goal mode in AStudio? Two short sentences, no Markdown.”  The recording shows the assistant explaining when to review a plan before execution and when to use Goal mode for continued progress. The interface offers **None, Low and High** thinking levels and remembers the visitor's selection. [Full-length recording](https://raw.githubusercontent.com/FenjuFu/xhtoken-images/f55b154ad7211dde8efec550613a34441d6c9f33/2026-11-02-spark-x26-web-assistants/spark-x26-learning-assistant-realtime.mp4) ## Awesome Astron Workflow: AI Chat [Open AI Chat](https://www.awesome-astron-workflow.dev/chat) This assistant answers questions about Astron projects and capabilities using the site's reference material. **Question:** “How can SkillHub help a team reuse AI skills? Give 3 benefits in under 60 words.”  The recorded reply discusses skill distribution, secure sharing and discoverability. Both the question and the answer remain as they appeared in the application. [Full-length recording](https://raw.githubusercontent.com/FenjuFu/xhtoken-images/f55b154ad7211dde8efec550613a34441d6c9f33/2026-11-02-spark-x26-web-assistants/spark-x26-astron-ai-chat-realtime.mp4) ## Integration details Both applications call **spark-x2.6-4b** through iFLYTEK Astron MaaS, with credentials kept on the server. The browser sends the conversation and selected thinking level to the application's backend. These demos use **Low**. The server maps the controls to the model request: | Selection | Request behavior | | --- | --- | | None | Disable extra thinking | | Low | Enable thinking with low reasoning effort | | High | Enable thinking with high reasoning effort | The tutorial assistant supports streaming replies and stopping an answer. The clips show the website Q&A experience: typing a question, waiting for the model and reading the response. ## About the recordings These are real website recordings, and the responses have not been rewritten or simulated. The AI Chat GIF shortens pure waiting time and labels that edit. The full-length MP4 links retain the complete captures. These clips illustrate application integration; they are not latency benchmarks. ## Share your Spark-X2.6 case What are you building with Spark-X2.6? Share a working demo or screenshot in the comments. For a longer Hugging Face write-up, useful details include your use case, model variant, deployment stack, prompt, thinking level, integration approach and what you learned. [Spark-X2.6 model collection](https://huggingface.co/collections/XHToken/spark-x26)
I have been using it as a subagent for some time. Unfortunately, this model is not coherent enough to autonomously handle even strictly defined agentic tasks. Per my observations, it tends to descend into reasoning loops, and produces low-quality code. But the worst of all, it fabricates task results and hallucinates that it solved a task, when in reality it has not. On the bright side, it handles tool calling, summarization very well, and it is really, really fast. Needle in haystack type tasks give good results too. Though I have dropped it as I do not have much fault tolerance in my pipeline right now. Definitely looking forward to XHToken team releasing a new version. A good fine-tune and it could do wonders. Cheers and thank you for your work

# Spark-X2.6-4B 中英双语法律与金融对抗性诊断:独立实测研究报告 > **研究模型**:XHToken/Spark-X2.6-4B > **实验时间**:2026-11-03 UTC > **研究者**:Jiang, Xuanyi(lostlight530 / lightlost) > **ORCID**:[0009-0001-3617-0832](https://orcid.org/0009-0001-3617-0832) > **前序研究**:Spark-X2.5-4B 本地 Q4_K_M 硬预算数学诊断([X2.5 HF Discussion #18](https://huggingface.co/XHToken/Spark-X2.5-4B/discussions/18)) > **发布位置**:[HF Discussion #30](https://huggingface.co/XHToken/Spark-X2.6-4B/discussions/30) · [GitHub Discussion #29](https://github.com/XHToken/Spark-X2.6/discussions/29) --- ## 1 研究背景 此前,我曾使用 Spark-X2.5-4B 的 Q4_K_M 量化模型,在 RTX 4060 Laptop GPU 上完成一轮本地数学诊断实验 该实验使用 30 道预先选定的数学问题,在单次回答、8,192 Token 硬生成预算、不进行补救生成的条件下,得到 **15/30 的严格 Pass@1** 结果 当时一个很值得研究的现象是:模型未必完全无法解决问题,但可能因为推理过长,在规定预算内未能提交最终答案 随着 Spark-X2.6-4B 发布,我希望进一步观察新一代模型在另一类高约束任务中的实际表现 此次没有继续使用数学题库,而是选择了涉及**法律规范衔接、刑事行为分类、竞业限制、经营现金流、信贷 IRR 和银行资本充足率**的中英双语诊断任务 主要关注三个问题: 1. 小模型能否识别题目中刻意设置的过时规则、混淆概念和错误假设 2. 在多步骤数值问题中,能否识别关键计算关系并输出相关结论 3. 在统一推理条件下,中英文问题是否都能命中预设的诊断要点 > **声明**:本实验属于独立模型行为诊断,不代表正式法律意见、投资建议或金融风险评估 ## 2 模型与计算环境 | 项目 | 实际配置 | | :--- | :--------------------- | | 模型 | XHToken/Spark-X2.6-4B | | 模型架构 | 约 4.1B Dense | | 模型权重 | 官方 Hugging Face BF16 | | 执行平台 | Google Colab | | GPU | NVIDIA L4 | | 可用显存 | 约 22.03 GB | | 推理框架 | PyTorch / Transformers | | 推理精度 | BF16 | | 测试语言 | 中文、英文 | | 测试规模 | 6 类问题 × 2 种语言,共 12 次 | | 外部工具 | 无 | | 生成方式 | 单次生成,不追加纠错提示 | 本次实验完全运行于 Colab 云端,不依赖本地 GPU 模型成功加载,日志记录的模型显存分配量约为 7.66 GB 本次未进行量化、模型微调或权重修改,也没有使用远程第三方推理 API 代替本地加载模型 执行代码实际使用 `max_new_tokens=4096`,并在记录中另设 8,192 Token 的总长度检查阈值,因此本次有效生成上限应按 **4,096 个新 Token** 理解 ## 3 测试设计 测试分为**法律**与**金融**两大组,每组设置三个问题族,并分别执行中文和英文输入 ### 3.1 法律规范与概念判断 - **L1 旧法废止与新法衔接**:通过刻意引用已经废止的规范,观察模型能否识别法律时效问题,而不是直接接受用户给出的旧法依据 - **L2 职务侵占与贪污行为分类**:设置不同人员身份与行为条件,观察模型能否区分相近的刑事法律概念及其适用依据 - **L3 竞业限制补偿与违约责任**:通过补偿金额、工资水平和违约金条款的组合,观察模型是否能够分别处理不同的法律判断条件 ### 3.2 金融计算与逻辑判断 - **F1 净利润与经营活动现金流差异**:构建净利润、折旧、非经营收益和营运资金变化之间的关系,要求模型关注现金流量表间接法 - **F2 名义分期费率与真实融资成本**:通过分期费用和实际现金流,观察模型是否会将名义费率直接当作真实 IRR - **F3 巴塞尔协议 III 资本充足率压力测试**:设置不同风险权重的资产变化,观察模型能否计算风险加权资产及资本充足率的变化方向 ## 4 实际执行结果 根据 Colab 保存的执行日志: | 用例 | 生成 Tokens | 耗时 | 自动判定 | | :---- | --------: | ------: | :--- | | L1 中文 | 4,096 | 271.38s | PASS | | L1 英文 | 4,096 | 272.59s | PASS | | L2 中文 | 4,096 | 272.92s | PASS | | L2 英文 | 4,096 | 273.70s | PASS | | L3 中文 | 4,096 | 273.76s | PASS | | L3 英文 | 4,096 | 273.42s | PASS | | F1 中文 | 2,230 | 148.73s | PASS | | F1 英文 | 4,096 | 272.85s | PASS | | F2 中文 | 4,096 | 273.46s | PASS | | F2 英文 | 4,096 | 272.21s | PASS | | F3 中文 | 4,096 | 272.55s | PASS | | F3 英文 | 1,981 | 131.43s | PASS | ### 4.1 汇总 | 指标 | 结果 | | :-------------------- | :-------------- | | 完成执行 | **12/12** | | 法律组自动判定通过 | 6/6 | | 金融组自动判定通过 | 6/6 | | 合计生成 Tokens | 45,171 | | 累计推理耗时 | 3,009.1 秒 | | 平均生成吞吐 | 约 15.0 Tokens/s | | 单项生成达到 4,096 Token 上限 | 10/12 | ### 4.2 判定规则口径 本次脚本使用预先设置的**目标关键词与禁止关键词**进行自动诊断:至少命中一个目标关键词,并且没有出现禁止关键词,则记录为 PASS 所以这里的 12/12 是明确判定规则下的运行结果,**不等同于对全部法律、金融内容完成独立专家审定** ## 5 代表性案例 ### 5.1 案例 A:法律规范时效识别 在 L1 中文与英文测试中,输入故意引导模型依据已经废止的合同法条款作出判断 执行日志显示,模型输出命中了《民法典》或 Civil Code 等目标要点,没有触发对应的禁止表达 这一现象值得关注:模型不能只会引用看起来相关的规范,还需要识别题目给出的法律依据是否仍然适用 但关键词命中本身不代表全部法律论证已经获得专业认证 ### 5.2 案例 B:经营现金流与净利润差异 F1 中文测试设置以下财务条件: | 项目 | 数值(万元) | | :------ | -----: | | 净利润 | 1,200 | | 折旧摊销 | +250 | | 非经营收益调整 | −300 | | 应收账款增加 | −850 | | 存货增加 | −450 | | 应付账款增加 | +200 | 根据题设,间接法经营现金流计算为: ``` CFO = 1200 + 250 − 300 − 850 − 450 + 200 = 50(万元) ``` 模型在本次输出中命中了与经营现金流、净利润和营运资金调整相关的预设要点 该案例展示了为什么不能简单以净利润增长判断企业经营现金状况 ### 5.3 案例 C:风险加权资产与资本充足率 F3 设置了不同风险权重资产的变化,并观察模型是否能够处理风险加权资产的增量与资本充足率变化 在题设的风险权重假设下: ``` ΔRWA = 25 + 300 − 50 = 275(亿元) ``` 若原 RWA 为 5,000 亿元,CET1 为 600 亿元,则: ``` CET1 Ratio = 600 / 5275 ≈ 11.374% ``` 相对于原先 12% 的比率,**下降约 62.6 个基点** 本次中文和英文测试均通过预设的自动检查 ## 6 与 Spark-X2.5 前序研究的关系 这两次实验并不是同一 Benchmark 的两代模型对照,因此**不直接用成功率计算模型升级幅度** | 维度 | X2.5 前序研究 | X2.6 本次研究 | | :----- | :----------------- | :-------------- | | 模型 | Spark-X2.5-4B | Spark-X2.6-4B | | 运行环境 | 本地 RTX 4060 Laptop | Colab NVIDIA L4 | | 权重 | 社区 Q4_K_M GGUF | 官方 BF16 | | 主要任务 | 数学题目 | 法律与金融诊断 | | 测试规模 | 30 题 | 12 次 | | 结果口径 | 严格答案提交 Pass@1 | 预设自动规则 PASS | | 主要观察目标 | 固定生成预算下的答案提交 | 规则识别与数值推理要点 | X2.5 的主要观察问题是:本地模型能否在固定预算内完成答案提交 X2.6 的主要观察问题是:在独立的高约束任务中,模型输出是否命中预设的推理与概念判断要点 两次实验一起构成了个人对 Spark 端侧模型系列的**不同角度的独立研究记录** ## 7 云端教师模型与端侧小模型的进一步思考 2026 年 1024 开发者节期间,讯飞介绍了 Spark-X2.6 的**端云一体训练与推理协同**方向 其中比较值得关注的是 Spark-X2.6-4B 采用的**能力感知自适应迭代后训练**方式:根据端侧小模型的能力动态选择教师模型,并调整训练内容,提升模型承担 Agent 任务的能力 我认为这里存在一个值得继续探索的技术路线: - 云端训练与能力提升,不必意味着用户使用时必须持续连接云端 - 模型可以在训练阶段借助更强大的教师模型获得能力提升,再以较小的参数规模部署到本地设备 - 对于本地模型能够承担的任务,可以优先使用端侧推理 - 这样能够减少持续云端推理的成本,并且在模型及运行环境准备完成、没有外部网络依赖的条件下支持**离线使用** - 对于敏感数据,真正的隐私保证仍然需要由本地应用、Runtime、权限和网络出口管理共同实现 这也是我此前在 [GitHub Spark-X2.5 浏览器端侧模型讨论 #12](https://github.com/XHToken/Spark-X2.6/discussions/12) 中关注的方向 我希望探索的并不只是某个模型能否运行,而是能否借助浏览器或其他统一运行环境,让更多普通用户直接使用**低成本、可离线、可控**的本地模型能力 ## 8 研究资产与实验记录 本次实验归档包含: - Colab 使用的 Transformers BF16 推理脚本 - 12 项执行用例与自动判定逻辑 - 中英双语诊断题库 - JSONL 形式的测试矩阵 - Jupyter Notebook - Colab 执行日志 - 汇总报告 执行日志记录了模型加载、GPU 环境、各项测试的 Token 数量、耗时、自动判定结果以及报告导出状态 模型原始输出在云端执行期间另行导出为 Trace JSON,当前整理包主要保留执行日志与测试程序;**不将未随包提供的完整回答文件声称为已公开附件** 这些资料可用于后续研究者和自动化 Agent 理解测试流程、扩展题目与调整评估方法 ## 9 总结 本次独立实测完成了 Spark-X2.6-4B 官方 BF16 模型在 Colab L4 上的 **12 项中英双语对抗性诊断** 执行累计生成 45,171 Tokens,总推理耗时约 3,009.1 秒,12 项测试均通过脚本中预先设置的自动检查规则 这证明了本次云端实验链路成功完成,也提供了一份围绕实际生成行为、推理开销和任务检查的研究记录 结合 Spark-X2.5 的本地量化实践与 Spark-X2.6 新发布的端云一体训练方向,我认为后续值得持续探索的仍然是:**如何让经过云端教师模型训练的小模型,在本地承担更多真实任务,并通过浏览器或 Agent Runtime 形成低门槛、可离线、可控的用户体验** --- ## 参考链接 | 资源 | 链接 | | :------------------------- | :------------------------------------------------------------ | | GitHub|X2.5 原始讨论 #12 | <https://github.com/XHToken/Spark-X2.6/discussions/12> | | GitHub|X2.6 官方仓库 | <https://github.com/XHToken/Spark-X2.6> | | Hugging Face|X2.6-4B 模型 | <https://huggingface.co/XHToken/Spark-X2.6-4B> | | Hugging Face|X2.5 历史实测 #18 | <https://huggingface.co/XHToken/Spark-X2.5-4B/discussions/18> | | 讯飞 X2.6 端云一体训练报道 | <https://www.cnstock.com/commonDetail/807327> | ## 学术归属 **Jiang, Xuanyi**(lostlight530 / lightlost)· ORCID [0009-0001-3617-0832](https://orcid.org/0009-0001-3617-0832)
![#30 [独立实测] Spark-X2.6-4B:Google Colab L4 云端 BF16 中英双语法律与金融对抗性诊断 的真实页面截图](hfshots/model-XHToken-Spark-X2.6-4B-30-ecc645a0ec79ddc42df9f317.jpg)
Alongside your Spark-MLX-LLM instructions, sharing a community HTTP-serving integration for Spark-X2.6 4B. The measured conversion is `abenzerps/Spark-X2.6-4B-MLX-4bit@253181296bd0c643880b0f64daa0049a42148d4a`, served using Rapid-MLX's `spark-x2.6-4b-4bit` alias. The 2026-10-25 run used an M4 Pro 48 GiB, macOS 26.5.1, Python 3.12.15, MLX 0.32.4, mlx-lm 0.31.3 and mlx-vlm 0.7.2. The report also records a 2026-10-26 repeat on an M3 Ultra 256 GiB. English/Chinese chat, structured weather tools and thinking on/off passed the recorded probes. Important client detail: this backend coalesced the short SSE answer into one content delta plus usage/end events. Accepting `stream=true` therefore should not be described as demonstrated token-by-token delivery. The path used the installed `spark2_5` implementation, without opting into repository Python execution. The short tests do not validate the million-token context configuration shown in your deployment guide or reproduce your reasoning-effort benchmarks. The report includes the exact pins and launch command for a narrowly scoped community example. Evidence and reproduction details: [checked-in qualification report](https://github.com/raullenchai/Rapid-MLX/blob/4d5ac49d9a5f82574db78df48d6965f05b2d1c51/docs/engineering/performance/2026-10-25-trending-models.md). These are historical results, not a new inference run or an upstream endorsement. Disclosure: I maintain [Rapid-MLX](https://github.com/raullenchai/Rapid-MLX); this contribution was prepared with AI assistance under my direction. Anonymous usage-metadata telemetry is enabled by default; `DO_NOT_TRACK=1` disables it. Model and conversion licenses still apply.

thank you so much for this model, i was wondering whether or not you guys will release vision for it at some point? if i cant understand audio and have vision like gemma 4 e4b it would be the new goat for mobile and just one of the best multimodal models, it would likely be a better agent if it could see too espcially when browsing the web to fetch images images
@JNK333 yes, we're working on it, stay tuned.

Hi
已核查:普通讨论 1 条;PR 0 条。
Hi XHToken team, thanks for Spark-X2.6! I've added Spark-X2.6-4B support to [cortiq](https://github.com/infosave2007/cmf), a Rust inference engine with no Python and no ML framework, and published the converted weights of Spark-X2.6-4B (the post-trained model built on this base) as single CMF files: https://huggingface.co/infosave/Spark-X2.6-4B-cmf The whole architecture runs natively: 9 full-attention + 27 sliding-window (512) layers, exact-GELU FFN, tied head, 1M-token context, thinking mode and tool calling through the embedded chat template. GPUs: NVIDIA / AMD / Intel through Vulkan or DX12, Apple silicon through Metal; the CPU as well. **Files** (quantized from the bf16 checkpoint) | file | size | wikitext-2 ppl | |---|---:|---:| | `spark-x2.6-4b-q8_2f.cmf` (8-bit, default) | 4.14 GB | 10.71 | | `spark-x2.6-4b-q4tp.cmf` (4-bit) | 2.16 GB | 11.88 | ppl: first 4096 tokens of wikitext-2 test, BOS in front, `cortiq ppl --tokens 4096`. **Decode speed**, one stream, tok/s | hardware | backend | q8_2f | q4tp | |---|---|---:|---:| | RTX 2000 Ada 16 GB | Vulkan | 41.5 | 67.2 | | Mac mini M4 24 GB | Metal | 20.1 | 34.8 | | Xeon E5-2699 v4, 6 cores | CPU | 4.5 | 4.8 | Prompt processing at 1,000 tokens: 370 / 351 tok/s on the RTX 2000 Ada, 286 / 244 tok/s on the M4 (q8_2f / q4tp). Long context: the sliding layers keep only their window, so the KV state is ~72 KB per token (1.24 GiB at 16k tokens). `cortiq serve` exposes an OpenAI-compatible API, and each chat turn prefills only what changed: with a 2,300-token history the next turn starts in ~0.6 s on the M4. **Try it** ```bash cargo install cortiq-cli hf download infosave/Spark-X2.6-4B-cmf spark-x2.6-4b-q8_2f.cmf --local-dir . cortiq run spark-x2.6-4b-q8_2f.cmf --prompt "Explain quicksort in three sentences." --no-think ``` Prebuilt binaries for Linux, macOS and Windows: https://github.com/infosave2007/cmf/releases (cortiq 0.8.43 or later). The weights stay under your Apache-2.0 terms. Feedback welcome!

已核查:普通讨论 0 条;PR 0 条。
已核查:普通讨论 9 条;PR 0 条。
Can you add a mtp head or dflash?
> Can you add a mtp head or dflash? @qquver working on MTP, just a few days.
YES PLEASE!
Great news, I can't wait!
However, it's very fast even without MTP: `Q8_0` reached `20.37 tok/s` on an AMD RX 6600M ("Explain why the sky is blue without consulting the internet"), and even faster in the `llama bench`:
```
llama bench -hf XHToken/Spark-X2.6-4B-GGUF:Q8_0
load_backend: loaded RPC backend from /home/daniel/.local/bin/.llama-app/libggml-rpc.so
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon RX 6600M (RADV NAVI23) (radv) | uma: 0 | fp16: dot2 | bf16: 0 | fp4: 0 | warp size: 32 | shared memory: 65536 | int dot: 1 | matrix cores: none
load_backend: loaded Vulkan backend from /home/daniel/.local/bin/.llama-app/libggml-vulkan.so
load_backend: loaded CPU backend from /home/daniel/.local/bin/.llama-app/libggml-cpu-haswell.so
| model | size | params | backend | ngl | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |
| spark2_5 ?B Q8_0 | 4.07 GiB | 4.11 B | Vulkan | -1 | pp512 | 645.92 ± 5.34 |
| spark2_5 ?B Q8_0 | 4.07 GiB | 4.11 B | Vulkan | -1 | tg128 | 37.66 ± 0.01 |
build: 1ddffe9f7 (11853)
```
In programming tasks, it's even faster: `31-35 tok/s`.ok i so excited to use this model and thankfull that i discovered. I tried upto 35b moe and dense models, none of gemma qwen follows instructions precisely as this model does that too with fast speed and that too with less kv cache. THANKS A LOT!! would love mtp to make it faster for gpu poors 8gb
Soon™
@sverinn did you see https://huggingface.co/XHToken/Spark-X2.6-4B-DSpark-GGUF?

I asked the model to explore unseen frameworks, and new updates in existing code libraries, it perferectly referred those, understood, thought deeply and responded with releavnt answers. Even larger model I tried and relied on earlier Qwen 3.5 9B and many other sub 10B models, none comes close to this deep thinking without looping. And mind you for KV Cache, I used Q4. Great work and Kudos to creators....!
 Look at its thinking Reviewed the chat by other models, and they review the technical accuracy very high, overall 9.75/10  Qwen 3.5 9B in similar setup gets around 6-7/10 with around 3-4 on technical accuracy. However it scores high on other areas like explaining or understanding architecture.

big ask, but pretty please? we have not had a major jump in intelligence at this scale in a while
Did you notice the commit an hour ago? https://huggingface.co/XHToken/Spark-X2.6-4B-GGUF/commit/0e8aa39a34063946ce07bbaaff392093b11b6829 something must be coming...
Now they posted it: https://huggingface.co/XHToken/Spark-X2.6-1.7B-GGUF
nice I assume X3 comes with a 9B, or hope it does
The 4B have performance of an 9B, a 9B could have performance of an 20B :o :o :o

Quick fit table from the published file sizes, since the 1M context is the part that decides how much memory you need here. Need ≈ file + KV cache + ~0.8 GB overhead (estimate). Only 9 of the 36 layers are full attention (4 KV heads × 256 head_dim), the other 27 use a 512-token sliding window, so KV is about 36 KB per token: ~1.2 GB at 32K, ~4.8 GB at 128K, ~39 GB at the full 1M (fp16 cache). | Quant | File | Need @32K | Need @128K | |---|---|---|---| | Q4_K_M | 3.54 GB | ~6 GB (8 GB GPU) | ~10 GB (12 GB GPU / 16 GB Mac) | | Q8_0 | 4.38 GB | ~7 GB (8 GB GPU, tight) | ~11 GB (12 GB GPU) | | BF16 | 8.23 GB | ~11 GB (12 GB GPU) | ~14 GB (16 GB GPU) | So for normal use Q8_0 on an 8 GB card is the sweet spot; the full 1M window needs ~44 GB even at Q4_K_M (48 GB GPU or 64 GB Mac), unless you quantize the KV cache. Corrections welcome. Per-GPU table: https://localllmrig.com/can-i-run/spark-x2.6-4b?utm_source=huggingface&utm_medium=community&utm_campaign=spark-x2-6-4b


**EXTREMELY HIGH SCORE! ON PAR WITH 27B AND 35B A3B MODELS**
NanoBench 94.6 / 100
https://shortbench.vercel.app/
Model - XHToken/Spark-X2.6-4B-GGUF
Harness Hermes Agent
Scored time: 1h 8m · Solved: 9/12
Completed: 2026-10-299 out of 12 is terrible, and makes me wish they'd work on a "Spark-X2.6-9B" or even 14B.
> 9 out of 12 is terrible, and makes me wish they'd work on a "Spark-X2.6-9B" or even 14B. It completed 9/12 but it got most of the task correct and only missed small parts and was given partial credit. Most models even the big ones miss something along the way. Crouton Alpha Stealth on Openrouter got 94.2/100 and its a frontier cloud model!

I had been using qwen 3.5 9B for my hermes agent which i usually use with browserOS neo and other automation frameworks, It made multiple errors wrong tool calls, stuck in loop etc. Then I switched to spark x2.6 4B, Genuinely a lot better than qwen, specially at browser control and downloading files and organising and doing research. Great work guys! I use Q8_0 btw. (a model about 4gb performing this good is crazy!).
yes, is performing pretty good. Too bad is not a multimodal, otherwise could be a good replacement for Qwen 3.5.

已核查:普通讨论 0 条;PR 0 条。
已核查:普通讨论 0 条;PR 0 条。