title: NPC Playground
emoji: π€
colorFrom: indigo
colorTo: pink
sdk: static
app_file: ./cubzh.html
pinned: false
license: mit
disable_embedding: true
custom_headers:
cross-origin-embedder-policy: require-corp
cross-origin-opener-policy: same-origin
cross-origin-resource-policy: cross-origin
NPC Playground πΉοΈπ€
3D playground to interact with LLM-powered NPCs.
Clone and modify cubzh.lua
file to teach them new skills with a few lines of code!
Play | Customize | Scripting | Course | Credits
Play
Just go to huggingface.co/spaces/cubzh/ai-npcs.
Engage with NPCs and try to trigger some of those pre-installed skills: move
, follow
, jump
, explode
(you may need to insist for that one π
).
Customize
- Clone huggingface.co/spaces/cubzh/ai-npcs repository. β οΈ clone needs to be public β οΈ
- Modify and commit
world.lua
file to edit NPC skills. - That's it!
Scripting
Tweaking NPC Behavior
Modify the predifined fields in world.lua
's NPCs
table in order to influence NPC behaviour:
local NPCs = {
{
name = "npcscientist",
physicalDescription = "A small sphere with a computer screen for a face",
psychologicalProfile = "Designed to be helpful to any human it interacts with, this robot viscerally hates squirrels.",
currentLocationName = "Scientist Island",
initialReflections = {
"This NPC is a robot that punctuates all of its answers with electronic noises - as any android would!",
...
},
},
...
}
Teaching NPCs new skills
Our NPCs have been trained to use any skill you've defined before running the game. This is achieved by training the LLM powering them to do "function calling".
Modify skills
table in world.lua
to give your NPCs new skills:
local skills = {
{
name = "SAY",
description = "Say smthg out loud",
parameter_types = {"character", "content"},
callback = function(client, action)
local npc = client:getNpc(action.character_id)
if not npc then print("Can't find npc") return end
dialog:create(action.content, npc.avatar)
print(string.format("%s: %s", npc.name, action.content))
end,
action_format_str = "{protagonist_name} said '{content}' to {target_name}"
},
...
}
The callback
function is called whenever an NPC uses the skill, using the parameters defined in the parameters
field. We've given you some examples in skills.lua
, feel free to draw inspiration from them!
If you want to go deeper with Cubzh scripting API, here's the documentation, the team and community will also be glad to help you on Discord.
Environment Design (π·ββοΈ work in progress ποΈ)
Cubzh allows you to modify the 3D environment, by importing community-made voxel assets or creating new ones yourself. It's not yet possible to modify the environment yet though in the context of that specific demo, but we're working on making it possible, stay tuned!
Course
Together with the HuggingFace staff, we've released a new course to teach you how to create your own NPC skills with Lua. You can access it here
Credits
- Hugging Face π€
- Gigax
- Cubzh: A versatile UGC (User-Generated Content) gaming platform.
- You ! You're welcome to duplicate the repo, share your creations, and submit PRs here :)