Downloads · 30 days
125
2% of all-time downloads
Gigax/NPC-LLM-3_8B
NPC-LLM-3_8B is a text generation model from Gigax. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as mit.
This repo contains the domain-specific NPC model we've fined-tuned from Phi-3, using LoRA.
Downloads · 30 days
125
2% of all-time downloads
All-time downloads
5.3K
Public
Parameters
3.8B
15.3 GB on disk
Likes
25
Public
Click a slice to open those files.
.safetensors7.6 GB · 100%
From the Hugging Face model README
This repo contains the domain-specific NPC model we've fined-tuned from Phi-3, using LoRA.
This model parses a text description of a game scene, and outputs commands like:
say <player1> "Hello Adventurer, care to join me on a quest?greet <player1>attack <player1><action> <param> you add to the prompt! (We call these "skills"!)⚠️ This model has been trained to overfit on our input prompt format. Follow it closely to reach optimal performance ⚠️
Make your life easier, use our Python client library
from outlines import models
from gigax.step import NPCStepper
# Download model from the Hub
model_name = "Gigax/NPC-LLM-3_8B"
llm = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Our stepper takes in a Outlines model to enable guided generation
# This forces the model to follow our output format
model = models.Transformers(llm, tokenizer)
# Instantiate a stepper: handles prompting + output parsing
stepper = NPCStepper(model=model)
from gigax.parse import CharacterAction
from gigax.scene import (
Character,
Item,
Location,
ProtagonistCharacter,
ProtagonistCharacter,
Skill,
ParameterType,
)
# Use sample data
context = "Medieval world"
current_location = Location(name="Old Town", description="A quiet and peaceful town.")
locations = [current_location] # you can add more locations to the scene
NPCs = [
Character(
name="John the Brave",
description="A fearless warrior",
current_location=current_location,
)
]
protagonist = ProtagonistCharacter(
name="Aldren",
description="Brave and curious",
current_location=current_location,
memories=["Saved the village", "Lost a friend"],
quests=["Find the ancient artifact", "Defeat the evil warlock"],
skills=[
Skill(
name="Attack",
description="Deliver a powerful blow",
parameter_types=[ParameterType.character],
)
],
psychological_profile="Determined and compassionate",
)
items = [Item(name="Sword", description="A sharp blade")]
events = [
CharacterAction(
command="Say",
protagonist=protagonist,
parameters=[items[0], "What a fine sword!"],
)
]
action = stepper.get_action(
context=context,
locations=locations,
NPCs=NPCs,
protagonist=protagonist,
items=items,
events=events,
)
Here's a sample input prompt, showing you the format on which the model has been trained:
- WORLD KNOWLEDGE: A vast open world full of mystery and adventure.
- KNOWN LOCATIONS: Old Town
- NPCS: John the Brave
- CURRENT LOCATION: Old Town: A quiet and peaceful town.
- CURRENT LOCATION ITEMS: Sword
- LAST EVENTS:
Aldren: Say Sword What a fine sword!
- PROTAGONIST NAME: Aldren
- PROTAGONIST PSYCHOLOGICAL PROFILE: Brave and curious
- PROTAGONIST MEMORIES:
Saved the village
Lost a friend
- PROTAGONIST PENDING QUESTS:
Find the ancient artifact
Defeat the evil warlock
- PROTAGONIST ALLOWED ACTIONS:
Attack <character> : Deliver a powerful blow
Aldren:
@misc{NPC-LLM-3_8B,
url={[https://huggingface.co/Gigax/NPC-LLM-3_8B](https://huggingface.co/Gigax/NPC-LLM-3_8B)},
title={NPC-LLM-3_8B},
author={Gigax team}
}