ppsingh's picture
adding model params and QnA comp to UI
7f5ac0d
raw
history blame
2.4 kB
import streamlit as st
from utils.retriever import retrieve_paragraphs
from utils.generator import generate
col_title, col_about = st.columns([8, 2])
with col_title:
st.markdown(
"<h1 style='text-align:center;'> Montreal AI Decisions (MVP)</h1>",
unsafe_allow_html=True
)
async def chat_response(query):
"""Generate chat response based on method and inputs"""
try:
retrieved_paragraphs = retrieve_paragraphs(query)
context_retrieved = ast.literal_eval(retrieved_paragraphs)
# Build list of only content, no metadata
context_retrieved_formatted = "||".join(doc['answer'] for doc in context_retrieved)
context_retrieved_lst = [doc['answer'] for doc in context_retrieved]
# # Prepare HTML for displaying source documents
# docs_html = []
# for i, d in enumerate(context_retrieved, 1):
# docs_html.append(make_html_source(d, i))
# docs_html = "".join(docs_html)
# Generate response
response = await generate(query=query, context=context_retrieved_lst)
# Add disclaimer to the response
response_with_disclaimer = BEGINNING_TEXT + response
# Log the interaction
# try:
# chat_logger.log(
# query=query,
# answer=response,
# retrieved_content=context_retrieved_lst,
# request=request
# )
# except Exception as e:
# print(f"Logging error: {str(e)}")
# Stream response character by character
displayed_response = ""
for i, char in enumerate(response_with_disclaimer):
displayed_response += char
yield displayed_response
# Only add delay every few characters to avoid being too slow
if i % 3 == 0:
await asyncio.sleep(0.02)
except Exception as e:
error_message = f"Error processing request: {str(e)}"
yield error_message
# 10.1. Question input
query = st.text_input(
label="Enter your question:",
key="query",
on_change=reset_page
)
# Only run search & display if user has entered something
if not query.strip():
st.info("Please enter a question to see results.")
st.stop()
else:
st.write_stream(chat_response(query))