Rulga commited on
Commit
8f0f58a
·
1 Parent(s): 728624d

Refactor chat interface to use tabs for organization and add model training features

Browse files
Files changed (1) hide show
  1. app.py +116 -82
app.py CHANGED
@@ -4,6 +4,12 @@ from huggingface_hub import InferenceClient
4
  from config.constants import DEFAULT_SYSTEM_MESSAGE
5
  from config.settings import DEFAULT_MODEL, HF_TOKEN
6
  from src.knowledge_base.vector_store import create_vector_store, load_vector_store
 
 
 
 
 
 
7
 
8
  if not HF_TOKEN:
9
  raise ValueError("HUGGINGFACE_TOKEN not found in environment variables")
@@ -135,95 +141,123 @@ def load_vector_store():
135
 
136
  # Create interface
137
  with gr.Blocks() as demo:
138
- gr.Markdown("# ⚖️ Status Law Assistant")
139
-
140
- conversation_id = gr.State(None)
141
-
142
- with gr.Row():
143
- with gr.Column(scale=3):
144
- chatbot = gr.Chatbot(
145
- label="Chat",
146
- bubble_full_width=False,
147
- avatar_images=["user.png", "assistant.png"] # optional
148
- )
149
 
150
  with gr.Row():
151
- msg = gr.Textbox(
152
- label="Your question",
153
- placeholder="Enter your question...",
154
- scale=4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  )
156
- submit_btn = gr.Button("Send", variant="primary")
157
-
158
- with gr.Column(scale=1):
159
- gr.Markdown("### Knowledge Base Management")
160
- build_kb_btn = gr.Button("Create/Update Knowledge Base", variant="primary")
161
- kb_status = gr.Textbox(label="Knowledge Base Status", interactive=False)
162
-
163
- gr.Markdown("### Generation Settings")
164
- max_tokens = gr.Slider(
165
- minimum=1,
166
- maximum=2048,
167
- value=512,
168
- step=1,
169
- label="Maximum Response Length",
170
- info="Limits the number of tokens in response. More tokens = longer response"
171
- )
172
- temperature = gr.Slider(
173
- minimum=0.1,
174
- maximum=2.0,
175
- value=0.7,
176
- step=0.1,
177
- label="Temperature",
178
- info="Controls creativity. Lower value = more predictable responses"
179
  )
180
- top_p = gr.Slider(
181
- minimum=0.1,
182
- maximum=1.0,
183
- value=0.95,
184
- step=0.05,
185
- label="Top-p",
186
- info="Controls diversity. Lower value = more focused responses"
187
  )
188
-
189
- clear_btn = gr.Button("Clear Chat History")
190
 
191
- def respond_and_clear(
192
- message,
193
- history,
194
- conversation_id,
195
- max_tokens,
196
- temperature,
197
- top_p,
198
- ):
199
- # Use existing respond function
200
- response_generator = respond(
201
- message,
202
- history,
203
- conversation_id,
204
- DEFAULT_SYSTEM_MESSAGE,
205
- max_tokens,
206
- temperature,
207
- top_p,
208
- )
209
-
210
- # Return result and empty string to clear input field
211
- for response in response_generator:
212
- yield response[0], response[1], "" # chatbot, conversation_id, empty string for msg
213
 
214
- # Event handlers
215
- msg.submit(
216
- respond_and_clear,
217
- [msg, chatbot, conversation_id, max_tokens, temperature, top_p],
218
- [chatbot, conversation_id, msg] # Add msg to output parameters
219
- )
220
- submit_btn.click(
221
- respond_and_clear,
222
- [msg, chatbot, conversation_id, max_tokens, temperature, top_p],
223
- [chatbot, conversation_id, msg] # Add msg to output parameters
224
- )
225
- build_kb_btn.click(build_kb, None, kb_status)
226
- clear_btn.click(lambda: ([], None), None, [chatbot, conversation_id])
 
227
 
228
  # Launch application
229
  if __name__ == "__main__":
 
4
  from config.constants import DEFAULT_SYSTEM_MESSAGE
5
  from config.settings import DEFAULT_MODEL, HF_TOKEN
6
  from src.knowledge_base.vector_store import create_vector_store, load_vector_store
7
+ from web.training_interface import (
8
+ get_models_df,
9
+ generate_chat_analysis,
10
+ register_model_action,
11
+ start_finetune_action
12
+ )
13
 
14
  if not HF_TOKEN:
15
  raise ValueError("HUGGINGFACE_TOKEN not found in environment variables")
 
141
 
142
  # Create interface
143
  with gr.Blocks() as demo:
144
+ with gr.Tabs():
145
+ with gr.Tab("Chat"):
146
+ gr.Markdown("# ⚖️ Status Law Assistant")
147
+
148
+ conversation_id = gr.State(None)
 
 
 
 
 
 
149
 
150
  with gr.Row():
151
+ with gr.Column(scale=3):
152
+ chatbot = gr.Chatbot(
153
+ label="Chat",
154
+ bubble_full_width=False,
155
+ avatar_images=["user.png", "assistant.png"] # optional
156
+ )
157
+
158
+ with gr.Row():
159
+ msg = gr.Textbox(
160
+ label="Your question",
161
+ placeholder="Enter your question...",
162
+ scale=4
163
+ )
164
+ submit_btn = gr.Button("Send", variant="primary")
165
+
166
+ with gr.Column(scale=1):
167
+ gr.Markdown("### Knowledge Base Management")
168
+ build_kb_btn = gr.Button("Create/Update Knowledge Base", variant="primary")
169
+ kb_status = gr.Textbox(label="Knowledge Base Status", interactive=False)
170
+
171
+ gr.Markdown("### Generation Settings")
172
+ max_tokens = gr.Slider(
173
+ minimum=1,
174
+ maximum=2048,
175
+ value=512,
176
+ step=1,
177
+ label="Maximum Response Length",
178
+ info="Limits the number of tokens in response. More tokens = longer response"
179
+ )
180
+ temperature = gr.Slider(
181
+ minimum=0.1,
182
+ maximum=2.0,
183
+ value=0.7,
184
+ step=0.1,
185
+ label="Temperature",
186
+ info="Controls creativity. Lower value = more predictable responses"
187
+ )
188
+ top_p = gr.Slider(
189
+ minimum=0.1,
190
+ maximum=1.0,
191
+ value=0.95,
192
+ step=0.05,
193
+ label="Top-p",
194
+ info="Controls diversity. Lower value = more focused responses"
195
+ )
196
+
197
+ clear_btn = gr.Button("Clear Chat History")
198
+
199
+ def respond_and_clear(
200
+ message,
201
+ history,
202
+ conversation_id,
203
+ max_tokens,
204
+ temperature,
205
+ top_p,
206
+ ):
207
+ # Use existing respond function
208
+ response_generator = respond(
209
+ message,
210
+ history,
211
+ conversation_id,
212
+ DEFAULT_SYSTEM_MESSAGE,
213
+ max_tokens,
214
+ temperature,
215
+ top_p,
216
  )
217
+
218
+ # Return result and empty string to clear input field
219
+ for response in response_generator:
220
+ yield response[0], response[1], "" # chatbot, conversation_id, empty string for msg
221
+
222
+ # Event handlers
223
+ msg.submit(
224
+ respond_and_clear,
225
+ [msg, chatbot, conversation_id, max_tokens, temperature, top_p],
226
+ [chatbot, conversation_id, msg] # Add msg to output parameters
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  )
228
+ submit_btn.click(
229
+ respond_and_clear,
230
+ [msg, chatbot, conversation_id, max_tokens, temperature, top_p],
231
+ [chatbot, conversation_id, msg] # Add msg to output parameters
 
 
 
232
  )
233
+ build_kb_btn.click(build_kb, None, kb_status)
234
+ clear_btn.click(lambda: ([], None), None, [chatbot, conversation_id])
235
 
236
+ with gr.Tab("Model Training"):
237
+ gr.Markdown("### Model Training Interface")
238
+
239
+ with gr.Row():
240
+ with gr.Column():
241
+ epochs = gr.Slider(minimum=1, maximum=10, value=3, step=1, label="Number of Epochs")
242
+ batch_size = gr.Slider(minimum=1, maximum=32, value=4, step=1, label="Batch Size")
243
+ learning_rate = gr.Slider(minimum=1e-6, maximum=1e-3, value=2e-4, label="Learning Rate")
244
+ train_btn = gr.Button("Start Training", variant="primary")
245
+ training_output = gr.Textbox(label="Training Status", interactive=False)
 
 
 
 
 
 
 
 
 
 
 
 
246
 
247
+ with gr.Column():
248
+ analysis_btn = gr.Button("Generate Chat Analysis")
249
+ analysis_output = gr.Markdown()
250
+
251
+ train_btn.click(
252
+ start_finetune_action,
253
+ inputs=[epochs, batch_size, learning_rate],
254
+ outputs=[training_output]
255
+ )
256
+ analysis_btn.click(
257
+ generate_chat_analysis,
258
+ inputs=[],
259
+ outputs=[analysis_output]
260
+ )
261
 
262
  # Launch application
263
  if __name__ == "__main__":