Spaces:
Sleeping
Sleeping
| import os | |
| import random | |
| from huggingface_hub import InferenceClient | |
| import gradio as gr | |
| class CollegePerformanceAnalyzer: | |
| def __init__(self): | |
| try: | |
| # Preprocess the token to remove any whitespace or newline characters | |
| hf_token = os.environ.get('HF_TOKEN', '').strip() | |
| if not hf_token: | |
| raise ValueError("No Hugging Face token found. Please set it as a Space secret.") | |
| self.client = InferenceClient( | |
| model="mistralai/Mistral-7B-Instruct-v0.1", | |
| token=hf_token | |
| ) | |
| except Exception as e: | |
| print(f"Inference Client Initialization Error: {e}") | |
| self.client = None | |
| self.parameters = self._define_performance_parameters() | |
| def _define_performance_parameters(self): | |
| return { | |
| "SS": {"weight": 0.06, "full_name": "Student Strength"}, | |
| "FSR": {"weight": 0.075, "full_name": "Faculty-Student Ratio"}, | |
| "FQE": {"weight": 0.06, "full_name": "Faculty Qualification Efficiency"}, | |
| "FRU": {"weight": 0.06, "full_name": "Faculty Research Utility"}, | |
| "OE+MIR": {"weight": 0.03, "full_name": "Outreach & Industry Engagement"}, | |
| "GUE": {"weight": 0.12, "full_name": "Graduate Unemployment Excellence"}, | |
| "GPHD": {"weight": 0.08, "full_name": "Graduate PhD Pursuit"}, | |
| "RD": {"weight": 0.03, "full_name": "Research Development"}, | |
| "WD": {"weight": 0.03, "full_name": "Worldwide Diversity"}, | |
| "ESCS": {"weight": 0.02, "full_name": "Economic & Social Campus Sustainability"}, | |
| "PCS": {"weight": 0.02, "full_name": "Peer Campus Satisfaction"}, | |
| "PR": {"weight": 0.10, "full_name": "Perception Rating"}, | |
| } | |
| def generate_performance_scores(self, seed=None): | |
| if seed is not None: | |
| random.seed(seed) | |
| parameters = self.parameters.copy() | |
| for param in parameters: | |
| parameters[param]["score"] = random.randint(0, 100) | |
| return parameters | |
| def calculate_weighted_metrics(self, parameters): | |
| for param, values in parameters.items(): | |
| values["weighted_score"] = values["score"] * values["weight"] | |
| total_weighted_score = sum(values["weighted_score"] for values in parameters.values()) | |
| nirf_rank = int((1000 - total_weighted_score) / 10) | |
| average_score = sum(values["score"] for values in parameters.values()) / len(parameters) | |
| overall_rating = round(average_score / 20) | |
| return { | |
| "parameters": parameters, | |
| "total_weighted_score": total_weighted_score, | |
| "nirf_rank": nirf_rank, | |
| "overall_rating": overall_rating, | |
| } | |
| def generate_ai_feedback(self, analysis_results): | |
| if not self.client: | |
| return "AI feedback could not be generated. Client not initialized." | |
| feedback_prompt = self._construct_feedback_prompt(analysis_results) | |
| try: | |
| # Use requests library for more explicit error handling if needed | |
| import requests | |
| completion = self.client.text_generation( | |
| prompt=feedback_prompt, | |
| max_new_tokens=500, | |
| temperature=0.7, | |
| top_p=0.9, | |
| repetition_penalty=1.1, | |
| ) | |
| return completion | |
| except Exception as e: | |
| print(f"Detailed AI Feedback Generation Error: {e}") | |
| return f"AI Feedback Generation Error: {str(e)}" | |
| def _construct_feedback_prompt(self, analysis_results): | |
| parameters = analysis_results["parameters"] | |
| overall_rating = analysis_results["overall_rating"] | |
| prompt = "Comprehensive College Performance Strategic Analysis:\n\nPerformance Metrics:\n" | |
| for param, details in parameters.items(): | |
| prompt += f"{details['full_name']}: {details['score']}/100\n" | |
| prompt += f"\nOverall Rating: {overall_rating}/5\n\nProvide a detailed strategic analysis including:\n" | |
| prompt += "1. Key institutional strengths\n2. Critical improvement areas\n3. Actionable recommendations\n4. Long-term impact on rankings\n" | |
| return prompt | |
| def chatbot_responses(message, history, seed=None, use_ai_insights=True): | |
| # Ensure history is a list of lists | |
| if not isinstance(history, list): | |
| history = [] | |
| # Default response if no specific command is given | |
| if not message or "analyze performance" not in message.lower(): | |
| response = "I can assist with college performance analysis. Type 'Analyze performance' to get started." | |
| history.append([message, response]) | |
| return history, response | |
| # Create analyzer and generate performance analysis | |
| analyzer = CollegePerformanceAnalyzer() | |
| # Check if client is initialized | |
| if analyzer.client is None: | |
| response = "Error: Unable to initialize AI client. Please check your Hugging Face token." | |
| history.append([message, response]) | |
| return history, response | |
| parameters = analyzer.generate_performance_scores(seed) | |
| analysis_results = analyzer.calculate_weighted_metrics(parameters) | |
| # Generate AI insights if enabled | |
| if use_ai_insights: | |
| try: | |
| feedback = analyzer.generate_ai_feedback(analysis_results) | |
| except Exception as e: | |
| feedback = f"AI Insights Error: {str(e)}" | |
| else: | |
| feedback = "AI Insights are disabled." | |
| # Construct detailed response | |
| response = f""" | |
| 🎓 **College Performance Analysis** | |
| - **Total Weighted Score**: {analysis_results['total_weighted_score']:.2f} | |
| - **Predicted NIRF Rank**: {analysis_results['nirf_rank']} | |
| - **Overall Rating**: {analysis_results['overall_rating']}/5 | |
| **Performance Breakdown:** | |
| """ | |
| # Add detailed parameter scores | |
| for param, details in analysis_results['parameters'].items(): | |
| response += f"- {details['full_name']}: {details['score']}/100\n" | |
| response += f"\n**AI Feedback:** {feedback}" | |
| # Append to history | |
| history.append([message, response]) | |
| return history, response | |
| def create_chatbot_interface(): | |
| with gr.Blocks() as demo: | |
| chatbot = gr.Chatbot() | |
| msg = gr.Textbox(label="Enter your message") | |
| seed_input = gr.Number(label="Random Seed (Optional)", precision=0) | |
| use_ai_insights_checkbox = gr.Checkbox(label="Enable AI Insights", value=True) | |
| submit = gr.Button("Submit") | |
| clear = gr.Button("Clear") | |
| # Submit button functionality | |
| submit_params = [ | |
| msg, # message input | |
| chatbot, # chat history | |
| seed_input, # seed for random generation | |
| use_ai_insights_checkbox # AI insights toggle | |
| ] | |
| submit.click( | |
| chatbot_responses, | |
| inputs=submit_params, | |
| outputs=[chatbot, msg] | |
| ) | |
| # Enter key functionality | |
| msg.submit( | |
| chatbot_responses, | |
| inputs=submit_params, | |
| outputs=[chatbot, msg] | |
| ) | |
| # Clear button functionality | |
| clear.click( | |
| lambda: None, | |
| None, | |
| [chatbot, msg], | |
| queue=False | |
| ) | |
| return demo | |
| def main(): | |
| interface = create_chatbot_interface() | |
| interface.launch() | |
| if __name__ == "__main__": | |
| main() |