A package to play chess with ChatGPT
Project description
ChatChess
A simple python package to play chess with ChatGPT
Installation
pip install chatchess
Usage
Import the package:
from ChatChess import ChatChess
First a Game
object needs to be decalerd as follows:
bot = ChatChess.Game("OPENAI_API_KEY")
Additional parameters
bot.maxTokens = 10
: Set max_tokens passed to ChatGPT on each movebot.maxFails = 5
: Amount of times to retry sending prompt to ChatGPT when invalid move is returnedbot.maxTime = 5
: Maximum amount of seconds to wait for ChatGPT answer before timing outbot.prompt = {"normal" : "", "failed" : "", "start" : ""}
: The prompts to send to ChatGPt at each game statebot.board = chess.Board()
: Chess board objectbot.printDebug = False
: Print debug info - occaisonaly useful
Output
move = bot.move["ChatGPT"]["uci"]
: Returns the last move of given player (ChatGPT / input) in the given format (uci / san)message = bot.message
: Returns the move into after each GPT move
Functions
Main functions
move = bot.play("e4")
: Plays the player's move, then ChatGPT's response - returns ChatGPT's movemove = getGPTMove()
: Plays ChatGPT's move in the current position - returns ChatGPT's move
Other functions
bot.pushPlayerMove("e4")
: Push a move without ChatGPT respondingprompt = bot.createPrompt()
: Creates prompt to send to ChatGPT based on current position and previous fails - returns promptresponse = bot.askGPT(prompt)
: Queries ChatGPT prompt based on set parameters, times out afterbot.maxTime
secondsmove = bot.handleResponse(response, player)
: Searches for chess move in string - adds it to self.move as player
Errors
MoveLimitError
: Move fail limit reachedBadInputMoveError
: Move inputted can't be played
Examples
Simple player vs ChatGPT game
from ChatChess import ChatChess
bot = ChatChess.Game("OPENAI_API_KEY") # Set API key
while True:
print(bot.board) # Print the board
bot.play(input("Make a move: ")) # Ask player to make a move, then ChatGPT responds
if bot.board.is_game_over(): # Break if game over
break
Simple ChatGPT vs ChatGPT game
from ChatChess import ChatChess
import chess.pgn
from datetime import date
bot = ChatChess.Game("OPENAI_API_KEY") # Set API key
while True:
bot.getGPTMove() # Ask ChatGPT to make a move
print(bot.message) # Print move and info
if bot.board.is_game_over(): # Break if game over
game = chess.pgn.Game.from_board(bot.board) # Create PGN from game
game.headers["Event"] = "ChatChess test"
game.headers["Date"] = date.today().strftime("%d.%m.%Y")
game.headers["White"] = "ChatGPT"
game.headers["Black"] = "ChatGPT"
print(game)
break
Function for returning ChatGPT moves as FEN from a set position (eg. for a Lichess bot)
from ChatChess import ChatChess
import chess
bot = ChatChess.Game("OPENAI_API_KEY") # Set API key
def getGPTMove():
bot.board = chess.Board() # Pass board to ChatChess
bot.getGPTMove() # Ask ChatGPT to make a move
return bot.move["ChatGPT"]["FEN"].fen() # Return FEN move
When setting the board for bot.board
, make sure that the board is not simply from a set position, but has the moves in pgn format to increase chatgpt move success rate
Info
Uses
- python-chess - https://github.com/niklasf/python-chess
- openai-python - https://github.com/openai/openai-python
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
chatchess-1.1.7-py3-none-any.whl
(18.8 kB
view details)
File details
Details for the file chatchess-1.1.7-py3-none-any.whl
.
File metadata
- Download URL: chatchess-1.1.7-py3-none-any.whl
- Upload date:
- Size: 18.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26c5e67f2123411f5d0c8a260c4f8a62628a2fa244e4384907631ed303ea0350 |
|
MD5 | 1153b7351d1e0bc34e67280906a253b1 |
|
BLAKE2b-256 | 6a4c687aac90f99c1398dcf6c1b25a492be75b2db7daafc51890c13210b2d745 |