Code-Test-generator / src /streamlit_app.py
Jaiwincr7
FINAL FIX: Removed redundant 'bytes()' conversion in app.py to correct PDF data type mismatch.
112effb
import streamlit as st
from merged import load_model_and_tokenizer, generate_code_stream
from pdf_utils import test_case
st.write("πŸš€ App started")
# ---------------- Load model ONCE ----------------
@st.cache_resource
def load_model():
return load_model_and_tokenizer()
tokenizer, model = load_model()
# ---------------- Session state ----------------
for key in ["selected_language", "generated_code", "pdf_bytes", "user_input"]:
if key not in st.session_state:
st.session_state[key] = "" if key != "selected_language" else None
# ---------------- UI helpers ----------------
def select_language(lang):
st.session_state.selected_language = lang
st.session_state.generated_code = ""
st.session_state.pdf_bytes = ""
st.session_state.user_input = ""
def reset():
for k in st.session_state:
st.session_state[k] = "" if k != "selected_language" else None
# ---------------- UI ----------------
st.title("Generate any code and get test case for it")
if st.session_state.selected_language is None:
cols = st.columns(4)
cols[0].button("Java", on_click=select_language, args=("Java",))
cols[1].button("React.js", on_click=select_language, args=("React.js",))
cols[2].button("Python", on_click=select_language, args=("Python",))
cols[3].button("C++", on_click=select_language, args=("C++",))
else:
lang = st.session_state.selected_language
st.subheader(f"Selected Language: {lang}")
st.button("Reset", on_click=reset)
st.session_state.user_input = st.text_input(
"Describe the task",
value=st.session_state.user_input
)
if st.button("Generate Code"):
if st.session_state.user_input.strip():
st.session_state.generated_code = ""
st.subheader("Generated Code")
code_placeholder = st.empty()
with st.spinner("Generating code..."):
for token in generate_code_stream(
lang,
st.session_state.user_input,
tokenizer,
model
):
st.session_state.generated_code += token
code_placeholder.code(
st.session_state.generated_code
)
# Generate test case PDF AFTER code generation
st.session_state.pdf_bytes = test_case(
st.session_state.generated_code
)
else:
st.warning("Please enter a task")
st.divider()
st.write("PDF bytes length:", len(st.session_state.pdf_bytes))
if st.session_state.get("pdf_bytes"):
st.success("PDF ready")
st.download_button(
label="πŸ“₯ Download Test Cases PDF",
data=st.session_state["pdf_bytes"],
file_name="test_cases.pdf",
mime="application/pdf",
key="download_pdf"
)