Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +21 -12
src/streamlit_app.py
CHANGED
@@ -25,11 +25,10 @@ from huggingface_hub import hf_hub_download
|
|
25 |
# Hugging Face model config
|
26 |
MODEL_REPO = "FlameF0X/o2"
|
27 |
MODEL_FILENAME = "o2_agent_latest.pth"
|
28 |
-
MODEL_CACHE_DIR = HF_HOME
|
29 |
|
30 |
def ensure_model():
|
31 |
try:
|
32 |
-
# Use HF_HOME for cache_dir
|
33 |
model_path = hf_hub_download(
|
34 |
repo_id=MODEL_REPO,
|
35 |
filename=MODEL_FILENAME,
|
@@ -68,28 +67,38 @@ def parse_move_input(move_input, board):
|
|
68 |
if not move_input:
|
69 |
return None
|
70 |
move_input = move_input.strip()
|
|
|
|
|
71 |
try:
|
72 |
move = chess.Move.from_uci(move_input.lower())
|
73 |
if move in board.legal_moves:
|
74 |
return move
|
75 |
-
except:
|
76 |
-
|
|
|
|
|
77 |
try:
|
78 |
move = board.parse_san(move_input)
|
79 |
if move in board.legal_moves:
|
80 |
return move
|
81 |
-
except:
|
82 |
-
|
|
|
|
|
83 |
castling_variations = {
|
84 |
-
'0-0': 'O-O', '0-0-0': 'O-O-O',
|
|
|
|
|
85 |
}
|
86 |
-
|
|
|
87 |
try:
|
88 |
-
move = board.parse_san(
|
89 |
if move in board.legal_moves:
|
90 |
return move
|
91 |
-
except:
|
92 |
-
|
|
|
93 |
return None
|
94 |
|
95 |
# --- Session state ---
|
@@ -180,7 +189,7 @@ if not board.is_game_over() and board.turn == chess.WHITE:
|
|
180 |
render_pgn()
|
181 |
st.rerun()
|
182 |
else:
|
183 |
-
st.warning("Invalid move.")
|
184 |
if st.button("Random Move"):
|
185 |
move = random.choice(legal_moves)
|
186 |
board.push(move)
|
|
|
25 |
# Hugging Face model config
|
26 |
MODEL_REPO = "FlameF0X/o2"
|
27 |
MODEL_FILENAME = "o2_agent_latest.pth"
|
28 |
+
MODEL_CACHE_DIR = HF_HOME
|
29 |
|
30 |
def ensure_model():
|
31 |
try:
|
|
|
32 |
model_path = hf_hub_download(
|
33 |
repo_id=MODEL_REPO,
|
34 |
filename=MODEL_FILENAME,
|
|
|
67 |
if not move_input:
|
68 |
return None
|
69 |
move_input = move_input.strip()
|
70 |
+
|
71 |
+
# Try UCI
|
72 |
try:
|
73 |
move = chess.Move.from_uci(move_input.lower())
|
74 |
if move in board.legal_moves:
|
75 |
return move
|
76 |
+
except Exception as e:
|
77 |
+
st.info(f"UCI parsing failed: {e}")
|
78 |
+
|
79 |
+
# Try SAN
|
80 |
try:
|
81 |
move = board.parse_san(move_input)
|
82 |
if move in board.legal_moves:
|
83 |
return move
|
84 |
+
except Exception as e:
|
85 |
+
st.info(f"SAN parsing failed: {e}")
|
86 |
+
|
87 |
+
# Try castling aliases
|
88 |
castling_variations = {
|
89 |
+
'0-0': 'O-O', '0-0-0': 'O-O-O',
|
90 |
+
'oo': 'O-O', 'ooo': 'O-O-O',
|
91 |
+
'o-o': 'O-O', 'o-o-o': 'O-O-O'
|
92 |
}
|
93 |
+
normalized = castling_variations.get(move_input.lower())
|
94 |
+
if normalized:
|
95 |
try:
|
96 |
+
move = board.parse_san(normalized)
|
97 |
if move in board.legal_moves:
|
98 |
return move
|
99 |
+
except Exception as e:
|
100 |
+
st.info(f"Castling parsing failed: {e}")
|
101 |
+
|
102 |
return None
|
103 |
|
104 |
# --- Session state ---
|
|
|
189 |
render_pgn()
|
190 |
st.rerun()
|
191 |
else:
|
192 |
+
st.warning("Invalid move. Try again using SAN (e.g., `e4`, `Nf3`, `O-O`) or UCI (e.g., `e2e4`).")
|
193 |
if st.button("Random Move"):
|
194 |
move = random.choice(legal_moves)
|
195 |
board.push(move)
|