pri2k commited on
Commit
0774891
Β·
1 Parent(s): ec7f722

πŸ”§ Updated app.py to compute embeddings using MentalBERT

Browse files
Files changed (4) hide show
  1. .gitignore +3 -0
  2. Dockerfile +9 -5
  3. app.py +33 -11
  4. requirements.txt +1 -1
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ .env
2
+ __pycache__/
3
+ *.pyc
Dockerfile CHANGED
@@ -1,17 +1,21 @@
1
- # Use an official Python image
2
  FROM python:3.11-slim
3
 
4
- # Set working directory
5
  WORKDIR /app
6
 
7
- # Copy the app files into the container
8
  COPY . .
9
 
10
  # Install dependencies
11
  RUN pip install --no-cache-dir -r requirements.txt
12
 
13
- # Expose the default port used by Hugging Face Spaces
 
 
 
 
 
 
14
  EXPOSE 7860
15
 
16
- # Run the FastAPI app using uvicorn
17
  CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
 
 
1
  FROM python:3.11-slim
2
 
 
3
  WORKDIR /app
4
 
5
+ # Copy files
6
  COPY . .
7
 
8
  # Install dependencies
9
  RUN pip install --no-cache-dir -r requirements.txt
10
 
11
+ # Set Hugging Face cache location
12
+ ENV HF_HOME=/app/.cache/huggingface
13
+ ENV TRANSFORMERS_CACHE=$HF_HOME
14
+ ENV HF_DATASETS_CACHE=$HF_HOME
15
+ ENV HF_METRICS_CACHE=$HF_HOME
16
+ ENV HUGGINGFACE_HUB_CACHE=$HF_HOME
17
+
18
  EXPOSE 7860
19
 
20
+ # Run the app
21
  CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py CHANGED
@@ -1,21 +1,43 @@
1
- from fastapi import FastAPI
2
  from pydantic import BaseModel
3
- from sentence_transformers import SentenceTransformer
 
4
  import os
5
 
6
  app = FastAPI()
7
 
8
- hf_token = os.getenv("HF_TOKEN")
9
- if not hf_token:
10
- raise ValueError("HF_TOKEN not set in environment variables.")
 
11
 
12
- # Pass token while loading the model
13
- model = SentenceTransformer("mental/mental-bert-base-uncased", use_auth_token=hf_token)
 
 
14
 
15
- class InputText(BaseModel):
 
16
  text: str
17
 
 
 
 
 
 
 
 
 
 
 
18
  @app.post("/embed")
19
- async def embed_text(input: InputText):
20
- embedding = model.encode(input.text).tolist()
21
- return {"embedding": embedding}
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, HTTPException
2
  from pydantic import BaseModel
3
+ from transformers import AutoTokenizer, AutoModel
4
+ import torch
5
  import os
6
 
7
  app = FastAPI()
8
 
9
+ # Load Hugging Face Token
10
+ HF_TOKEN = os.getenv("HF_TOKEN")
11
+ if not HF_TOKEN:
12
+ raise ValueError("❌ Hugging Face API token not found! Set HF_TOKEN as an environment variable.")
13
 
14
+ # Load tokenizer and model
15
+ tokenizer = AutoTokenizer.from_pretrained("mental/mental-bert-base-uncased", token=HF_TOKEN)
16
+ model = AutoModel.from_pretrained("mental/mental-bert-base-uncased", token=HF_TOKEN)
17
+ model.eval() # Set model to evaluation mode
18
 
19
+ # Request body schema
20
+ class TextRequest(BaseModel):
21
  text: str
22
 
23
+ # Helper function to compute embedding
24
+ def compute_embedding(text: str) -> list[float]:
25
+ """Generate a sentence embedding using mean pooling on MentalBERT output."""
26
+ inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
27
+ with torch.no_grad():
28
+ outputs = model(**inputs)
29
+ embedding = outputs.last_hidden_state.mean(dim=1).squeeze()
30
+ return embedding.tolist()
31
+
32
+ # POST endpoint to return embedding
33
  @app.post("/embed")
34
+ def get_embedding(request: TextRequest):
35
+ text = request.text.strip()
36
+ if not text:
37
+ raise HTTPException(status_code=400, detail="Input text cannot be empty.")
38
+
39
+ try:
40
+ embedding = compute_embedding(text)
41
+ return {"embedding": embedding}
42
+ except Exception as e:
43
+ raise HTTPException(status_code=500, detail=f"Error computing embedding: {str(e)}")
requirements.txt CHANGED
@@ -1,4 +1,4 @@
1
  fastapi
2
  uvicorn
3
- sentence-transformers
4
  torch
 
 
1
  fastapi
2
  uvicorn
 
3
  torch
4
+ sentence-transformers