From 757aabca4dc78a377a41fc8b3063a867e2c724e7 Mon Sep 17 00:00:00 2001 From: trducng Date: Thu, 25 Jan 2024 22:40:32 +0700 Subject: [PATCH] Add app title, favicon. More natural chat --- libs/ktem/ktem/app.py | 3 ++- libs/ktem/ktem/assets/img/favicon.svg | 1 + libs/ktem/ktem/pages/chat/__init__.py | 14 ++++++++++++-- libs/ktem/ktem/pages/chat/chat_panel.py | 4 ++++ libs/ktem/ktem/pages/chat/control.py | 1 - libs/ktem/ktem/pages/chat/events.py | 5 ++++- libs/ktem/launch.py | 2 +- 7 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 libs/ktem/ktem/assets/img/favicon.svg diff --git a/libs/ktem/ktem/app.py b/libs/ktem/ktem/app.py index 6924df9..aa73d7f 100644 --- a/libs/ktem/ktem/app.py +++ b/libs/ktem/ktem/app.py @@ -41,6 +41,7 @@ class BaseApp: self._css = fi.read() with (dir_assets / "js" / "main.js").open() as fi: self._js = fi.read() + self._favicon = str(dir_assets / "img" / "favicon.svg") self.default_settings = SettingGroup( application=BaseSettingGroup(settings=settings.SETTINGS_APP), @@ -138,7 +139,7 @@ class BaseApp: raise NotImplementedError def make(self): - with gr.Blocks(css=self._css) as demo: + with gr.Blocks(css=self._css, title="Kotaemon") as demo: self.app = demo self.settings_state.render() self.user_id.render() diff --git a/libs/ktem/ktem/assets/img/favicon.svg b/libs/ktem/ktem/assets/img/favicon.svg new file mode 100644 index 0000000..39045e5 --- /dev/null +++ b/libs/ktem/ktem/assets/img/favicon.svg @@ -0,0 +1 @@ + diff --git a/libs/ktem/ktem/pages/chat/__init__.py b/libs/ktem/ktem/pages/chat/__init__.py index 8bd4217..fd69b6b 100644 --- a/libs/ktem/ktem/pages/chat/__init__.py +++ b/libs/ktem/ktem/pages/chat/__init__.py @@ -29,9 +29,13 @@ class ChatPage(BasePage): def on_register_events(self): self.chat_panel.submit_btn.click( + self.chat_panel.submit_msg, + inputs=[self.chat_panel.text_input, self.chat_panel.chatbot], + outputs=[self.chat_panel.text_input, self.chat_panel.chatbot], + show_progress="hidden", + ).then( fn=chat_fn, inputs=[ - self.chat_panel.text_input, self.chat_panel.chatbot, self.data_source.files, self._app.settings_state, @@ -41,6 +45,7 @@ class ChatPage(BasePage): self.chat_panel.chatbot, self.info_panel, ], + show_progress="minimal", ).then( fn=update_data_source, inputs=[ @@ -52,9 +57,13 @@ class ChatPage(BasePage): ) self.chat_panel.text_input.submit( + self.chat_panel.submit_msg, + inputs=[self.chat_panel.text_input, self.chat_panel.chatbot], + outputs=[self.chat_panel.text_input, self.chat_panel.chatbot], + show_progress="hidden", + ).then( fn=chat_fn, inputs=[ - self.chat_panel.text_input, self.chat_panel.chatbot, self.data_source.files, self._app.settings_state, @@ -64,6 +73,7 @@ class ChatPage(BasePage): self.chat_panel.chatbot, self.info_panel, ], + show_progress="minimal", ).then( fn=update_data_source, inputs=[ diff --git a/libs/ktem/ktem/pages/chat/chat_panel.py b/libs/ktem/ktem/pages/chat/chat_panel.py index 728de28..f4cfc5b 100644 --- a/libs/ktem/ktem/pages/chat/chat_panel.py +++ b/libs/ktem/ktem/pages/chat/chat_panel.py @@ -19,3 +19,7 @@ class ChatPanel(BasePage): placeholder="Chat input", scale=15, container=False ) self.submit_btn = gr.Button(value="Send", scale=1, min_width=10) + + def submit_msg(self, chat_input, chat_history): + """Submit a message to the chatbot""" + return "", chat_history + [(chat_input, None)] diff --git a/libs/ktem/ktem/pages/chat/control.py b/libs/ktem/ktem/pages/chat/control.py index df0397e..b732b76 100644 --- a/libs/ktem/ktem/pages/chat/control.py +++ b/libs/ktem/ktem/pages/chat/control.py @@ -114,7 +114,6 @@ class ConversationControl(BasePage): for result in results: options.append((result.name, result.id)) - # return gr.update(choices=options) return options def reload_conv(self, user_id): diff --git a/libs/ktem/ktem/pages/chat/events.py b/libs/ktem/ktem/pages/chat/events.py index 18f6506..5902520 100644 --- a/libs/ktem/ktem/pages/chat/events.py +++ b/libs/ktem/ktem/pages/chat/events.py @@ -117,8 +117,11 @@ def create_pipeline(settings: dict, files: Optional[list] = None): return pipeline -async def chat_fn(chat_input, chat_history, files, settings): +async def chat_fn(chat_history, files, settings): """Chat function""" + chat_input = chat_history[-1][0] + chat_history = chat_history[:-1] + queue: asyncio.Queue[Optional[dict]] = asyncio.Queue() # construct the pipeline diff --git a/libs/ktem/launch.py b/libs/ktem/launch.py index 66dfc0b..1f436c5 100644 --- a/libs/ktem/launch.py +++ b/libs/ktem/launch.py @@ -2,4 +2,4 @@ from ktem.main import App app = App() demo = app.make() -demo.queue().launch() +demo.queue().launch(favicon_path=app._favicon)