timeki commited on
Commit
41f3d00
·
1 Parent(s): 86e24a2

add logs of drias interactions

Browse files
Files changed (3) hide show
  1. app.py +1 -10
  2. climateqa/chat.py +21 -0
  3. front/tabs/tab_drias.py +35 -5
app.py CHANGED
@@ -100,15 +100,6 @@ agent_poc = make_graph_agent_poc(
100
  version="v4",
101
  ) # TODO put back default 0.2
102
 
103
- # Vanna object
104
-
105
- # vn = MyVanna(config = {"temperature": 0, "api_key": os.getenv('THEO_API_KEY'), 'model': os.getenv('VANNA_MODEL'), 'pc_api_key': os.getenv('VANNA_PINECONE_API_KEY'), 'index_name': os.getenv('VANNA_INDEX_NAME'), "top_k" : 4})
106
- # db_vanna_path = os.path.join(os.getcwd(), "data/drias/drias.db")
107
- # vn.connect_to_sqlite(db_vanna_path)
108
-
109
- # def ask_vanna_query(query):
110
- # return ask_vanna(vn, db_vanna_path, query)
111
-
112
 
113
 
114
 
@@ -532,7 +523,7 @@ def main_ui():
532
  with gr.Tabs():
533
  cqa_components = cqa_tab(tab_name="ClimateQ&A")
534
  local_cqa_components = cqa_tab(tab_name="Beta - POC Adapt'Action")
535
- create_drias_tab()
536
 
537
  create_about_tab()
538
 
 
100
  version="v4",
101
  ) # TODO put back default 0.2
102
 
 
 
 
 
 
 
 
 
 
103
 
104
 
105
 
 
523
  with gr.Tabs():
524
  cqa_components = cqa_tab(tab_name="ClimateQ&A")
525
  local_cqa_components = cqa_tab(tab_name="Beta - POC Adapt'Action")
526
+ create_drias_tab(share_client=share_client, user_id=user_id)
527
 
528
  create_about_tab()
529
 
climateqa/chat.py CHANGED
@@ -61,6 +61,27 @@ def handle_numerical_data(event):
61
  return numerical_data, sql_query
62
  return None, None
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  # Main chat function
65
  async def chat_stream(
66
  agent : CompiledStateGraph,
 
61
  return numerical_data, sql_query
62
  return None, None
63
 
64
+ def log_drias_interaction_to_azure(query, sql_query, data, share_client, user_id):
65
+ try:
66
+ # Log interaction to Azure if not in local environment
67
+ if os.getenv("GRADIO_ENV") != "local":
68
+ timestamp = str(datetime.now().timestamp())
69
+ logs = {
70
+ "user_id": str(user_id),
71
+ "query": query,
72
+ "sql_query": sql_query,
73
+ # "data": data.to_dict() if data is not None else None,
74
+ "time": timestamp,
75
+ }
76
+ log_on_azure(f"drias_{timestamp}.json", logs, share_client)
77
+ print(f"Logged Drias interaction to Azure Blob Storage: {logs}")
78
+ else:
79
+ print("share_client or user_id is None, or GRADIO_ENV is local")
80
+ except Exception as e:
81
+ print(f"Error logging Drias interaction on Azure Blob Storage: {e}")
82
+ error_msg = f"Drias Error: {str(e)[:100]} - The error has been noted, try another question and if the error remains, you can contact us :)"
83
+ raise gr.Error(error_msg)
84
+
85
  # Main chat function
86
  async def chat_stream(
87
  agent : CompiledStateGraph,
front/tabs/tab_drias.py CHANGED
@@ -1,8 +1,11 @@
1
  import gradio as gr
2
  from typing import TypedDict, List, Optional
 
 
3
 
4
  from climateqa.engine.talk_to_data.main import ask_drias
5
  from climateqa.engine.talk_to_data.config import DRIAS_MODELS, DRIAS_UI_TEXT
 
6
 
7
 
8
  class DriasUIElements(TypedDict):
@@ -26,7 +29,8 @@ class DriasUIElements(TypedDict):
26
 
27
 
28
  async def ask_drias_query(query: str, index_state: int):
29
- return await ask_drias(query, index_state)
 
30
 
31
 
32
  def show_results(sql_queries_state, dataframes_state, plots_state):
@@ -192,7 +196,21 @@ def create_drias_ui() -> DriasUIElements:
192
  next_button=next_button
193
  )
194
 
195
- def setup_drias_events(ui_elements: DriasUIElements) -> None:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  """Set up all event handlers for the DRIAS tab."""
197
  # Create state variables
198
  sql_queries_state = gr.State([])
@@ -200,6 +218,10 @@ def setup_drias_events(ui_elements: DriasUIElements) -> None:
200
  plots_state = gr.State([])
201
  index_state = gr.State(0)
202
  table_names_list = gr.State([])
 
 
 
 
203
 
204
  # Handle example selection
205
  ui_elements["examples_hidden"].change(
@@ -220,6 +242,10 @@ def setup_drias_events(ui_elements: DriasUIElements) -> None:
220
  table_names_list,
221
  ui_elements["result_text"],
222
  ],
 
 
 
 
223
  ).then(
224
  show_results,
225
  inputs=[sql_queries_state, dataframes_state, plots_state],
@@ -262,6 +288,10 @@ def setup_drias_events(ui_elements: DriasUIElements) -> None:
262
  table_names_list,
263
  ui_elements["result_text"],
264
  ],
 
 
 
 
265
  ).then(
266
  show_results,
267
  inputs=[sql_queries_state, dataframes_state, plots_state],
@@ -324,9 +354,9 @@ def setup_drias_events(ui_elements: DriasUIElements) -> None:
324
  outputs=[ui_elements["pagination_display"]],
325
  )
326
 
327
- def create_drias_tab():
328
- """Main function to create the DRIAS tab with UI and event handling."""
329
  ui_elements = create_drias_ui()
330
- setup_drias_events(ui_elements)
331
 
332
 
 
1
  import gradio as gr
2
  from typing import TypedDict, List, Optional
3
+ import os
4
+ import pandas as pd
5
 
6
  from climateqa.engine.talk_to_data.main import ask_drias
7
  from climateqa.engine.talk_to_data.config import DRIAS_MODELS, DRIAS_UI_TEXT
8
+ from climateqa.chat import log_drias_interaction_to_azure
9
 
10
 
11
  class DriasUIElements(TypedDict):
 
29
 
30
 
31
  async def ask_drias_query(query: str, index_state: int):
32
+ result = await ask_drias(query, index_state)
33
+ return result
34
 
35
 
36
  def show_results(sql_queries_state, dataframes_state, plots_state):
 
196
  next_button=next_button
197
  )
198
 
199
+ def log_drias_to_azure(query: str, sql_query: str, data, share_client, user_id):
200
+ """Log Drias interaction to Azure storage."""
201
+ print("log_drias_to_azure")
202
+ if share_client is not None and user_id is not None:
203
+ log_drias_interaction_to_azure(
204
+ query=query,
205
+ sql_query=sql_query,
206
+ data=data,
207
+ share_client=share_client,
208
+ user_id=user_id
209
+ )
210
+ else:
211
+ print("share_client or user_id is None")
212
+
213
+ def setup_drias_events(ui_elements: DriasUIElements, share_client=None, user_id=None) -> None:
214
  """Set up all event handlers for the DRIAS tab."""
215
  # Create state variables
216
  sql_queries_state = gr.State([])
 
218
  plots_state = gr.State([])
219
  index_state = gr.State(0)
220
  table_names_list = gr.State([])
221
+
222
+ def log_drias_interaction(query: str, sql_query: str, data: pd.DataFrame):
223
+ log_drias_to_azure(query, sql_query, data, share_client, user_id)
224
+
225
 
226
  # Handle example selection
227
  ui_elements["examples_hidden"].change(
 
242
  table_names_list,
243
  ui_elements["result_text"],
244
  ],
245
+ ).then(
246
+ log_drias_interaction,
247
+ inputs=[ui_elements["examples_hidden"], ui_elements["drias_sql_query"], ui_elements["drias_table"]],
248
+ outputs=[],
249
  ).then(
250
  show_results,
251
  inputs=[sql_queries_state, dataframes_state, plots_state],
 
288
  table_names_list,
289
  ui_elements["result_text"],
290
  ],
291
+ ).then(
292
+ log_drias_interaction,
293
+ inputs=[ui_elements["drias_direct_question"], ui_elements["drias_sql_query"], ui_elements["drias_table"]],
294
+ outputs=[],
295
  ).then(
296
  show_results,
297
  inputs=[sql_queries_state, dataframes_state, plots_state],
 
354
  outputs=[ui_elements["pagination_display"]],
355
  )
356
 
357
+ def create_drias_tab(share_client=None, user_id=None):
358
+ """Create the DRIAS tab with all its components and event handlers."""
359
  ui_elements = create_drias_ui()
360
+ setup_drias_events(ui_elements, share_client=share_client, user_id=user_id)
361
 
362