A 2B-parameter Qwen3.5 fine-tune, part of the Opus-Distil line in the reaperdoesntknow open-weight portfolio. Text-generation / reasoning model, trained with Unsloth + Hugging Face TRL.
Search public pages, research tools, and SAVRN solutions.
local, typed decisions from qwen3.5-2b. one shared state is prefetched once, each question is isolated, every allowed answer is scored as a complete token sequence, and python returns validated choice, score, and noul results.
What it takes to serve knivesysl-typed-2b (2.3B parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.
| Precision | Weights | Memory needed | Cheapest setup | Per hour | Also fits |
|---|---|---|---|---|---|
| 16-bit | 4.5 GB | 5.5 GB | 1x MI300X (192 GB) Vultr |
$1.85 | 1x H100 $1.99 · 1x MI325X $2.00 |
| 8-bit | 2.3 GB | 2.7 GB | 1x MI300X (192 GB) Vultr |
$1.85 | 1x H100 $1.99 · 1x MI325X $2.00 |
| 4-bit | 1.1 GB | 1.4 GB | 1x MI300X (192 GB) Vultr |
$1.85 | 1x H100 $1.99 · 1x MI325X $2.00 |
Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Sep 18, 2026.
By SRSWTI Inc., published under apache-2.0, revision 41c5156b3a79.
local, typed decisions from qwen3.5-2b. one shared state is prefetched once, each question is isolated, every allowed answer is scored as a complete token sequence, and python returns validated choice, score, and noul results. this is an inference system, not rlcd training and not a clone of typesafe jev. it never calls typesafe. the published qwen checkpoint is unchanged; fp8 changes execution precision only. probabilities are normalized support over the candidates you provide, not calibrated correctness probabilities. unlike ordinary autoregressive json generation, the model does not write a response token by token. it scores only the values supplied by the caller. complete-sequence…
local, typed decisions from qwen3.5-2b. one shared state is prefetched once, each question is isolated, every allowed answer is scored as a complete token sequence, and python returns validated choice, score, and noul results.
this is an inference system, not rlcd training and not a clone of typesafe jev. it never calls typesafe. the published qwen checkpoint is unchanged; fp8 changes execution precision only. probabilities are normalized support over the candidates you provide, not calibrated correctness probabilities.
this repository republishes the unchanged
Qwen/Qwen3.5-2Bweights at pinned upstream revision15852e8c16360a2fea060d615a32b45270f8a8fctogether with the knivesysl-typed model card and retained benchmark evidence. it is not a fine-tune. the fp8 and compiled modes are applied at runtime and are not stored in these weights.
benchmarks/precision_final/summary.json| desktop playground | mobile playground |
|---|---|
| illustrated implementation | interactive scoring calculator |
|---|---|
flowchart LR
A[structured state] --> B[shared qwen prefix]
B --> C1[isolated question 1]
B --> C2[isolated question 2]
B --> C3[isolated question n]
C1 --> D[complete candidate sequences]
C2 --> D
C3 --> D
D --> E[sum token log likelihoods]
E --> F[softmax over allowed answers]
F --> G[typed choice score and noul answers]
unlike ordinary autoregressive json generation, the model does not write a response token by token. it scores only the values supplied by the caller. complete-sequence scoring handles multi-token values and candidates that begin with the same token. each question gets its own prompt, so one answer cannot silently become context for another.
qwen3.5 uses hybrid attention, recurrent, and convolution state. knivesysl-typed copies the full hybrid cache for each candidate batch; copying attention kv alone is incorrect for this architecture.
sequenceDiagram
participant client
participant api
participant qwen as qwen3.5-2b
client->>api: state plus typed questions
api->>qwen: prefill shared state once
loop each isolated question
api->>qwen: question and allowed values
qwen-->>api: complete-sequence log likelihoods
end
api-->>client: validated answers probabilities usage metadata
| checkpoint | role | weights changed |
|---|---|---|
Qwen/Qwen3.5-2B |
live typed-decision engine and precision benchmarks | no |
Qwen/Qwen3.5-4B |
backend comparison benchmark only | no |
Qwen/Qwen2.5-1.5B-Instruct |
reference implementation benchmark only | no |
LiquidAI/LFM2.5-350M |
reference implementation benchmark only | no |
the live api intentionally exposes one model id, knivesysl-typed-2b, backed by pinned qwen3.5-2b revision 15852e8c16360a2fea060d615a32b45270f8a8fc. bf16, fp16, fp8, fp8_row_compiled, and int8 are runtime execution profiles of that unchanged checkpoint, not separately trained or serialized model weights.
recommended: cuda fp8_row_compiled. it uses torchao e4m3fn fp8 activations and per-row fp8 weights for 150 large backbone linear layers, then compiles those linears. embeddings, the lm head, and small recurrent gates remain at base precision. zero activation rows are clamped before scaling to avoid nan values created by padded hybrid-attention rows.
uv sync --extra fp8
KNIVESYSL_BACKEND=sdpa \
KNIVESYSL_PRECISION=fp8_row_compiled \
uv run python -m knivesysl_typed --host 127.0.0.1 --port 8765
use --host 0.0.0.0 only when remote clients need access. set KNIVESYSL_API_KEY before non-loopback binding; clients send it as Authorization: Bearer ....
supported execution profiles:
| profile | device | notes |
|---|---|---|
bf16 |
nvidia cuda or intel xpu | unquantized baseline |
fp16 |
nvidia cuda or intel xpu | unquantized fp16 |
fp8_row_compiled |
nvidia cuda | preferred; per-row fp8 plus compiled linears |
fp8 |
nvidia cuda or intel xpu where kernels support it | per-tensor fp8 benchmark profile |
fp8_row |
nvidia cuda or intel xpu where kernels support it | per-row fp8 benchmark profile |
int8 |
intel xpu | torchao int8 dynamic activation/weight path |
float32 |
intel xpu | reference recurrence path; not original training precision |
sdpa is the portable backend. cute_sm120 is an inference-only flashattention-4 cute backend for nvidia sm120 and requires cuda with a 16-bit base dtype. intel accelerated runs use fla with native torch convolution; intel float32 uses the torch reference recurrence. the implementation uses one accelerator per process; it does not shard across two intel cards.
checkpoint: Qwen/Qwen3.5-2B, revision 15852e8c16360a2fea060d615a32b45270f8a8fc. workload: 12 hand-written diagnostic states, 36 labeled fields, 6 unlabeled presets, 2 warmups, and 5 measured repeats. runs were serialized on one rtx 5090. repeats are latency samples, not independent quality samples.
| execution | mean server ms | median ms | nearest-rank p95 ms | field accuracy | exact response | peak allocated gpu |
|---|---|---|---|---|---|---|
| bf16 | 34.74 | 33.02 | 40.98 | 94.4% (34/36) | 83.3% (10/12) | 4.07 gib |
| fp16 | 32.82 | 31.77 | 35.88 | 94.4% (34/36) | 83.3% (10/12) | 4.07 gib |
| fp8 per-tensor | 78.67 | 78.02 | 81.05 | 91.7% (33/36) | 75.0% (9/12) | 2.82 gib |
| fp8 per-tensor compiled | 51.71 | 51.63 | 52.26 | 88.9% (32/36) | 66.7% (8/12) | 2.80 gib |
| fp8 per-row | 78.72 | 78.72 | 79.76 | 97.2% (35/36) | 91.7% (11/12) | 2.82 gib |
| fp8 per-row compiled | 48.46 | 48.44 | 48.97 | 97.2% (35/36) | 91.7% (11/12) | 2.80 gib |
fp16 was the fastest measured profile. we prefer compiled per-row fp8 because it retained the best observed diagnostic accuracy while reducing peak allocated gpu memory by about 31% versus fp16. it was about 1.48x slower than fp16 on this workload. the one-field fp8 difference on this small diagnostic set is not evidence that quantization generally improves model accuracy.
xychart-beta
title "rtx 5090 mean server latency — lower is better"
x-axis [bf16, fp16, fp8_tensor, fp8_tensor_compiled, fp8_row, fp8_row_compiled]
y-axis "milliseconds" 0 --> 85
bar [34.74, 32.82, 78.67, 51.71, 78.72, 48.46]
xychart-beta
title "rtx 5090 peak allocated gpu memory — lower is better"
x-axis [bf16, fp16, fp8_tensor, fp8_tensor_compiled, fp8_row, fp8_row_compiled]
y-axis "gib" 0 --> 4.5
bar [4.07, 4.07, 2.82, 2.80, 2.82, 2.80]
full retained measurements and limitations are in benchmarks/precision_final/summary.json. measurements were taken with a desktop and an existing idle demo running, so they are not isolated laboratory results. no int4 or nvidia int8 result was recorded.
start the service, then open:
http://127.0.0.1:8765/http://127.0.0.1:8765/?view=how-it-workshttp://127.0.0.1:8765/docshttp://127.0.0.1:8765/openapi.jsonGET /healthGET /v1/modelsGET /presetsPOST /v1/systemonecurl --fail-with-body http://127.0.0.1:8765/v1/systemone \
-H 'Content-Type: application/json' \
-d '{
"model": "knivesysl-typed-2b",
"state": {"message": "my card was charged twice. please refund the duplicate."},
"questions": {
"department": {
"type": "choice",
"instructions": "which team should handle this message?",
"criteria": {
"billing": "payments, charges, invoices, and refunds",
"technical": "bugs and integration failures",
"other": "requests outside billing and technical support"
}
},
"refund_requested": {
"type": "noul",
"instructions": "does the customer explicitly request a refund?"
},
"urgency": {
"type": "score",
"instructions": "how urgent is the request?",
"criteria": ["no deadline", "prompt response requested", "immediate resolution requested"]
}
}
}'
response fields:
answers.<id>.choice: selected option; probabilities contains normalized support for every supplied option.answers.<id>.score: probability-weighted level index; probabilities and legend preserve the level distribution and descriptions.answers.<id>.noul: normalized support for yes. noul intentionally has no separate confidence field.confidence: distribution concentration, defined as 1 - entropy(probabilities) / log(option_count); it is not empirical calibration.usage: input and scored token accounting. output_tokens is zero because no tokens are generated.metadata: latency, backend, checkpoint, precision, candidate count, forward-call count, and scoring definition.from knivesysl_typed import Choice, KnivesyslClient, Noul, Score
with KnivesyslClient(base_url="http://127.0.0.1:8765") as client:
result = client.system_one(
state={"message": "my card was charged twice. please refund the duplicate."},
questions={
"department": Choice(
instructions="which team should handle this message?",
criteria={
"billing": "payments, charges, invoices, and refunds",
"technical": "bugs and integration failures",
"other": "anything else",
},
),
"refund_requested": Noul(
instructions="does the customer explicitly request a refund?"
),
"frustration": Score(
instructions="how frustrated does the customer sound?",
criteria=["calm", "frustrated", "very angry"],
),
},
)
print(result.choices["department"].choice)
print(result.nouls["refund_requested"].noul)
print(result.scores["frustration"].score)
AsyncKnivesyslClient exposes the same system_one contract for async callers. remote callers only need http access; model weights and a gpu remain on the server.
output_tokens: 0 does not mean zero model work. every candidate continuation is still evaluated.uv sync --extra fp8
HF_HUB_OFFLINE=1 TOKENIZERS_PARALLELISM=false \
uv run pytest tests/test_engine.py tests/test_contract.py tests/test_live_precision.py
model revisions are pinned in benchmarks/results/model_revisions.json. generated benchmark logs, virtual environments, caches, and downloaded references are not source dependencies.
model architecture, tokenizer, configuration, and weights are from Qwen/Qwen3.5-2B, revision 15852e8c16360a2fea060d615a32b45270f8a8fc, under the Apache 2.0 license. knivesysl-typed changes the inference procedure, not the stored model parameters. use the GitHub implementation for typed complete-candidate scoring; ordinary Transformers generation from this repository behaves as the upstream Qwen checkpoint.
62 files, 4.6 GB in total. The weights are 1 file totalling 4.5 GB in safetensors.
| File | Type | Size | SHA-256 |
|---|---|---|---|
| model.safetensors-00001-of-00001.safetensors | Weights | 4.5 GB | aa33250c4fc6 |
| benchmarks/precision_final/cuda_bf16.json | Configuration | 391.0 KB | — |
| benchmarks/precision_final/cuda_bf16_compiled.json | Configuration | 396.2 KB | — |
| benchmarks/precision_final/cuda_fp16.json | Configuration | 390.2 KB | — |
| benchmarks/precision_final/cuda_fp8.json | Configuration | 420.7 KB | — |
| benchmarks/precision_final/cuda_fp8_compiled.json | Configuration | 420.2 KB | — |
| benchmarks/precision_final/cuda_fp8_row.json | Configuration | 425.8 KB | — |
| benchmarks/precision_final/cuda_fp8_row_compiled.json | Configuration | 424.4 KB | — |
| benchmarks/precision_final/matrix_status.json | Configuration | 7.5 KB | — |
| benchmarks/precision_final/summary.json | Configuration | 83.5 KB | — |
| benchmarks/precision_final/test_commands.json | Configuration | 1.9 KB | — |
| benchmarks/precision_final/verification.json | Configuration | 2.2 KB | — |
| benchmarks/precision_final/xpu_bf16.json | Configuration | 355.5 KB | — |
| benchmarks/precision_final/xpu_fp16.json | Configuration | 355.2 KB | — |
| benchmarks/precision_final/xpu_fp32.json | Configuration | 352.3 KB | — |
| benchmarks/precision_final/xpu_fp8.json | Configuration | 383.7 KB | — |
| benchmarks/precision_final/xpu_fp8_row.json | Configuration | 383.1 KB | — |
| benchmarks/precision_final/xpu_int8.json | Configuration | 388.2 KB | — |
| benchmarks/precision_final/xpu_int8_compiled.json | Configuration | 384.7 KB | — |
| config.json | Configuration | 2.9 KB | — |
| model.safetensors.index.json | Configuration | 64.5 KB | — |
| preprocessor_config.json | Configuration | 390 B | — |
| video_preprocessor_config.json | Configuration | 385 B | — |
| LICENSE | Documentation | 11.5 KB | — |
| README.md | Documentation | 12.8 KB | — |
| benchmarks/precision_final/cuda_bf16.log | Other | 5.9 KB | — |
| benchmarks/precision_final/cuda_bf16_compiled.log | Other | 5.9 KB | — |
| benchmarks/precision_final/cuda_bf16_tests.log | Other | 99 B | — |
| benchmarks/precision_final/cuda_bf16_tests.xml | Other | 1.6 KB | — |
| benchmarks/precision_final/cuda_fp16.log | Other | 6.1 KB | — |
| benchmarks/precision_final/cuda_fp16_tests.log | Other | 98 B | — |
| benchmarks/precision_final/cuda_fp16_tests.xml | Other | 1.2 KB | — |
| benchmarks/precision_final/cuda_fp8.log | Other | 5.9 KB | — |
| benchmarks/precision_final/cuda_fp8_compiled.log | Other | 6.3 KB | — |
| benchmarks/precision_final/cuda_fp8_row.log | Other | 5.9 KB | — |
| benchmarks/precision_final/cuda_fp8_row_compiled.log | Other | 6.3 KB | — |
| benchmarks/precision_final/rowwise_nan_diagnostic.log | Other | 5.6 KB | — |
| benchmarks/precision_final/xpu_bf16.log | Other | 6.1 KB | — |
| benchmarks/precision_final/xpu_bf16_tests.log | Other | 100 B | — |
| benchmarks/precision_final/xpu_bf16_tests.xml | Other | 1.6 KB | — |
| benchmarks/precision_final/xpu_fp16.log | Other | 6.3 KB | — |
| benchmarks/precision_final/xpu_fp16_tests.log | Other | 99 B | — |
| benchmarks/precision_final/xpu_fp16_tests.xml | Other | 1.2 KB | — |
| benchmarks/precision_final/xpu_fp32.log | Other | 7.2 KB | — |
| benchmarks/precision_final/xpu_fp32_tests.log | Other | 100 B | — |
| benchmarks/precision_final/xpu_fp32_tests.xml | Other | 1.6 KB | — |
| benchmarks/precision_final/xpu_fp8.log | Other | 6.2 KB | — |
| benchmarks/precision_final/xpu_fp8_row.log | Other | 6.2 KB | — |
| benchmarks/precision_final/xpu_int8.log | Other | 6.2 KB | — |
| benchmarks/precision_final/xpu_int8_compiled.log | Other | 6.5 KB | — |
| chat_template.jinja | Other | 7.8 KB | — |
| media/demo_desktop.webp | Other | 79.8 KB | — |
| media/demo_mobile.webp | Other | 73.9 KB | — |
| media/how_it_works_calculator.webp | Other | 57.2 KB | — |
| media/how_it_works_desktop.webp | Other | 316.9 KB | 7cc19a41e0dd |
| media/how_it_works_mobile.webp | Other | 270.6 KB | e715503d64a9 |
| media/how_it_works_mobile_walkthrough.webp | Other | 38.6 KB | — |
| .gitattributes | Repository | 1.7 KB | — |
| merges.txt | Tokenizer | 3.4 MB | — |
| tokenizer.json | Tokenizer | 12.8 MB | 5f9e4d4901a9 |
| tokenizer_config.json | Tokenizer | 16.7 KB | — |
| vocab.json | Tokenizer | 6.7 MB | — |
Released by SRSWTI Inc. through its official repository on Hugging Face. Read the license.
| Precision | Weights in memory |
|---|---|
| As published | 4.5 GB |
| 16-bit | 4.5 GB |
| 8-bit | 2.3 GB |
| 4-bit | 1.1 GB |
Weights only, from the published parameter count; the key-value cache and runtime add to this.
About 5.5 GB at 16-bit and 1.4 GB at 4-bit: the weights (2.3B parameters) plus a working margin. A long context needs more.
At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.
Yes. knivesysl-typed-2b is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.
262,144 tokens, from the maximum position embeddings in its published configuration.
A 2B-parameter Qwen3.5 fine-tune, part of the Opus-Distil line in the reaperdoesntknow open-weight portfolio. Text-generation / reasoning model, trained with Unsloth + Hugging Face TRL.
An English Qwen3.5 2B checkpoint associated with the Trendyol Cybersecurity Instruction Tuning Dataset and exported in Transformers / Safetensors format. This release is intended for research and local experimentation. The repository does not currently publish benchmark or safety-evaluation results, so the model should not be treated as a validated cybersecurity authority. The configuration identifies a Qwen3.5 conditional-generation architecture with text and vision components. Use a recent Transformers release that supports this architecture. Dependency and device behavior can vary across Transformers versions. Pin a tested environment for reproducible use. - Research on small-model…
A long-context DSpark speculator for Kimi K3. It supports context lengths of up to 1 million tokens. A DSpark speculator for the Kimi K3 target, enabling faster inference through speculative decoding. DSpark extends the DFlash parallel-draft backbone with a Markov logit-bias head and a per-position confidence head. This checkpoint was trained with SpecForge using hidden states from a live SGLang target engine. 64 query heads / 16 KV heads, and blocksize=7 acclen is SGLang's histogram-native request acceptance length, averaged within each question and then equally across questions. RULER V2 uses the 1M input configuration. Actual prompts span 1,000,432–1,047,925 tokens; partition acclen is…
Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support, with the following key features: - Uniquely support of seamless switching between thinking mode (for complex logical reasoning, math, and coding) and non-thinking mode (for efficient, general-purpose dialogue) within single model, ensuring optimal performance across various scenarios. - Significantly enhancement in its reasoning capabilities, surpassing previous QwQ (in thinking mode) and…
Topology-Aware Knowledge Distillation from Qwen3-30B-A3B → 1.7B TopologicalQwen is a 1.7B parameter model distilled from Qwen3-30B-A3B using Topological Knowledge Distillation (TKD) — a methodology that treats the teacher's output distribution over a concatenated token stream as a bounded variation (BV) function and decomposes knowledge transfer into three channels via the Mesh Fundamental Identity: 1. Smooth distillation (AC component) — Standard KL divergence over regions where the teacher's distribution varies continuously. This is what every other KD method does and stops at. 2. Jump corrections (D^j f) — Explicit correction terms at conceptual boundaries where the teacher's…
Extended Reasoning Distillation from Qwen3-30B-A3B-Thinking → 1.7B The most downloaded model in the Convergent Intelligence portfolio. Qwen3-1.7B-Thinking-Distil captures extended deliberation patterns from the Qwen3-30B-A3B Thinking teacher — the variant that generates long-form reasoning chains before committing to an answer — and compresses them into a 1.7B student via supervised fine-tuning on the longwriter-6k dataset. The Thinking teacher produces the richest signal of the three teacher variants in the DistilQwen family (Instruct, Thinking, Coder). Where Instruct distillation captures clean instruction-following and Coder captures hierarchical decomposition, Thinking distillation…