Spaces:
Sleeping
Sleeping
| 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)) |