初始化项目,由ModelHub XC社区提供模型
Model: fableforge-ai/ReasonCritic-7B Source: Original Platform
This commit is contained in:
44
.gitattributes
vendored
Normal file
44
.gitattributes
vendored
Normal file
@@ -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
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -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.
|
||||
132
README.md
Normal file
132
README.md
Normal file
@@ -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
|
||||
|
||||
<div align="center">
|
||||
|
||||
**V2: 40% lower loss · 27K real training examples · Zero refusals · Runs on phones**
|
||||
|
||||
[](https://ollama.com/FableForge-AI/reasoncritic)
|
||||
[](https://huggingface.co/fableforge-ai/ReasonCritic-7B)
|
||||
[](#benchmark-results)
|
||||
[](#v2-improvements)
|
||||
[](#license)
|
||||
[](#available-quantizations)
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 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.*
|
||||
52
adapter_config.json
Normal file
52
adapter_config.json
Normal file
@@ -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
|
||||
}
|
||||
97
chat_template.jinja
Normal file
97
chat_template.jinja
Normal file
@@ -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 <tools></tools> XML tags:\n<tools>" }}
|
||||
{%- for tool in tools %}
|
||||
{{- "\n" }}
|
||||
{{- tool | tojson }}
|
||||
{%- endfor %}
|
||||
{{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|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 = '<tool_response>' %}
|
||||
{%- set tool_start_length = tool_start|length %}
|
||||
{%- set start_of_message = message.content[:tool_start_length] %}
|
||||
{%- set tool_end = '</tool_response>' %}
|
||||
{%- 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 '</think>' in message.content %}
|
||||
{%- set content = (message.content.split('</think>')|last).lstrip('\n') %}
|
||||
{%- set reasoning_content = (message.content.split('</think>')|first).rstrip('\n') %}
|
||||
{%- set reasoning_content = (reasoning_content.split('<think>')|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<think>\n' + reasoning_content.strip('\n') + '\n</think>\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 %}
|
||||
{{- '<tool_call>\n{"name": "' }}
|
||||
{{- tool_call.name }}
|
||||
{{- '", "arguments": ' }}
|
||||
{%- if tool_call.arguments is string %}
|
||||
{{- tool_call.arguments }}
|
||||
{%- else %}
|
||||
{{- tool_call.arguments | tojson }}
|
||||
{%- endif %}
|
||||
{{- '}\n</tool_call>' }}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
{{- '<|im_end|>\n' }}
|
||||
{%- elif message.role == "tool" %}
|
||||
{%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
|
||||
{{- '<|im_start|>user' }}
|
||||
{%- endif %}
|
||||
{{- '\n<tool_response>\n' }}
|
||||
{{- message.content }}
|
||||
{{- '\n</tool_response>' }}
|
||||
{%- 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 %}
|
||||
{{- '<think>\n\n</think>\n\n' }}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
72
config.json
Normal file
72
config.json
Normal file
@@ -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
|
||||
}
|
||||
13
generation_config.json
Normal file
13
generation_config.json
Normal file
@@ -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"
|
||||
}
|
||||
3
qwen3-8b.F16.gguf
Normal file
3
qwen3-8b.F16.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4819a085999bf3d9b1ea1a36d19563d1c55434de5f6fbeeb9b9788b0b16cbb26
|
||||
size 14428405760
|
||||
3
qwen3-8b.Q2_K.gguf
Normal file
3
qwen3-8b.Q2_K.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9dc3c42e72e27b3c0f1a9b738ead6bcb4923c54937b34fd77218da489d1dba06
|
||||
size 3281733152
|
||||
3
qwen3-8b.Q3_K_M.gguf
Normal file
3
qwen3-8b.Q3_K_M.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:836deb230c1a389278c1d97a1eaf6ac6ea2c1aa21067e8d5ee46fc4ff0c2374a
|
||||
size 4124161568
|
||||
3
qwen3-8b.Q4_0.gguf
Normal file
3
qwen3-8b.Q4_0.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f290682a7be04e8f6d423763b9a5590f9c879967a092e67bc52db32596810a27
|
||||
size 4774749728
|
||||
3
qwen3-8b.Q4_K_M.gguf
Normal file
3
qwen3-8b.Q4_K_M.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:331c47ab58ae47ccc024891579ab57b58ad06dbe4a5aefbaebf9b1de63c5cba8
|
||||
size 5027784224
|
||||
3
qwen3-8b.Q5_K_M.gguf
Normal file
3
qwen3-8b.Q5_K_M.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:45b11c0db24a306b83770706e462057d58c8c1dbabaa28034bbc2d348d6926e3
|
||||
size 5851112992
|
||||
3
qwen3-8b.Q6_K.gguf
Normal file
3
qwen3-8b.Q6_K.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2352b36314842e80c139b2b183f21dda0e5f53de0dbff4ebf41e5d2d34c4a6f9
|
||||
size 6725899808
|
||||
3
qwen3-8b.Q8_0.gguf
Normal file
3
qwen3-8b.Q8_0.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f9471d6c276e243d929f141642bdf305a3ccd9e4edf3fec05bf71b271de8e6f5
|
||||
size 8709518880
|
||||
169
rc7b_model_card.md
Normal file
169
rc7b_model_card.md
Normal file
@@ -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
|
||||
|
||||
<p align="center">
|
||||
<strong>A 7B parameter reasoning critic model that evaluates, scores, and improves logical reasoning chains.</strong>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
Part of the <a href="https://github.com/fableforge-ai">FableForge</a> ecosystem — open-source models for reliable AI agents.
|
||||
</p>
|
||||
9
special_tokens_map.json
Normal file
9
special_tokens_map.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"bos_token": "<s>",
|
||||
"eos_token": "</s>",
|
||||
"unk_token": "<unk>",
|
||||
"pad_token": "<pad>",
|
||||
"sep_token": "</s>",
|
||||
"cls_token": "<s>",
|
||||
"mask_token": "<mask>"
|
||||
}
|
||||
3
tokenizer.json
Normal file
3
tokenizer.json
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d7430e9138b76e93fb6f93462394d236b411111aef53cb421ba97d2691040cca
|
||||
size 11423114
|
||||
234
tokenizer_config.json
Normal file
234
tokenizer_config.json
Normal file
@@ -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": "<tool_call>",
|
||||
"single_word": false,
|
||||
"lstrip": false,
|
||||
"rstrip": false,
|
||||
"normalized": false,
|
||||
"special": false
|
||||
},
|
||||
"151658": {
|
||||
"content": "</tool_call>",
|
||||
"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": "<tool_response>",
|
||||
"single_word": false,
|
||||
"lstrip": false,
|
||||
"rstrip": false,
|
||||
"normalized": false,
|
||||
"special": false
|
||||
},
|
||||
"151666": {
|
||||
"content": "</tool_response>",
|
||||
"single_word": false,
|
||||
"lstrip": false,
|
||||
"rstrip": false,
|
||||
"normalized": false,
|
||||
"special": false
|
||||
},
|
||||
"151667": {
|
||||
"content": "<think>",
|
||||
"single_word": false,
|
||||
"lstrip": false,
|
||||
"rstrip": false,
|
||||
"normalized": false,
|
||||
"special": false
|
||||
},
|
||||
"151668": {
|
||||
"content": "</think>",
|
||||
"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 <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|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 = '<tool_response>' %}\n {%- set tool_start_length = tool_start|length %}\n {%- set start_of_message = message.content[:tool_start_length] %}\n {%- set tool_end = '</tool_response>' %}\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 '</think>' in message.content %}\n {%- set content = (message.content.split('</think>')|last).lstrip('\\n') %}\n {%- set reasoning_content = (message.content.split('</think>')|first).rstrip('\\n') %}\n {%- set reasoning_content = (reasoning_content.split('<think>')|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<think>\\n' + reasoning_content.strip('\\n') + '\\n</think>\\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 {{- '<tool_call>\\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</tool_call>' }}\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<tool_response>\\n' }}\n {{- message.content }}\n {{- '\\n</tool_response>' }}\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 {{- '<think>\\n\\n</think>\\n\\n' }}\n {%- endif %}\n{%- endif %}"
|
||||
}
|
||||
Reference in New Issue
Block a user