diff --git a/libs/ktem/flowsettings.py b/libs/ktem/flowsettings.py index fee8eb9..74e5cbc 100644 --- a/libs/ktem/flowsettings.py +++ b/libs/ktem/flowsettings.py @@ -11,6 +11,7 @@ user_cache_dir.mkdir(parents=True, exist_ok=True) COHERE_API_KEY = config("COHERE_API_KEY", default="") +# KH_MODE = "dev" KH_DATABASE = f"sqlite:///{user_cache_dir / 'sql.db'}" KH_DOCSTORE = { "__type__": "kotaemon.storages.SimpleFileDocumentStore", diff --git a/libs/ktem/ktem/app.py b/libs/ktem/ktem/app.py index c5629a0..6924df9 100644 --- a/libs/ktem/ktem/app.py +++ b/libs/ktem/ktem/app.py @@ -34,6 +34,8 @@ class BaseApp: """ def __init__(self): + self.dev_mode = getattr(settings, "KH_MODE", "") == "dev" + dir_assets = Path(__file__).parent / "assets" with (dir_assets / "css" / "main.css").open() as fi: self._css = fi.read() @@ -56,7 +58,7 @@ class BaseApp: self.default_settings.index.finalize() self.settings_state = gr.State(self.default_settings.flatten()) - self.user_id = gr.State(None) + self.user_id = gr.State(1 if self.dev_mode else None) def register_indices(self): """Register the index components from app settings""" @@ -155,6 +157,10 @@ class BaseApp: if isinstance(value, BasePage): value.register_events() + for value in self.__dict__.values(): + if isinstance(value, BasePage): + value.on_app_created() + demo.load(lambda: None, None, None, js=f"() => {{{self._js}}}") return demo @@ -177,6 +183,9 @@ class BasePage: def on_register_events(self): """Register all events to the app""" + def _on_app_created(self): + """Called when the app is created""" + def declare_public_events(self): """Declare an event for the app""" for event in self.public_events: @@ -199,3 +208,10 @@ class BasePage: for value in self.__dict__.values(): if isinstance(value, BasePage): value.register_events() + + def on_app_created(self): + """Execute on app created callbacks""" + self._on_app_created() + for value in self.__dict__.values(): + if isinstance(value, BasePage): + value.on_app_created() diff --git a/libs/ktem/ktem/pages/chat/control.py b/libs/ktem/ktem/pages/chat/control.py index 5c11948..df0397e 100644 --- a/libs/ktem/ktem/pages/chat/control.py +++ b/libs/ktem/ktem/pages/chat/control.py @@ -191,3 +191,11 @@ class ConversationControl(BasePage): history = self.load_chat_history(user_id) return gr.update(choices=history), conversation_id + + def _on_app_created(self): + """Reload the conversation once the app is created""" + self._app.app.load( + self.reload_conv, + inputs=[self._app.user_id], + outputs=[self.conversation], + ) diff --git a/libs/ktem/ktem/pages/settings.py b/libs/ktem/ktem/pages/settings.py index 7111fc4..cfa9e9e 100644 --- a/libs/ktem/ktem/pages/settings.py +++ b/libs/ktem/ktem/pages/settings.py @@ -68,8 +68,9 @@ class SettingsPage(BasePage): def on_building_ui(self): self.setting_save_btn = gr.Button("Save settings") - with gr.Tab("User settings"): - self.user_tab() + if not self._app.dev_mode: + with gr.Tab("User settings"): + self.user_tab() with gr.Tab("General application settings"): self.app_tab() with gr.Tab("Index settings"): @@ -86,93 +87,96 @@ class SettingsPage(BasePage): inputs=[self._user_id] + self.components(), outputs=self._settings_state, ) - self.password_change_btn.click( - self.change_password, - inputs=[ - self._user_id, - self.password_change, - self.password_change_confirm, - ], - outputs=None, - show_progress="hidden", - ) self._components["reasoning.use"].change( self.change_reasoning_mode, inputs=[self._components["reasoning.use"]], outputs=list(self._reasoning_mode.values()), show_progress="hidden", ) + if not self._app.dev_mode: + self.password_change_btn.click( + self.change_password, + inputs=[ + self._user_id, + self.password_change, + self.password_change_confirm, + ], + outputs=None, + show_progress="hidden", + ) - onSignInClick = self.signin.click( - self.sign_in, - inputs=[self.username, self.password], - outputs=[self._user_id, self.username, self.password] - + self.signed_in_state() - + [self.user_out_state], - show_progress="hidden", - ).then( - self.load_setting, - inputs=self._user_id, - outputs=[self._settings_state] + self.components(), - show_progress="hidden", - ) - for event in self._app.get_event("onSignIn"): - onSignInClick = onSignInClick.then(**event) + onSignInClick = self.signin.click( + self.sign_in, + inputs=[self.username, self.password], + outputs=[self._user_id, self.username, self.password] + + self.signed_in_state() + + [self.user_out_state], + show_progress="hidden", + ).then( + self.load_setting, + inputs=self._user_id, + outputs=[self._settings_state] + self.components(), + show_progress="hidden", + ) + for event in self._app.get_event("onSignIn"): + onSignInClick = onSignInClick.then(**event) - onSignInSubmit = self.password.submit( - self.sign_in, - inputs=[self.username, self.password], - outputs=[self._user_id, self.username, self.password] - + self.signed_in_state() - + [self.user_out_state], - show_progress="hidden", - ).then( - self.load_setting, - inputs=self._user_id, - outputs=[self._settings_state] + self.components(), - show_progress="hidden", - ) - for event in self._app.get_event("onSignIn"): - onSignInSubmit = onSignInSubmit.then(**event) + onSignInSubmit = self.password.submit( + self.sign_in, + inputs=[self.username, self.password], + outputs=[self._user_id, self.username, self.password] + + self.signed_in_state() + + [self.user_out_state], + show_progress="hidden", + ).then( + self.load_setting, + inputs=self._user_id, + outputs=[self._settings_state] + self.components(), + show_progress="hidden", + ) + for event in self._app.get_event("onSignIn"): + onSignInSubmit = onSignInSubmit.then(**event) - onCreateUserClick = self.create_btn.click( - self.create_user, - inputs=[ - self.username_new, - self.password_new, - self.password_new_confirm, - ], - outputs=[ - self._user_id, - self.username_new, - self.password_new, - self.password_new_confirm, - ] - + self.signed_in_state() - + [self.user_out_state], - show_progress="hidden", - ).then( - self.load_setting, - inputs=self._user_id, - outputs=[self._settings_state] + self.components(), - show_progress="hidden", - ) - for event in self._app.get_event("onCreateUser"): - onCreateUserClick = onCreateUserClick.then(**event) + onCreateUserClick = self.create_btn.click( + self.create_user, + inputs=[ + self.username_new, + self.password_new, + self.password_new_confirm, + ], + outputs=[ + self._user_id, + self.username_new, + self.password_new, + self.password_new_confirm, + ] + + self.signed_in_state() + + [self.user_out_state], + show_progress="hidden", + ).then( + self.load_setting, + inputs=self._user_id, + outputs=[self._settings_state] + self.components(), + show_progress="hidden", + ) + for event in self._app.get_event("onCreateUser"): + onCreateUserClick = onCreateUserClick.then(**event) - onSignOutClick = self.signout.click( - self.sign_out, - inputs=None, - outputs=[self._user_id] + self.signed_in_state() + [self.user_out_state], - show_progress="hidden", - ).then( - self.load_setting, - inputs=self._user_id, - outputs=[self._settings_state] + self.components(), - show_progress="hidden", - ) - for event in self._app.get_event("onSignOut"): - onSignOutClick = onSignOutClick.then(**event) + onSignOutClick = self.signout.click( + self.sign_out, + inputs=None, + outputs=[self._user_id] + + self.signed_in_state() + + [self.user_out_state], + show_progress="hidden", + ).then( + self.load_setting, + inputs=self._user_id, + outputs=[self._settings_state] + self.components(), + show_progress="hidden", + ) + for event in self._app.get_event("onSignOut"): + onSignOutClick = onSignOutClick.then(**event) def user_tab(self): with gr.Row() as self.user_out_state: