|
|
|
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" |
|
|
|
def _load_word_list(self): |
|
try: |
|
response = requests.get(self.word_list_url) |
|
response.raise_for_status() |
|
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": |
|
|
|
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" |
|
elif guess[i] in self.secret_word: |
|
result += "Y" |
|
else: |
|
result += "X" |
|
return result |
|
else: |
|
return "Invalid action. Please choose 'new_game', 'guess', or 'reset'." |
|
|