excel-mock-interviewer / src /streamlit_app.py
AKKI-AFK's picture
Update src/streamlit_app.py
e227760 verified
import streamlit as st
from interview_logic import InterviewAgent
from pathlib import Path
import os
import json
from dotenv import load_dotenv
load_dotenv()
UPLOAD_DIR = Path(os.getenv('UPLOAD_DIR', './uploads'))
SESSION_DIR = Path(os.getenv('SESSION_DIR', './sessions'))
UPLOAD_DIR.mkdir(parents=True, exist_ok=True)
SESSION_DIR.mkdir(parents=True, exist_ok=True)
st.set_page_config(page_title='Excel Mock Interviewer - PoC', layout='centered')
if 'agent' not in st.session_state:
st.session_state.agent = InterviewAgent()
agent = st.session_state.agent
st.title('AI-Powered Excel Mock Interviewer — PoC')
st.write('Quick demo: answer questions or upload an Excel workbook when asked.')
for entry in agent.history:
role = entry['role']
text = entry['text']
if role == 'agent':
st.markdown(f"**Interviewer:** {text}")
else:
st.markdown(f"**You:** {text}")
def save_session():
path = SESSION_DIR / f"{agent.session_id}.json"
with open(path, "w", encoding="utf-8") as f:
json.dump(agent.summary(), f, indent=2)
if agent.active:
q = agent.current_question
st.markdown(f"### Question: {q['text']}")
txt = st.text_area('Your answer (text or formula)', key='answer_text')
file = st.file_uploader('Upload workbook (.xlsx) if requested', type=['xlsx'])
col1, col2 = st.columns(2)
with col1:
if st.button('Submit Answer'):
if not txt.strip():
st.warning('Type an answer or upload a file before submitting.')
else:
agent.record_answer(txt)
save_session()
st.rerun()
with col2:
if st.button('Submit Workbook'):
if not file:
st.warning('Choose an .xlsx file to upload')
else:
dst = UPLOAD_DIR / f"{agent.session_id}--{file.name}"
with open(dst, 'wb') as f:
f.write(file.getbuffer())
agent.record_upload(str(dst))
save_session()
st.rerun()
else:
st.success('Interview complete — see summary below')
st.markdown('## Summary')
st.write(agent.summary())
if st.button('Download transcript (JSON)'):
st.download_button(
'Download JSON',
data=agent.transcript_json(),
file_name=f'{agent.session_id}-transcript.json'
)
with st.expander('Admin: internal state'):
st.write({
'session_id': agent.session_id,
'current_q_idx': agent.idx,
'history_len': len(agent.history)
})