Spaces:
Running
Running
louiecerv
commited on
Commit
·
9c3ca76
1
Parent(s):
c545386
First Save
Browse files- app.py +73 -0
- pages/1_About.py +49 -0
- pages/2_Load_Exam.py +14 -0
- pages/3_Take_Exam.py +23 -0
- pages/4_View_Result.py +24 -0
- requirements.txt +1 -0
app.py
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
# Initialize session state
|
4 |
+
if "page_access" not in st.session_state:
|
5 |
+
st.session_state.page_access = {"About": True, "Load Exam": True, "Take Exam": False, "View Results": False}
|
6 |
+
|
7 |
+
|
8 |
+
def main():
|
9 |
+
|
10 |
+
# Set app title
|
11 |
+
st.title("Exam Kiosk")
|
12 |
+
|
13 |
+
# Logic to control page access
|
14 |
+
if "exam_loaded" not in st.session_state:
|
15 |
+
st.session_state.exam_loaded = False
|
16 |
+
|
17 |
+
if "exam_completed" not in st.session_state:
|
18 |
+
st.session_state.exam_completed = False
|
19 |
+
|
20 |
+
# Provide instructions
|
21 |
+
instructions = """
|
22 |
+
### Welcome to the Exam Kiosk version 1.0!
|
23 |
+
|
24 |
+
This application allows you to manage your exam process seamlessly, from loading exams to taking and reviewing results. Follow the steps below to use the app effectively.
|
25 |
+
|
26 |
+
---
|
27 |
+
|
28 |
+
## **How to Use the Application**
|
29 |
+
|
30 |
+
### **Step 1: Explore the About Page**
|
31 |
+
- Navigate to the **About** page to learn more about the system.
|
32 |
+
|
33 |
+
---
|
34 |
+
|
35 |
+
### **Step 2: Load an Exam**
|
36 |
+
1. Go to the **Load Exam** page.
|
37 |
+
2. Click the **Load Exam** button to load an exam.
|
38 |
+
3. Once an exam is loaded, you will be redirected to the **Take Exam** page.
|
39 |
+
|
40 |
+
---
|
41 |
+
|
42 |
+
### **Step 3: Take the Exam**
|
43 |
+
- On the **Take Exam** page, you can:
|
44 |
+
1. Start answering the exam questions.
|
45 |
+
2. **Finish Exam**: Complete the exam and proceed to the results.
|
46 |
+
3. **End Exam Early**: End the exam without completing all questions and proceed to the results.
|
47 |
+
|
48 |
+
---
|
49 |
+
|
50 |
+
### **Step 4: View Results**
|
51 |
+
- Navigate to the **View Results** page to see your exam performance.
|
52 |
+
- After reviewing your results, you can:
|
53 |
+
- **Retake Exam**: Restart the same exam.
|
54 |
+
- **Load Another Exam**: Start a new exam by returning to the **Load Exam** page.
|
55 |
+
|
56 |
+
---
|
57 |
+
|
58 |
+
## **Navigation Tips**
|
59 |
+
- The sidebar displays the pages you can currently access.
|
60 |
+
- Some pages will only become accessible as you progress through the workflow.
|
61 |
+
|
62 |
+
---
|
63 |
+
|
64 |
+
## **Important Notes**
|
65 |
+
- Make sure to follow the sequence: Load Exam → Take Exam → View Results.
|
66 |
+
- If you wish to restart or load another exam, use the options available on the **View Results** page.
|
67 |
+
|
68 |
+
Enjoy using the Exam Kiosk v1.0!
|
69 |
+
"""
|
70 |
+
st.markdown(instructions)
|
71 |
+
|
72 |
+
if __name__ == "__main__":
|
73 |
+
main()
|
pages/1_About.py
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
def main():
|
4 |
+
app_description = """
|
5 |
+
# About Exam Kiosk
|
6 |
+
|
7 |
+
**Exam Kiosk** is an innovative platform designed to deliver exams generated using the powerful **Nvidia Nemotron AI Model**, providing a seamless and interactive experience for students to take these exams. While the kiosk primarily supports Nemotron-generated exams, it can also handle manually prepared exams. However, manual exam support is an **unsupported feature**.
|
8 |
+
|
9 |
+
---
|
10 |
+
|
11 |
+
## **How It Works**
|
12 |
+
|
13 |
+
The **Nemotron Exam Creator** produces exams in a standardized JSON format that includes the exam's structure and content. The Exam Kiosk processes this JSON data and transforms it into a user-friendly interface where students can take their tests efficiently.
|
14 |
+
|
15 |
+
---
|
16 |
+
|
17 |
+
## **Key Features**
|
18 |
+
|
19 |
+
- **Accurate Tracking**:
|
20 |
+
- Monitors correct answers.
|
21 |
+
- Records the time taken to answer each question and complete the test.
|
22 |
+
|
23 |
+
- **Data-Driven Insights**:
|
24 |
+
- Collects detailed performance data for analysis.
|
25 |
+
- Enables the foundation for adaptive learning strategies.
|
26 |
+
|
27 |
+
- **Comprehensive Reporting**:
|
28 |
+
- Generates item analyses to evaluate the quality of questions.
|
29 |
+
- Measures both individual and class performance.
|
30 |
+
- Provides actionable recommendations for fostering adaptive learning environments.
|
31 |
+
|
32 |
+
---
|
33 |
+
|
34 |
+
## **Why Use Exam Kiosk?**
|
35 |
+
|
36 |
+
The Exam Kiosk bridges the gap between cutting-edge AI-driven exam creation and robust, data-driven assessment delivery. By leveraging the advanced capabilities of the **Nvidia Nemotron AI Model**, the platform empowers educators with insights and tools to enhance student learning outcomes effectively.
|
37 |
+
|
38 |
+
Discover the future of exams with **Exam Kiosk**!
|
39 |
+
|
40 |
+
App Version: 1.0
|
41 |
+
Created by: Louie F. Cervantes, M.Eng. (Information Engineering)
|
42 |
+
Computer Science Department
|
43 |
+
College of Information and Communications Technology
|
44 |
+
West Visayas State University (C) 2025 """
|
45 |
+
|
46 |
+
st.markdown(app_description)
|
47 |
+
|
48 |
+
if __name__ == "__main__":
|
49 |
+
main()
|
pages/2_Load_Exam.py
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
def main():
|
4 |
+
st.title("Load Exam")
|
5 |
+
|
6 |
+
# Mock exam loading functionality
|
7 |
+
if st.button("Load Exam"):
|
8 |
+
st.session_state.exam_loaded = True
|
9 |
+
st.session_state.page_access["Take Exam"] = True
|
10 |
+
st.session_state.page_access["Load Exam"] = False
|
11 |
+
st.success("Exam loaded successfully!")
|
12 |
+
|
13 |
+
if __name__ == "__main__":
|
14 |
+
main()
|
pages/3_Take_Exam.py
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
|
4 |
+
def main():
|
5 |
+
st.title("Take Exam")
|
6 |
+
|
7 |
+
if not st.session_state.exam_loaded:
|
8 |
+
st.error("Please load an exam first!")
|
9 |
+
else:
|
10 |
+
st.write("Start taking the exam.")
|
11 |
+
|
12 |
+
if st.button("Finish Exam"):
|
13 |
+
st.session_state.exam_completed = True
|
14 |
+
st.session_state.page_access["View Results"] = True
|
15 |
+
st.session_state.page_access["Take Exam"] = False
|
16 |
+
st.success("Exam completed successfully!")
|
17 |
+
elif st.button("End Exam Early"):
|
18 |
+
st.session_state.page_access["View Results"] = True
|
19 |
+
st.session_state.page_access["Take Exam"] = False
|
20 |
+
st.warning("Exam ended early.")
|
21 |
+
|
22 |
+
if __name__ == "__main__":
|
23 |
+
main()
|
pages/4_View_Result.py
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
def main():
|
4 |
+
st.title("View Results")
|
5 |
+
|
6 |
+
if not st.session_state.exam_completed:
|
7 |
+
st.error("No completed exam results available.")
|
8 |
+
else:
|
9 |
+
st.write("Displaying results...")
|
10 |
+
|
11 |
+
if st.button("Retake Exam"):
|
12 |
+
st.session_state.exam_completed = False
|
13 |
+
st.session_state.exam_loaded = True
|
14 |
+
st.session_state.page_access["Take Exam"] = True
|
15 |
+
st.session_state.page_access["View Results"] = False
|
16 |
+
st.success("You can retake the exam.")
|
17 |
+
elif st.button("Load Another Exam"):
|
18 |
+
st.session_state.exam_loaded = False
|
19 |
+
st.session_state.exam_completed = False
|
20 |
+
st.session_state.page_access = {"About": True, "Load Exam": True, "Take Exam": False, "View Results": False}
|
21 |
+
st.success("Ready to load another exam.")
|
22 |
+
|
23 |
+
if __name__ == "__main__":
|
24 |
+
main()
|
requirements.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
streamlit
|