typical-cyber commited on
Commit
ffa185b
·
verified ·
1 Parent(s): e248799

update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -39
app.py CHANGED
@@ -2,52 +2,40 @@ import gradio as gr
2
  import chess
3
  import numpy as np
4
  import requests
5
- import io
 
6
 
 
7
  REPO = "typical-cyber/chess-model"
 
8
 
9
- def download_file(path):
10
- url = f"https://huggingface.co/{REPO}/resolve/main/{path}"
11
- r = requests.get(url)
12
- if path.endswith('.py'):
13
- return io.StringIO(r.text)
14
- return io.BytesIO(r.content)
15
-
16
- # Load YOUR model code
17
- exec(download_file('chess_mcvs.py').read())
 
 
 
 
18
 
19
- # Load YOUR DB (user_136 path)
20
- db_data = np.load(download_file('user_models/user136/chess/data/chess_zone_db.npz'), allow_pickle=True)
 
21
  zonedb = HilbertOrderedZoneDatabase()
22
- zonedb.winningmatrices = list(db_data.get('winning', []))
23
- zonedb.losingmatrices = list(db_data.get('losing', []))
24
- zonedb.drawmatrices = list(db_data.get('draw', []))
25
 
26
- def get_move(fen, player, style="mcvs"):
27
  board = chess.Board(fen)
28
  game = Chess()
29
  game.board = board
30
-
31
- if style == "mcvs":
32
- searcher = MCVSSearcher(
33
- policynet=None, valuenet=None,
34
- zonedb=zonedb, device='cpu',
35
- lambdazone=1.0, kzone=5, usenets=False
36
- )
37
- visits, _ = searcher.searchwithtimebudget(game, timebudget=1.0)
38
- best_move = max(visits, key=visits.get)
39
- return best_move.uci()
40
-
41
- # Fallback
42
- return random.choice(list(board.legal_moves)).uci()
43
 
44
- gr.Interface(
45
- fn=get_move,
46
- inputs=[
47
- gr.Textbox(label="FEN", value="rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1"),
48
- gr.Dropdown(["w","b"], label="Player", value="b"),
49
- gr.Dropdown(["mcvs","random"], label="Style")
50
- ],
51
- outputs=gr.Textbox(label="UCI Move"),
52
- title="typical-cyber/chess-model LIVE API"
53
- ).launch()
 
2
  import chess
3
  import numpy as np
4
  import requests
5
+ from huggingface_hub import hf_hub_download
6
+ import os
7
 
8
+ # HF_TOKEN from Space Secrets (Settings → Secrets)
9
  REPO = "typical-cyber/chess-model"
10
+ TOKEN = os.environ.get("HF_TOKEN") # Add to Secrets!
11
 
12
+ # Secure download (private repo)
13
+ def load_model_secure():
14
+ model_code = hf_hub_download(
15
+ repo_id=REPO, filename="chess_mcvs.py",
16
+ token=TOKEN, repo_type="model"
17
+ )
18
+ exec(open(model_code).read())
19
+
20
+ db_path = hf_hub_download(
21
+ repo_id=REPO, filename="user_models/user136/chess/data/chesszonedb.npz",
22
+ token=TOKEN, repo_type="model"
23
+ )
24
+ return np.load(db_path, allow_pickle=True)
25
 
26
+ # Load once
27
+ zonedb_data = load_model_secure()
28
+ exec(open('chess_mcvs.py').read()) # Fallback if download fails
29
  zonedb = HilbertOrderedZoneDatabase()
30
+ zonedb.winningmatrices = list(zonedb_data.get('winning', []))
 
 
31
 
32
+ def get_move(fen, player):
33
  board = chess.Board(fen)
34
  game = Chess()
35
  game.board = board
36
+ searcher = MCVSSearcher(None, None, zonedb)
37
+ visits, _ = searcher.searchwithtimebudget(game, 1.0)
38
+ return max(visits, key=visits.get).uci()
 
 
 
 
 
 
 
 
 
 
39
 
40
+ gr.Interface(fn=get_move, inputs=gr.Textbox("FEN"),
41
+ outputs="text", title="Protected ChessMCVS").launch()