ChatChess
v1.1.9
A simple python package to play chess with ChatGPT
pip install chatchess
Import the package:
from ChatChess import ChatChessFirst a Game object needs to be decalerd as follows:
bot = ChatChess.Game("OPENAI_API_KEY")self.model = "gpt-3.5-turbo": ChatGPT model to be used. 3.5-turbo recommended, see models and pricing here: https://openai.com/pricingbot.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 usefulmove = 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 moveMain 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 moveOther 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 after bot.maxTime secondsmove = bot.handleResponse(response, player): Searches for chess move in string - adds it to self.move as playerMoveLimitError: Move fail limit reachedBadInputMoveError: Move inputted can't be playedfrom 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
breakfrom 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)
breakfrom 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 moveWhen 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