import gradio as gr import xxhash from gradio.components import _Keywords from ai import AI from config import Config from contents import * from storage import Storage def webui(cfg: Config): """Run the web UI.""" Webui(cfg).run() class Webui: def __init__(self, cfg: Config): self.cfg = cfg self.ai = AI(cfg) self.storage = Storage.create_storage(self.cfg) # Initialize storage here def _save_to_storage(self, contents, hash_id): print(f"Saving to storage {hash_id}") print(f"Contents: \n{contents}") self.storage = Storage.create_storage(self.cfg) if self.storage.been_indexed(hash_id): return 0 else: embeddings, tokens = self.ai.create_embeddings(contents) self.storage.add_all(embeddings, hash_id) return tokens def _get_hash_id(self, contents): return xxhash.xxh3_128_hexdigest('\n'.join(contents)) def run(self): with gr.Blocks(theme=gr.themes.Monochrome(), css="footer {visibility: hidden}") as demo: hash_id_state = gr.State('dd771cb6c4718ace4c4c596f4792cfdd') # Initialize hash_id_state to 'dd771cb6c4718ace4c4c596f4792cfdd' chat_page = gr.Column(visible=True) # Set chat_page to visible by default with chat_page: with gr.Row(): with gr.Column(): chatbot = gr.Chatbot(label="Kanunla Konuş") msg = gr.Textbox(label="4857 Sayılı İş Kanunu ile ilgili tüm sorularınızı bekliyoruz.") submit_box = gr.Button("Kanuna Sor", variant="primary") def respond(message, chat_history, hash_id): kw = self.ai.get_keywords(message) if len(kw) == 0 or hash_id is None: return "", chat_history _, kw_ebd = self.ai.create_embedding(kw) ctx = self.storage.get_texts(kw_ebd, hash_id) print(f"Context: \n{ctx}") bot_message = self.ai.completion(message, ctx) chat_history.append((message, bot_message)) return "", chat_history, \ def reset(): return { chat_page: gr.update(visible=True), chatbot: gr.update(value=[]), msg: gr.update(value=""), hash_id_state: 'dd771cb6c4718ace4c4c596f4792cfdd', } msg.submit(respond, [msg, chatbot, hash_id_state], [msg, chatbot]) submit_box.click(respond, [msg, chatbot, hash_id_state], [msg, chatbot]) demo.title = "Kanuna Sor" demo.launch(server_port=self.cfg.webui_port, server_name=self.cfg.webui_host, show_api=False)