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()