Files
ModelHub XC 078bb5f6b6 初始化项目,由ModelHub XC社区提供模型
Model: Fordentinc/book-builder-bookwriter-v1
Source: Original Platform
2026-08-05 12:49:18 +08:00

235 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
license: apache-2.0
language:
- en
tags:
- prose
- novel-writing
- bookbuilder
- creative-writing
- qlora
- qwen2.5
- wip
- beta
- early-release
base_model: Qwen/Qwen2.5-7B
pipeline_tag: text-generation
extra_gated_description: "This is an early-release v1 model with known limitations. A larger v2 is in development. Please read the Work in Progress section before use."
---
# 🚧 WORK IN PROGRESS — v1 EARLY RELEASE 🚧
# A bigger, better model (v2) is in development.
This page is the v1 early release of `book-builder-bookwriter-v1`. It is **not the final model**. Skim the rest of this card before you generate anything so you know what you're getting and what you're not.
---
# book-builder-bookwriter-v1
A 7.6B-parameter prose-writing model fine-tuned on 10,211 human-authored novels (310,316 chapters, ~1.82 billion tokens) with a strict story-bible-to-chapter format. Built for [BookBuilder](https://book-builder.net) to generate novel chapters from structured story bibles.
> ## ⚠ Work in Progress (v1, early release)
>
> This is an **early checkpoint** of an ongoing training run. Training was paused at step 5000 / 9697 (~52% of one epoch) so the artifacts could be released publicly while the larger run continues.
>
> **Known limitations of v1:**
> - Treats bibles as style prompts, not strict plot instructions. Expect drift from the synopsis on one-shot generation.
> - Does not reliably follow "FORBIDDEN" rules, character role assignments, or per-character constraints in rich BookBuilder-style bibles.
> - Loaded keywords in synopses (proper names like "Stillwater", specific years like "1947") can trigger off-topic associations from the training corpus.
> - On longer generations, may drift into paragraph-level repetition loops without the tuned sampling defaults in `ollama/Modelfile`.
>
> **What's coming:**
> - **v2 (Q3/Q4 2026):** Larger base model (Qwen 2.5 14B or 32B) + synthesized instruction-following data so the model can actually obey FORBIDDEN sections, distinguish protagonists from antagonists, and follow beat sheets. This addresses the main v1 limitation.
> - **v1 continuation to step 9697:** the LoRA may be taken to the full single-epoch checkpoint and re-released as `book-builder-bookwriter-v1.1` if testing shows it's worth the additional training compute. The resumable training state is preserved at branch [`resumable-step-5000`](https://huggingface.co/Fordentinc/book-builder-bookwriter-v1/tree/resumable-step-5000).
>
> **Best use for v1 right now:** as a prose-style backbone inside a structured pipeline (like BookBuilder itself) that provides per-chapter beat sheets and plot anchors at generation time. The pipeline supplies the discipline the v1 model can't enforce on its own. For one-shot "give me a chapter from a synopsis" use, v1 produces readable prose but will frequently drift from the intended plot.
**This is NOT a chat model. Do not prompt it like ChatGPT. See "How to use" below.**
## What this model does
You write a **Story Bible** in the format shown below (or fill in the [template](./bible_template.txt)).
You give the model the bible plus `### Chapter`.
The model writes the chapter prose.
It will not answer questions. It will not respond to "Write me a story about X." It only continues prose conditioned on the bible context.
## Format the model expects
Every training example looked exactly like this:
```
### Bible
Title: [book title]
Author: [author name]
Genre: [genre]
Publisher: [publisher]
Synopsis: [1-3 paragraphs describing the book]
### Genre
[genre]
### Chapter
[chapter title]
[chapter prose...]
```
Your prompt MUST end at `### Chapter\n[chapter title]\n\n` and the model fills in the prose.
## How to use
### Option 1: Ollama (easiest)
**IMPORTANT:** A plain `ollama pull` from HF discards any Modelfile parameters in the repo, so Ollama runs the model with its default sampling — which on long completion prompts causes repetition loops and over-long generations. **Use the setup script below** to register the model under the name `bookbuilder` with tuned defaults that prevent both problems.
**One-shot setup:**
```bash
curl -sSL https://huggingface.co/Fordentinc/book-builder-bookwriter-v1/resolve/main/ollama/setup_ollama.sh | bash
# Optional: pass a quant tag, default is Q5_K_M
# curl -sSL https://huggingface.co/Fordentinc/book-builder-bookwriter-v1/resolve/main/ollama/setup_ollama.sh | bash -s Q8_0
```
Then:
```bash
ollama run bookbuilder < your_bible.txt
```
The script pulls the GGUF, builds a local `Modelfile` with the right `repeat_penalty 1.18`, `num_predict 2500`, and stop tokens, and registers the result as `bookbuilder`.
**If you'd rather pull manually** (without the loop fix), you need to pass sampling flags every time:
```bash
ollama pull hf.co/Fordentinc/book-builder-bookwriter-v1:Q5_K_M
ollama run hf.co/Fordentinc/book-builder-bookwriter-v1:Q5_K_M \
--num-predict 2500 --repeat-penalty 1.18 --temperature 0.75
```
Available quants:
- `Q4_K_M` (4.7 GB) - fits on 8 GB GPUs, some token-decoding artifacts
- `Q5_K_M` (5.4 GB) - balanced, **recommended** for 24 GB cards
- `Q8_0` (8.1 GB) - near-lossless, cleaner token decoding than K-quants
- `F16` (15.2 GB) - full precision, no quantization artifacts
### Option 2: LM Studio
1. Search for `Fordentinc/book-builder-bookwriter-v1`
2. Download the Q5_K_M quant
3. Switch to **Completion mode** (not Chat). This is critical.
4. Paste your filled-in bible as the input
5. Generate
### Option 3: llama.cpp
```bash
./llama-cli -hf Fordentinc/book-builder-bookwriter-v1:Q5_K_M \
--temp 0.8 --top-p 0.95 -n 2048 \
-f your_bible.txt
```
### Option 4: Transformers + PEFT (Python, full bf16)
```python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
base_id = "Qwen/Qwen2.5-7B"
adapter = "Fordentinc/book-builder-bookwriter-v1"
tok = AutoTokenizer.from_pretrained(adapter)
base = AutoModelForCausalLM.from_pretrained(base_id, torch_dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(base, adapter)
model.eval()
bible_and_chapter_header = open("your_bible.txt").read()
inputs = tok(bible_and_chapter_header, return_tensors="pt").to("cuda")
out = model.generate(
**inputs,
max_new_tokens=2048,
do_sample=True, temperature=0.8, top_p=0.95,
repetition_penalty=1.05,
)
print(tok.decode(out[0], skip_special_tokens=True))
```
### Option 5: vLLM (production / OpenAI-compatible API)
vLLM cannot load the LoRA adapter alone; use the merged bf16 weights instead:
```bash
vllm serve Fordentinc/book-builder-bookwriter-v1 --dtype bfloat16 --max-model-len 16384
```
## Step-by-step: from blank page to chapter
1. **Download the template:** [bible_template.txt](./bible_template.txt)
2. **Fill in every field.** The model relies on each section to anchor character voices, setting, and tone.
3. **Save as plain text** (e.g. `my_book.txt`).
4. **End the file with `### Chapter` followed by your chapter title and one blank line.** Example:
```
### Chapter
Chapter 1: The Long Drive Home
```
5. **Run inference** using one of the options above.
6. **The model writes ~1500-4000 words** of prose, then stops or hits your `max_new_tokens` cap.
7. **For chapter 2:** keep the same bible, change the chapter header, optionally append the last paragraph of chapter 1 so the model continues smoothly.
See [example_bibles/](./example_bibles/) for two complete working examples.
## Recommended sampling parameters
| Parameter | Value | Why |
|---|---|---|
| `temperature` | 0.8 | Lower = repetitive, higher = incoherent |
| `top_p` | 0.95 | Standard nucleus sampling |
| `repetition_penalty` | 1.05 | Prevents loops; do not push past 1.15 |
| `max_new_tokens` | 2048-4096 | Most chapters land in 1500-3500 tokens |
| `min_p` | 0.05 (if supported) | Better than top_k for prose |
## Training details
- **Base model:** Qwen 2.5 7B (Apache 2.0)
- **Method:** QLoRA, r=16, alpha=32, dropout 0.05
- **Target modules:** q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
- **Training corpus:** 10,211 novels with derivable story bibles (Sci-Fi, Thriller, Romance, Crime, Western, Fantasy, etc.)
- **Corpus stats:** 310,316 chapter rows, ~1.4 billion words, ~1.82 billion tokens
- **Hardware:** 1× NVIDIA B200 (180 GB HBM3e)
- **Sequence length:** 2048
- **Effective batch:** 32 (per-device 4, grad-accum 8)
- **Optimizer:** paged_adamw_8bit
- **LR:** 2e-4 cosine, 3% warmup
- **Epochs:** 1
- **Wall time:** ~13.5 hours
- **Data cleanup:** em-dashes removed (replaced with commas), smart-quotes normalized, residual front-matter stripped, chapters with <800 or >6000 words filtered out
## Quirks and limitations
- **No system messages, no chat history, no `[INST]` tags.** The model was never shown those during training.
- **Bibles outside its training distribution** (highly experimental forms, non-Western names, modern slang heavy) may produce uneven results.
- **Names follow Western conventions** (USA/UK/Italy/Western Europe). The training filter excluded other naming traditions.
- **Em-dashes are absent from training data** and the model will rarely produce them. This is intentional.
- **Chapter length is learned from data** (avg ~4,500 words). To force shorter chapters, cap `max_new_tokens`.
## License
Apache 2.0 (inherited from base Qwen 2.5 7B). You may use commercially.
## Citation
```bibtex
@misc{bookbuilder_bookwriter_v1_2026,
author = {Fordentinc},
title = {book-builder-bookwriter-v1: A prose-writing LoRA on Qwen 2.5 7B},
year = {2026},
url = {https://huggingface.co/Fordentinc/book-builder-bookwriter-v1},
}
```
## Reporting issues
Open a discussion on this model page. Include the bible you used (first 500 chars) and the first 200 chars of the model output.