Привет, вот мой код бота:
```py

import json

import httpx
import openai
from openai import OpenAI

from project_structure_manager import ProjectStructureManagement
from ai_tools import AIEngineer_tools


# For console debugging
def PrintConsoleAI(role, message):
    print(f"\n{role}:\n```\n{message}\n```\n")


class AIEngineer:
    def __init__(self, OPENAI_API_KEY, proxy=None):
        self.client = self.loadOpenAI_Client(OPENAI_API_KEY, proxy)
        self.project_manager = ProjectStructureManagement("test_project")
        self.SYSTEM_PROMPT = self.get_system_prompt()
        self.messages = [{"role": "system", "content": self.SYSTEM_PROMPT}]

    def loadOpenAI_Client(self, OPENAI_API_KEY, proxy):
        httpx_Client_proxy = None
        if proxy:
            # Разбиваем строку с прокси на части
            proxy_parts = proxy.split(":")
            proxy_host = proxy_parts[1][2:]  # Убираем "//" из начала хоста
            proxy_port = int(proxy_parts[2])

            httpx_Client_proxy = httpx.Client(
                proxies="socks5://" + proxy_host + ":" + str(
                    proxy_port),
                verify=False  # Добавляем проверку сертификата
            )
        print(f"OPENAI_API_KEY = {OPENAI_API_KEY}")
        # Создаем HTTP-клиент с прокси
        client = OpenAI(
            api_key=OPENAI_API_KEY,
            http_client=httpx_Client_proxy
        )
        return client

    def get_system_prompt(self):
        with open("system_prompt.txt", 'r', encoding='utf-8') as file:
            return file.read()

    def ai_mind_generator(self, tools, role, messages):
        response = self.client.chat.completions.create(
            model="gpt-4o-mini",
            messages=messages,
            tools=tools,
            tool_choice="auto"
        )
        response_message = response.choices[0].message
        messages.append(response_message)
        #print(f"messages after response: {messages}\n")

        yield {"type": "message", "role": role, "message": response_message.content}

        # Обработка вызовов функций
        tool_calls = response_message.tool_calls
        if tool_calls:
            for tool_call in tool_calls:
                #print(f"tool_call = {tool_call}")
                tool_call_id = tool_call.id
                tool_function_name = tool_call.function.name

                _arguments = json.loads(tool_call.function.arguments)

                yield {"type": "tool_call", "role": role, "tool_function_name": tool_function_name,
                       "arguments": _arguments}

                function_result = ""

                if tool_function_name == "get_project_structure":
                    function_result = self.project_manager.get_project_structure()
                elif tool_function_name == "read_file":
                    function_result = self.project_manager.read_file(_arguments["file_path"])
                elif tool_function_name == "update_file":
                    function_result = self.project_manager.update_file(_arguments["file_path"], _arguments["content"])
                elif tool_function_name == "rename_file":
                    function_result = self.project_manager.rename_file(_arguments["old_path"], _arguments["new_name"])
                elif tool_function_name == "create_file":
                    function_result = self.project_manager.create_file(_arguments["path"], _arguments["content"])
                else:
                    print(f"Error: function {tool_function_name} does not exist")

                messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call_id,
                    "name": tool_function_name,
                    "content": function_result
                })

            # Все tools_calls модели обработаны и нужно вернуть ей результат через эту же функцию в рекурсии
            for event in self.ai_mind_generator(tools, role, messages):
                yield event
        else:
            print(f"!! {role} has no tool calls! Даааа")

    def ask(self, text):
        print(f"ask_response")
        # Общение клиента с начальником разработчиков
        self.messages.append({"role": "user", "content": text})
        #print(f"self.AI_Boss_messages = {self.messages}")

        for event in self.ai_mind_generator(AIEngineer_tools, "DEVELOPER", self.messages):
            #print(f"RECEIVED EVENT: {event}")
            if event:
                if event["type"] == "message":
                    role = event["role"]
                    message = event["message"]
                    PrintConsoleAI(role, message)
                elif event["type"] == "tool_call":
                    role = event["role"]
                    tool_function_name = event["tool_function_name"]
                    arguments = event["arguments"]
                    print(
                        f"RECEIVED TOOL CALL by {role}, tool_function_name: {tool_function_name}, arguments: {arguments}")

        print("FULL DONE!!!!!!!!!!!")


if __name__ == "__main__":
    OPENAI_API_KEY = "<TRUFFLEHOG_REDACTED_OPENAI>"
    ai_engineer = AIEngineer(OPENAI_API_KEY, "socks5://185.106.94.81:44590")
    user_instruction = """
Please create a Python script called 'main.py' that prints 'Hello, World!' to the console. 
Also, create a 'README.md' file with a project description. Then, rename 'main.py' to 'app.py'.
Finally, show me the project structure.
"""
    ai_engineer.ask(user_instruction)
```
Проанализируй его и сделай для него интерфейс при помощи Pywebview.
Это должен быть бекенд на flask с `localhost:5003`.
Сделай так, чтобы это был красивый минималистичный белый современный интерфейс с текстовым полем снизу по центру.
Контейнер чата - `.chat-container` - основной контейнер с `.message`. Будет: `.user-message`, `.bot-message` и `.action-message`.
Последний будет иметь другой, выделяющийся вид.

Сделай так, чтобы наше сообщение имело чуть синий фон, а сообщение бота - прозрачный(белый).

Слева сделай хотбар с кнопками чатов.
Сделай, чтобы можно было создавать новые чаты и переключаться между ними.

Реализуй отдельный класс бд на python, чтобы он обрабатывал создание новых чатов, обработки в них сообщений, переименование чатов и изменение содержания сообщений.

Сделай все полностью и в лучшем виде, желательно, без будущих доработок.

Класс `AIEngineer` замени временно затычкой, его менять не надо. Я потом настоящий подставлю.

Приведи полностью файловую структуру нового проекта и каждый файл проекта, чтобы он был красивым, современным, удобным и практичным.
Спасибо!