From ad47238445f60267da01dd82e2cba3cf4339f9ca Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 06:35:33 +0700 Subject: [PATCH 01/13] new custom theme --- libs/ktem/ktem/app.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libs/ktem/ktem/app.py b/libs/ktem/ktem/app.py index 64e8a9da0..3cb4e29a0 100644 --- a/libs/ktem/ktem/app.py +++ b/libs/ktem/ktem/app.py @@ -36,10 +36,7 @@ class BaseApp: def __init__(self): self.dev_mode = getattr(settings, "KH_MODE", "") == "dev" self.f_user_management = getattr(settings, "KH_FEATURE_USER_MANAGEMENT", False) - self._theme = gr.themes.Base( - font=("ui-sans-serif", "system-ui", "sans-serif"), - font_mono=("ui-monospace", "Consolas", "monospace"), - ) + self._theme = gr.Theme.from_hub("lone17/kotaemon") dir_assets = Path(__file__).parent / "assets" with (dir_assets / "css" / "main.css").open() as fi: From d9cb6a21fafaf7b9827f3d5e1eff83daba5a632f Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 06:43:53 +0700 Subject: [PATCH 02/13] improve css: scrollbar, header, tabs and buttons --- libs/ktem/ktem/assets/css/main.css | 106 ++++++++++++++++++++++------- 1 file changed, 82 insertions(+), 24 deletions(-) diff --git a/libs/ktem/ktem/assets/css/main.css b/libs/ktem/ktem/assets/css/main.css index 025347866..9bed52153 100644 --- a/libs/ktem/ktem/assets/css/main.css +++ b/libs/ktem/ktem/assets/css/main.css @@ -1,55 +1,88 @@ footer { - display: none !important; + display: none !important; } .gradio-container { - max-width: 100% !important; - padding: 0 !important; + max-width: 100% !important; + + ::-webkit-scrollbar { + background: var(--background-fill-primary); + } + + ::-webkit-scrollbar-thumb { + background-color: var(--border-color-primary); + border: 3px solid transparent; + border-radius: 100px; + background-clip: content-box; + } + + ::-webkit-scrollbar-corner { + background: var(--border-color-primary); + } } -.header-bar { - background-color: #f7f7f7; - margin: 0px 0px 20px; - overflow-x: scroll; - display: block !important; - text-wrap: nowrap; +.gradio-container .light { + background-color: #ffffff; } -.dark .header-bar { - border: none !important; - background-color: #8080802b !important; +.header-bar { + background-color: transparent; + margin: 0px 0px 20px; + overflow-x: scroll; + display: block !important; + text-wrap: nowrap; + border: none; } .header-bar button.selected { - border-radius: 0; + border: none; + /* background-color: var(--background-fill-primary); */ + /* border: 4px solid transparent; */ + /* border-radius: var(--radius-lg); + background-clip: padding-box; */ } -.indices-tab { - border: none !important; +button.selected { + color: var(--block-label-text-color); + font-weight: bold; +} + +#chat-tab, +#settings-tab, +#help-tab, +#admin-tab, +#login-tab { + border: none !important; } -#chat-tab, #settings-tab, #help-tab, #admin-tab, #login-tab { - border: none !important; +#help-tab, +#settings-tab { + max-width: max(56vw, 900px) !important; + margin: 0 auto !important; +} + +.indices-tab { + border: none !important; + max-width: max(70vw, 1200px) !important; + margin: 0 auto !important; } #main-chat-bot { - height: calc(100vh - 140px) !important; + height: calc(100vh - 180px) !important; } #chat-info-panel { - max-height: calc(100vh - 140px) !important; - overflow-y: scroll !important; + max-height: calc(100vh - 180px) !important; + overflow-y: scroll !important; } .setting-answer-mode-description { - margin: 5px 5px 2px !important + margin: 5px 5px 2px !important; } - -mark { +*/ mark { background-color: #1496bb; } - /* clpse */ .clpse { background-color: var(--background-fill-secondary); @@ -61,3 +94,28 @@ mark { text-align: left; outline: none; } + +.no-background { + background-color: transparent; + border: none; +} + +.bold-text { + font-weight: bold; +} + +.body-text-color { + color: var(--body-text-color); +} + +.right-button { + min-width: 200px !important; + width: fit-content; + padding-left: 20px; + padding-right: 20px; + margin: 0px 0px 0px auto; +} + +.cap-height { + max-height: 42px; +} From 1558591f5dbc180c37a67f6d0b47979ef19979e7 Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 06:47:08 +0700 Subject: [PATCH 03/13] update settings tab --- libs/ktem/ktem/pages/settings.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libs/ktem/ktem/pages/settings.py b/libs/ktem/ktem/pages/settings.py index 1c9f55fe5..23bbfac99 100644 --- a/libs/ktem/ktem/pages/settings.py +++ b/libs/ktem/ktem/pages/settings.py @@ -100,13 +100,18 @@ def __init__(self, app): self.on_building_ui() def on_building_ui(self): - self.setting_save_btn = gr.Button("Save settings") if self._app.f_user_management: - with gr.Tab("User settings"): + with gr.Tab("Users"): self.user_tab() - self.app_tab() - self.index_tab() - self.reasoning_tab() + with gr.Tab("General"): + self.app_tab() + with gr.Tab("Document Indices"): + self.index_tab() + with gr.Tab("Reasoning Pipelines"): + self.reasoning_tab() + self.setting_save_btn = gr.Button( + "Save changes", variant="primary", scale=1, elem_classes=["right-button"] + ) def on_subscribe_public_events(self): """ From 428afb6761014bceec9c712cbdb9486871a608b6 Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 07:02:36 +0700 Subject: [PATCH 04/13] open file index selector by default --- libs/ktem/ktem/pages/chat/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ktem/ktem/pages/chat/__init__.py b/libs/ktem/ktem/pages/chat/__init__.py index 3f0157127..e31a49549 100644 --- a/libs/ktem/ktem/pages/chat/__init__.py +++ b/libs/ktem/ktem/pages/chat/__init__.py @@ -41,7 +41,7 @@ def on_building_ui(self): continue index_ui.unrender() # need to rerender later within Accordion - with gr.Accordion(label=f"{index.name} Index", open=False): + with gr.Accordion(label=f"{index.name} Index", open=True): index_ui.render() gr_index = index_ui.as_gradio_component() if gr_index: From 60a8a8af7361dd4631cbc27dd2a885d4e6844c04 Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 07:11:59 +0700 Subject: [PATCH 05/13] update chat control panel --- libs/ktem/ktem/pages/chat/control.py | 71 +++++++++++++--------------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/libs/ktem/ktem/pages/chat/control.py b/libs/ktem/ktem/pages/chat/control.py index f2ed99bb1..14d5ff4ca 100644 --- a/libs/ktem/ktem/pages/chat/control.py +++ b/libs/ktem/ktem/pages/chat/control.py @@ -29,47 +29,42 @@ def __init__(self, app): self.on_building_ui() def on_building_ui(self): - with gr.Accordion(label="Conversation control", open=True): - self.conversation_id = gr.State(value="") - self.conversation = gr.Dropdown( - label="Chat sessions", - choices=[], + gr.Markdown("## Conversations") + self.conversation_id = gr.State(value="") + self.conversation = gr.Dropdown( + label="Chat sessions", + choices=[], + container=False, + filterable=False, + interactive=True, + ) + + with gr.Row() as self._new_delete: + self.btn_new = gr.Button(value="New", min_width=10, variant="primary") + self.btn_del = gr.Button(value="Delete", min_width=10, variant="stop") + + with gr.Row(visible=False) as self._delete_confirm: + self.btn_del_conf = gr.Button( + value="Delete", + variant="stop", + min_width=10, + ) + self.btn_del_cnl = gr.Button(value="Cancel", min_width=10) + + with gr.Row(): + self.conversation_rn = gr.Text( + placeholder="Conversation name", container=False, - filterable=False, + scale=5, + min_width=10, interactive=True, ) - - with gr.Row() as self._new_delete: - self.btn_new = gr.Button(value="New", min_width=10) - self.btn_del = gr.Button(value="Delete", min_width=10) - - with gr.Row(visible=False) as self._delete_confirm: - self.btn_del_conf = gr.Button( - value="Delete", - variant="primary", - min_width=10, - ) - self.btn_del_cnl = gr.Button(value="Cancel", min_width=10) - - with gr.Row(): - self.conversation_rn = gr.Text( - placeholder="Conversation name", - container=False, - scale=5, - min_width=10, - interactive=True, - ) - self.conversation_rn_btn = gr.Button( - value="Rename", scale=1, min_width=10 - ) - - # current_state = gr.Text() - # show_current_state = gr.Button(value="Current") - # show_current_state.click( - # lambda a, b: "\n".join([a, b]), - # inputs=[cid, self.conversation], - # outputs=[current_state], - # ) + self.conversation_rn_btn = gr.Button( + value="Rename", + scale=1, + min_width=10, + elem_classes=["no-background", "body-text-color", "bold-text"], + ) def load_chat_history(self, user_id): """Reload chat history""" From 7627639a7683bfe6956e9b5f083ec6bdacdd1033 Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 07:13:51 +0700 Subject: [PATCH 06/13] update chat panel --- libs/ktem/ktem/pages/chat/chat_panel.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/libs/ktem/ktem/pages/chat/chat_panel.py b/libs/ktem/ktem/pages/chat/chat_panel.py index 55b9258e9..deb4ede11 100644 --- a/libs/ktem/ktem/pages/chat/chat_panel.py +++ b/libs/ktem/ktem/pages/chat/chat_panel.py @@ -9,17 +9,33 @@ def __init__(self, app): def on_building_ui(self): self.chatbot = gr.Chatbot( + label="Kotaemon", + # placeholder="This is the beginning of a new conversation.", + show_label=True, elem_id="main-chat-bot", show_copy_button=True, likeable=True, - show_label=False, + bubble_full_width=False, ) with gr.Row(): self.text_input = gr.Text( - placeholder="Chat input", scale=15, container=False + placeholder="Chat input", + scale=15, + container=False, + ) + self.submit_btn = gr.Button( + value="Send", + scale=1, + min_width=10, + variant="primary", + elem_classes=["cap-height"], + ) + self.regen_btn = gr.Button( + value="Regen", + scale=1, + min_width=10, + elem_classes=["cap-height"], ) - self.submit_btn = gr.Button(value="Send", scale=1, min_width=10) - self.regen_btn = gr.Button(value="Regen", scale=1, min_width=10) def submit_msg(self, chat_input, chat_history): """Submit a message to the chatbot""" From 7f4242a97b0bf8aa3c419b4ba3176978ccab4b3c Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 07:17:09 +0700 Subject: [PATCH 07/13] update file index page --- libs/ktem/ktem/index/file/ui.py | 97 +++++++++++++++++++-------------- 1 file changed, 57 insertions(+), 40 deletions(-) diff --git a/libs/ktem/ktem/index/file/ui.py b/libs/ktem/ktem/index/file/ui.py index 11d491f03..eb6ef3527 100644 --- a/libs/ktem/ktem/index/file/ui.py +++ b/libs/ktem/ktem/index/file/ui.py @@ -97,49 +97,66 @@ def upload_instruction(self) -> str: def on_building_ui(self): """Build the UI of the app""" - with gr.Accordion(label="File upload", open=True) as self.upload: - msg = self.upload_instruction() - if msg: - gr.Markdown(msg) - - self.files = File( - file_types=self._supported_file_types, - file_count="multiple", - container=False, - ) - with gr.Accordion("Advanced indexing options", open=False): - with gr.Row(): - self.reindex = gr.Checkbox( - value=False, label="Force reindex file", container=False + with gr.Row(): + with gr.Column(scale=1): + gr.Markdown("## File Upload") + with gr.Column() as self.upload: + msg = self.upload_instruction() + if msg: + gr.Markdown(msg) + + self.files = File( + file_types=self._supported_file_types, + file_count="multiple", + container=True, + ) + with gr.Accordion("Advanced indexing options", open=True): + with gr.Row(): + self.reindex = gr.Checkbox( + value=False, label="Force reindex file", container=False + ) + + self.upload_button = gr.Button( + "Upload and Index", variant="primary" + ) + self.file_output = gr.File( + visible=False, label="Output files (debug purpose)" ) - self.upload_button = gr.Button("Upload and Index") - self.file_output = gr.File( - visible=False, label="Output files (debug purpose)" - ) - - gr.Markdown("## File list") - self.file_list_state = gr.State(value=None) - self.file_list = gr.DataFrame( - headers=["id", "name", "size", "text_length", "date_created"], - interactive=False, - ) - - with gr.Row() as self.selection_info: - self.selected_file_id = gr.State(value=None) - self.selected_panel = gr.Markdown(self.selected_panel_false) - self.deselect_button = gr.Button("Deselect", visible=False) + with gr.Column(scale=4): + gr.Markdown("## File List") + self.file_list_state = gr.State(value=None) + self.file_list = gr.DataFrame( + headers=["id", "name", "size", "text_length", "date_created"], + interactive=False, + ) - with gr.Row() as self.tools: - with gr.Column(): - self.view_button = gr.Button("View Text (WIP)") - with gr.Column(): - self.delete_button = gr.Button("Delete") - with gr.Row(): - self.delete_yes = gr.Button( - "Confirm Delete", variant="primary", visible=False - ) - self.delete_no = gr.Button("Cancel", visible=False) + with gr.Row() as self.selection_info: + self.selected_file_id = gr.State(value=None) + with gr.Column(scale=2): + self.selected_panel = gr.Markdown(self.selected_panel_false) + with gr.Column(scale=1): + self.deselect_button = gr.Button( + "Deselect", + scale=1, + visible=False, + elem_classes=["right-button"], + ) + + self.delete_button = gr.Button( + "Delete", variant="stop", elem_classes=["right-button"] + ) + self.delete_yes = gr.Button( + "Confirm Delete", + variant="stop", + visible=False, + elem_classes=["right-button"], + ) + self.delete_no = gr.Button( + "Cancel", + visible=False, + elem_classes=["right-button"], + ) def on_subscribe_public_events(self): """Subscribe to the declared public event of the app""" From 2e8b47453f0a914e72f8a25e028c9f1ab26f3650 Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 Apr 2024 07:18:22 +0700 Subject: [PATCH 08/13] cap gradio<=4.22.0 --- libs/kotaemon/pyproject.toml | 2 +- libs/ktem/pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/kotaemon/pyproject.toml b/libs/kotaemon/pyproject.toml index a02337e9f..85af159db 100644 --- a/libs/kotaemon/pyproject.toml +++ b/libs/kotaemon/pyproject.toml @@ -22,7 +22,7 @@ dependencies = [ "theflow", "llama-index>=0.9.0,<0.10.0", "llama-hub", - "gradio>=4.0.0", + "gradio>=4.0.0,<=4.22.0", "openpyxl", "cookiecutter", "click", diff --git a/libs/ktem/pyproject.toml b/libs/ktem/pyproject.toml index 6fee8a043..172498f10 100644 --- a/libs/ktem/pyproject.toml +++ b/libs/ktem/pyproject.toml @@ -21,6 +21,7 @@ dependencies = [ "sqlalchemy", "sqlmodel", "tiktoken", + "gradio>=4.0.0,<=4.22.0", ] readme = "README.md" license = { text = "MIT License" } From b146eea173e4b0cb4fe6e6a2aea41396ca42c0bf Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 8 Apr 2024 18:12:30 +0700 Subject: [PATCH 09/13] rename admin page --- libs/ktem/ktem/main.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libs/ktem/ktem/main.py b/libs/ktem/ktem/main.py index fa190b234..45ba47488 100644 --- a/libs/ktem/ktem/main.py +++ b/libs/ktem/ktem/main.py @@ -53,11 +53,11 @@ def ui(self): setattr(self, f"_index_{index.id}", page) with gr.Tab( - "Admin", - elem_id="admin-tab", - id="admin-tab", + "Resources", + elem_id="resources-tab", + id="resources-tab", visible=not self.f_user_management, - ) as self._tabs["admin-tab"]: + ) as self._tabs["resources-tab"]: self.admin_page = AdminPage(self) with gr.Tab( @@ -111,7 +111,7 @@ def signed_in_out(user_id): for k in self._tabs.keys(): if k == "login-tab": tabs_update.append(gr.update(visible=False)) - elif k == "admin-tab": + elif k == "resources-tab": tabs_update.append(gr.update(visible=is_admin)) else: tabs_update.append(gr.update(visible=True)) From 636b008d6bfe6e8f68ed274d806ecad3957fd1a7 Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 8 Apr 2024 18:17:53 +0700 Subject: [PATCH 10/13] adjust UI --- libs/ktem/ktem/assets/css/main.css | 58 +++++++++++++++++------------- libs/ktem/ktem/llms/ui.py | 2 +- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/libs/ktem/ktem/assets/css/main.css b/libs/ktem/ktem/assets/css/main.css index 9bed52153..16e3adc51 100644 --- a/libs/ktem/ktem/assets/css/main.css +++ b/libs/ktem/ktem/assets/css/main.css @@ -1,30 +1,27 @@ +/* no footer */ footer { display: none !important; } -.gradio-container { - max-width: 100% !important; - - ::-webkit-scrollbar { - background: var(--background-fill-primary); - } - - ::-webkit-scrollbar-thumb { - background-color: var(--border-color-primary); - border: 3px solid transparent; - border-radius: 100px; - background-clip: content-box; - } - - ::-webkit-scrollbar-corner { - background: var(--border-color-primary); - } +/* customize scrollbar */ +::-webkit-scrollbar { + background: var(--background-fill-primary); +} +::-webkit-scrollbar-thumb { + background-color: var(--border-color-primary); + border: 4px solid transparent; + border-radius: 100px; + background-clip: content-box; +} +::-webkit-scrollbar-corner { + background: var(--border-color-primary); } -.gradio-container .light { - background-color: #ffffff; +.gradio-container { + max-width: 100% !important; } +/* styling for header bar */ .header-bar { background-color: transparent; margin: 0px 0px 20px; @@ -33,15 +30,17 @@ footer { text-wrap: nowrap; border: none; } - .header-bar button.selected { border: none; - /* background-color: var(--background-fill-primary); */ - /* border: 4px solid transparent; */ - /* border-radius: var(--radius-lg); + + /* an alternative header bar style with rounded background */ + /* background-color: var(--background-fill-primary); + border: 4px solid transparent; + border-radius: var(--radius-lg); background-clip: padding-box; */ } +/* selected buttons have highlighted text */ button.selected { color: var(--block-label-text-color); font-weight: bold; @@ -50,24 +49,28 @@ button.selected { #chat-tab, #settings-tab, #help-tab, -#admin-tab, +#resources-tab, #login-tab { border: none !important; } #help-tab, #settings-tab { + /* text-dense view should not be wide for readability */ max-width: max(56vw, 900px) !important; margin: 0 auto !important; } -.indices-tab { +.indices-tab, +#resources-tab { + /* Other view should not be too wide */ border: none !important; max-width: max(70vw, 1200px) !important; margin: 0 auto !important; } #main-chat-bot { + /* span the chat area to occupy full height minus space for chat input */ height: calc(100vh - 180px) !important; } @@ -95,19 +98,23 @@ button.selected { outline: none; } +/* for setting transparent background for elements */ .no-background { background-color: transparent; border: none; } +/* for setting bold text for elements */ .bold-text { font-weight: bold; } +/* for setting highlighted text for elements */ .body-text-color { color: var(--body-text-color); } +/* for setting right-aligned buttons */ .right-button { min-width: 200px !important; width: fit-content; @@ -116,6 +123,7 @@ button.selected { margin: 0px 0px 0px auto; } +/* for setting height limit for buttons */ .cap-height { max-height: 42px; } diff --git a/libs/ktem/ktem/llms/ui.py b/libs/ktem/ktem/llms/ui.py index dd8f2bd2d..f86db60bd 100644 --- a/libs/ktem/ktem/llms/ui.py +++ b/libs/ktem/ktem/llms/ui.py @@ -98,7 +98,7 @@ def on_building_ui(self): "by default across the application." ), ) - self.btn_new = gr.Button("Create LLM") + self.btn_new = gr.Button("Add LLM", variant="primary") with gr.Column(scale=3): self.spec_desc = gr.Markdown(self.spec_desc_default) From 3271caddffc6d3c29537bbc4aa56a6432855d136 Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 8 Apr 2024 19:10:27 +0700 Subject: [PATCH 11/13] update flowsettings --- libs/ktem/flowsettings.py | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/libs/ktem/flowsettings.py b/libs/ktem/flowsettings.py index 2e26cff1a..25f0c06a2 100644 --- a/libs/ktem/flowsettings.py +++ b/libs/ktem/flowsettings.py @@ -73,30 +73,29 @@ if config("OPENAI_API_KEY", default=""): KH_LLMS["openai"] = { - "def": { + "spec": { "__type__": "kotaemon.llms.ChatOpenAI", "temperature": 0, - "openai_api_base": config("OPENAI_API_BASE", default="") + "base_url": config("OPENAI_API_BASE", default="") or "https://api.openai.com/v1", - "openai_api_key": config("OPENAI_API_KEY", default=""), + "api_key": config("OPENAI_API_KEY", default=""), "model": config("OPENAI_CHAT_MODEL", default="") or "gpt-3.5-turbo", - "request_timeout": 10, - "stream": False, + "timeout": 10, }, "default": False, } if len(KH_EMBEDDINGS) < 1: KH_EMBEDDINGS["openai"] = { - "def": { + "spec": { "__type__": "kotaemon.embeddings.OpenAIEmbeddings", - "openai_api_base": config("OPENAI_API_BASE", default="") + "base_url": config("OPENAI_API_BASE", default="") or "https://api.openai.com/v1", - "openai_api_key": config("OPENAI_API_KEY", default=""), + "api_key": config("OPENAI_API_KEY", default=""), "model": config( "OPENAI_EMBEDDINGS_MODEL", default="text-embedding-ada-002" ) or "text-embedding-ada-002", - "request_timeout": 10, + "timeout": 10, "chunk_size": 16, }, "default": False, @@ -104,7 +103,7 @@ if config("LOCAL_MODEL", default=""): KH_LLMS["local"] = { - "def": { + "spec": { "__type__": "kotaemon.llms.EndpointChatLLM", "endpoint_url": "http://localhost:31415/v1/chat/completions", }, @@ -113,7 +112,7 @@ } if len(KH_EMBEDDINGS) < 1: KH_EMBEDDINGS["local"] = { - "def": { + "spec": { "__type__": "kotaemon.embeddings.EndpointEmbeddings", "endpoint_url": "http://localhost:31415/v1/embeddings", }, @@ -164,10 +163,4 @@ "config": {}, "index_type": "ktem.index.file.FileIndex", }, - { - "id": 2, - "name": "Sample", - "config": {}, - "index_type": "ktem.index.file.FileIndex", - }, ] From cb39c3c8e8f74c06e711aaa3a014f322d81c248d Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 8 Apr 2024 19:11:59 +0700 Subject: [PATCH 12/13] auto start in browser --- libs/ktem/launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ktem/launch.py b/libs/ktem/launch.py index 1f436c5b5..2ac7a1aac 100644 --- a/libs/ktem/launch.py +++ b/libs/ktem/launch.py @@ -2,4 +2,4 @@ app = App() demo = app.make() -demo.queue().launch(favicon_path=app._favicon) +demo.queue().launch(favicon_path=app._favicon, inbrowser=True) From 5075841007d13856971f0c59f85422f62dddc01e Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 8 Apr 2024 22:13:52 +0700 Subject: [PATCH 13/13] change colour for edit LLM page's button --- libs/ktem/ktem/llms/ui.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libs/ktem/ktem/llms/ui.py b/libs/ktem/ktem/llms/ui.py index f86db60bd..7644e27e2 100644 --- a/libs/ktem/ktem/llms/ui.py +++ b/libs/ktem/ktem/llms/ui.py @@ -52,13 +52,17 @@ def on_building_ui(self): with gr.Row(visible=False) as self._selected_panel_btn: with gr.Column(): - self.btn_edit_save = gr.Button("Save", min_width=10) + self.btn_edit_save = gr.Button( + "Save", min_width=10, variant="primary" + ) with gr.Column(): - self.btn_delete = gr.Button("Delete", min_width=10) + self.btn_delete = gr.Button( + "Delete", min_width=10, variant="stop" + ) with gr.Row(): self.btn_delete_yes = gr.Button( - "Confirm delete", - variant="primary", + "Confirm Delete", + variant="stop", visible=False, min_width=10, )