def query_engine_page()

in components/frontend_streamlit/src/pages/5_Query_Engines.py [0:0]


def query_engine_page():
  # Get all vector stores as a list
  vector_store_list = get_all_vector_stores()

  # Prepare table values
  reload()

  st.title("Query Engine Management")
  if st.button("Refresh"):
    reload()

  tab_qe, tab_jobs, tab_create_qe = st.tabs([
    "Query Engines",
    "Job List",
    "Build Query Engine",
  ])

  with tab_qe:
    st.subheader("Query Engines")
    if not qe_list:
      logging.error("No query engines found.")
      st.write("No query engines found.")

    for qe in qe_list:
      data = [[key, value] for key, value in qe.items()]
      summary = f"{qe['llm_type']}, {qe['embedding_type']}, " \
                f"{qe['vector_store']}"
      url_list = get_all_docs_of_query_engine(qe["id"])

      with st.expander(f"**{qe['name']}** - {summary}"):
        tab_detail, tab_urls = st.tabs([
            "Query Engine Detail", f"URLs ({len(url_list)})"])
        with tab_detail:
          st.table(data)
          with st.form(qe["name"]):
            description = st.text_area("Description", qe["description"])
            submit = st.form_submit_button("Update")
          if submit:
            submit_update(qe["id"], qe["name"], description)

          delete = st.button("Delete", key=f"delete_{qe['name']}")
          if delete:
            delete_query_engine(qe["id"])
            reload()

        with tab_urls:
          st.write(f"{len(url_list)} URLs")
          for url in url_list:
            st.write(f"- [{url}]({url})")

  with tab_jobs:
    st.subheader("Query Engine Jobs")

    if not qe_build_jobs:
      logging.error("No query engine build jobs")
      st.write("No query engine build jobs")

    for job in qe_build_jobs:
      created_at = moment.date(
          job["created_time"]).format("YYYY-M-D h:m A")
      summary_data = [
        ["Job ID", job["id"]],
        ["Status", job["status"]],
        ["Created at", created_at],
        ["Errors", job.get("errors", {}).get("error_message", "")]
      ]
      input_data = job["input_data"]
      data = [[key, value] for key, value in input_data.items()]
      query_engine = input_data["query_engine"].strip()
      status = job["status"]
      icon = "🔄"
      if status == "succeeded":
        icon = "✅"
      elif status == "failed":
        icon = "❌"

      with st.expander(
          f"**{icon} [{job['status']}]** QE: {query_engine} - " \
          f"Job created at {created_at}"):
        # FIXME: Add this to the backend data model.
        job_url = "https://console.cloud.google.com/kubernetes/job/" \
                  f"us-central1/main-cluster/default/{job['id']}/details" \
                  f"?project={PROJECT_ID}"
        st.write(f"[Link to Kubernetes Job]({job_url})")
        st.table(summary_data + data)

        if status != "succeeded":
          submit = st.button(
              "Re-run this job", key=f"rerun-job-{job['id']}", type="secondary")
          if submit:
            submit_build(
              input_data["query_engine"],
              input_data["query_engine_type"],
              input_data["doc_url"],
              input_data["depth_limit"],
              input_data["embedding_type"],
              input_data["vector_store"],
              input_data["description"],
              input_data["agents"],
              input_data["child_engines"],
              input_data["is_multimodal"])
            st.toast(
                "Job re-submitted with query engine: {job['query_engine']}")

  with tab_create_qe:
    st.subheader("Build a new Query Engine")
    placeholder_build_qe = st.empty()

  with placeholder_build_qe.form("build"):
    engine_name = st.text_input("Name")
    engine_type = st.selectbox(
        "Engine Type:",
        [QE_TYPE_VERTEX_SEARCH, QE_TYPE_LLM_SERVICE,
         QE_TYPE_INTEGRATED_SEARCH])
    doc_url = st.text_input("Document URL")
    depth_limit = st.selectbox(
        "Web depth limit:",
        [0,1,2,3])
    placeholder_is_multimodal = st.empty()
    placeholder_embedding_type = st.empty()
    vector_store = st.selectbox(
        "Vector Store:",
        vector_store_list)
    description = st.text_area("Description")
    agents = st.text_area("Agents")
    child_engines = st.text_area("Child Engines")
    submit = st.form_submit_button("Build")

  with placeholder_is_multimodal:
    is_multimodal = st.toggle("Multimodal Engine?", False)

  with placeholder_embedding_type:
    embedding_types = get_embedding_types(None, is_multimodal)
    embedding_type = st.selectbox(
        "Embedding:",
        embedding_types)

  if submit:
    submit_build(
      engine_name, engine_type,
      doc_url, depth_limit, embedding_type, vector_store, description, agents,
      child_engines, str(is_multimodal)
    )