in components/frontend_streamlit/src/pages/4_Query.py [0:0]
def chat_content():
init_messages()
# Create a placeholder for all chat history.
chat_placeholder = st.empty()
with chat_placeholder.container():
index = 1
query_index = 1
for item in st.session_state.messages:
if "HumanInput" in item:
with st.chat_message("user"):
st.write(item["HumanInput"], is_user=True, key=f"human_{index}")
if "AIOutput" in item:
with st.chat_message("ai"):
st.write(
item["AIOutput"],
key=f"ai_{index}",
unsafe_allow_html=False,
is_table=False, # TODO: Detect whether an output content type.
)
if "References" in item:
with st.chat_message("ai"):
for reference in item["References"]:
modality = reference["modality"]
chunk_url = reference["chunk_url"]
chunk_type = ""
if chunk_url:
_, chunk_type = splitext(chunk_url)
chunk_url = chunk_url.replace("gs://",
"https://storage.googleapis.com/", 1)
document_url = reference["document_url"]
page = reference["page"]
if page:
# References from multimodal query engines have page numbers
reference_header = (f"\nReference {query_index}:"
f" {document_url}, Page {page+1}")
else:
# References from text-only query engines do not have page numbers
reference_header = f"\nReference {query_index}: {document_url}"
if modality == "text":
document_text = reference["document_text"]
st.text_area(
reference_header,
document_text,
key=f"ref_{query_index}")
elif modality == "image" and chunk_type in [".pdf",
".png", ".jpg", ".jpeg", ".gif", ".bmp"]:
# .tif/.tiff not available, all other file types are untested
st.write(
reference_header,
key=f"ref_{query_index}")
st.image(chunk_url)
else:
logging.error("Reference modality unknown")
query_index = query_index + 1
st.divider()
st.text_input("User Input:", on_change=on_input_change, key="user_input")