gdleds commited on
Commit
9f7cc3a
·
1 Parent(s): f485b9e
Files changed (3) hide show
  1. Dockerfile +3 -3
  2. app.py +45 -6
  3. runtime.txt +0 -1
Dockerfile CHANGED
@@ -17,8 +17,8 @@ RUN pip install --no-cache-dir -r requirements.txt
17
  # Copier ton code
18
  COPY . .
19
 
20
- # Exposer le port (HF attend généralement 7860, mais 8000 marche aussi)
21
- EXPOSE 8000
22
 
23
  # Lancer FastAPI avec Uvicorn
24
- CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
 
17
  # Copier ton code
18
  COPY . .
19
 
20
+
21
+ EXPOSE 7860
22
 
23
  # Lancer FastAPI avec Uvicorn
24
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py CHANGED
@@ -1,11 +1,50 @@
1
  from fastapi import FastAPI
 
 
 
 
 
 
 
 
2
 
3
- app = FastAPI()
 
4
 
5
- @app.get("/")
6
- def read_root():
7
- return {"status": "ok"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  @app.post("/predict")
10
- def predict(data: dict):
11
- return {"prediction": [42]}
 
 
 
 
 
 
 
 
1
  from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ import joblib
4
+ import boto3
5
+ import os
6
+ import io
7
+ import uvicorn
8
+ import numpy as np
9
+ from dotenv import load_dotenv
10
 
11
+ # Charger les secrets (.env ou .secrets)
12
+ load_dotenv(dotenv_path='.secrets')
13
 
14
+ # Initialiser l'app FastAPI
15
+ app = FastAPI(title="GetAround Pricing API")
16
+
17
+ # Config S3
18
+ S3_BUCKET = os.getenv("S3_BUCKET")
19
+ MODEL_KEY = os.getenv("MODEL_KEY")
20
+
21
+ # Connexion S3
22
+ s3 = boto3.client(
23
+ "s3",
24
+ aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"),
25
+ aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY")
26
+ )
27
+
28
+ # Charger le modèle depuis S3
29
+ def load_model_from_s3(bucket, key):
30
+ print(f"Téléchargement du modèle depuis s3://{bucket}/{key}")
31
+ response = s3.get_object(Bucket=bucket, Key=key)
32
+ bytestream = io.BytesIO(response["Body"].read())
33
+ return joblib.load(bytestream)
34
+
35
+ model = load_model_from_s3(S3_BUCKET, MODEL_KEY)
36
+
37
+ # Définition du format d'entrée
38
+ class InputData(BaseModel):
39
+ input: list
40
 
41
  @app.post("/predict")
42
+ def predict(data: InputData):
43
+ X = np.array(data.input)
44
+ preds = model.predict(X)
45
+ return {"prediction": preds.tolist()}
46
+
47
+ @app.get("/")
48
+ def home():
49
+ return {"message": "Bienvenue sur l'API GetAround Pricing! Utilisez /predict pour faire une prédiction."}
50
+
runtime.txt DELETED
@@ -1 +0,0 @@
1
- python-3.10