DAMHelper / ui_manager.py
enricorampazzo's picture
now it should work. Refactored UI into smaller functions, added configurability for repository implementation and model
887083d
raw
history blame
3.18 kB
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()