SHIROI-07 commited on
Commit
8ecfb75
·
verified ·
1 Parent(s): 668c850
Files changed (6) hide show
  1. .gitattributes +35 -35
  2. README.md +14 -13
  3. main.py +28 -0
  4. model.py +57 -0
  5. requirements.txt +4 -4
  6. test_payload.json +3 -0
.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,13 +1,14 @@
1
- ---
2
- title: Emotion Detector
3
- emoji: 🚀
4
- colorFrom: pink
5
- colorTo: pink
6
- sdk: gradio
7
- sdk_version: 5.31.0
8
- app_file: app.py
9
- pinned: false
10
- short_description: AI emotion detector
11
- ---
12
-
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
+ ---
2
+ title: Emotion Analysis Api
3
+ emoji: 🚀
4
+ colorFrom: pink
5
+ colorTo: pink
6
+ sdk: gradio
7
+ sdk_version: 5.31.0
8
+ app_file: app.py
9
+ model : model.py
10
+ pinned: false
11
+ short_description: AI emotion detector
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
main.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #Emotion Detection API using FastAPI
2
+ from fastapi import FastAPI, HTTPException
3
+ from pydantic import BaseModel
4
+ from app.model import predict_emotions, calculate_distress
5
+
6
+ app = FastAPI()
7
+
8
+ class TextInput(BaseModel):
9
+ text: str
10
+
11
+ @app.post("/analyze")
12
+ async def analyze(input: TextInput):
13
+ try:
14
+ emotions = predict_emotions(input.text)
15
+ distress_score = calculate_distress(emotions)
16
+
17
+ return {
18
+ "text": input.text,
19
+ "emotions": emotions,
20
+ "distress_score": distress_score,
21
+ "warning": distress_score > 1.5 # Trigger warning if score high
22
+ }
23
+ except Exception as e:
24
+ raise HTTPException(status_code=500, detail=str(e))
25
+
26
+ @app.get("/")
27
+ def root():
28
+ return {"message": "Emotion detector is live"}
model.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
2
+ import torch
3
+ import numpy as np
4
+
5
+ # Load model and tokenizer
6
+ model_name = "SamLowe/roberta-base-go_emotions"
7
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
8
+ model = AutoModelForSequenceClassification.from_pretrained(model_name)
9
+
10
+ #Define distress weights for emotions
11
+ DISTRESS_WEIGHTS = {
12
+ "grief": 1.0,
13
+ "sadness": 0.9,
14
+ "fear": 0.9,
15
+ "disgust": 0.9,
16
+ "anger": 0.9,
17
+ "remorse": 0.8,
18
+ "disappointment": 0.8,
19
+ "nervousness": 0.8,
20
+ "disapproval": 0.7,
21
+ "embarrassment": 0.7,
22
+ "annoyance": 0.6,
23
+ "confusion": 0.6,
24
+ "surprise": 0.4,
25
+ "desire": 0.4,
26
+ "love": 0.3,
27
+ "excitement": 0.3,
28
+ "pride": 0.3,
29
+ "optimism": 0.3,
30
+ "admiration": 0.2,
31
+ "gratitude": 0.2,
32
+ "relief": 0.2,
33
+ "joy": 0.2,
34
+ "amusement": 0.2,
35
+ "neutral": 0.1,
36
+ }
37
+ # Labels from GoEmotions
38
+ EMOTION_LABELS = tokenizer.convert_ids_to_tokens(list(range(model.config.num_labels)))
39
+
40
+ # Ensure the model is in evaluation mode
41
+ model.eval()
42
+
43
+ def predict_emotions(text: str):
44
+ inputs = tokenizer(text, return_tensors="pt", truncation=True)
45
+ outputs = model(**inputs)
46
+ probs = torch.sigmoid(outputs.logits)[0].detach().numpy()
47
+
48
+ threshold = 0.3 # You can tune this
49
+ predicted = {label: float(prob) for label, prob in zip(model.config.id2label.values(), probs) if prob > threshold}
50
+ return predicted
51
+
52
+ def calculate_distress(emotions: dict):
53
+ distress_score = sum(
54
+ emotions.get(emotion, 0) * DISTRESS_WEIGHTS.get(emotion, 0)
55
+ for emotion in emotions
56
+ )
57
+ return round(distress_score, 3)
requirements.txt CHANGED
@@ -1,4 +1,4 @@
1
- transformers==4.41.0
2
- fastapi==0.110.2
3
- uvicorn==0.29.0
4
- torch>=2.0.0
 
1
+ transformers==4.41.0
2
+ fastapi==0.110.2
3
+ uvicorn==0.29.0
4
+ torch>=2.0.0
test_payload.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "text": "I’m not sure how long I can keep doing this. I feel completely overwhelmed and exhausted."
3
+ }