import time import requests import streamlit as st from backend import Response API_URL = "http://127.0.0.1:8000/answer" st.title("Know anything about Pittsburgh") question = st.text_input("Ask away:", "") def call_backend_with_retry(payload, retries=10, delay=10): for attempt in range(retries): try: response = requests.post(API_URL, json=payload) if response.status_code == 200: return response elif response.status_code == 503: st.warning( f"Server initializing (attempt {attempt + 1}/{retries}). This can take time. Retrying in {delay} seconds..." ) with st.spinner("Waiting..."): time.sleep(delay) else: st.error(f"Error: {response.status_code}, {response.text}") break except requests.exceptions.RequestException as e: st.error(f"Failed to connect to the server: {e}") break return None if st.button("Submit"): if not question.strip(): st.error("Machine Learning still can't read minds. Please enter a question.") else: request_payload = {"question": question} response = call_backend_with_retry(request_payload) if response and response.status_code == 200: response_data = Response(**response.json()) st.subheader("Answer:") st.write(response_data.answer) show_sources = st.checkbox("Show sources") if show_sources: st.subheader("Sources:") for source in response_data.sources: st.markdown(f"**Name:** {source.name}") st.markdown(f"**Index ID:** {source.index_id}") st.markdown(f"**Text:** {source.text}") st.markdown("---") else: st.error( "The server is unavailable after multiple attempts. Please try again later." )