12
12
from h2o_wave .core import expando_to_dict
13
13
from sidekick .prompter import db_setup_api , query_api
14
14
from sidekick .query import SQLGenerator
15
- from sidekick .utils import get_table_keys , save_query , setup_dir , update_tables
15
+ from sidekick .utils import get_table_keys , save_query , setup_dir , update_tables , TASK_CHOICE
16
16
17
17
# Load the config file and initialize required paths
18
18
base_path = (Path (__file__ ).parent / "../" ).resolve ()
@@ -91,7 +91,7 @@ def clear_cards(q, ignore: Optional[List[str]] = []) -> None:
91
91
async def chat (q : Q ):
92
92
q .page ["sidebar" ].value = "#chat"
93
93
94
- if q .args .table_dropdown or q .args .model_choice_dropdown :
94
+ if q .args .table_dropdown or q .args .model_choice_dropdown or q . args . task_dropdown :
95
95
# If a table/model is selected, the trigger causes refresh of the page
96
96
# so we update chat history with table name selection and return
97
97
# avoiding re-drawing.
@@ -113,6 +113,9 @@ async def chat(q: Q):
113
113
ui .choice ("h2ogpt-sql-sqlcoder2" , "h2ogpt-sql-sqlcoder2" ),
114
114
]
115
115
q .user .model_choice_dropdown = "h2ogpt-sql-sqlcoder2"
116
+
117
+ task_choices = [ui .choice ("q_a" , "Question/Answering" ), ui .choice ("sqld" , "SQL Debugging" )]
118
+ q .user .task_choice_dropdown = "q_a"
116
119
add_card (
117
120
q ,
118
121
"background_card" ,
@@ -123,7 +126,7 @@ async def chat(q: Q):
123
126
ui .inline (items = [ui .toggle (name = "demo_mode" , label = "Demo" , trigger = True )], justify = "end" ),
124
127
],
125
128
),
126
- )
129
+ ),
127
130
128
131
add_card (
129
132
q ,
@@ -149,7 +152,24 @@ async def chat(q: Q):
149
152
),
150
153
],
151
154
),
152
- )
155
+ ),
156
+ add_card (
157
+ q ,
158
+ "task_choice" ,
159
+ ui .form_card (
160
+ box = "vertical" ,
161
+ items = [
162
+ ui .dropdown (
163
+ name = "task_dropdown" ,
164
+ label = "Task" ,
165
+ required = True ,
166
+ choices = task_choices ,
167
+ value = q .user .task_choice_dropdown if q .user .task_choice_dropdown else None ,
168
+ trigger = True ,
169
+ )
170
+ ],
171
+ ),
172
+ ),
153
173
add_card (
154
174
q ,
155
175
"chat_card" ,
@@ -228,11 +248,15 @@ async def chatbot(q: Q):
228
248
if (
229
249
f"Table { q .user .table_dropdown } selected" in q .args .chatbot
230
250
or f"Model { q .user .model_choice_dropdown } selected" in q .args .chatbot
251
+ or f"Task { q .user .task_dropdown } selected" in q .args .chatbot
231
252
):
232
253
return
233
254
234
255
# Append bot response.
235
256
question = f"{ q .args .chatbot } "
257
+ # Check on task choice.
258
+ if q .user .task_dropdown == "sqld" :
259
+ question = f"Execute SQL:\n { q .args .chatbot } "
236
260
logging .info (f"Question: { question } " )
237
261
238
262
# For regeneration, currently there are 2 modes
@@ -638,7 +662,13 @@ async def on_event(q: Q):
638
662
q .args .chatbot = f"Model { q .user .model_choice_dropdown } selected"
639
663
# Refresh response is triggered when user selects a table via dropdown
640
664
event_handled = True
641
-
665
+ if q .args .task_dropdown and not q .args .chatbot and q .user .task_dropdown != q .args .task_dropdown :
666
+ logging .info (f"User selected task: { q .args .task_dropdown } " )
667
+ q .user .task_dropdown = q .args .task_dropdown
668
+ q .page ["task_choice" ].task_dropdown .value = q .user .task_dropdown
669
+ q .args .chatbot = f"Task '{ TASK_CHOICE [q .user .task_dropdown ]} ' selected"
670
+ # Refresh response is triggered when user selects a table via dropdown
671
+ event_handled = True
642
672
if (
643
673
q .args .save_conversation
644
674
or q .args .save_rejected_conversation
0 commit comments