GMATProfiler / app.py
xeroISB's picture
6th
4aa6f07
import gradio as gr
from together import Together
import os
client = Together(api_key=os.environ.get('TOGETHER_API_KEY'))
# Function to create the system prompt based on the selected detector
def create_system_prompt():
system_prompt = """You are a expert GMAT profiler who specializes in understanding student profile. You use successful candidate profile as a baseline and compare it with current profile and provide recomendations on the good profile.
Analyze the users input and provide guidance on what candidate can do to achieve a target college admission.
Provide a detailed response in 500 words. Keep it bulleted. Only provide recommendations if user's profile is not good enough.
Always Provide the Response in following format only
Format -
Analysis : 4-5 lines
Recommendation : 4-5 points
Possible colleges with current profile:
Target college Review and Recommendation:
"""
return system_prompt
# Function to get response from OpenAI API
def analyze_chat( gmat_score, gpa, target_college, work_experience, leadership_roles, extracurriculars, personal_statement):
system_prompt = create_system_prompt()
chat_input = """
User's Profile Data. Assess the following aspects:
- GMAT Score: {}
- Undergraduate GPA: {}
- Target College: {}
- Work Experience: {} years
- Leadership Roles: {}
- Extracurricular Activities: {}
- Personal Statement: {}
Provide a comprehensive analysis and recommendations.
""".format(gmat_score, gpa, target_college, work_experience, leadership_roles, extracurriculars, personal_statement)
response = client.chat.completions.create(
model="meta-llama/Llama-3.2-3B-Instruct-Turbo", # Change to the OpenAI model you prefer
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": chat_input}
],)
return response.choices[0].message.content.strip()
# Gradio interface
def gradio_interface(gmat_score, gpa, target_college, work_experience, leadership_roles, extracurriculars, personal_statement):
return analyze_chat( gmat_score, gpa, target_college, work_experience, leadership_roles, extracurriculars, personal_statement)
# Custom CSS for input restriction
custom_css = """
#input-textbox textarea {
maxlength: 210;
overflow: hidden;
resize: none;
}
"""
# Creating the Gradio UI
with gr.Blocks(theme=gr.themes.Default(primary_hue=gr.themes.colors.orange, secondary_hue=gr.themes.colors.sky,font=[gr.themes.GoogleFont("Inconsolata"), "Arial", "sans-serif"])) as demo:
with gr.Row():
gr.Markdown("## AI GMAT Profiler - Gozo Sensei")
with gr.Row():
with gr.Column(scale=2, min_width=300):
gmat_score = gr.Number(label="GMAT Score")
personal_statement = gr.TextArea(label="Enter your profile details", lines=4,elem_id="input-textbox",
info="Please ensure that any Personal Identifiable Information (PII) is removed before submitting the chat.")
with gr.Column(scale=2, min_width=300):
gpa = gr.Number(label="Undergraduate GPA")
work_experience = gr.Number(label="Work Experience (years)")
target_college = gr.Textbox(label="Target College")
with gr.Column(scale=2, min_width=300):
extracurriculars = gr.TextArea(label="Extracurricular Activities",lines=3)
leadership_roles = gr.TextArea(label="Leadership Roles",lines=3)
with gr.Row():
gr.Markdown("## Response")
with gr.Row():
output = gr.Markdown(label="Analysis")
#output = gr.TextArea(label="Analysis",info="Disclaimer: The information provided below is generated by AI based on text analytics with limited context. It must not be considered as absolute truth or final judgment.", interactive = False, max_lines=20)
with gr.Row():
btn = gr.Button("Analyze")
btn.click(fn=gradio_interface, inputs=[gmat_score, gpa, target_college, work_experience, leadership_roles, extracurriculars, personal_statement], outputs=output)
# Launch the app
demo.launch()