Spaces:
Running
Running
| import re | |
| import random | |
| import json | |
| import requests | |
| __all__ = ['WordleTool'] | |
| class WordleTool(): | |
| dependencies = [] | |
| inputSchema = { | |
| "name": "WordleTool", | |
| "description": "A tool to play Wordle.", | |
| "parameters": { | |
| "type": "object", | |
| "properties": { | |
| "action": { | |
| "type": "string", | |
| "enum": ["new_game", "guess", "reset"], | |
| "description": "The action to perform: new_game, guess, or reset." | |
| }, | |
| "guess": { | |
| "type": "string", | |
| "description": "A 5-letter word guess. Required for 'guess' action." | |
| } | |
| }, | |
| "required": ["action"], | |
| }, | |
| "invoke_cost": 0.2, | |
| } | |
| def __init__(self): | |
| self.secret_word = None | |
| self.word_list_url = "https://github.com/kiprobinson/wordle-solver/raw/main/app/resources/word-list.txt" | |
| self.file_path = "src/data/secret_word.json" # Path for storing the secret word | |
| def _load_word_list(self): | |
| try: | |
| response = requests.get(self.word_list_url) | |
| response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx) | |
| word_list_str = response.text | |
| word_list = word_list_str.strip().split("\n") | |
| return word_list | |
| except requests.exceptions.RequestException as e: | |
| print(f"Error fetching word list: {e}") | |
| return ['crane', 'house', 'table', 'chair', 'apple'] | |
| def _get_secret_word(self): | |
| word_list = self._load_word_list() | |
| return random.choice(word_list) | |
| def _store_secret_word(self, word): | |
| with open(self.file_path, "w") as f: | |
| json.dump({"secret_word": word}, f) | |
| return {"result": "Secret word stored successfully."} | |
| def _retrieve_secret_word(self): | |
| try: | |
| with open(self.file_path, "r") as f: | |
| data = json.load(f) | |
| return {"result": data["secret_word"]} | |
| except FileNotFoundError: | |
| return {"result": None} | |
| def run(self, **kwargs): | |
| action = kwargs.get("action") | |
| guess = kwargs.get("guess") | |
| if action == "new_game": | |
| self.secret_word = self._get_secret_word() | |
| self._store_secret_word(self.secret_word) | |
| return "New word generated. Please make your guess." | |
| elif action == "reset": | |
| self.secret_word = None | |
| return "Game reset." | |
| elif action == "guess": | |
| # Retrieve secret word from file | |
| secret_word_data = self._retrieve_secret_word() | |
| if secret_word_data["result"] is None: | |
| return "No secret word found. Please start a new game." | |
| self.secret_word = secret_word_data["result"] | |
| if not guess: | |
| return "Please provide a guess." | |
| guess = guess.lower() | |
| if not re.match("^[a-z]{5}$", guess): | |
| return "Invalid input. Please enter a 5-letter word." | |
| result = "" | |
| for i in range(5): | |
| if guess[i] == self.secret_word[i]: | |
| result += "G" # Green: Correct letter, correct position | |
| elif guess[i] in self.secret_word: | |
| result += "Y" # Yellow: Correct letter, wrong position | |
| else: | |
| result += "X" # Gray: Incorrect letter | |
| return result | |
| else: | |
| return "Invalid action. Please choose 'new_game', 'guess', or 'reset'." | |