def chat_content()

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")