Spaces:
Sleeping
Sleeping
| import random | |
| from environments import register_env | |
| import gradio as gr | |
| class WordleEnv: | |
| """ | |
| Demonstration env. Not a full game; 4-letter variant for brevity. | |
| Observations are emoji strings; actions are 4-letter lowercase words. | |
| Reward is 1.0 on success, else 0.0. Terminal on success or after 6 guesses. | |
| """ | |
| dictionary = {"word", "wood", "ward", "sore", "bore", "bake", "bake", "bake", "earn"} | |
| def __init__(self, max_guesses: int = 6) -> None: | |
| self._max = max_guesses | |
| def reset(self) -> str: | |
| """Reset the environment and return the initial observation.""" | |
| self._secret = random.choice(list(self.dictionary)) | |
| self._n = 0 | |
| self._obs = "⬜" * 4 | |
| return self._obs | |
| def step(self, action: str) -> tuple[str, float, bool]: | |
| """ | |
| Take an action (a 4-letter word) and return (observation, reward, done). | |
| If | |
| When done is True, the episode has ended and reset() should be called to start a new episode. | |
| """ | |
| if self._n >= self._max: | |
| return "The game is over. Please reset.", -1.0, True | |
| guess: str = str(action) | |
| guess = guess.strip().lower() | |
| if len(guess) != 4 or not guess.isalpha(): | |
| return "Invalid guess. Must be a 4-letter word.", -1.0, False | |
| self._n += 1 | |
| # Compute feedback | |
| feedback: list[str] = [] | |
| for i, ch in enumerate(guess): | |
| if ch == self._secret[i]: | |
| feedback.append("🟩") | |
| elif ch in self._secret: | |
| feedback.append("🟨") | |
| else: | |
| feedback.append("⬜") | |
| self._obs = "".join(feedback) | |
| # Check for success or timeout and compute reward | |
| success = guess == self._secret | |
| timeout = self._n >= self._max | |
| done = success or timeout | |
| reward = 1.0 if success else 0.0 | |
| if done and not success: | |
| self._obs += f" Game over. The word was '{self._secret}'." | |
| return self._obs, reward, done | |
| with gr.Blocks() as demo: | |
| gr.Markdown( | |
| """# Wordle Environment | |
| Usage: | |
| ```shell | |
| pip install git+https://github.com/huggingface/environments.git | |
| ``` | |
| ```python | |
| from environments import load | |
| env = load("qgallouedec/wordle") | |
| Loaded as API: https://qgallouedec-counter.hf.space/ ✔ | |
| env.reset() | |
| ('Counter reset to 0', 0.0, False) | |
| env.step() | |
| ('Counter is now 1', 1.0, False) | |
| ``` | |
| """ | |
| ) | |
| register_env(WordleEnv) | |
| demo.launch(mcp_server=True) | |