VayuBuddy-Question-and-Answer / pages /4_Edit_Questions.py
ratneshpasi03's picture
saving changes to hugging face (#2)
fc1afe5 verified
raw
history blame
4.04 kB
import json
import streamlit as st
from pathlib import Path
from utils.load_jsonl import load_data
from utils.code_services import format_code, execute_code
from utils.save_to_hf import commit_and_push_changes
DATA_DIR = Path("data/questions")
JSONL_FILE = "output.jsonl"
questions_data = load_data(JSONL_FILE)
categories = sorted(set(q["metadata"]["category"] for q in questions_data))
st.title("✏️ Edit a Question")
if not categories:
st.warning("No categories available.")
st.stop()
selected_category = st.selectbox("Select a Category", categories)
filtered_questions = {int(q["folder"]): q["question"][:50] + "..." for q in questions_data if q["metadata"]["category"] == selected_category}
if not filtered_questions:
st.warning("No questions found in this category.")
st.stop()
selected_question_id = st.selectbox("Select Question to Edit", list(filtered_questions.keys()), format_func=lambda x: f"ID {x}: {filtered_questions[x]}")
selected_question = next((q for q in questions_data if int(q["folder"]) == selected_question_id), None)
if selected_question:
question_input = st.text_area("Edit Question", value=selected_question["question"])
answer_input = st.text_area("Edit Answer", value=selected_question["answer"])
code_input = st.text_area("Edit Code", value=selected_question["code"])
metadata = selected_question["metadata"]
category_input = st.text_input("Category", value=metadata["category"])
answer_category_input = st.text_input("Answer Category", value=metadata["answer_category"])
plot_input = st.checkbox("Does this require a plot?", value=metadata["plot"])
libraries_input = st.text_input("Libraries (comma-separated)", value=", ".join(metadata["libraries"]))
if st.button("Save Changes"):
if not all([question_input.strip(), answer_input.strip(), code_input.strip(), category_input.strip(), answer_category_input.strip()]):
st.error("❌ All fields are required. Please fill them out.")
else:
formatted_code = format_code(code_input)
output, error = execute_code(formatted_code)
if error:
st.error("❌ Code execution failed! Fix the following error before saving:")
st.code(error, language="plaintext")
else:
question_dir = DATA_DIR / str(selected_question_id)
(question_dir / "question.txt").write_text(question_input, encoding="utf-8")
(question_dir / "answer.txt").write_text(answer_input, encoding="utf-8")
(question_dir / "code.py").write_text(formatted_code, encoding="utf-8")
updated_metadata = {
"question_id": selected_question_id,
"category": category_input.strip(),
"answer_category": answer_category_input.strip(),
"plot": plot_input,
"libraries": [lib.strip() for lib in libraries_input.split(",")] if libraries_input else []
}
with open(question_dir / "metadata.json", "w", encoding="utf-8") as f:
json.dump(updated_metadata, f, indent=4)
st.success(f"βœ… Question ID {selected_question_id} updated successfully!")
commit_and_push_changes()
st.info("Refresh to see the applied changes")
if st.button("Refresh"):
st.rerun()
else:
st.error("❌ Failed to load question data.")
if code_input:
st.subheader("πŸ’» Test Your Code Before Saving")
formatted_test_code = format_code(code_input)
st.code(formatted_test_code, language="python")
if st.button("Execute Code"):
output, error = execute_code(formatted_test_code)
if error:
st.error("❌ Code execution failed! Fix the following error:")
st.error(error)
else:
st.success("βœ… Code executed successfully!")
st.success(f"Execution Output: {output}")