Spaces:
Running
Running
import gradio as gr | |
from transformers import AutoTokenizer, AutoModelForSequenceClassification, AutoModelForCausalLM | |
import torch | |
import os | |
from dotenv import load_dotenv | |
# Load environment variables from .env file | |
load_dotenv() | |
HUGGING_FACE_TOKEN = os.getenv("HUGGING_FACE_TOKEN") | |
# Load the sentiment analysis model | |
sentiment_tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english") | |
sentiment_model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english") | |
# Load the LLaMA-1B model for text generation, using the token from the environment variable | |
llama_tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B-Instruct", use_auth_token=HUGGING_FACE_TOKEN) | |
llama_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B-Instruct", use_auth_token=HUGGING_FACE_TOKEN) | |
# Function for sentiment analysis | |
def analyze_sentiment(text): | |
inputs = sentiment_tokenizer(text, return_tensors="pt") | |
outputs = sentiment_model(**inputs) | |
probs = torch.nn.functional.softmax(outputs.logits, dim=-1) | |
sentiment = "positive" if torch.argmax(probs) == 1 else "negative" | |
confidence = probs.max().item() | |
return sentiment, confidence | |
# Function to generate a supportive response | |
def generate_response(sentiment, text): | |
prompt = f"The user feels {sentiment}. Respond with supportive advice based on: {text}" | |
inputs = llama_tokenizer(prompt, return_tensors="pt") | |
response = llama_model.generate(**inputs, max_length=150) | |
return llama_tokenizer.decode(response[0], skip_special_tokens=True) | |
# Combine both functions for the personal psychologist | |
def personal_psychologist(text): | |
sentiment, confidence = analyze_sentiment(text) | |
response = generate_response(sentiment, text) | |
return f"Sentiment: {sentiment} (Confidence: {confidence:.2f})\n\nResponse: {response}" | |
# Set up Gradio interface | |
iface = gr.Interface( | |
fn=personal_psychologist, | |
inputs="text", | |
outputs="text", | |
title="Personal Psychologist", | |
description="A supportive AI that assesses your mood and provides comforting advice based on your input.", | |
examples=[ | |
["I'm feeling very anxious and stressed about my exams."], | |
["I had a great day with my friends!"], | |
["I feel like I'm not good enough and everything is going wrong."] | |
] | |
) | |
# Launch Gradio app | |
iface.launch() | |