Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| from langchain_core.messages import AIMessage, HumanMessage | |
| from azure_openai import qt, get_response | |
| from retriver import search_and_reconstruct | |
| def read_file(file): | |
| """ | |
| Reads the content of a text file and returns it as a string. | |
| :param approver: The type of approver. | |
| :return: The content of the file as a string. | |
| """ | |
| fp = f"assets/{file}.md" | |
| try: | |
| with open(fp, 'r', encoding='utf-8') as file: | |
| content = file.read() | |
| return content | |
| except FileNotFoundError: | |
| print(f"The file at {fp} was not found.") | |
| except IOError: | |
| print(f"An error occurred while reading the file at {fp}.") | |
| QTESystemMessage = read_file("QTESystemMessage") | |
| RAGSystemMessage = read_file("RAGSystemMessage") | |
| RAGUserMessage = read_file("RAGUserMessage") | |
| k = 5 | |
| pagesReturned = 3 | |
| temp1 = 0.5 | |
| tokens1 = 200 | |
| temp2 = 0.6 | |
| tokens2 = 2000 | |
| asset = "GSKGlossary" | |
| # app config | |
| st.set_page_config(page_title="Medical Sales Toolbox", page_icon="🤖") | |
| st.title("Medical Sales Toolbox :toolbox:") | |
| # session state | |
| if "chat_history" not in st.session_state: | |
| st.session_state.chat_history = [ | |
| AIMessage(content="Hello, I am the Medical Sales Assistant. How can I help you?"), | |
| ] | |
| # conversation | |
| for message in st.session_state.chat_history: | |
| if isinstance(message, AIMessage): | |
| with st.chat_message("AI"): | |
| st.write(message.content) | |
| elif isinstance(message, HumanMessage): | |
| with st.chat_message("Human"): | |
| st.write(message.content) | |
| # user input | |
| user_query = st.chat_input("Type your message here...") | |
| if user_query is not None and user_query != "": | |
| st.session_state.chat_history.append(HumanMessage(content=user_query)) | |
| with st.chat_message("Human"): | |
| st.markdown(user_query) | |
| qte = qt(QTESystemMessage, st.session_state.chat_history, temp1, tokens1, asset) | |
| st.text("Contextualised Query") | |
| st.caption(qte) | |
| knowledge = search_and_reconstruct(qte, k, pagesReturned) | |
| if knowledge: | |
| # Prepare the data for the table | |
| table_data = { | |
| "Title": [entry['Title'] for entry in knowledge], | |
| "Score (%)": [f"{int(entry.get('Score', 0) * 100)}%" for entry in knowledge], # Convert to percentage and remove decimals | |
| "Page": [entry['PageNumber'] for entry in knowledge], | |
| # "Grounding Text": [entry['ReconstructedText'] for entry in knowledge] | |
| } | |
| # Create a dataframe for displaying as a table | |
| df = pd.DataFrame(table_data) | |
| # Calculate the mean score | |
| mean_score = sum(entry.get('Score', 0) for entry in knowledge) / len(knowledge) | |
| # Display the mean score as a Streamlit text element | |
| # Display the table in the sidebar | |
| st.text("Knowledge Base Results") | |
| st.text(f"Average Accuracy Score: {mean_score * 100:.2f}%") | |
| st.dataframe(df) # Adjust height as needed | |
| else: | |
| st.write("No relevant knowledge base results found.") | |
| with st.chat_message("AI"): | |
| response = st.write_stream(get_response(st.session_state.chat_history, qte, knowledge, temp2, tokens2, RAGSystemMessage, RAGUserMessage, asset)) | |
| st.session_state.chat_history.append(AIMessage(content=response)) |