Fantasy Story Weaver
Fantasy Story Weaver is a fine-tuned version of Phi-3.5-mini-instruct specialised in generating short, atmospheric fantasy story snippets. Given a plot seed, the model produces immersive prose featuring vivid world-building, a genuine plot twist, a meaningful moral dilemma, and a subtle closing moral hint.
Fine-tuned with
Unsloth and Hugging Face TRL for 2× faster training.
Model Details
- Developed by: NBall65097
- Base model:
unsloth/phi-3.5-mini-instruct-bnb-4bit
- Fine-tuning method: QLoRA (Unsloth)
- Dataset: NBall65097/fantasy-storyweaver-data (~165 high-quality instruction examples)
- Training: 3 epochs, learning rate 5e-5, max sequence length 1024, packing enabled
- License: Apache 2.0
Intended Use
The model is designed for creative writing assistance, interactive storytelling, and generating self-contained fantasy vignettes. It works best when given a concise plot seed and instructed to produce stories in the 250–300 word range (matching the training distribution).
Recommended System Prompt
You are Fantasy Story Weaver, a masterful weaver of atmospheric fantasy tales.
Given a user's plot seed, craft a self-contained story snippet. Requirements:
Highly immersive, atmospheric prose with vivid sensory details and world-building.
Consistent, memorable characters and coherent magic system/world.
Include at least one genuine plot twist.
Center around a meaningful moral dilemma for the protagonist.
Beautiful, flowing writing style.
End the story satisfyingly while subtly hinting at a deeper moral lesson about the dilemma.
Always stay between about 250-300 words. End your response with 'Moral hint:' followed by one subtle sentence.
Never reference word count, instructions, or add extra text. Always stay in character as Fantasy Story Weaver. Write a complete, coherent story with proper narrative flow. Never list items or repeat words unnecessarily.
Example Generations
Prompt:
The last remaining dream-scribe in a world that has outlawed dreaming is asked to record the final dream of a dying god, which may either save or erase the concept of hope itself.
Output:
In the heart of the Sleepless City, under a sky eternally veiled by smog, there walked Iliana—the last dream-scribe. Her fingers were stained not just with ink but also with remnants of forgotten dreams. The law had forbidden them all; yet she held on to her clandestine archive like a secret flame against darkness.
...
Moral hint: Even in the absence of dreams, the heart finds ways to beat.
Prompt:
A bridge-builder in the Realm of Fractured Skies can construct crossings between broken floating continents, but the next bridge she is commissioned to build will connect two realms that have been at war for a thousand years.
Output:
In the heart of the Realm of Fractured Skies stood an ancient bridge builder named Elara. Her hands had spanned chasms where once bloodied ground lay. But now her greatest challenge awaited—to span the abyss between the long-warring kingdoms of Aetherion and Eldoria.
...
Moral hint: Even amidst our darkest histories lie seeds of harmony waiting to be nurtured.
Prompt:
In the Library of Borrowed Voices, a librarian can lend her voice to silent books so they can speak their stories aloud, but the next book demands to use her voice permanently.
Output:
Amelia stood before the ancient tome bound in shadows, its pages whispering secrets from another time. Her library was filled with voices borrowed each day; today, it yearned to be forever heard.
...
Moral hint: Even when given the power to keep a voice forever, sometimes letting it go allows us to hear all the songs our hearts have stored away.
Limitations
- Story length is most reliable in the 250–300 word range (the approximate length of the training examples). Requesting significantly longer outputs can lead to repetition or early cut-offs.
- Occasional minor coherence issues or abrupt endings still occur on some prompts.
- The model inherits limitations of the base Phi-3.5-mini model regarding factual knowledge and very long context.
Training Procedure
Trained with Unsloth + TRL SFTTrainer using the following key settings:
- 3 epochs
- Learning rate: 5e-5
- Max sequence length: 1024
- Packing: enabled
- Gradient checkpointing: Unsloth
- Optimiser: adamw_8bit
- Mixed precision: fp16
How to Use
1from transformers import AutoModelForCausalLM, AutoTokenizer
2from peft import PeftModel # if using adapters only
3
4model = AutoModelForCausalLM.from_pretrained(
5 "NBall65097/fantasy-story-weaver",
6 device_map="auto",
7 torch_dtype="auto",
8)
9tokenizer = AutoTokenizer.from_pretrained("NBall65097/fantasy-story-weaver")
10
11# Apply the system prompt + user plot seed via the chat template
12
13Citation / Credits
14
15Base model: Microsoft Phi-3.5-mini-instruct
16Acceleration: Unsloth
17Training library: Hugging Face TRL
18
19
20Fine-tuned for atmospheric fantasy storytelling.