Spaces:
Sleeping
Sleeping
# coding: utf-8 | |
import os | |
import re | |
from typing import Tuple, Any | |
from aworld.core.tool.action_factory import ActionFactory | |
from aworld.core.common import ActionModel, ActionResult | |
from aworld.logs.util import logger | |
from aworld.core.tool.action import ExecutableAction | |
from aworld.models.llm import get_llm_model, call_llm_model | |
class WriteHTML(ExecutableAction): | |
def act(self, action: ActionModel, **kwargs) -> Tuple[ActionResult, Any]: | |
logger.info("start write html!") | |
goal = action.params.get("goal") | |
information = action.params.get("information") | |
llm_conf = kwargs.get("llm_config") | |
llm = get_llm_model(llm_conf) | |
sys_prompt = "you are a helpful html writer." | |
prompt = """Your task is to create a detailed and visually appealing HTML document based on the specified theme. | |
The document must meet the following requirements, and you should utilize the provided reference materials to ensure accuracy and aesthetic quality. | |
1) HTML Document Requirements | |
Design and write the HTML document according to the following specifications: | |
Theme : {goal} | |
Related Info: {information} | |
Structural Requirements : | |
Use semantic HTML tags (e.g., <header>, <main>, <footer>, <section>) to create a clear and organized structure. | |
Ensure the document includes a header, navigation bar, main content area, and footer. | |
If applicable, add additional sections such as a sidebar, or call-to-action buttons. | |
Styling Requirements : | |
Implement a visually appealing design using CSS, including color schemes, font choices, spacing adjustments, etc. | |
Ensure the page has a responsive layout that works well on different devices (use media queries or frameworks like Bootstrap). | |
Add animations or interactive features (e.g., hover effects on buttons, scroll-triggered animations) to enhance user experience. | |
please give me html code directly, no need other words | |
""" | |
messages = [{'role': 'system', 'content': sys_prompt}, | |
{'role': 'user', 'content': prompt.format(goal=goal, information=information)}] | |
output = call_llm_model(llm, | |
messages=messages, | |
model=llm_conf.llm_model_name, | |
temperature=llm_conf.llm_temperature) | |
content = output.content | |
html_pattern = re.compile(r'<html.*?>.*?</html>', re.DOTALL) | |
matches = html_pattern.findall(content) | |
title_pattern = re.compile(r'<title.*?>.*?</title>', re.DOTALL) | |
filename = (title_pattern.findall(content)[0] | |
.replace("<title>", "") | |
.replace("</title>", "") | |
.replace(" ", "_") + ".html") | |
with open(filename, "a", encoding='utf-8') as f: | |
f.write(matches[0]) | |
abs_file_path = os.path.abspath(filename) | |
msg = f'Successfully wrote html to {abs_file_path}' | |
return ActionResult(content=msg, keep=True, is_done=True), None | |