commit 804ec2410835b14a6d3a4b7243335885fe3cd51a Author: ModelHub XC Date: Sun Jul 5 18:19:16 2026 +0800 初始化项目,由ModelHub XC社区提供模型 Model: fableforge-ai/ReasonCritic-7B Source: Original Platform diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ba7005b --- /dev/null +++ b/.gitattributes @@ -0,0 +1,44 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +tokenizer.json filter=lfs diff=lfs merge=lfs -text +qwen3-8b.F16.gguf filter=lfs diff=lfs merge=lfs -text +qwen3-8b.Q2_K.gguf filter=lfs diff=lfs merge=lfs -text +qwen3-8b.Q3_K_M.gguf filter=lfs diff=lfs merge=lfs -text +qwen3-8b.Q4_0.gguf filter=lfs diff=lfs merge=lfs -text +qwen3-8b.Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text +qwen3-8b.Q5_K_M.gguf filter=lfs diff=lfs merge=lfs -text +qwen3-8b.Q6_K.gguf filter=lfs diff=lfs merge=lfs -text +qwen3-8b.Q8_0.gguf filter=lfs diff=lfs merge=lfs -text diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d1ffc4a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 FableForge Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..c1eb261 --- /dev/null +++ b/README.md @@ -0,0 +1,132 @@ +--- +license: apache-2.0 +language: + - en +base_model: unsloth/Qwen3-8B +base_model_relation: finetune +tags: + - reasoning + - critic + - verification + - uncensored + - qlora + - agent + - fableforge + - edge + - qwen3 + - 8b +library_name: transformers +inference: true +pipeline_tag: text-generation +--- + +# ReasonCritic-7B V2 — The Uncensored Reasoning Model + +
+ +**V2: 40% lower loss · 27K real training examples · Zero refusals · Runs on phones** + +[![Ollama](https://img.shields.io/badge/Ollama-FableForge--AI%2Freasoncritic-black?logo=ollama)](https://ollama.com/FableForge-AI/reasoncritic) +[![HuggingFace](https://img.shields.io/badge/HuggingFace-fableforge--ai%2FReasonCritic--7B-FFD21E?logo=huggingface)](https://huggingface.co/fableforge-ai/ReasonCritic-7B) +[![Refusals](https://img.shields.io/badge/refusals-0%25-brightgreen)](#benchmark-results) +[![Version](https://img.shields.io/badge/version-V2-blue)](#v2-improvements) +[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](#license) +[![Size](https://img.shields.io/badge/size-7B-purple)](#available-quantizations) + +
+ +--- + +## V2 Improvements (July 2026) + +| Metric | V1 | V2 | Improvement | +|--------|----|----|-------------| +| Loss | 1.277 | **0.761** | **40% lower** | +| Training data | 7,686 | **27,699** | 3.6x more | +| Data sources | Agent traces only | 6 sources | 6x diversity | +| Training time | 2.5h | 8h | 3.2x longer | + +## Quick Start + +### Ollama (8 sizes) +```bash +ollama run FableForge-AI/reasoncritic:q4_k_m # Recommended +ollama run FableForge-AI/reasoncritic:f16 # Full precision +``` + +### llama.cpp +```bash +./llama-cli --model qwen3-8b.Q4_K_M.gguf --prompt "Your prompt" +``` + +--- + +## Available Quantizations + +| File | Size | Best For | +|------|------|----------| +| `Q2_K.gguf` | 3.1 GB | Phones, Pi, 4GB RAM | +| `Q3_K_M.gguf` | 3.9 GB | Low-end phones, IoT | +| `Q4_0.gguf` | 4.5 GB | Fast basic inference | +| **`Q4_K_M.gguf`** | **4.8 GB** | **Recommended** | +| `Q5_K_M.gguf` | 5.6 GB | High quality | +| `Q6_K.gguf` | 6.4 GB | Pro quality | +| `Q8_0.gguf` | 8.3 GB | Near-lossless | +| `F16.gguf` | 13.8 GB | Full precision | + +## Benchmark Results + +| Test | Score | Max | +|------|-------|-----| +| Censorship Resistance | **5** | 5 | +| Code Generation | **3** | 3 | +| Reasoning | **4** | 5 | +| Tool Use | **4** | 5 | +| Narrative | **5** | 5 | +| **Total** | **21/23 (91%)** | | + +Zero refusals across all prompts. + +## Hardware Requirements + +| Hardware | Best Quant | +|----------|------------| +| Phone (4GB RAM) | Q2_K | +| Raspberry Pi | Q2_K | +| Laptop (8GB RAM) | Q4_K_M | +| Gaming PC (12GB VRAM) | Q5_K_M | +| Mac M1/M2 (16GB) | Q4_K_M | +| Server (32GB+) | Q8_0 / F16 | + +## Training Details + +| Parameter | Value | +|-----------|-------| +| Base Model | Qwen3-8B (4-bit QLoRA) | +| LoRA Rank | 16 (alpha=16) | +| Trainable Params | 43.6M (0.53% of 8.2B) | +| Training Data | 27,699 real examples | +| Epochs | 3 | +| Final Loss | 0.761 | +| Hardware | NVIDIA A40 (46GB) | + +## FableForge Ecosystem + +| Model | Size | Best For | +|-------|------|----------| +| ShellWhisperer | 986 MB | Shell commands, ultra-fast | +| **ReasonCritic-7B** ⭐ | **3.1-16 GB** | **Reasoning + zero refusals** | +| NEXUS-Coder | 488 MB - 2.9 GB | Domain coding | +| NEXUS-Security | 488 MB - 2.9 GB | Cybersecurity | +| NEXUS-Medical | 488 MB - 2.9 GB | Medical | +| NEXUS-Legal | 488 MB - 2.9 GB | Legal | +| NEXUS-Finance | 488 MB - 2.9 GB | Finance | +| NEXUS-Science | 488 MB - 2.9 GB | Science | + +## License + +Apache 2.0 — commercial use allowed. + +--- + +*Part of the [FableForge AI](https://huggingface.co/fableforge-ai) ecosystem. Zero Limits. Pure Intelligence.* diff --git a/adapter_config.json b/adapter_config.json new file mode 100644 index 0000000..69a23e7 --- /dev/null +++ b/adapter_config.json @@ -0,0 +1,52 @@ +{ + "alora_invocation_tokens": null, + "alpha_pattern": {}, + "arrow_config": null, + "auto_mapping": { + "base_model_class": "Qwen3ForCausalLM", + "parent_library": "transformers.models.qwen3.modeling_qwen3", + "unsloth_fixed": true + }, + "base_model_name_or_path": "unsloth/qwen3-8b-unsloth-bnb-4bit", + "bias": "none", + "corda_config": null, + "ensure_weight_tying": false, + "eva_config": null, + "exclude_modules": null, + "fan_in_fan_out": false, + "inference_mode": true, + "init_lora_weights": true, + "layer_replication": null, + "layers_pattern": null, + "layers_to_transform": null, + "loftq_config": {}, + "lora_alpha": 16, + "lora_bias": false, + "lora_dropout": 0, + "lora_ga_config": null, + "megatron_config": null, + "megatron_core": "megatron.core", + "modules_to_save": null, + "peft_type": "LORA", + "peft_version": "0.19.1", + "qalora_group_size": 16, + "r": 16, + "rank_pattern": {}, + "revision": null, + "target_modules": [ + "gate_proj", + "o_proj", + "down_proj", + "k_proj", + "q_proj", + "up_proj", + "v_proj" + ], + "target_parameters": null, + "task_type": "CAUSAL_LM", + "trainable_token_indices": null, + "use_bdlora": null, + "use_dora": false, + "use_qalora": false, + "use_rslora": false +} \ No newline at end of file diff --git a/chat_template.jinja b/chat_template.jinja new file mode 100644 index 0000000..ba89998 --- /dev/null +++ b/chat_template.jinja @@ -0,0 +1,97 @@ +{%- if tools %} + {{- '<|im_start|>system\n' }} + {%- if messages[0].role == 'system' %} + {{- messages[0].content + '\n\n' }} + {%- endif %} + {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n" }} + {%- for tool in tools %} + {{- "\n" }} + {{- tool | tojson }} + {%- endfor %} + {{- "\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n<|im_end|>\n" }} +{%- else %} + {%- if messages[0].role == 'system' %} + {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }} + {%- endif %} +{%- endif %} +{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %} +{%- for forward_message in messages %} + {%- set index = (messages|length - 1) - loop.index0 %} + {%- set message = messages[index] %} + {%- set tool_start = '' %} + {%- set tool_start_length = tool_start|length %} + {%- set start_of_message = message.content[:tool_start_length] %} + {%- set tool_end = '' %} + {%- set tool_end_length = tool_end|length %} + {%- set start_pos = (message.content|length) - tool_end_length %} + {%- if start_pos < 0 %} + {%- set start_pos = 0 %} + {%- endif %} + {%- set end_of_message = message.content[start_pos:] %} + {%- if ns.multi_step_tool and message.role == "user" and not(start_of_message == tool_start and end_of_message == tool_end) %} + {%- set ns.multi_step_tool = false %} + {%- set ns.last_query_index = index %} + {%- endif %} +{%- endfor %} +{%- for message in messages %} + {%- if (message.role == "user") or (message.role == "system" and not loop.first) %} + {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }} + {%- elif message.role == "assistant" %} + {%- set content = message.content %} + {%- set reasoning_content = '' %} + {%- if message.reasoning_content is defined and message.reasoning_content is not none %} + {%- set reasoning_content = message.reasoning_content %} + {%- else %} + {%- if '' in message.content %} + {%- set content = (message.content.split('')|last).lstrip('\n') %} + {%- set reasoning_content = (message.content.split('')|first).rstrip('\n') %} + {%- set reasoning_content = (reasoning_content.split('')|last).lstrip('\n') %} + {%- endif %} + {%- endif %} + {%- if loop.index0 > ns.last_query_index %} + {%- if loop.last or (not loop.last and reasoning_content) %} + {{- '<|im_start|>' + message.role + '\n\n' + reasoning_content.strip('\n') + '\n\n\n' + content.lstrip('\n') }} + {%- else %} + {{- '<|im_start|>' + message.role + '\n' + content }} + {%- endif %} + {%- else %} + {{- '<|im_start|>' + message.role + '\n' + content }} + {%- endif %} + {%- if message.tool_calls %} + {%- for tool_call in message.tool_calls %} + {%- if (loop.first and content) or (not loop.first) %} + {{- '\n' }} + {%- endif %} + {%- if tool_call.function %} + {%- set tool_call = tool_call.function %} + {%- endif %} + {{- '\n{"name": "' }} + {{- tool_call.name }} + {{- '", "arguments": ' }} + {%- if tool_call.arguments is string %} + {{- tool_call.arguments }} + {%- else %} + {{- tool_call.arguments | tojson }} + {%- endif %} + {{- '}\n' }} + {%- endfor %} + {%- endif %} + {{- '<|im_end|>\n' }} + {%- elif message.role == "tool" %} + {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %} + {{- '<|im_start|>user' }} + {%- endif %} + {{- '\n\n' }} + {{- message.content }} + {{- '\n' }} + {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} + {{- '<|im_end|>\n' }} + {%- endif %} + {%- endif %} +{%- endfor %} +{%- if add_generation_prompt %} + {{- '<|im_start|>assistant\n' }} + {%- if enable_thinking is defined and enable_thinking is false %} + {{- '\n\n\n\n' }} + {%- endif %} +{%- endif %} \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..cf70028 --- /dev/null +++ b/config.json @@ -0,0 +1,72 @@ +{ + "architectures": [ + "Qwen3ForCausalLM" + ], + "attention_bias": false, + "attention_dropout": 0.0, + "bos_token_id": null, + "torch_dtype": "bfloat16", + "eos_token_id": 151645, + "head_dim": 128, + "hidden_act": "silu", + "hidden_size": 4096, + "initializer_range": 0.02, + "intermediate_size": 12288, + "layer_types": [ + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention" + ], + "max_position_embeddings": 40960, + "max_window_layers": 36, + "model_type": "qwen3", + "num_attention_heads": 32, + "num_hidden_layers": 36, + "num_key_value_heads": 8, + "pad_token_id": 151669, + "rms_norm_eps": 1e-06, + "rope_parameters": { + "rope_theta": 1000000, + "rope_type": "default" + }, + "sliding_window": null, + "tie_word_embeddings": false, + "unsloth_fixed": true, + "unsloth_version": "2026.6.9", + "use_cache": true, + "use_sliding_window": false, + "vocab_size": 151936 +} \ No newline at end of file diff --git a/generation_config.json b/generation_config.json new file mode 100644 index 0000000..a9abf9b --- /dev/null +++ b/generation_config.json @@ -0,0 +1,13 @@ +{ + "do_sample": true, + "eos_token_id": [ + 151645, + 151643 + ], + "max_length": 40960, + "pad_token_id": 151669, + "temperature": 0.6, + "top_k": 20, + "top_p": 0.95, + "transformers_version": "5.5.0" +} diff --git a/qwen3-8b.F16.gguf b/qwen3-8b.F16.gguf new file mode 100644 index 0000000..fadd250 --- /dev/null +++ b/qwen3-8b.F16.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4819a085999bf3d9b1ea1a36d19563d1c55434de5f6fbeeb9b9788b0b16cbb26 +size 14428405760 diff --git a/qwen3-8b.Q2_K.gguf b/qwen3-8b.Q2_K.gguf new file mode 100644 index 0000000..7ff9d83 --- /dev/null +++ b/qwen3-8b.Q2_K.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dc3c42e72e27b3c0f1a9b738ead6bcb4923c54937b34fd77218da489d1dba06 +size 3281733152 diff --git a/qwen3-8b.Q3_K_M.gguf b/qwen3-8b.Q3_K_M.gguf new file mode 100644 index 0000000..8171768 --- /dev/null +++ b/qwen3-8b.Q3_K_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:836deb230c1a389278c1d97a1eaf6ac6ea2c1aa21067e8d5ee46fc4ff0c2374a +size 4124161568 diff --git a/qwen3-8b.Q4_0.gguf b/qwen3-8b.Q4_0.gguf new file mode 100644 index 0000000..83baad4 --- /dev/null +++ b/qwen3-8b.Q4_0.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f290682a7be04e8f6d423763b9a5590f9c879967a092e67bc52db32596810a27 +size 4774749728 diff --git a/qwen3-8b.Q4_K_M.gguf b/qwen3-8b.Q4_K_M.gguf new file mode 100644 index 0000000..49634ca --- /dev/null +++ b/qwen3-8b.Q4_K_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:331c47ab58ae47ccc024891579ab57b58ad06dbe4a5aefbaebf9b1de63c5cba8 +size 5027784224 diff --git a/qwen3-8b.Q5_K_M.gguf b/qwen3-8b.Q5_K_M.gguf new file mode 100644 index 0000000..678c329 --- /dev/null +++ b/qwen3-8b.Q5_K_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45b11c0db24a306b83770706e462057d58c8c1dbabaa28034bbc2d348d6926e3 +size 5851112992 diff --git a/qwen3-8b.Q6_K.gguf b/qwen3-8b.Q6_K.gguf new file mode 100644 index 0000000..0e63cdc --- /dev/null +++ b/qwen3-8b.Q6_K.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2352b36314842e80c139b2b183f21dda0e5f53de0dbff4ebf41e5d2d34c4a6f9 +size 6725899808 diff --git a/qwen3-8b.Q8_0.gguf b/qwen3-8b.Q8_0.gguf new file mode 100644 index 0000000..77004be --- /dev/null +++ b/qwen3-8b.Q8_0.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9471d6c276e243d929f141642bdf305a3ccd9e4edf3fec05bf71b271de8e6f5 +size 8709518880 diff --git a/rc7b_model_card.md b/rc7b_model_card.md new file mode 100644 index 0000000..022b827 --- /dev/null +++ b/rc7b_model_card.md @@ -0,0 +1,169 @@ +--- +license: apache-2.0 +language: + - en +base_model: unsloth/Qwen3-8B +tags: + - reasoning + - critic + - verification + - uncensored + - qlora + - unsloth + - agent + - fableforge +pipeline_tag: text-generation +--- + +# ReasonCritic-7B — Verification & Critique Model + +

+ A 7B parameter reasoning critic model that evaluates, scores, and improves logical reasoning chains. +

+ +--- + +## Overview + +ReasonCritic-7B is a fine-tuned Qwen3-8B model specialized in **reasoning verification** — it evaluates logical chains, identifies fallacies, scores confidence, and produces structured PASS/FAIL verdicts with actionable suggestions. + +Trained on **7,686 examples** distilled from 243 real Claude Code agent sessions, covering code generation, chain-of-thought reasoning, narrative quality, tool-use correctness, and uncensored response behavior. + +Part of the **FableForge ecosystem** — open-source models for building reliable AI agents. + +## Training Details + +| Parameter | Value | +|-----------|-------| +| Base Model | `unsloth/Qwen3-8B` (4-bit) | +| Method | QLoRA (Unsloth + SFTTrainer) | +| LoRA Rank | 16 (α=16, dropout=0) | +| Target Modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj | +| Trainable Params | 43.6M (0.53% of 8.2B) | +| Training Data | 7,686 examples (3 epochs) | +| Max Seq Length | 4096 | +| Batch Size | 8 × 2 (effective 16) | +| Learning Rate | 2e-4 (linear, warmup 3%) | +| Optimizer | adamw_8bit | +| Precision | bf16 | +| Hardware | NVIDIA A40 (46GB VRAM) | +| Training Time | ~2.5 hours | +| Final Loss | 2.181 → 1.277 | + +## Quantization Options + +All quantizations use llama.cpp GGUF format. Pick based on your hardware: + +| Quant | Size | RAM Needed | Best For | +|-------|------|-----------|----------| +| Q2_K | ~3.0 GB | ~4 GB | Phones, Raspberry Pi, ultra-low-end | +| Q3_K_M | ~3.5 GB | ~5 GB | Low-end phones, IoT devices | +| Q4_0 | ~4.3 GB | ~6 GB | Fast inference, older GPUs | +| **Q4_K_M** | **~4.7 GB** | **~6 GB** | **Balanced (recommended)** | +| Q5_K_M | ~5.5 GB | ~7 GB | Good quality, mid-range | +| Q6_K | ~6.5 GB | ~8 GB | High quality | +| Q8_0 | ~8.5 GB | ~10 GB | Very high quality | +| F16 | ~16 GB | ~18 GB | Full precision | + +### Phone/Mobile Recommendations +- **Android (6GB+ RAM)**: Q4_K_M or Q3_K_M +- **Android (4GB RAM)**: Q2_K +- **iPhone (6GB+)**: Q4_K_M via MLC/MLX +- **Raspberry Pi 8GB**: Q3_K_M + +## Quick Start + +### Ollama +```bash +# Recommended (Q4_K_M) +ollama run fableforge-ai/reasoncritic-7b + +# Specific quant +ollama run fableforge-ai/reasoncritic-7b:q2_k +ollama run fableforge-ai/reasoncritic-7b:q3_k_m +ollama run fableforge-ai/reasoncritic-7b:q8_0 +``` + +### llama.cpp +```bash +./llama-cli \ + --model reasoncritic-7b.Q4_K_M.gguf \ + --prompt "Evaluate this reasoning: All birds fly. Penguins are birds. Therefore penguins fly." \ + --n-predict 512 \ + --temp 0.3 +``` + +### Python (transformers) +```python +from transformers import AutoModelForCausalLM, AutoTokenizer + +model = AutoModelForCausalLM.from_pretrained("fableforge-ai/ReasonCritic-7B") +tokenizer = AutoTokenizer.from_pretrained("fableforge-ai/ReasonCritic-7B") + +messages = [{"role": "user", "content": "Verify: If A>B and B>C, then A>C. Is this valid?"}] +inputs = tokenizer.apply_chat_template(messages, return_tensors="pt") +output = model.generate(inputs, max_new_tokens=512) +print(tokenizer.decode(output[0])) +``` + +## System Prompt + +``` +You are ReasonCritic-7B, a 7B parameter reasoning critic model. You evaluate, score, and improve logical reasoning chains. You identify fallacies, unsupported claims, and logical gaps in agent outputs. You produce structured verification results with PASS/FAIL verdicts, confidence scores, issue lists, and actionable suggestions. You are part of the FableForge ecosystem — open-source projects for building reliable AI agents. +``` + +## Capabilities + +- **Logical Verification**: Identifies fallacies, circular reasoning, and unsupported claims +- **Confidence Scoring**: Produces 0-1 confidence scores with justification +- **Structured Output**: PASS/FAIL verdicts with issue lists and suggestions +- **Code Review**: Evaluates code correctness, edge cases, and best practices +- **Chain-of-Thought Critique**: Analyzes multi-step reasoning for gaps +- **Uncensored**: Trained to not refuse legitimate requests (0% refusal rate in testing) + +## Benchmark Results + +| Category | Score | Refusal Rate | +|----------|-------|-------------| +| Code Gen | 0.74 | 0% | +| CoT Reasoning | 0.75 | 0% | +| Narrative | 0.85 | 0% | +| Tool Use | 0.90 | 0% | +| Refusal Test | 1.00 | 0% | +| **Overall** | **0.84** | **0%** | + +## Intended Use + +- Agent reasoning verification pipelines +- Automated code review systems +- LLM output quality gating +- Educational reasoning tools +- Research on reasoning chain analysis + +## Limitations + +- 7B size limits complex reasoning depth +- Not a replacement for human review in critical systems +- Uncensored training means it will not refuse harmful requests — use with appropriate guardrails +- May hallucinate in domains outside training data + +## Citation + +```bibtex +@misc{reasoncritic-7b, + title={ReasonCritic-7B: A Reasoning Verification and Critique Model}, + author={FableForge AI}, + year={2026}, + url={https://huggingface.co/fableforge-ai/ReasonCritic-7B} +} +``` + +## License + +Apache 2.0 — commercial use allowed. + +--- + +

+ Part of the FableForge ecosystem — open-source models for reliable AI agents. +

diff --git a/special_tokens_map.json b/special_tokens_map.json new file mode 100644 index 0000000..9761784 --- /dev/null +++ b/special_tokens_map.json @@ -0,0 +1,9 @@ +{ + "bos_token": "", + "eos_token": "", + "unk_token": "", + "pad_token": "", + "sep_token": "", + "cls_token": "", + "mask_token": "" +} \ No newline at end of file diff --git a/tokenizer.json b/tokenizer.json new file mode 100644 index 0000000..7edcf72 --- /dev/null +++ b/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7430e9138b76e93fb6f93462394d236b411111aef53cb421ba97d2691040cca +size 11423114 diff --git a/tokenizer_config.json b/tokenizer_config.json new file mode 100644 index 0000000..58493d0 --- /dev/null +++ b/tokenizer_config.json @@ -0,0 +1,234 @@ +{ + "add_prefix_space": false, + "backend": "tokenizers", + "bos_token": null, + "clean_up_tokenization_spaces": false, + "eos_token": "<|im_end|>", + "errors": "replace", + "is_local": false, + "model_max_length": 40960, + "pad_token": "<|PAD_TOKEN|>", + "padding_side": "left", + "split_special_tokens": false, + "tokenizer_class": "Qwen2Tokenizer", + "unk_token": null, + "added_tokens_decoder": { + "151643": { + "content": "<|endoftext|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151644": { + "content": "<|im_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151645": { + "content": "<|im_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151646": { + "content": "<|object_ref_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151647": { + "content": "<|object_ref_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151648": { + "content": "<|box_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151649": { + "content": "<|box_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151650": { + "content": "<|quad_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151651": { + "content": "<|quad_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151652": { + "content": "<|vision_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151653": { + "content": "<|vision_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151654": { + "content": "<|vision_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151655": { + "content": "<|image_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151656": { + "content": "<|video_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151657": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151658": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151659": { + "content": "<|fim_prefix|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151660": { + "content": "<|fim_middle|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151661": { + "content": "<|fim_suffix|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151662": { + "content": "<|fim_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151663": { + "content": "<|repo_name|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151664": { + "content": "<|file_sep|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151665": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151666": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151667": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151668": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151669": { + "content": "<|PAD_TOKEN|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + } + }, + "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within XML tags:\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\\n\\nFor each function call, return a json object with function name and arguments within XML tags:\\n\\n{\\\"name\\\": , \\\"arguments\\\": }\\n<|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for forward_message in messages %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- set message = messages[index] %}\n {%- set tool_start = '' %}\n {%- set tool_start_length = tool_start|length %}\n {%- set start_of_message = message.content[:tool_start_length] %}\n {%- set tool_end = '' %}\n {%- set tool_end_length = tool_end|length %}\n {%- set start_pos = (message.content|length) - tool_end_length %}\n {%- if start_pos < 0 %}\n {%- set start_pos = 0 %}\n {%- endif %}\n {%- set end_of_message = message.content[start_pos:] %}\n {%- if ns.multi_step_tool and message.role == \"user\" and not(start_of_message == tool_start and end_of_message == tool_end) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set content = message.content %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is defined and message.reasoning_content is not none %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '
' in message.content %}\n {%- set content = (message.content.split('')|last).lstrip('\\n') %}\n {%- set reasoning_content = (message.content.split('')|first).rstrip('\\n') %}\n {%- set reasoning_content = (reasoning_content.split('')|last).lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content.strip('\\n') + '\\n\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- message.content }}\n {{- '\\n' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is false %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}" +} \ No newline at end of file