Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import logging | |
| import sys | |
| import os | |
| from database import initialize_database, add_participant, get_participants_dataframe | |
| # --- Logging Setup --- | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| handlers=[logging.StreamHandler(sys.stdout)] | |
| ) | |
| logger = logging.getLogger('app_simple') | |
| # --- Initial Setup --- | |
| logger.info("Initializing database...") | |
| initialize_database() | |
| # --- Gradio UI Functions --- | |
| def register_participant(name, email, linkedin, background, goals): | |
| """Callback function to register a new participant.""" | |
| if not all([name, email]): | |
| return "Please provide at least a name and email.", get_participants_dataframe() | |
| participant_data = { | |
| "name": name, | |
| "email": email, | |
| "linkedin_profile": linkedin, | |
| "background": background, | |
| "goals": goals | |
| } | |
| try: | |
| add_participant(participant_data) | |
| feedback = f"β Success! Participant '{name}' registered." | |
| logger.info(f"Registered new participant: {email}") | |
| except Exception as e: | |
| feedback = f"β Error! Could not register participant. Reason: {e}" | |
| logger.error(f"Failed to register participant {email}: {e}") | |
| return feedback, get_participants_dataframe() | |
| def refresh_participants_list(): | |
| """Callback to reload the participant data from the database.""" | |
| return get_participants_dataframe() | |
| def mock_matching_process(organizer_criteria): | |
| """Mock function for the matching process (without using TinyCodeAgent).""" | |
| participants_df = get_participants_dataframe() | |
| if len(participants_df) < 2: | |
| logger.warning("Matching process aborted: not enough participants.") | |
| return "Cannot run matching with fewer than 2 participants." | |
| # Create a simple mock output | |
| result = f""" | |
| ## Team Matching Results | |
| **Criteria used**: {organizer_criteria} | |
| ### Team 1 | |
| * **{participants_df['name'].iloc[0] if len(participants_df) > 0 else 'No participants'}** | |
| * **{participants_df['name'].iloc[1] if len(participants_df) > 1 else 'No participants'}** | |
| **Justification**: This is a mock team created for demonstration purposes. | |
| ### Team 2 | |
| * **{participants_df['name'].iloc[2] if len(participants_df) > 2 else 'No participants'}** | |
| * **{participants_df['name'].iloc[3] if len(participants_df) > 3 else 'No participants'}** | |
| **Justification**: This is another mock team created for demonstration purposes. | |
| *Note: This is a simplified version without the AI matching. The full version would use TinyCodeAgent to create optimized teams.* | |
| """ | |
| return result | |
| # --- Gradio App Definition --- | |
| with gr.Blocks(theme=gr.themes.Soft(), title="HackBuddyAI (Simple)") as app: | |
| gr.Markdown("# π€ HackBuddyAI (Simple Version)") | |
| gr.Markdown("*This is a simplified version without the AI matching component.*") | |
| with gr.Tabs(): | |
| with gr.TabItem("π€ Participant Registration"): | |
| gr.Markdown("## Welcome, Participant!") | |
| gr.Markdown("Fill out the form below to register for the hackathon.") | |
| with gr.Row(): | |
| with gr.Column(): | |
| name_in = gr.Textbox(label="Full Name") | |
| email_in = gr.Textbox(label="Email Address") | |
| linkedin_in = gr.Textbox(label="LinkedIn Profile URL", placeholder="Optional") | |
| with gr.Column(): | |
| background_in = gr.Textbox(label="Your Background & Skills", lines=5, placeholder="e.g., Python developer with 3 years of experience, specializing in Django and REST APIs...") | |
| goals_in = gr.Textbox(label="Your Goals for this Hackathon", lines=5, placeholder="e.g., I want to learn about machine learning and work on a cool data visualization project...") | |
| submit_button = gr.Button("Register", variant="primary") | |
| registration_feedback = gr.Markdown() | |
| with gr.TabItem("π Organizer Dashboard"): | |
| gr.Markdown("## Welcome, Organizer!") | |
| gr.Markdown("Here you can view registered participants and run the team matching process.") | |
| with gr.Accordion("View Registered Participants", open=False): | |
| refresh_button = gr.Button("π Refresh List") | |
| participants_df_out = gr.DataFrame(value=get_participants_dataframe, interactive=False) | |
| gr.Markdown("### Run Matching") | |
| organizer_criteria_in = gr.Textbox( | |
| label="Matching Criteria", | |
| lines=4, | |
| value="Create teams of 3. Try to balance skills in each team (e.g., frontend, backend, data).", | |
| placeholder="Describe your ideal team composition..." | |
| ) | |
| run_button = gr.Button("π Run Matching", variant="primary") | |
| gr.Markdown("### π€ Matched Teams") | |
| matching_results_out = gr.Markdown("Matching has not been run yet.") | |
| # --- Event Handlers --- | |
| submit_button.click( | |
| fn=register_participant, | |
| inputs=[name_in, email_in, linkedin_in, background_in, goals_in], | |
| outputs=[registration_feedback, participants_df_out] | |
| ) | |
| refresh_button.click( | |
| fn=refresh_participants_list, | |
| inputs=[], | |
| outputs=[participants_df_out] | |
| ) | |
| run_button.click( | |
| fn=mock_matching_process, | |
| inputs=[organizer_criteria_in], | |
| outputs=[matching_results_out] | |
| ) | |
| # --- Launching the App --- | |
| if __name__ == "__main__": | |
| try: | |
| logger.info("Launching Gradio app (simple version)...") | |
| # queue() is important for handling multiple users | |
| app.queue().launch(share=False) | |
| except KeyboardInterrupt: | |
| logger.info("Gradio app shutting down.") |