Views
No views yet
{"prompt":"FEN: {fen}\nMOVE:", "completion": " {move}"}r2qk3/... -> r11qk111/... or equivalent{"prompt":"RES: {res}\nFEN: {fen}\nMOVE:", "completion": " {move}"}python-chess (in addition to transformers) which you can install using pip install python-chess.1import chess
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4
5def next_move(model, tokenizer, fen):
6 input_ids = tokenizer(f"FEN: {fen}\nMOVE:", return_tensors="pt")
7 input_ids = {k: v.to(model.device) for k, v in input_ids.items()}
8 out = model.generate(
9 **input_ids,
10 max_new_tokens=10,
11 pad_token_id=tokenizer.eos_token_id,
12 do_sample=True,
13 temperature=0.1,
14 )
15 out_str = tokenizer.batch_decode(out)[0]
16 return out_str.split("MOVE:")[-1].replace("<|endoftext|>", "").strip()
17
18
19board = chess.Board()
20model = AutoModelForCausalLM.from_pretrained("yp-edu/gpt2-stockfish-debug")
21tokenizer = AutoTokenizer.from_pretrained("yp-edu/gpt2-stockfish-debug") # or "gpt2"
22tokenizer.pad_token = tokenizer.eos_token
23for i in range(100):
24 fen = board.fen()
25 move_uci = next_move(model, tokenizer, fen)
26 try:
27 print(move_uci)
28 move = chess.Move.from_uci(move_uci)
29 if move not in board.legal_moves:
30 raise chess.IllegalMoveError
31 board.push(move)
32 outcome = board.outcome()
33 if outcome is not None:
34 print(board)
35 print(outcome.result())
36 break
37 except chess.IllegalMoveError:
38 print(board)
39 print("Illegal move", i)
40 break
41else:
42 print(board)