zontos commited on
Commit
dfa6e0d
·
1 Parent(s): 364b1eb

Add application file

Browse files
Files changed (3) hide show
  1. Dockerfile +30 -0
  2. app.py +46 -0
  3. requirements.txt +7 -0
Dockerfile ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Dockerfile
2
+
3
+ # 1. Ξεκινάμε από μια σύγχρονη, ελαφριά εικόνα Python
4
+ FROM python:3.10-slim
5
+
6
+ # 2. (Από HF) Δημιουργούμε έναν χρήστη χωρίς δικαιώματα root για ασφάλεια
7
+ RUN useradd -m -u 1000 user
8
+
9
+ # 3. (Από HF) Ορίζουμε ότι οι επόμενες εντολές θα τρέξουν ως αυτός ο χρήστης
10
+ USER user
11
+
12
+ # 4. (Από HF) Ορίζουμε το PATH και τον κατάλογο εργασίας για τον νέο χρήστη
13
+ ENV PATH="/home/user/.local/bin:$PATH"
14
+ WORKDIR /home/user/app
15
+
16
+ # 5. (Από HF - Optimization) Αντιγράφουμε ΜΟΝΟ τα requirements πρώτα
17
+ COPY --chown=user ./requirements.txt requirements.txt
18
+
19
+ # 6. Εγκαθιστούμε τις βιβλιοθήκες
20
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
21
+
22
+ # 7. (Από HF - Optimization) Τώρα αντιγράφουμε τον υπόλοιπο κώδικα
23
+ COPY --chown=user ./services /home/user/app/services
24
+ COPY --chown=user ./app.py /home/user/app/app.py
25
+
26
+ # 8. Ορίζουμε τη θύρα που θα "ακούει" ο server μας
27
+ EXPOSE 7860
28
+
29
+ # 9. Η τελική εντολή για να ξεκινήσει ο FastAPI server
30
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+
3
+ from fastapi import FastAPI
4
+ from pydantic import BaseModel
5
+
6
+ # Εισάγουμε το έτοιμο, προ-φορτωμένο instance του Krikri service
7
+ from services.krikri_service import krikri
8
+
9
+ # --- Pydantic Μοντέλα για τα API Requests/Responses ---
10
+ class GenerationRequest(BaseModel):
11
+ prompt: str
12
+ system_prompt: str = "Είσαι το Κρικρί, ένα εξαιρετικά ανεπτυγμένο μοντέλο Τεχνητής Νοημοσύνης για τα ελληνικά."
13
+ max_tokens: int = 256
14
+
15
+ class GenerationResponse(BaseModel):
16
+ text: str
17
+
18
+ # --- Δημιουργία της FastAPI Εφαρμογής ---
19
+ app = FastAPI(
20
+ title="Wide-AI Krikri Service",
21
+ description="Ένα API για την εκτέλεση του μοντέλου Krikri-8B-Instruct.",
22
+ version="1.0.0"
23
+ )
24
+
25
+ # --- API Endpoints ---
26
+ @app.post("/generate", response_model=GenerationResponse, tags=["AI Models"])
27
+ def generate_text_from_krikri(request: GenerationRequest):
28
+ """
29
+ Δέχεται ένα prompt και επιστρέφει το παραγόμενο κείμενο από το μοντέλο Κρικρί.
30
+ """
31
+ messages = [
32
+ {"role": "system", "content": request.system_prompt},
33
+ {"role": "user", "content": request.prompt},
34
+ ]
35
+
36
+ # Καλούμε την έτοιμη μέθοδο 'generate' του service μας
37
+ generated_text = krikri.generate(messages, request.max_tokens)
38
+
39
+ return GenerationResponse(text=generated_text)
40
+
41
+ @app.get("/", tags=["General"])
42
+ def read_root():
43
+ """
44
+ Κεντρικό endpoint που δίνει πληροφορίες για την κατάσταση του API.
45
+ """
46
+ return {"status": "ok", "message": "Krikri API is running. Visit /docs for the interactive API documentation."}
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # requirements.txt
2
+
3
+ fastapi
4
+ uvicorn[standard]
5
+ pydantic
6
+ llama-cpp-python
7
+ huggingface-hub