How to use from
llama.cpp
Install from brew
brew install llama.cpp
# Start a local OpenAI-compatible server with a web UI:
llama-server -hf marnelram/prn-modelv1:Q4_K_M
# Run inference directly in the terminal:
llama-cli -hf marnelram/prn-modelv1:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp
# Start a local OpenAI-compatible server with a web UI:
llama-server -hf marnelram/prn-modelv1:Q4_K_M
# Run inference directly in the terminal:
llama-cli -hf marnelram/prn-modelv1:Q4_K_M
Use pre-built binary
# Download pre-built binary from:
# https://github.com/ggerganov/llama.cpp/releases
# Start a local OpenAI-compatible server with a web UI:
./llama-server -hf marnelram/prn-modelv1:Q4_K_M
# Run inference directly in the terminal:
./llama-cli -hf marnelram/prn-modelv1:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
cmake -B build
cmake --build build -j --target llama-server llama-cli
# Start a local OpenAI-compatible server with a web UI:
./build/bin/llama-server -hf marnelram/prn-modelv1:Q4_K_M
# Run inference directly in the terminal:
./build/bin/llama-cli -hf marnelram/prn-modelv1:Q4_K_M
Use Docker
docker model run hf.co/marnelram/prn-modelv1:Q4_K_M
Quick Links

P℞N Model v1

A small fine-tuned LLM used in P℞N (ProRenata), a narrative bartending game set in a Victorian apothecary-style bar where drinks are named after medications. The model powers in-game NPC conversations with structured JSON output so the game can drive character expressions and tip calculation in real time.

Loaded in Godot via the NobodyWho GDExtension.

Files

File Quantization Size
model-q4_k_m.gguf Q4_K_M ~2.5 GB

Output format

The model is constrained (GBNF grammar) to emit a single JSON object per turn:

{"reaction": "happy", "line": "Thanks, I needed to hear that."}

Reaction set

Reaction Meaning
happy Player was kind, helpful, or funny
neutral Normal exchange, nothing notable
sad Player said something hurtful or insensitive
annoyed Player was rude, pushy, or weird
exit Player crossed a line — conversation ends

The reaction updates the character portrait expression in real time; line is the spoken dialogue. Aggregated reactions feed the post-conversation tip multiplier.

Design note: reaction, not mood

Each character's baseline mood (heartbroken, stressed, celebrating, etc.) lives in the system prompt. The model's reaction field describes the response to the player's last message, not the character's overall emotional state. A heartbroken character can still react happy to a genuinely funny line.

Intended use

  • Driving NPC dialogue in P℞N (or similar narrative games)
  • Research / reference for structured-output character dialogue fine-tunes

Not intended as a general-purpose chat or instruction model.

Usage with NobodyWho (Godot)

@onready var model: NobodyWhoModel = $NobodyWhoModel
@onready var chat: NobodyWhoChat = $NobodyWhoChat

func _ready():
    model.model_path = "res://models/prn-modelv1/model-q4_k_m.gguf"
    chat.model_node = model
    chat.system_prompt = "You are Mei, a stressed pre-med student..."
    chat.start_worker()
    chat.response_finished.connect(func(r): print(r))
    chat.ask("Hey, rough day?")

See the NobodyWho docs for full API.

Limitations

  • Fine-tuned for one specific game's character set and tone — generalization outside that style is not guaranteed.
  • Output is constrained to the 5-reaction JSON schema; the model is not useful for freeform chat.
  • English only.

License

Released under Apache 2.0. The base model and any upstream licenses still apply.

Downloads last month
29
GGUF
Model size
4B params
Architecture
qwen3
Hardware compatibility
Log In to add your hardware

4-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support