ai-npcs / README.md
aduermael's picture
setup HTML wrapper
2a9eaae
metadata
title: Ai Npcs
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 🕹️🤖

[![Discord][discord-badge]][discord]

3D playground to interact with LLM-powered NPCs.
Modify the world.lua file to teach them new skills with a few lines of code.

cubzh_gigax_hf

Installation Customization Course Credits

Installation

  1. Fork the project on Hugging Face.
  2. Modify the world.lua file to edit NPC skills!
  3. Deploy on your own Hugging Face space to run your modified version of the playground.

Customization

Tweaking NPC Behavior

Modify the fields defined 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 world.lua's skills table 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 will be called whenever an NPC uses this 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!

[Work in progress] Environment Design:

The Cubzh game engine allows you to modify the 3D environment of your worlds, by importing community-generated voxel assets or creating new ones yourself. We're working hard to integrate these functionalities into this world - stay tuned!

Course

Together with the HuggingFace staff, we've released a new course to teach you how to create your own Lua skills. You can access it here

Credits

  • Hugging Face 🤗
  • Gigax
  • Cubzh: A versatile UGC (User-Generated Content) gaming platform.
  • You ! You're welcome to fork the repo, share your creations, and create PRs here :)

For detailed documentation, troubleshooting, and contributing guidelines, please refer to the wiki.