import gradio as gr

from long_memory import NetworkMemoryClient
from model import ModelClient
from tg_news_scrapper import scrape_telegram_posts

conversation_themes = ["Майоры", "Базар", "Ярославль"]
current_theme = None
system = "Если тебя просят что то запомнить, то ОБЯЗАТЕЛЬНО!!! добавляй в первым словом ответа 'abcd' и далее очень коротко расскажи что ты запомнила. Добавляй 'abcd' только в том случае, если тебя действительно просят что то запомнить. Ты моя подруга, веди себя как скромная девушка."
client = ModelClient()


def handle_query(message, history, context_theme):
    global current_theme
    global system

    if context_theme != current_theme:
        news = scrape_telegram_posts(context_theme)
        system = (f"Отвечай на вопросы беря информацию из контекста. Отвечай на русском языке. Не стесняйся "
                  f"использовать"
                  f"смайлы и прикреплять ссылки."
                  f" Вот последняя информация: \n{news}")

        current_theme = context_theme

    response = client.get_response(message=message, history=history, sys_prompt=system)

    memory_client = NetworkMemoryClient()
    memory_client.check_memory_message(response)

    return response[-1]


with gr.Blocks() as demo:
    interface = gr.ChatInterface(fn=handle_query,
                                 theme="soft",
                                 examples=[["Расскажи очень коротко 5 самых важных новостей"]],
                                 retry_btn=None,
                                 clear_btn="Clear",
                                 additional_inputs=[
                                     gr.Dropdown(conversation_themes, label="Выберите тему контекста:")],
                                 css="footer{display:none !important}"
                                 )
    interface.textbox.placeholder = "Давай поговорим, пиши.."
    interface.textbox.container = False
    interface.textbox.scale = 7

    interface.chatbot.height = 500

    with gr.Accordion("Голосовые сообщения", open=True):
        with gr.Row():
            audio = gr.Textbox(elem_id="audio-base64", visible=False)
            btn = gr.Button("Записать сообщение", elem_id="record-button", elem_classes="custom-button")

demo.title = "VirtualIst"

demo.queue().launch()

# server_name="0.0.0.0", server_port=7846, ssl_verify=False


import sqlite3
from datetime import datetime


class NetworkMemoryClient:
    def __init__(self, db_path='network_memory.db'):
        self.db_path = db_path
        self.connection = sqlite3.connect(self.db_path)
        self.cursor = self.connection.cursor()
        self.create_table()

    def create_table(self):
        query = '''
        CREATE TABLE IF NOT EXISTS Memory (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            message TEXT NOT NULL,
            datetime TEXT NOT NULL
        );
        '''
        self.cursor.execute(query)
        self.connection.commit()

    def check_memory_message(self, response):
        if 'abcd' in response[-1]:
            self.save_message(response[0])

    def save_message(self, message):
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        query = 'INSERT INTO Memory (message, datetime) VALUES (?, ?);'
        self.cursor.execute(query, (message, current_time))
        self.connection.commit()

    def fetch_memory(self):
        self.cursor.execute("SELECT * FROM Memory")
        return self.cursor.fetchall()

    def close_connection(self):
        self.connection.close()


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