File size: 3,677 Bytes
827e494
 
 
 
54ba8cb
827e494
 
 
 
 
 
 
 
54ba8cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
827e494
 
 
 
54ba8cb
 
 
 
 
827e494
 
 
54ba8cb
 
 
 
 
 
 
827e494
54ba8cb
827e494
 
 
 
54ba8cb
 
 
 
827e494
54ba8cb
827e494
 
 
 
 
 
 
 
54ba8cb
 
 
 
 
 
827e494
54ba8cb
827e494
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import streamlit as st
import google.generativeai as genai
from dotenv import load_dotenv
import os
import json

# Load environment variables
load_dotenv()

# Configure Gemini
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
model = genai.GenerativeModel('gemini-pro')

# Load questionnaire from JSON
def load_questionnaire():
    with open('assets/questionnaire.json', 'r') as f:
        return json.load(f)

# Render questions based on type
def render_question(question):
    question_type = question.get("type")
    if question_type == "slider":
        return st.slider(
            question["question"],
            min_value=question.get("min", 1),
            max_value=question.get("max", 10),
            value=question.get("default", 5)
        )
    elif question_type == "select_slider":
        return st.select_slider(
            question["question"],
            options=question["options"],
            value=question.get("default")
        )
    elif question_type == "radio":
        return st.radio(
            question["question"],
            options=question["options"]
        )
    elif question_type == "select":
        return st.selectbox(
            question["question"],
            options=question["options"]
        )
    elif question_type == "multiselect":
        return st.multiselect(
            question["question"],
            options=question["options"]
        )
    elif question_type == "number":
        return st.number_input(
            question["question"],
            min_value=question.get("min", 0),
            max_value=question.get("max", 24),
            value=question.get("default", 4)
        )
    else:
        st.warning(f"Unsupported question type: {question_type}")
        return None

# Main function
def main():
    st.title("JEE SOCA Analysis System πŸš€")
    st.subheader("AI-Powered Skill Assessment for JEE Aspirants")

    # Load questionnaire
    questionnaire = load_questionnaire()

    # Collect responses
    responses = {}
    with st.form("student_form"):
        st.header("Student Questionnaire")
        
        # Render questions from JSON
        for section in questionnaire["questionnaire"]:
            st.subheader(f"πŸ“š {section['section']}")
            for question in section["questions"]:
                response = render_question(question)
                if response is not None:
                    responses[question["question"]] = response
        
        # Submit button
        submitted = st.form_submit_button("Generate SOCA Analysis")
        
        if submitted:
            with st.spinner("Analyzing responses..."):
                # Prepare prompt for Gemini
                prompt = "Analyze this JEE student's profile and create a SOCA analysis:\n\n"
                for question, response in responses.items():
                    prompt += f"- {question}: {response}\n"
                
                prompt += """
                Provide the analysis in this format:
                **Strengths:** [Identify 3 key strengths]
                **Opportunities:** [Suggest 3 improvement areas]
                **Challenges:** [List 3 main challenges]
                **Action Plan:** [Create 4 actionable steps]
                """
                
                # Get Gemini response
                try:
                    response = model.generate_content(prompt)
                    st.subheader("SOCA Analysis Report")
                    st.markdown(response.text)
                except Exception as e:
                    st.error(f"An error occurred while generating the analysis: {e}")

# Run the app
if __name__ == "__main__":
    main()