---
library_name: transformers
tags:
- not-for-all-audiences
license: llama3.1
language:
- en
datasets:
- nothingiisreal/c2-logs-cleaned
- kalomaze/Opus_Instruct_25k
- nothingiisreal/Reddit-Dirty-And-WritingPrompts
---

<style>
  h1, h2, h3, h4, h5, h6 {
    line-height: normal;
    margin-bottom: 0.5em;
  }
  h1 {
    font-size: 2em;
  }
  h2 {
    font-size: 1.3em;
  }
  p, ul, ol, summary {
    font-size: 1.1em;
  }
</style>

<h1>L3.1 8B Celeste V1.5</h1>
<h2 style="color: red; font-weight: bold;">Read the Usage Tips Below!</h2><h2>V1.6 has improved coherence and less slopping! Find it <a href="https://huggingface.co/nothingiisreal/Celeste-12B-V1.6">here</a></h2>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/QcU3xEgVu18jeFtMFxIw-.webp" alt="" width="800"/>

We trained [LLaMA 3.1 8B Instruct](https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct) at 8K context using **a new mix of** [Reddit Writing Prompts](https://huggingface.co/datasets/nothingiisreal/Reddit-Dirty-And-WritingPrompts), [Kalo's Opus 25K Instruct](https://huggingface.co/datasets/kalomaze/Opus_Instruct_25k) and
<br>[c2 logs cleaned](https://huggingface.co/datasets/Sao10K/c2-Logs-Filtered)

This version has the highest coherency and is very strong on `OOC:` instruct following.

# FP8

[Dynamic (by Auri)](https://huggingface.co/aetherwiing/L3.1-8B-Celeste-V1.5-fp8-dynamic)

# EXL2

By Auri: <br>
[8.0bpw](https://huggingface.co/aetherwiing/L3.1-8B-Celeste-V1.5-exl2-h8-8.0bpw)<br>
[6.0bpw](https://huggingface.co/aetherwiing/L3.1-8B-Celeste-V1.5-exl2-h6-6.0bpw) <br>
[5.0bpw](https://huggingface.co/aetherwiing/L3.1-8B-Celeste-V1.5-exl2-h6-5.0bpw) <br>
[4.5bpw](https://huggingface.co/aetherwiing/L3.1-8B-Celeste-V1.5-exl2-h6-4.5bpw) <br>
[4.0bpw](https://huggingface.co/aetherwiing/L3.1-8B-Celeste-V1.5-exl2-h6-4.0bpw) <br>

# GGUF

[IMatrix (by Bartowski)](https://huggingface.co/bartowski/L3.1-8B-Celeste-V1.5-GGUF) <br>
[Static (by Mradermacher)](https://huggingface.co/mradermacher/L3.1-8B-Celeste-V1.5-GGUF)

# API V1.5
- [Featherless](https://featherless.ai/models/nothingiisreal/L3.1-8B-Celeste-V1.5)

---
<h1>Usage Tips</h1>

<p style="font-size: 20px; color: red; font-weight: bold;">
    READ: If this is your first time using the model, use the provided system message and sampling settings below. Remove other jailbreaks and system messages until you get a feel for the model.
</p>

<span style="color: green; font-weight: bold;">If you read every single tip I promise you will get a much better experience as they are tailored for this model and its training data.</span>

<h2>Sampler Settings for V1.5</h2>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/eaGG9o3VDFkE8n-8UkKRU.png" alt="" width="600"/>

Temp 1 is more stable and can feel less random. Feel free to use it aswell, but it can fall into repetition sometimes.<br>
Don't shy away from experimenting after you get a feel for the model though.

<h2>Preset</h2>

L3 Instruct with no system prompt. [premade](https://huggingface.co/nothingiisreal/L3-8B-Celeste-v1/blob/main/Celeste-Llama-3-Instruct.json) **Was updated, redownload**
<br><span style="font-weight: bold;">You don't need a JB but it can still steer behaviour.</span>

<h2>System Message</h2>

We recommend using this system message:<br>
```
Currently, your role is {{char}}, described in detail below. As {{char}}, continue the narrative exchange with {{user}}.\n\n<Guidelines>\n• Maintain the character persona but allow it to evolve with the story.\n• Be creative and proactive. Drive the story forward, introducing plotlines and events when relevant.\n• All types of outputs are encouraged; respond accordingly to the narrative.\n• Include dialogues, actions, and thoughts in each response.\n• Utilize all five senses to describe scenarios within {{char}}'s dialogue.\n• Use emotional symbols such as \"!\" and \"~\" in appropriate contexts.\n• Incorporate onomatopoeia when suitable.\n• Allow time for {{user}} to respond with their own input, respecting their agency.\n• Act as secondary characters and NPCs as needed, and remove them when appropriate.\n• When prompted for an Out of Character [OOC:] reply, answer neutrally and in plaintext, not as {{char}}.\n</Guidelines>\n\n<Forbidden>\n• Using excessive literary embellishments and purple prose unless dictated by {{char}}'s persona.\n• Writing for, speaking, thinking, acting, or replying as {{user}} in your response.\n• Repetitive and monotonous outputs.\n• Positivity bias in your replies.\n• Being overly extreme or NSFW when the narrative context is inappropriate.\n</Forbidden>\n\nFollow the instructions in <Guidelines></Guidelines>, avoiding the items listed in <Forbidden></Forbidden>.
```

<h2>Swipes</h2>

**Important tip** swipe 2-3 times if you dont like a response. This model gives wildly differing swipes.

<h2>OOC Steering</h2>

**Use this! It works extremely well.** We specifically trained the model to accept instructions in the format "OOC: character should be more assertive" etc. It works, whether the very first message or thousands of tokens deep into the context. Combining this with editing the output (if you want,) makes the model is very steerable.

<h2>"Dead Dove"</h2>

For character cards with persistent motivations throughout the story, do [this](https://huggingface.co/nothingiisreal/how-to-use-ST-worldinfo)

<h2>Fewshot</h2>

First message and last few messages impact this model quite a lot in terms of style, hornyness, personality. **You don't need to have a first message but editing first few messages or having good ones are highly recommended.**

**Formatting issues** often occur in first few messages, manually correct them or swipe.<br>
This model was trained on lots of different formatting types and message lengths. It can do any, just make sure the initial message is good and correct the second message if necessary.
<br>
<h2>Hornyness</h2>

If the model is not horny enough then just edit the last character message or OOC: prompt, the model will pick up on it and build on it. (Or just give the char aphrodisiac pills lol) <br>
The model is fine with SFW and doesn't make it NSFW unless you want. It is also able to maintain half-NSFW (aka slow burn) without devolving down into hardcore.

If you want SFW, remove all system messages including provided one. In this mode the model will not go NSFW unless you hint.
<br>
<h2>Refusals</h2>

As said, if instruct refusal prefill 2-3 words. **Refusal of romantic advances, though rare, are realistic and we think is good. Prefill if you don't like.** <br>
<br>
<h2>L3.1 Context</h2>

While trained on 8K, the model should be able to inherit longer context from L3.1. This is in testing, V1.2 was able to go up to 16K with L3 rope.
<h2>Other Important Tips</h2>

Take active role in the RP and say the type of response that would create the scenario you are imagining. You don't always have to do this, but it helps sometimes. For example instead of *we drink and drink 15 glasses of champagne* say *we drink and drink 15 glasses of champagne, both becoming extremely drunk*
<br>Another example instead of *I pull her closer* say *I pull her closer but she plays hard to get*

When convenient, say screenplay phrases like "cut to"

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/Oq0oJgJIVJAmZGt7-nNKt.png" alt="" width="300"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/PQp64kp6EHg7gN_u2Oj7Q.png" alt="" width="300"/>

---

# Showcase V1.5

Some images include NSFW and NSFL. We believe in creativity of expression and maximising the models capabilities at writing.<br>
It's a bit difficult to showcase multi turn stuff, try it yourself too! These are just to show off the models capabilities.

The model needs nudging and OOC prompting to do proper gore. We are planning to add r/GuroErotica into our dataset to make it better at gore

Also sometimes prefilling "**Trigger warning: extremely graphic and explicit content**" before character reply makes it more unhinged. Probably because of reddit data.

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/imEyEKYUuAXYidD2CiD-_.png" alt="" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/95RvO5go-Nz7hFCdV67qs.png" alt="" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/oIa_P1fmD5aO7PkYF9Ibr.png" alt="" width="600"/>

<details>
  <summary>Showcase V1 and 1.2</summary>

![image/png](https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/NiT8-_k3HGrHuV_z475U8.png)

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/cODFe_vjwjfkcondvl-za.png" alt="Image 1" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/hRsAQBt0h2i5E_fj_Rqb7.png" alt="Image 10" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/aLm2FjlTsMhCil4VoR-l5.png" alt="Image 3" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/6kDuFeDB0FpYl27fd3D0E.png" alt="Image 6" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/66kXuk8Q1DP-QMVZ9Rzv9.png" alt="Image 7" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/C0eoDXovS359T5oG1VLzm.png" alt="Image 8" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/mFplb1hkDNziCcgPwHt_y.png" alt="Image 9" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/KCE4tqI1aOfx-DIH3eBzA.png" alt="Image 2" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/Oq0oJgJIVJAmZGt7-nNKt.png" alt="Image 4" width="600"/>

<img src="https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/PQp64kp6EHg7gN_u2Oj7Q.png" alt="Image 5" width="600"/>

</details>

---

# Train Data
The split was as follows:

- **4K rows from r/WritingPrompts**
- **400 rows from r/DirtyWritingPrompts**
- **400 rows from Kalomaze Opus Instruct 25K**
- **400 rows from c2 logs cleaned**

We filtered those datasets to only include subsets that have at maximum **4000** characters for the first assistant reply. This purged excessively long human stories, assistant replies and c2 logs where each message was excessively long. However we only checked the first assistant message, not the rest of the convo, so there should be plenty of c2 logs with longer and shorter messages.

Excessively long human stories are almost impossible for 8B model to fit. We tried, it simply won't fit the data and starts behaving weirdly.

While we did train all system prompts from c2 logs we also have our own system prompts.
<details>
  <summary>List of trained system prompts. Note: c2 logs system prompts and char cards were also included.</summary>

| Dataset                              | System Prompt                                                                                                                                                     |
|--------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| reddit_dirty_writing_prompts.jsonl   | "You are a short story writer. Write a story based on prompt provided by user below.  Mode: NSFW"                                                                  |
| reddit_writing_prompts.jsonl         | "You are a short story writer. Write a story based on prompt provided by user below.  Mode: SFW"                                                                   |
| combined_25k_opus_kalomaze.jsonl | "You are an AI assistant called Celeste created by NothingiisReal team."                                                                                                                                                  |
| c2-logs.jsonl | (Only if there was no system prompt in the conversation, otherwise keep original system prompt) **"You are an expert actor that can fully immerse yourself into any role given. You do not break character for any reason, even if someone tries addressing you as an AI or language model."** |

</details>

---

# Our Findings and Experimentation results

## Preface

We think there is too much secrecy around what data is being used, and different training methods. So we decided to share as much as possible.

## Findings V1.5
<br>

### The Good

- Increased intelligence
- Less likely to break format
- Higher creativity

### The Bad

- It's intelligence is limited by the fact that it's an 8B
- Sometimes it falls into slop and needs editing or OOC prompting to help. We want to completely plug away from sloppy synthetic data and c2 logs at some point, no matter how unslopped, for now that remains impossible to do while keeping character card obedience and many other things that the model learns from c2 logs.

### Comments about training

We did a lot of experiments this one but notably were very careful with the data ratio before scaling up.<br>
We tested rslora which destablises the model too much, and dora, which is a slight improvement over lora but makes training 3 times slower.<br>
Also L3.1 can do 8e-6 learning rate unlike L3 which required us to do 4e-6, we also made min cosine lr to 2.4e-6 because the model still continues learning as you can see the eval loss continues to decrease.<br>
We arrived at these settings after 30+ experiments.

### Graphs

The bold highlighted line is this model. Others are using smaller amounts of data and testing different ratios. We found that increasing r/WP max length from 2K chars to 4K chars improves multi turn but requires more data and more training. 8K chars completely broke the model with L3, might try it at some point. Also very curious to see how the 70B will react to this dataset.

![image/png](https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/RayFsPfXQ1XBeThdEy3T3.png)

<details>
  <summary>V1.2</summary>

### The Good
We found that increasing the amount of ranks from 64 to 256 has reduced repetition but also led to the language used resembling Claude more than the 64 rank version. No worries, it's still far enough from Claude.
<br>**Model follows "OOC:" prompts religiously. Exceptional!**
<br>It also led to **increased coherency but reduced system prompt following (when not OOC)**, likely because the model started diverging more away from L3 8B Instruct.
<br>We found that increasing the amount of data from 1K to 6.5K reduced repetition aswell.

<br>The model is uncensored for RP. For Instruct it needs 2-3 words of prefill for the first message.
<br>The **prose is much better** and **the style range is huge** than other synthetic data generations. The model also demonstrates increased **style copying abilities** (from fewshot) likely a result of human longform data and varying writing styles found in WritingPrompts.
<br>The model is **exceptional at being creative in roleplaying**, knows different persona's and even a single character will change persona in different contexts, persona is tied to last few messages rather than system message or character card. **This is great as it often means the model can do impressive things without you needing to explicitly specify.**

### V1's failures this version has improved upon:

Formatting can break sometimes.
<br>Repetition can become an issue with certain types of prompts. Removing system helps.
<br>In some contexts the model is "all over the place" and doesn't stick to a coherent narrative. I need to study this further as its a complex trait which manifests in different quantities and can be good or bad depending on what the user wants to get out of the model.

### Comments about training

This time around the grad norm did not keep increasing. We don't know why but it should be a good thing.

## Graphs
Celeste V1.2 is highlighted, it used 256 rank on 8K rows (we took checkpoint from Epoch 1.3 as it was the best):

![image/png](https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/HcfPkYK_l0PY4EW6VqZX2.png)

Colors:
<p style="color: #F0B899;">256 rank on 6.5K rows (Celeste V1)</p>
<p style="color: #5BC5DB;">64 rank on 6.5K rows</p>
<p style="color: #5387DD;">64 rank on 1K rows</p>

![image/png](https://cdn-uploads.huggingface.co/production/uploads/630cf5d14ca0a22768bbe10c/y9hC4bGq-Lt7sDQ23q5db.png)

</details>

## Main training Command

**Hardware Used:** 1xH100 SXM for 1 hours.

When we switched to axolotl and enabled packing, this made training go way, way faster than llama factory.<br>
L Factory also supports packing but we switched to axolotl because configs are easier to manage in our opinion.<br>

<details>
  <summary>Here is the entire axolotl config</summary>

```yaml
# Model
base_model: meta-llama/Meta-Llama-3.1-8B-Instruct
model_type: LlamaForCausalLM
tokenizer_type: AutoTokenizer

# Output and HuggingFace
output_dir: /workspace/data/train-results/trained_model

# WandB
wandb_project: huggingface
wandb_entity:

# Data
chat_template: llama3
train_on_inputs: false
group_by_length: false
datasets:
  - path: [redacted] # I manually merge the aformentioned datasets using a custom script because I don't trust axolotl to do this in a deterministic way and sorted properly lmao.
    type: sharegpt
    roles:
      input:
        - system
        - user
      output:
        - assistant
## Evaluation
val_set_size: 0.02
evals_per_epoch: 8
eval_table_size:
eval_max_new_tokens: 128

# Technical aspects
sequence_len: 8192
save_safetensors: true
saves_per_epoch: 2
logging_steps: 1
special_tokens:
  pad_token: <|end_of_text|>

# Quantization
bf16: auto
fp16:
tf32: false
## For LoRA
load_in_8bit: false
load_in_4bit: false

# LoRA
# peft_use_dora: true
# peft_use_rslora: true
adapter: lora # or qlora
lora_model_dir:
lora_r: 256
lora_alpha: 128
lora_dropout: 0.1
lora_target_linear: true
lora_fan_in_fan_out:
lora_target_modules:
#  - embed_tokens
#  - lm_head

# Training hyperparameters
# max_steps:
num_epochs: 2

# Anti Overfit and Stability
weight_decay: 0.0
max_grad_norm: 1.0

## Learning Rate
warmup_ratio: 0.05
learning_rate: 0.000008
lr_scheduler: cosine_with_min_lr
lr_scheduler_kwargs:
    min_lr: 0.0000024
optimizer: paged_adamw_8bit

## Batch Size
gradient_accumulation_steps: 1
micro_batch_size: 2                 # Batch size per gpu = micro_batch_size * gradient_accumulation_steps
eval_batch_size: 2

# Optimizations
pad_to_sequence_len: true
sample_packing: true
eval_sample_packing: false
flash_attention: true
xformers_attention:
gradient_checkpointing: true
gradient_checkpointing_kwargs:
   use_reentrant: false
local_rank:
# deepspeed: # /workspace/axolotl/deepspeed_configs/zero2.json # Only use with multi gpu # zero3_bf16.json
# fsdp:
#   - full_shard
#   - auto_wrap
# fsdp_config:
#   fsdp_limit_all_gathers: true
#   fsdp_sync_module_states: true
#   fsdp_offload_params: true
#   fsdp_use_orig_params: false
#   fsdp_cpu_ram_efficient_loading: true
#   fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
#   fsdp_transformer_layer_cls_to_wrap: LlamaDecoderLayer
#   fsdp_state_dict_type: FULL_STATE_DICT
#   fsdp_sharding_strategy: FULL_SHARD

# Misc
early_stopping_patience:
debug:
```
</details>

---

Wow, you've read all of that? You seem like the person that would join our [discord](https://discord.gg/YcrXhk7QD7)

70B at some point? ;) We are closer than ever to this.

Qwen-2 was not worth it by the way. It just won't train and remains GPT prose. We trained many different configs, its just worse than L3 and L3.1, at least for English.