11import streamlit as st
22from databricks .sdk import WorkspaceClient
3+ from databricks .sdk .errors .sdk import OperationFailed
34from databricks .sdk .service .dashboards import GenieMessage
45import pandas as pd
56from typing import Dict
2021tab_a , tab_b , tab_c = st .tabs (["**Try it**" , "**Code snippet**" , "**Requirements**" ])
2122
2223with tab_a :
24+ def reset_conversation ():
25+ st .session_state .conversation_id = None
26+ st .session_state .messages = []
27+
2328 genie_space_id = st .text_input (
2429 "Genie Space ID" , placeholder = "01efe16a65e21836acefb797ae6a8fe4" , help = "Room ID in the Genie Space URL"
2530 )
26- st .session_state .genie_space_id = genie_space_id
31+ if genie_space_id != st .session_state .get ("genie_space_id" , "" ):
32+ reset_conversation ()
33+ st .session_state .genie_space_id = genie_space_id
2734
2835
2936 def display_message (message : Dict ):
@@ -65,18 +72,13 @@ def process_genie_response(response: GenieMessage):
6572 display_message (message )
6673 st .session_state .messages .append (message )
6774
68- def reset_conversation ():
69- st .session_state .conversation_id = None
70- st .session_state .messages = []
71-
7275
7376 if "messages" not in st .session_state :
7477 st .session_state .messages = []
7578
76- if st .session_state .genie_space_id == genie_space_id :
77- for message in st .session_state .messages :
78- with st .chat_message (message ["role" ]):
79- display_message (message )
79+ for message in st .session_state .messages :
80+ with st .chat_message (message ["role" ]):
81+ display_message (message )
8082
8183 if prompt := st .chat_input ("Ask your question..." ):
8284 st .chat_message ("user" ).markdown (prompt )
@@ -86,22 +88,36 @@ def reset_conversation():
8688 if genie_space_id :
8789 status = st .status ("Thinking" )
8890 if st .session_state .get ("conversation_id" ):
89- conversation = w .genie .create_message_and_wait (
90- genie_space_id , st .session_state .conversation_id , prompt
91- )
91+ try :
92+ conversation = w .genie .create_message_and_wait (
93+ genie_space_id , st .session_state .conversation_id , prompt
94+ )
95+ except Exception as e :
96+ status .update (label = "Conversation failed. Check the required permissions." , state = "error" )
97+ st .button ("New Chat" , on_click = reset_conversation )
98+ raise e
99+ if conversation .error :
100+ st .error (conversation .error .type , conversation .error .error )
92101 process_genie_response (conversation )
93102 else :
94- conversation = w .genie .start_conversation_and_wait (genie_space_id , prompt )
103+ try :
104+ conversation = w .genie .start_conversation_and_wait (genie_space_id , prompt )
105+ except Exception as e :
106+ status .update (label = "Failed to initialize Genie. Check the required permissions." , state = "error" )
107+ st .button ("New Chat" , on_click = reset_conversation )
108+ raise e
109+ if conversation .error :
110+ st .error (conversation .error .type , conversation .error .error )
95111 process_genie_response (conversation )
96112 status .update (label = "" , state = "complete" )
97-
98113 st .button ("New Chat" , on_click = reset_conversation )
99114 st .link_button ("Open Genie" , f"{ w .config .host } /genie/rooms/{ genie_space_id } /chats/{ st .session_state .conversation_id } " )
100115 else :
101116 st .error ("Please fill in the Genie Space ID." )
102117
103118
104119with tab_b :
120+ st .markdown ("Refer to the source code for the full implmenetation." )
105121 st .code (
106122 """
107123import streamlit as st
0 commit comments