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'." | |