import streamlit as st from form.form import build_form_data_from_answers, write_pdf_form from llm_manager.llm_parser import LlmParser from utils.parsing_utils import check_for_missing_answers def build_ui_for_initial_state(help_): with st.form("Please describe your request"): user_input = st.text_area("Your input", height=700, label_visibility="hidden", placeholder=help_, help=help_) signature = st.file_uploader("Your signature", key="file_upload") st.session_state["signature"] = signature submit_button = st.form_submit_button() if submit_button: st.session_state["user_input"] = user_input st.session_state["step"] = "parsing_answers" st.rerun() def build_ui_for_parsing_answers(repository, pm): with st.status("initialising LLM"): repository.init() with st.status("waiting for LLM"): answer = repository.send_prompt(pm.verify_user_input_prompt(st.session_state["user_input"])) st.write(f"answers from LLM: {answer['content']}") with st.status("Checking for missing answers"): st.session_state["answers"] = LlmParser.parse_verification_prompt_answers(answer['content']) st.session_state["missing_answers"] = check_for_missing_answers(st.session_state["answers"]) if not st.session_state.get("missing_answers"): st.session_state["step"] = "check_category" else: st.session_state["step"] = "ask_again" st.rerun() def build_ui_for_ask_again(pm): with st.form("form1"): for ma in st.session_state["missing_answers"]: st.text_input(pm.questions[ma].lower(), key=ma) submitted = st.form_submit_button("Submit answers") if submitted: for ma in st.session_state["missing_answers"]: st.session_state["answers"][ma] = st.session_state[ma] st.session_state["step"] = "check_category" st.rerun() def build_ui_for_check_category(repository, pm): with st.status("finding the work categories applicable to your work"): answer = repository.send_prompt(pm.get_work_category(st.session_state["answers"][1])) categories = LlmParser.parse_get_categories_answer(answer['content']) with st.status("categories found, creating PDF form"): form_data, filename = build_form_data_from_answers(st.session_state["answers"], categories, st.session_state.get("signature")) pdf_form = write_pdf_form(form_data) pdf_form_filename = filename st.session_state["pdf_form"] = pdf_form st.session_state["pdf_form_filename"] = pdf_form_filename st.session_state["step"] = "form_created" st.rerun() def build_ui_for_form_created(): st.download_button("download form", st.session_state["pdf_form"], file_name=st.session_state["pdf_form_filename"], mime="application/pdf") start_over_button = st.button("Start over") if start_over_button: del st.session_state["step"] del st.session_state["pdf_form"] del st.session_state["pdf_form_filename"] st.rerun()