Spaces:
Running
Running

now it should work. Refactored UI into smaller functions, added configurability for repository implementation and model
887083d
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() |