AI prompts
base on An AI for playing NES Tetris at a high level. Based primarily on search & heuristic, with high quality board evaluation through value iteration. # StackRabbit
An AI that plays NES Tetris at a high level. Primarily based on search & heuristic, with high-quality board eval through value iteration.
Due to the logistics of playing NES Tetris, there are two different clients for interacting with the main AI backend:
- `fceux` contains a Lua client for playing in the FCEUX emulator (primary client)
- `console_client` contains a python client that runs on Raspberry Pi to play on a real console.
- [TetrisTrainer](https://github.com/GregoryCannon/TetrisTrainer) is a public web client ([try it live!](https://gregorycannon.github.io/TetrisTrainer)) that lets users draw a board and ask AI about the best placements.
Then there are two components of the backend:
- `server` contains the primary server, written in Node.js. It handles the request parsing, and the delegation to worker threads. It also contains lots of deprecated AI code, since the initial implmentation was entirely in JS (oops).
- `cpp_modules` contains modules that perform the core AI computation at literally 100x the speed of the original JS implementation. The main flow involves a Node server thread sending a game state to the C++ module, which returns the value of each possible move as an encoded JSON map.
# How to Set Up
## Requirements
- **Node.js**: [Download here](https://nodejs.org)
- **FCEUX**: [Download here](https://fceux.com)
- **Python3**: [Download here](https://python.org)
- **node-gyp**: Install with `npm i node-gyp nan`
- **Visual Studio Build Tools**
## Steps
1. **Clone or Extract**:
- Clone this repository or extract the zip file from the releases page.
2. **Obtain NES Tetris ROM**:
- **Legally** acquire the ROM for NES Tetris. You can use TetrisGYM.
3. **Open Command Line**:
- Press `Win + R`, type `cmd`, and press Enter.
- Navigate to the folder for Stackrabbit using `cd path/to/stackrabbit`.
4. **Install Dependencies**:
- Run `npm i` in the command line.
5. **Start the Application**:
- If the previous command runs without errors, execute `npm start`.
6. **Setup FCEUX**:
- Open the FCEUX folder.
- Add all `.lua` files (excluding `itn12.lua`, `mime.lua`, and `socket.lua`, put them in `C:/path/to/fceux/lua`) from the [Luasocket repository](https://github.com/lunarmodules/luasocket) to `C:/path/to/fceux/lua/socket/`. (if there is no `lua` folder, create it and the socket folder inside)
7. **Load Tetris ROM**:
- In FCEUX, click `File > Open` and select the Tetris ROM.
8. **Run Stackrabbit Script**:
- In the FCEUX window, go to `File > Lua > New Lua Script Window`.
- In the new window, browse and run `path/to/stackrabbit/src/fceux/stackrabbit.lua`.
- Open level 19 and let it start!
", Assign "at most 3 tags" to the expected json: {"id":"6649","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"