Spaces:
Sleeping
Sleeping
| # Chess Master GUI - Setup & Launch | |
| ## Quick Start | |
| ### 1. Set Gemini API Key | |
| ```bash | |
| # Windows (PowerShell) | |
| $env:GEMINI_API_KEY = "your_api_key_here" | |
| # Windows (Command Prompt) | |
| set GEMINI_API_KEY=your_api_key_here | |
| # Linux/Mac | |
| export GEMINI_API_KEY=your_api_key_here | |
| ``` | |
| Get a free key: https://aistudio.google.com/app/apikey | |
| ### 2. Run the GUI | |
| **Windows:** | |
| ```bash | |
| run_gui.bat | |
| ``` | |
| **Linux/Mac:** | |
| ```bash | |
| bash run_gui.sh | |
| ``` | |
| **Or manually:** | |
| ```bash | |
| python app.py | |
| ``` | |
| ### 3. Open in Browser | |
| ``` | |
| http://localhost:5000 | |
| ``` | |
| ## What's Included | |
| ### Files | |
| - `app.py` - Flask server with WebSocket support | |
| - `templates/index.html` - Game UI | |
| - `static/style.css` - Styling | |
| - `static/game.js` - Client-side logic | |
| - `requirements-gui.txt` - Python dependencies | |
| - `run_gui.bat` / `run_gui.sh` - Quick start scripts | |
| ### Features | |
| ✓ Modern, responsive web interface | |
| ✓ Chess board with legal move highlighting | |
| ✓ Real-time chat sidebar | |
| ✓ Agent responds naturally (chooses when to speak) | |
| ✓ Game statistics (moves, duration, messages) | |
| ✓ Player persistence (remembers you) | |
| ✓ Full trigger system (BEFORE_MATCH, ON_USER_MOVE, etc.) | |
| ## How It Works | |
| ### Game Flow | |
| 1. **Start** → Enter name → Click "Start Game" | |
| 2. **BEFORE_MATCH trigger** → Agent greets you (if it chooses to speak) | |
| 3. **Make moves** → Type or click legal moves | |
| 4. **ON_USER_MOVE trigger** → Agent responds (if interesting) | |
| 5. **Agent moves** → Random legal move (automated) | |
| 6. **Repeat** → Until game ends | |
| 7. **AFTER_MATCH trigger** → Agent reflects on game | |
| ### Natural Conversation | |
| The agent will: | |
| - **Speak when:** | |
| - You make an interesting move | |
| - There's a critical moment (check, threat) | |
| - You ask a question in chat | |
| - Something unusual happens | |
| - **Stay silent when:** | |
| - Routine opening moves | |
| - Nothing interesting to add | |
| - You're just thinking | |
| This is controlled by the system prompt which encourages the agent to use `"action": "stop"` for silence. | |
| ## Architecture | |
| ### Backend | |
| - **Flask** - Web server | |
| - **Flask-SocketIO** - Real-time WebSocket communication | |
| - **GameSession** - Per-client game state management | |
| - **Agent System** - Full Chess Master with triggers | |
| ### Frontend | |
| - **HTML5** - Semantic markup | |
| - **CSS3** - Modern styling with flexbox | |
| - **JavaScript** - WebSocket client, game logic | |
| - **Socket.IO** - Real-time communication | |
| ### Async Flow | |
| ``` | |
| Client Server Agent | |
| | | | | |
| |--send move-----------> | | | |
| | |--trigger(ON_USER_MOVE)-> | | |
| | | [respond] | |
| | |<--response------------| | |
| |<--move_made------------| | |
| | [agent moves] | |
| |<--board update--------| | |
| | | |
| |--send message-------> | | |
| | |--trigger(ON_USER_INPUT)->| | |
| | | [respond] | |
| | |<--response------------| | |
| |<--message sent---------| | |
| ``` | |
| ## Troubleshooting | |
| ### Port Already in Use | |
| ```bash | |
| # Change port in app.py | |
| socketio.run(app, debug=True, host="0.0.0.0", port=5001) # Use 5001 instead | |
| ``` | |
| ### API Key Issues | |
| - Verify key is set: `echo %GEMINI_API_KEY%` (Windows) or `echo $GEMINI_API_KEY%` (Unix) | |
| - Get new key: https://aistudio.google.com/app/apikey | |
| - Key should start with `AIzaSy...` | |
| ### WebSocket Connection Failed | |
| - Check browser console (F12 → Console) | |
| - Ensure server is running: `http://localhost:5000` | |
| - Check firewall settings | |
| ## Customization | |
| ### Change Port | |
| Edit `app.py`: | |
| ```python | |
| socketio.run(app, debug=True, host="0.0.0.0", port=YOUR_PORT) | |
| ``` | |
| ### Change UI Colors | |
| Edit `static/style.css`: | |
| ```css | |
| /* Primary color */ | |
| #1e3c72 /* Dark blue */ | |
| #2a5298 /* Light blue */ | |
| #6a1b9a /* Agent purple */ | |
| ``` | |
| ### Agent Personality | |
| Edit `agent/main_agent.py` system prompt: | |
| ```python | |
| system_prompt = f"""You are Viktor Petrov... | |
| ``` | |
| ## Performance Notes | |
| - **Single player per session** - Game state is per WebSocket connection | |
| - **No database persistence** - Chat/moves only persist during game | |
| - **Random moves** - Agent doesn't evaluate position (not a real chess engine) | |
| - **Threading async** - WebSocket runs on thread pool | |
| For production, consider: | |
| - Redis for session management | |
| - Database for move history | |
| - Real chess engine for moves | |
| - Authentication system | |
| ## Next Steps | |
| 1. Play a full game and check agent responses | |
| 2. Test natural conversation (agent staying silent) | |
| 3. Play multiple games - agent should remember you | |
| 4. (Optional) Implement real chess AI for better moves | |
| --- | |
| **Ready to play?** | |
| ```bash | |
| python app.py | |
| ``` | |
| Then open: http://localhost:5000 | |