import openai import logging from skills.skill import Skill import os # A little sloppy and experimental, but it's fun. Here's a demo: https://twitter.com/yoheinakajima/status/1699689836746358866 class PrettyMe(Skill): name = 'pretty_me' description = "A tool to update the current website UI by generating JavaScript that will execute upon load to change the front-end interface of the website it's on. The code response will be directly wrapped in a window.onload function and executed on the front-end. Use for any requests related to updating the UI (background, theme, etc.)" api_keys_required = ['openai'] def __init__(self, api_keys, main_loop_function): super().__init__(api_keys, main_loop_function) def execute(self, params, dependent_task_outputs, objective): try: if not self.valid: return "API keys not configured properly." # Read the contents of your CSS and HTML files css_path = os.path.join("public", "static", "style.css") html_path = os.path.join("templates", "index.html") with open(css_path, 'r') as css_file, open(html_path, 'r') as html_file: css_content = css_file.read() html_content = html_file.read() # Prepare the prompt with CSS and HTML content task_prompt = f"Generate JavaScript code to execute based on the following user input: {objective} {params}\nCSS Content: {css_content}\nHTML Content: {html_content}\nInstructions: only provide Javascript code that would go between the script tags, but do not provide the script tags.\n### Code:" example_input2 = "make me nature themed." example_output2 = ''' // Remove body background image and adjust body background color document.body.style.backgroundImage = "none"; document.body.style.backgroundColor = "#4CAF50"; // Green color // Adjust chat box background color document.querySelector(".chat-box").style.backgroundColor = "#4CAF50"; // Green color // Adjust chat messages' background color and bubble tail styles document.querySelectorAll(".bg-blue-200").forEach(function(element) { element.style.backgroundColor = "#357E68"; // Darker green }); document.querySelectorAll(".bg-gray-300").forEach(function(element) { element.style.backgroundColor = "#295E4C"; // Darker green element.style.borderLeftColor = "#357E68"; // Border color matching user's bubble }); // Adjust objectives box background color document.querySelector(".objectives-box").style.backgroundColor = "#4CAF50"; // Green color // Adjust task item background color document.querySelectorAll(".task-item").forEach(function(element) { element.style.backgroundColor = "#295E4C"; // Darker green }); // Adjust task output background color document.querySelectorAll(".task-output").forEach(function(element) { element.style.backgroundColor = "#fffdfd"; // Light gray }); ''' # Use the example2 variable in your execute function messages = [ {"role": "user", "content": example_input2}, {"role": "assistant", "content": example_output2}, {"role": "user", "content": "make my background red."}, {"role": "assistant", "content": "document.body.style.backgroundColor = \"red\";\ndocument.body.style.backgroundImage = \"none\";"}, {"role": "user", "content": task_prompt} ] print(messages) response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=messages, temperature=0, max_tokens=4000, top_p=1, frequency_penalty=0, presence_penalty=0 ) generated_code = response.choices[0].message['content'].strip() # Wrap the generated code with an onload event handler wrapped_code = f''' ''' return "\n\n" + wrapped_code except Exception as exc: # Log the exception for debugging logging.error(f"Error in PrettyMe skill: {exc}") # Return a user-friendly error message return "An error occurred while processing your request."