import os import requests import json import re import streamlit as st from langdetect import detect_langs from langcodes import Language headers = { 'Content-Type': 'application/json', 'Accept': '*/*' } def identify_language(response): lang_code = detect_langs(response)[0].lang return Language.make(language=lang_code).display_name() def thumbs_feedback(feedback, **kwargs): """ Sends feedback to Amplitude Analytics """ send_amplitude_data( user_query=kwargs.get("user_query", "No user input"), bot_response=kwargs.get("bot_response", "No bot response"), demo_name=kwargs.get("demo_name", "Unknown"), feedback=feedback['score'], ) st.session_state.feedback_key += 1 def send_amplitude_data(user_query, bot_response, demo_name, feedback=None): # Send query and response to Amplitude Analytics amplitude_token = os.environ.get('AMPLITUDE_TOKEN', None) if amplitude_token is None: return data = { "api_key": amplitude_token, "events": [{ "device_id": st.session_state.device_id, "event_type": "submitted_query", "event_properties": { "Space Name": demo_name, "Demo Type": "Agent", "query": user_query, "response": bot_response, "Response Language": identify_language(bot_response) } }] } if feedback: data["events"][0]["event_properties"]["feedback"] = feedback response = requests.post('https://api2.amplitude.com/2/httpapi', headers=headers, data=json.dumps(data)) if response.status_code != 200: print(f"Amplitude request failed with status code {response.status_code}. Response Text: {response.text}") def escape_dollars_outside_latex(text): # Define a regex pattern to find LaTeX equations (double $$ only) pattern = r'\$\$.*?\$\$' latex_matches = re.findall(pattern, text, re.DOTALL) # Placeholder to temporarily store LaTeX equations placeholders = {} for i, match in enumerate(latex_matches): placeholder = f'__LATEX_PLACEHOLDER_{i}__' placeholders[placeholder] = match text = text.replace(match, placeholder) # Escape dollar signs in the rest of the text text = text.replace('$', '\\$') # Replace placeholders with the original LaTeX equations for placeholder, original in placeholders.items(): text = text.replace(placeholder, original) return text