File size: 3,573 Bytes
bfcc5da
 
 
 
 
 
 
 
 
 
cf3df7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
---
title: Ai Npcs
emoji: 🔥
colorFrom: indigo
colorTo: pink
sdk: static
pinned: false
license: mit
---

# NPC Playground 🕹️🤖

<div align="center">
[![Discord][discord-badge]][discord]

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

<img width="1342" alt="cubzh_gigax_hf" src="https://github.com/soliton-x/ai-npc/assets/33256624/e62dd138-c018-4ecf-bc77-a072fadb5c12">

[Installation](#Installation)
[Customization](#Customization)
[Course](#Course)
[Credits](#Credits)

</div>


## Installation

1. Fork the project on [Hugging Face](https://huggingface.co/projects/ai-npc-world).
2. Modify the [`world.lua`](https://huggingface.co/spaces/cubzh/ai-npcs/blob/main/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:
```lua
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 :
```lua
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](https://huggingface.co/huggingface-ml-4-games-course)

## Credits

- [Hugging Face](https://huggingface.co/) 🤗
- [Gigax](https://github.com/GigaxGames)
- [Cubzh](https://cu.bzh): 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](https://github.com/Cubzh/ai-npc-world/wiki).

[discord]: https://discord.gg/rRBSueTKXg
[discord-badge]: https://img.shields.io/discord/1090190447906934825?color=81A1C1&logo=discord&logoColor=white&style=flat-square