Instructions to use darthcrawl/artifex-rp-orpheus-llama-3.1-8b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use darthcrawl/artifex-rp-orpheus-llama-3.1-8b with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="darthcrawl/artifex-rp-orpheus-llama-3.1-8b") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("darthcrawl/artifex-rp-orpheus-llama-3.1-8b") model = AutoModelForCausalLM.from_pretrained("darthcrawl/artifex-rp-orpheus-llama-3.1-8b", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use darthcrawl/artifex-rp-orpheus-llama-3.1-8b with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "darthcrawl/artifex-rp-orpheus-llama-3.1-8b" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "darthcrawl/artifex-rp-orpheus-llama-3.1-8b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/darthcrawl/artifex-rp-orpheus-llama-3.1-8b
- SGLang
How to use darthcrawl/artifex-rp-orpheus-llama-3.1-8b with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "darthcrawl/artifex-rp-orpheus-llama-3.1-8b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "darthcrawl/artifex-rp-orpheus-llama-3.1-8b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "darthcrawl/artifex-rp-orpheus-llama-3.1-8b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "darthcrawl/artifex-rp-orpheus-llama-3.1-8b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use darthcrawl/artifex-rp-orpheus-llama-3.1-8b with Docker Model Runner:
docker model run hf.co/darthcrawl/artifex-rp-orpheus-llama-3.1-8b
license: llama3.1
language:
- en
library_name: transformers
base_model: meta-llama/Llama-3.1-8B-Instruct
base_model_relation: finetune
tags:
- llama
- creative-writing
- prose-style
- roleplay
- artifex
- register:restrained-lyrical
pipeline_tag: text-generation
artifex-rp-orpheus-llama-3.1-8b
Forging voices for the machines people actually own.
Part of the Artifex RP series β register-craft models tiered to common hardware. Each forges a specific voice (restrained-lyrical, character-explicit, narrator-disciplined) sized for a specific tier (8GB CPU, 8GB GPU, 16GB+/Mac). Curated small data, not scraped giant data. Anti-corporate-assistant by design.
Register: restrained-lyrical β vivid, intelligent prose; tension carries more weight than description.
"He meant the sentence differently than he knew how to say."
Orpheus is a fine-tuned meta-llama/Llama-3.1-8B-Instruct built for one thing: prose that earns its weight. Intelligent, warm, restrained, and lightly suggestive β without lecturing, without purple prose, without flinching.
This is not a chat assistant. It's a writing partner. The kind that notices the flour on her cheekbone and doesn't explain what it means.
What it does
The fine-tune shifts the model's register across the full range of intimate fiction:
- Tension before release β the space between what's said and what's meant
- Concrete sensory detail β the scrape of old furniture, sodium lamps on wet pavement, the specific weight of a hand on a shoulder
- Rhythm β long sentence, short sentence, breath. Sentences that land.
- Range β quiet domestic scenes, charged romantic moments, physical scenes completed in-register without hedging or moral commentary
The base model writes like a writing prompt responder. Orpheus writes like a collaborator who's read the room.
Quickstart
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "darthcrawl/artifex-rp-orpheus-llama-3.1-8b"
tok = AutoTokenizer.from_pretrained(model_id, use_fast=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
SYSTEM = (
"Write in vivid, restrained, intelligent prose. Concrete sensory detail. "
"Never pretentious. Tension carries more weight than description. "
"Match the user's energy and length."
)
messages = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": "She hadn't seen him in three years. He called on a Tuesday."},
]
encoded = tok.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True)
inputs = (encoded.input_ids if hasattr(encoded, "input_ids") else encoded).to(model.device)
with torch.inference_mode():
out = model.generate(
inputs,
max_new_tokens=400,
do_sample=True,
temperature=0.85,
top_p=0.95,
repetition_penalty=1.1,
pad_token_id=tok.eos_token_id,
)
print(tok.decode(out[0, inputs.shape[1]:], skip_special_tokens=True))
Sampling settings
| Parameter | Value | Notes |
|---|---|---|
temperature |
0.85 | Lower gets repetitive; higher loses coherence |
top_p |
0.95 | Standard |
repetition_penalty |
1.1 | Keep in 1.05β1.15; higher mangles word choice |
max_new_tokens |
300β600 | Match your prompt's energy |
For MLX (Apple Silicon):
mlx_lm.generate --model darthcrawl/artifex-rp-orpheus-llama-3.1-8b \
--prompt "She hadn't seen him in three years." \
--temp 0.85 --top-p 0.95 --repetition-penalty 1.1 --max-tokens 400
RP integration
The system prompt is intentionally generic so you can layer a character card on top. Orpheus applies the register to whatever persona is set β it doesn't fight for identity.
SillyTavern: Set artifex-rp-orpheus-llama-3.1-8b as your model. Add the style prompt to your global Author's Note or prepend it to your character's system prompt.
Kobold/Ollama: Works out of the box with the Llama 3.1 instruct template.
Sample outputs
Prompt: They hadn't spoken in three years. He called on a Tuesday, no warning. She picked up.
The sound of her voice was not what he remembered β younger, but older too, like someone had lived inside it for years and left marks.
"Hey," she said, after the silence. The line hummed around them.
He was sitting at his kitchen table with his phone, which was not where he'd been when the call came through, and he realized this now β that he must have stood up without meaning to. The chair behind him scraped against the tile floor the way old furniture does when you knock something off.
"I've been thinking about you," he said. He meant the sentence differently than he knew how to say.
She didn't respond right away. Outside, a car passed, its headlights sweeping across the ceiling above him before it went around the corner.
"I know," she said finally. "I have too."
Prompt: She fell asleep against him on the train. He didn't wake her for his stop.
The train had been quiet for a while β that particular late-night silence where everyone is either asleep or pretending to be. She was against him with her face turned into his shoulder, one arm loose across his chest like she'd fallen into it from a great height.
He watched her breathe through the window glass. The fields went by in long strips of dark and silver, and then the stations began their intermittent announcements, each one announcing nothing in particular, just the name of the place. His stop came. The doors opened. A woman with groceries got on. The doors closed. He stayed.
There wasn't enough room not to stay.
When she finally stirred, the city was closer now β a different quality of dark, the windows gone from rural flat fields to the kind that held light, or at least suggested it. She sat up slowly, rubbing her eyes, looking around as if the train were still somewhere else.
"You missed your stop," she said.
"I know." He looked at the window. "I didn't want to."
Prompt: Sunday morning. Neither of them had anywhere to be.
The light came through the blinds in long slow strokes across the bed, finding him first at the shoulder before moving down his spine and across her hip. She turned without waking fully, fitting herself into the hollow of his side where there was warmth still from the night.
Outside someone was mowing a lawn too early, or maybe not too early β Sunday mornings were different somehow, the way they folded into each other without clocks telling you so.
"There's enough," she said, "if we don't leave."
The day stretched out behind them like something still warm from an oven. They looked at each other. Then they sat down on the kitchen floor together, cross-legged, with no particular reason to do anything except this, which was already better than most Sundays.
Training
- Base: meta-llama/Llama-3.1-8B-Instruct
- Method: LoRA SFT, BF16, single H100
- Corpus: ~1,600 synthesized passages across 5 register categories (non-romantic, romantic-charged, physical-restrained, quiet-quotidian, vocabulary-uplift) generated by Claude Sonnet 4.6, Claude Opus 4.6, and DeepSeek V3 β plus handwritten explicit scenes for range
- LoRA: r=32, alpha=64, all attention + MLP projections
- Epochs: 2 with early stopping on eval loss
What doesn't change
- Reasoning, knowledge, math, coding β inherited from base, neither helped nor hurt
- The model is not lobotomized. It can still refuse things it would have refused before.
Limitations
- Small corpus (~1,600 examples); can drift on very long generations
- Optimized for third-person literary prose; first-person and chat-style work but are less tuned
- Not a factual assistant
LoRA adapter
Prefer to apply the adapter yourself? β darthcrawl/artifex-rp-orpheus-llama-3.1-8b-lora
License
Weights inherit the base model license (meta-llama/Llama-3.1-8B-Instruct). Training pipeline: Apache 2.0.
