--- 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.