prn-modelv1 / README.md
marnelram's picture
Add model card
5704037 verified
---
license: apache-2.0
library_name: gguf
tags:
- gguf
- game-ai
- npc-dialogue
- structured-output
- roleplay
language:
- en
pipeline_tag: text-generation
---
# 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](https://godotengine.org/) via the [NobodyWho](https://github.com/nobodywho-ooo/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:
```json
{"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)
```gdscript
@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](https://docs.nobodywho.ooo) 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.