add logs fallback on azure
Browse files- climateqa/chat.py +2 -2
- climateqa/logging.py +108 -68
climateqa/chat.py
CHANGED
|
@@ -14,7 +14,7 @@ from .handle_stream_events import (
|
|
| 14 |
handle_retrieved_owid_graphs,
|
| 15 |
)
|
| 16 |
from .logging import (
|
| 17 |
-
|
| 18 |
)
|
| 19 |
|
| 20 |
# Chat functions
|
|
@@ -189,6 +189,6 @@ async def chat_stream(
|
|
| 189 |
raise gr.Error(str(e))
|
| 190 |
|
| 191 |
# Call the function to log interaction
|
| 192 |
-
|
| 193 |
|
| 194 |
yield history, docs_html, output_query, output_language, related_contents, graphs_html, follow_up_examples#, vanna_data
|
|
|
|
| 14 |
handle_retrieved_owid_graphs,
|
| 15 |
)
|
| 16 |
from .logging import (
|
| 17 |
+
log_interaction
|
| 18 |
)
|
| 19 |
|
| 20 |
# Chat functions
|
|
|
|
| 189 |
raise gr.Error(str(e))
|
| 190 |
|
| 191 |
# Call the function to log interaction
|
| 192 |
+
log_interaction(history, output_query, sources, docs, share_client, user_id)
|
| 193 |
|
| 194 |
yield history, docs_html, output_query, output_language, related_contents, graphs_html, follow_up_examples#, vanna_data
|
climateqa/logging.py
CHANGED
|
@@ -47,80 +47,80 @@ def serialize_docs(docs:list[Document])->list:
|
|
| 47 |
|
| 48 |
## AZURE LOGGING - DEPRECATED
|
| 49 |
|
| 50 |
-
|
| 51 |
-
|
| 52 |
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
|
| 62 |
|
| 63 |
-
|
| 64 |
-
|
| 65 |
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
#
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
#
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
|
| 96 |
-
|
| 97 |
-
|
| 98 |
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
#
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
|
| 125 |
## HUGGING FACE LOGGING
|
| 126 |
|
|
@@ -240,4 +240,44 @@ def log_drias_interaction_to_huggingface(query, sql_query, user_id):
|
|
| 240 |
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 :)"
|
| 241 |
raise gr.Error(error_msg)
|
| 242 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 243 |
|
|
|
|
| 47 |
|
| 48 |
## AZURE LOGGING - DEPRECATED
|
| 49 |
|
| 50 |
+
def log_on_azure(file, logs, share_client):
|
| 51 |
+
"""Log data to Azure Blob Storage.
|
| 52 |
|
| 53 |
+
Args:
|
| 54 |
+
file (str): Name of the file to store logs
|
| 55 |
+
logs (dict): Log data to store
|
| 56 |
+
share_client: Azure share client instance
|
| 57 |
+
"""
|
| 58 |
+
logs = json.dumps(logs)
|
| 59 |
+
file_client = share_client.get_file_client(file)
|
| 60 |
+
file_client.upload_file(logs)
|
| 61 |
|
| 62 |
|
| 63 |
+
def log_interaction_to_azure(history, output_query, sources, docs, share_client, user_id):
|
| 64 |
+
"""Log chat interaction to Azure and Hugging Face.
|
| 65 |
|
| 66 |
+
Args:
|
| 67 |
+
history (list): Chat message history
|
| 68 |
+
output_query (str): Processed query
|
| 69 |
+
sources (list): Knowledge base sources used
|
| 70 |
+
docs (list): Retrieved documents
|
| 71 |
+
share_client: Azure share client instance
|
| 72 |
+
user_id (str): User identifier
|
| 73 |
+
"""
|
| 74 |
+
try:
|
| 75 |
+
# Log interaction to Azure if not in local environment
|
| 76 |
+
if os.getenv("GRADIO_ENV") != "local":
|
| 77 |
+
timestamp = str(datetime.now().timestamp())
|
| 78 |
+
prompt = history[1]["content"]
|
| 79 |
+
logs = {
|
| 80 |
+
"user_id": str(user_id),
|
| 81 |
+
"prompt": prompt,
|
| 82 |
+
"query": prompt,
|
| 83 |
+
"question": output_query,
|
| 84 |
+
"sources": sources,
|
| 85 |
+
"docs": serialize_docs(docs),
|
| 86 |
+
"answer": history[-1].content,
|
| 87 |
+
"time": timestamp,
|
| 88 |
+
}
|
| 89 |
+
# Log to Azure
|
| 90 |
+
log_on_azure(f"{timestamp}.json", logs, share_client)
|
| 91 |
+
except Exception as e:
|
| 92 |
+
print(f"Error logging on Azure Blob Storage: {e}")
|
| 93 |
+
error_msg = f"ClimateQ&A Error: {str(e)[:100]} - The error has been noted, try another question and if the error remains, you can contact us :)"
|
| 94 |
+
raise gr.Error(error_msg)
|
| 95 |
|
| 96 |
+
def log_drias_interaction_to_azure(query, sql_query, data, share_client, user_id):
|
| 97 |
+
"""Log Drias data interaction to Azure and Hugging Face.
|
| 98 |
|
| 99 |
+
Args:
|
| 100 |
+
query (str): User query
|
| 101 |
+
sql_query (str): SQL query used
|
| 102 |
+
data: Retrieved data
|
| 103 |
+
share_client: Azure share client instance
|
| 104 |
+
user_id (str): User identifier
|
| 105 |
+
"""
|
| 106 |
+
try:
|
| 107 |
+
# Log interaction to Azure if not in local environment
|
| 108 |
+
if os.getenv("GRADIO_ENV") != "local":
|
| 109 |
+
timestamp = str(datetime.now().timestamp())
|
| 110 |
+
logs = {
|
| 111 |
+
"user_id": str(user_id),
|
| 112 |
+
"query": query,
|
| 113 |
+
"sql_query": sql_query,
|
| 114 |
+
"time": timestamp,
|
| 115 |
+
}
|
| 116 |
+
log_on_azure(f"drias_{timestamp}.json", logs, share_client)
|
| 117 |
+
print(f"Logged Drias interaction to Azure Blob Storage: {logs}")
|
| 118 |
+
else:
|
| 119 |
+
print("share_client or user_id is None, or GRADIO_ENV is local")
|
| 120 |
+
except Exception as e:
|
| 121 |
+
print(f"Error logging Drias interaction on Azure Blob Storage: {e}")
|
| 122 |
+
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 :)"
|
| 123 |
+
raise gr.Error(error_msg)
|
| 124 |
|
| 125 |
## HUGGING FACE LOGGING
|
| 126 |
|
|
|
|
| 240 |
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 :)"
|
| 241 |
raise gr.Error(error_msg)
|
| 242 |
|
| 243 |
+
def log_interaction(history, output_query, sources, docs, share_client, user_id):
|
| 244 |
+
"""Log chat interaction to Hugging Face, and fall back to Azure if that fails.
|
| 245 |
+
|
| 246 |
+
Args:
|
| 247 |
+
history (list): Chat message history
|
| 248 |
+
output_query (str): Processed query
|
| 249 |
+
sources (list): Knowledge base sources used
|
| 250 |
+
docs (list): Retrieved documents
|
| 251 |
+
share_client: Azure share client instance
|
| 252 |
+
user_id (str): User identifier
|
| 253 |
+
"""
|
| 254 |
+
try:
|
| 255 |
+
# First try to log to Hugging Face
|
| 256 |
+
log_interaction_to_huggingface(history, output_query, sources, docs, share_client, user_id)
|
| 257 |
+
except Exception as e:
|
| 258 |
+
print(f"Failed to log to Hugging Face, falling back to Azure: {e}")
|
| 259 |
+
try:
|
| 260 |
+
# Fall back to Azure logging
|
| 261 |
+
if os.getenv("GRADIO_ENV") != "local":
|
| 262 |
+
timestamp = str(datetime.now().timestamp())
|
| 263 |
+
prompt = history[1]["content"]
|
| 264 |
+
logs = {
|
| 265 |
+
"user_id": str(user_id),
|
| 266 |
+
"prompt": prompt,
|
| 267 |
+
"query": prompt,
|
| 268 |
+
"question": output_query,
|
| 269 |
+
"sources": sources,
|
| 270 |
+
"docs": serialize_docs(docs),
|
| 271 |
+
"answer": history[-1].content,
|
| 272 |
+
"time": timestamp,
|
| 273 |
+
}
|
| 274 |
+
# Log to Azure
|
| 275 |
+
log_on_azure(f"{timestamp}.json", logs, share_client)
|
| 276 |
+
print("Successfully logged to Azure as fallback")
|
| 277 |
+
except Exception as azure_error:
|
| 278 |
+
print(f"Error in Azure fallback logging: {azure_error}")
|
| 279 |
+
error_msg = f"ClimateQ&A Logging Error: {str(azure_error)[:100]})"
|
| 280 |
+
# Don't raise error to avoid disrupting user experience
|
| 281 |
+
print(error_msg)
|
| 282 |
+
|
| 283 |
|