Spaces:
Build error
Build error
| import gradio as gr | |
| from datasets import load_dataset | |
| from transformers import T5ForConditionalGeneration, T5Tokenizer | |
| import random | |
| import groq # Assuming you are using the Groq library | |
| # Load the dataset | |
| ds = load_dataset("Amod/mental_health_counseling_conversations") | |
| # Extract columns (updated to match dataset column names) | |
| context = ds["train"]["Context"] # Column name is 'Context' | |
| response = ds["train"]["Response"] # Column name is 'Response' | |
| # Load T5 model (small version) | |
| model_name = "t5-small" | |
| tokenizer = T5Tokenizer.from_pretrained(model_name) | |
| model = T5ForConditionalGeneration.from_pretrained(model_name) | |
| # Directly input the Groq API key (replace with your actual API key) | |
| api_key = "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" | |
| client = groq.Client(api_key=api_key) | |
| # Function to simulate conversation | |
| def chatbot(user_input): | |
| if not user_input.strip(): | |
| return "Please enter a question or concern to receive guidance." | |
| # Calculate the word count and remaining characters for the input | |
| word_count = len(user_input.split()) | |
| max_words = 50 # Max words allowed for input | |
| remaining_words = max_words - word_count | |
| if remaining_words < 0: | |
| return f"Your input is too long. Please limit to {max_words} words. Words remaining: 0." | |
| # Try using the Groq API for the personalized response | |
| try: | |
| brief_response = client.predict(user_input) # Make sure this method exists for your Groq client | |
| except Exception as e: | |
| brief_response = None # If Groq fails, fall back to dataset | |
| if brief_response: | |
| return f"**Personalized Response:** {brief_response}" | |
| # If Groq API does not work, fallback to dataset | |
| idx = random.randint(0, len(context) - 1) | |
| context_text = context[idx] | |
| response_text = response[idx] | |
| # Generate response using T5 (RAG approach) | |
| inputs = tokenizer.encode("summarize: " + user_input, return_tensors="pt", max_length=512, truncation=True) | |
| summary_ids = model.generate(inputs, max_length=100, num_beams=4, early_stopping=True) | |
| generated_response = tokenizer.decode(summary_ids[0], skip_special_tokens=True) | |
| if not generated_response: | |
| return "Oops, sorry, I don't have information about your specific problem. Please visit a doctor to prevent mishaps." | |
| # Final response combining generated answer and dataset info | |
| complete_response = ( | |
| f"**Contextual Information:**\n{context_text}\n\n" | |
| f"**Generated Response:**\n{generated_response}\n\n" | |
| f"**Fallback Response:**\n{response_text}" | |
| ) | |
| return f"{complete_response}\n\nWords entered: {word_count}, Words remaining: {remaining_words}" | |
| # Gradio interface setup | |
| interface = gr.Interface( | |
| fn=chatbot, | |
| inputs=gr.Textbox( | |
| label="Ask your question:", | |
| placeholder="Describe how you're feeling today...", | |
| lines=4 | |
| ), | |
| outputs=gr.Markdown(label="Psychologist Assistant Response"), | |
| title="Virtual Psychiatrist Assistant", | |
| description="Enter your mental health concerns, and receive guidance and responses from a trained assistant.", | |
| theme="huggingface", # Optional: apply a theme if available | |
| ) | |
| # Launch the app | |
| interface.launch() | |