artelo1 commited on
Commit
6373f94
verified
1 Parent(s): b5f8505

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +23 -0
  2. emotions_pl.py +81 -0
  3. requirements.txt +5 -0
Dockerfile ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # U偶yj oficjalnego obrazu Pythona jako bazy
2
+ FROM python:3.9-slim-buster
3
+
4
+ # Ustaw katalog roboczy wewn膮trz kontenera
5
+ RUN useradd -m -u 1000 user
6
+ WORKDIR /app
7
+
8
+ # Skopiuj pliki requirements.txt i zainstaluj zale偶no艣ci
9
+ COPY --chown=user requirements.txt .
10
+ RUN pip install --no-cache-dir -r requirements.txt
11
+
12
+ # Skopiuj pozosta艂e pliki aplikacji
13
+ COPY --chown=user . /app
14
+
15
+ RUN mkdir ./.cache
16
+
17
+ # Ustaw zmienn膮 艣rodowiskow膮 PORT, kt贸ra b臋dzie u偶ywana przez FastAPI/Uvicorn
18
+ # Hugging Face Spaces cz臋sto udost臋pnia port 7860 lub 80
19
+ ENV PORT 7860
20
+
21
+ # Uruchom aplikacj臋 Uvicorn, gdy kontener zostanie uruchomiony
22
+ # --host 0.0.0.0 jest kluczowe, aby serwer nas艂uchiwa艂 na wszystkich interfejsach
23
+ CMD ["uvicorn", "emotions_pl:app", "--host", "0.0.0.0", "--port", "7860"]
emotions_pl.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ import torch
4
+ import uvicorn
5
+ from fastapi import FastAPI, HTTPException
6
+ from fastapi.responses import JSONResponse
7
+ from pydantic import BaseModel
8
+ from transformers import pipeline
9
+
10
+ # Utw贸rz instancj臋 FastAPI
11
+ app = FastAPI(
12
+ title="Emotions PL API",
13
+ description="API do oznaczaniem tagami emocji go-emotions-polish-gpt2-small-v0.0.1",
14
+ version="1.0.0"
15
+ )
16
+
17
+ # 艢cie偶ka do modelu - Hugging Face automatycznie pobierze model
18
+ MODEL_NAME = "nie3e/go-emotions-polish-gpt2-small-v0.0.1"
19
+ generator = None # Zostanie za艂adowany p贸藕niej
20
+
21
+
22
+ # Model wej艣ciowy dla POST request
23
+ class PredictRequest(BaseModel):
24
+ prompt: str
25
+
26
+
27
+ @app.on_event("startup")
28
+ async def startup_event():
29
+ global generator
30
+
31
+ if torch.cuda.is_available():
32
+ print("device: GPU")
33
+ else:
34
+ print("device: CPU")
35
+ print(f"艁adowanie modelu: {MODEL_NAME}...")
36
+ try:
37
+ # Mo偶esz dostosowa膰 device=0 (GPU) lub device=-1 (CPU) w zale偶no艣ci od wybranej maszyny Space
38
+ # Free tier spaces usually run on CPU, unless you explicitly select a GPU.
39
+ # It's safer to not specify device if you want it to auto-detect or default to CPU.
40
+ generator = pipeline(
41
+ "text-classification",
42
+ model=MODEL_NAME,
43
+ top_k=-1,
44
+ # device=0 if torch.cuda.is_available() else -1 # Odkomentuj dla detekcji GPU
45
+ )
46
+ print("Model za艂adowany pomy艣lnie!")
47
+ except Exception as e:
48
+ print(f"B艂膮d 艂adowania modelu: {e}")
49
+ # Mo偶esz zdecydowa膰, czy aplikacja ma zako艅czy膰 dzia艂anie, czy kontynuowa膰 bez modelu
50
+ # W przypadku b艂臋du 艂adowania modelu, endpoint generacji tekstu b臋dzie zwraca艂 b艂膮d
51
+ generator = None # Ustaw na None, aby sygnalizowa膰 problem
52
+
53
+
54
+ @app.get("/")
55
+ async def root():
56
+ return {"message": "Polish emotions API is running!"}
57
+
58
+
59
+ @app.post("/predict")
60
+ async def predict(request: PredictRequest):
61
+ if generator is None:
62
+ raise HTTPException(status_code=503, detail="Model nie zosta艂 za艂adowany lub wyst膮pi艂 b艂膮d.")
63
+
64
+ try:
65
+ generated_text = generator(
66
+ request.prompt
67
+ )
68
+ # Pipeline zwraca list臋 s艂ownik贸w, bierzemy pierwszy wynik
69
+ response_data = generated_text[0]
70
+ return JSONResponse(
71
+ content=response_data,
72
+ media_type="application/json; charset=utf-8"
73
+ )
74
+ # return {"generated_text": generated_text[0]["generated_text"]}
75
+ except Exception as e:
76
+ raise HTTPException(status_code=500, detail=f"B艂膮d podczas generowania tekstu: {e}")
77
+
78
+
79
+ # Uruchamianie serwera Uvicorn bezpo艣rednio (dla Dockera)
80
+ if __name__ == "__main__":
81
+ uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn[standard]
3
+ transformers
4
+ torch
5
+ pydantic