|
import openai |
|
import logging |
|
from skills.skill import Skill |
|
import os |
|
|
|
|
|
|
|
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." |
|
|
|
|
|
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() |
|
|
|
|
|
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 |
|
}); |
|
''' |
|
|
|
|
|
|
|
|
|
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() |
|
|
|
|
|
wrapped_code = f''' |
|
<script> |
|
var script = document.createElement("script"); |
|
script.type = "text/javascript"; |
|
script.innerHTML = `{generated_code}`; |
|
document.head.appendChild(script); |
|
</script> |
|
''' |
|
return "\n\n" + wrapped_code |
|
except Exception as exc: |
|
|
|
logging.error(f"Error in PrettyMe skill: {exc}") |
|
|
|
return "An error occurred while processing your request." |
|
|