CoolFace
Modelpublic

Asopo/cacifer_char_lstm_storyteller

sourceHugging Facemitupdated 4mo agoView on Hugging Face
0likes1downloads
Model Card

Cacifer Char LSTM Storyteller

A character-level LSTM trained on my Cacifer stories (monastery, Cacifer the cat, Romé, Dania, Deonardo, etc.). It continues text one character at a time and produces Cacifer-style lines like:

“If the fore of the cobled the stell of her breath…”
  • —Framework: Keras / TensorFlow
  • —Context length: 60 characters
  • —Vocabulary: characters in char_to_idx.json

Files

  • —cacifer_char_lstm_storyteller.keras – Keras model file
  • —char_to_idx.json – character → index
  • —idx_to_char.json – index → character

Usage

python
import json, numpy as np
from tensorflow.keras.models import load_model

model = load_model("cacifer_char_lstm_storyteller.keras", compile=False)
char_to_idx = json.load(open("char_to_idx.json"))
idx_to_char = {int(k): v for k, v in json.load(open("idx_to_char.json")).items()}
seq_len = 60

def sample_char(probs, temperature=0.7):
    probs = np.asarray(probs, dtype="float64")
    if temperature != 1.0:
        logits = np.log(probs + 1e-8) / temperature
        probs = np.exp(logits)
    probs /= probs.sum()
    probs = np.clip(probs, 1e-12, 1.0)
    probs /= probs.sum()
    return np.random.choice(len(probs), p=probs)

def generate(seed, length=400, temperature=0.7):
    x = seed[-seq_len:]
    for _ in range(length):
        x_idx = np.array([[char_to_idx.get(c, 0) for c in x]])
        preds = model.predict(x_idx, verbose=0)[0]
        x += idx_to_char[sample_char(preds, temperature)]
    return x

seed = "I am Cacifer, a cat, listening to the bells and the breathing of the guests."
print(generate(seed, length=400, temperature=0.6))