Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
from io import BytesIO | |
import base64 | |
import random | |
import io | |
import re | |
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas | |
from streamlit_tags import st_tags | |
from streamlit_vertical_slider import vertical_slider | |
import pdf_generator | |
# Set page config | |
st.set_page_config( | |
page_title="Pilot Drafting", | |
page_icon="🛫", | |
layout="wide", | |
initial_sidebar_state="collapsed" | |
) | |
# Password protection | |
def check_password(): | |
def password_entered(): | |
if st.session_state["password"] == st.secrets["app_password"]: | |
st.session_state["password_correct"] = True | |
del st.session_state["password"] | |
else: | |
st.session_state["password_correct"] = False | |
if "password_correct" not in st.session_state: | |
st.markdown("\n\n") | |
st.text_input("Enter the password", type="password", on_change=password_entered, key="password") | |
st.divider() | |
st.info("Developed by Milan Mrdenovic © IBM Norway 2024") | |
return False | |
elif not st.session_state["password_correct"]: | |
st.markdown("\n\n") | |
st.text_input("Enter the password", type="password", on_change=password_entered, key="password") | |
st.divider() | |
st.info("Developed by Milan Mrdenovic © IBM Norway 2024") | |
st.error("😕 Password incorrect") | |
return False | |
else: | |
return True | |
if not check_password(): | |
st.stop() | |
# Initialize session state | |
if 'current_page' not in st.session_state: | |
st.session_state.current_page = 0 | |
if 'answers' not in st.session_state: | |
st.session_state.answers = { | |
'workload_scope': { | |
'time_commitments': '', | |
'deadlines': '', | |
'feature_prioritization': '' | |
}, | |
'useful_assets': { | |
'assets': [] | |
}, | |
'pilot_evaluation': { | |
'metrics': [] | |
} | |
} | |
# Define the content for each page | |
pages = [ | |
{ | |
'title': "Scope a Manageable Workload", | |
'content': """ | |
Define the scope of your project to ensure a manageable workload. Consider the time commitments, deadlines, and feature prioritization. | |
""", | |
'input_key': 'workload_scope', | |
'input_type': 'custom' | |
}, | |
{ | |
'title': "Useful Assets and Libraries", | |
'content': """ | |
Discuss the useful assets and libraries that can be utilized for the project. Consider Langchain, Langflow, ChromaDB, Jupyter Notebooks, etc. | |
""", | |
'input_key': 'useful_assets', | |
'input_type': 'custom' | |
}, | |
{ | |
'title': "Pilot Evaluation", | |
'content': """ | |
Plan for the metrics that need to be tracked for the project. Consider queries, token usage, F1 scores, precision, etc. | |
""", | |
'input_key': 'pilot_evaluation', | |
'input_type': 'custom' | |
}, | |
{ | |
'title': "Generate Evaluation Report", | |
'content': "You have completed the Pilot Drafting. \nClick the button below to generate and download your PDF report.", | |
'input_key': None | |
} | |
] | |
st.session_state.pages = pages | |
# Main Streamlit app | |
st.title("Pilot Drafting") | |
# Navigation buttons | |
col1, col2, col3 = st.columns([1, 2, 1]) | |
with col1: | |
if st.session_state.current_page > 0: | |
if st.button("Back"): | |
st.session_state.current_page -= 1 | |
st.rerun() | |
with col3: | |
if st.session_state.current_page < len(pages) - 1: | |
if st.button("Next", use_container_width=True): | |
st.session_state.current_page += 1 | |
st.rerun() | |
# Display current page | |
current_page = pages[st.session_state.current_page] | |
st.header(current_page['title']) | |
with st.expander("Description", expanded=False): | |
st.markdown(current_page['content']) | |
# Input fields | |
if 'input_key' in current_page and current_page['input_key'] is not None: | |
if current_page['input_key'] == 'workload_scope': | |
st.subheader("Workload Scope") | |
col1, col2, col3 = st.columns(3) | |
with col1: | |
st.session_state.answers['workload_scope']['time_commitments'] = st.text_area( | |
"Time Commitments:", | |
value=st.session_state.answers['workload_scope'].get('time_commitments', ""), | |
key="time_commitments", | |
height=150 | |
) | |
with col2: | |
st.session_state.answers['workload_scope']['deadlines'] = st.text_area( | |
"Deadlines:", | |
value=st.session_state.answers['workload_scope'].get('deadlines', ""), | |
key="deadlines", | |
height=150 | |
) | |
with col3: | |
st.session_state.answers['workload_scope']['feature_prioritization'] = st.text_area( | |
"Feature Prioritization:", | |
value=st.session_state.answers['workload_scope'].get('feature_prioritization', ""), | |
key="feature_prioritization", | |
height=150 | |
) | |
elif current_page['input_key'] == 'useful_assets': | |
st.subheader("Useful Assets and Libraries") | |
assets = st_tags( | |
label='Enter Useful Assets and Libraries:', | |
text='Press enter to add more', | |
value=st.session_state.answers['useful_assets'].get('assets', []), | |
suggestions=[], | |
maxtags=5, | |
key='useful_assets' | |
) | |
st.session_state.answers['useful_assets']['assets'] = assets | |
elif current_page['input_key'] == 'pilot_evaluation': | |
st.subheader("Pilot Evaluation") | |
metrics = st_tags( | |
label='Enter Metrics to Track:', | |
text='Press enter to add more', | |
value=st.session_state.answers['pilot_evaluation'].get('metrics', []), | |
suggestions=[], | |
maxtags=5, | |
key='pilot_evaluation' | |
) | |
st.session_state.answers['pilot_evaluation']['metrics'] = metrics | |
# Generate PDF button (only on the last page) | |
if st.session_state.current_page == len(pages) - 1: | |
if st.button("Generate and Download PDF", use_container_width=True): | |
pdf = pdf_generator.generate_pdf(st.session_state) | |
st.download_button( | |
label="Download PDF", | |
data=pdf, | |
file_name="Pilot_Drafting.pdf", | |
mime="application/pdf", | |
use_container_width=True | |
) | |
# Display progress | |
st.progress((st.session_state.current_page + 1) / len(pages)) | |
st.divider() |