import gradio as gr from transformers import GPT2LMHeadModel, GPT2Tokenizer # Hugging Face model repository name MODEL_NAME = "fine_tuned_gpt2" # Load the model and tokenizer from Hugging Face def load_model(): print("Loading model from Hugging Face...") tokenizer = GPT2Tokenizer.from_pretrained(MODEL_NAME) model = GPT2LMHeadModel.from_pretrained(MODEL_NAME) print("Model loaded successfully.") return model, tokenizer # Initialize model and tokenizer model, tokenizer = load_model() # Functions for question generation and feedback def generate_question(response, history): """ Generate the next question based on the user's response and previous Q&A history. """ input_text = "" for qa in history: input_text += f"Question: {qa['question']}\nAnswer: {qa['answer']}\n" input_text += f"Response: {response}\nNext Question:" inputs = tokenizer.encode(input_text, return_tensors="pt", truncation=True, max_length=512) outputs = model.generate(inputs, max_length=200, num_return_sequences=1, pad_token_id=tokenizer.eos_token_id) generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) return generated_text def get_feedback(session_data): """ Generate feedback for the session data. """ input_text = "Session Feedback:\n" for qa in session_data: input_text += f"Question: {qa['question']}\nAnswer: {qa['answer']}\n" input_text += f"\nScore:" inputs = tokenizer.encode(input_text, return_tensors="pt", truncation=True, max_length=512) outputs = model.generate(inputs, max_length=500, num_return_sequences=1, pad_token_id=tokenizer.eos_token_id) feedback = tokenizer.decode(outputs[0], skip_special_tokens=True) # Decode and store the output return feedback # Gradio Interface Functions def question_interface(response, history): """ Gradio interface function for question generation. """ try: history = eval(history) # Convert string input to list return generate_question(response, history) except Exception as e: return f"Error: {str(e)}" def feedback_interface(session_data): """ Gradio interface function for feedback generation. """ try: session_data = eval(session_data) # Convert string input to list return get_feedback(session_data) except Exception as e: return f"Error: {str(e)}" # Gradio Interface Setup question_iface = gr.Interface( fn=question_interface, inputs=[ gr.Textbox(label="User Response"), gr.Textbox(label="History (list of Q&A in string format)"), ], outputs="text", title="AI Interview Assistant: Question Generator", description="Provide a response and Q&A history to generate the next interview question.", api_name="generate_question" # Add this ) feedback_iface = gr.Interface( fn=feedback_interface, inputs=gr.Textbox(label="Session Data (list of Q&A in string format)"), outputs="text", title="AI Interview Assistant: Feedback Generator", description="Provide session data to get feedback on your responses.", api_name="get_feedback" # Add this ) # Combine the Interfaces iface = gr.TabbedInterface( interface_list=[question_iface, feedback_iface], tab_names=["Generate Question", "Get Feedback"] ) # Launch the Gradio App if __name__ == "__main__": iface.launch(server_name="0.0.0.0", server_port=7860)