File size: 6,251 Bytes
e2b371d
ce55b14
aea70bb
e2b371d
 
 
aea70bb
e2b371d
 
 
 
 
 
 
 
 
 
 
 
aea70bb
 
 
ce55b14
e2b371d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce55b14
e2b371d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce55b14
e2b371d
 
 
 
 
 
 
 
 
 
 
 
aea70bb
 
 
e2b371d
aea70bb
e2b371d
 
aea70bb
e2b371d
 
 
 
aea70bb
 
 
 
 
 
 
e2b371d
 
 
aea70bb
e2b371d
 
aea70bb
e2b371d
 
2f5bda1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e2b371d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce55b14
aea70bb
e2b371d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Getaround — Documentation de l'API Pricing</title>
  <style>
    body { font-family: sans-serif; max-width: 860px; margin: 40px auto; padding: 0 24px; color: #1a1a1a; }
    h1 { color: #1565C0; }
    h2 { color: #1565C0; border-bottom: 1px solid #e0e0e0; padding-bottom: 6px; }
    h3 { color: #333; }
    code, pre { background: #f4f4f4; border-radius: 6px; padding: 2px 6px; font-family: monospace; font-size: 13px; }
    pre { padding: 14px; overflow-x: auto; }
    .endpoint { background: #f0f4ff; border-left: 4px solid #1565C0; padding: 10px 16px; border-radius: 6px; margin-bottom: 10px; }
    .badge { display: inline-block; padding: 2px 10px; border-radius: 4px; font-size: 12px; font-weight: 700; margin-right: 8px; }
    .get { background: #e3f2fd; color: #1565C0; }
    .post { background: #fff3e0; color: #e65100; }
    ul li { margin-bottom: 6px; }
    .note { background: #fff8e1; border-left: 4px solid #f9a825; padding: 10px 16px; border-radius: 6px; margin-top: 16px; }
  </style>
</head>
<body>

<h1>🚗 Getaround — Documentation de l'API Pricing</h1>
<p>Documentation de l'API accessible via <code>/docs</code>. Cette API expose un modèle de Machine Learning qui prédit <code>rental_price_per_day</code> en fonction des caractéristiques du véhicule.</p>

<h2>Vue d'ensemble</h2>
<ul>
  <li><span class="badge get">GET</span> <code>/</code> — Page d'accueil (HTML)</li>
  <li><span class="badge get">GET</span> <code>/health</code> — Healthcheck (JSON)</li>
  <li><span class="badge post">POST</span> <code>/predict</code> — Prédiction (JSON)</li>
  <li><span class="badge get">GET</span> <code>/docs</code> — Documentation (HTML)</li>
</ul>

<h2>GET /</h2>
<div class="endpoint">
  <span class="badge get">GET</span> Page d'accueil HTML listant les endpoints disponibles.
</div>
<pre>curl -s https://anabeldg-getaround-pricing-api.hf.space/</pre>

<h2>GET /health</h2>
<div class="endpoint">
  <span class="badge get">GET</span> Vérifie que le service est actif et que le modèle est correctement chargé.
</div>
<pre>curl -s https://anabeldg-getaround-pricing-api.hf.space/health</pre>
<p>Réponse attendue :</p>
<pre>{
  "status": "ok"
}</pre>

<h2>GET /docs</h2>
<div class="endpoint">
  <span class="badge get">GET</span> Page HTML contenant la documentation de l'API.
</div>
<pre>curl -s https://anabeldg-getaround-pricing-api.hf.space/docs</pre>

<h2>POST /predict</h2>
<div class="endpoint">
  <span class="badge post">POST</span> Retourne les prédictions de prix journalier (<code>rental_price_per_day</code>) pour une ou plusieurs lignes en entrée.
</div>
<ul>
  <li><strong>Méthode :</strong> POST</li>
  <li><strong>Entrée :</strong> JSON avec une clé <code>input</code></li>
  <li><strong>Sortie :</strong> JSON <code>{"prediction": [...]}</code> (une prédiction par ligne)</li>
</ul>

<h3>Formats acceptés</h3>
<ul>
  <li>Format matrice (requis pour l'évaluation) : <code>{"input": [[...], [...]]}</code></li>
  <li>Format dictionnaires (optionnel / compatibilité) : <code>{"input": [{"feature": value, ...}]}</code></li>
</ul>

<h3>1) Format matrice (requis)</h3>
<p>Chaque ligne doit contenir exactement <strong>13 valeurs</strong>, dans l'ordre strict suivant (défini par <code>feature_order.json</code>) :</p>
<pre>model_key, mileage, engine_power, fuel, paint_color, car_type,
private_parking_available, has_gps, has_air_conditioning, automatic_car,
has_getaround_connect, has_speed_regulator, winter_tires</pre>

<p>Types attendus :</p>
<ul>
  <li><code>model_key</code>, <code>fuel</code>, <code>paint_color</code>, <code>car_type</code> → chaînes de caractères</li>
  <li><code>mileage</code>, <code>engine_power</code> → valeurs numériques</li>
  <li>Variables booléennes → <code>true</code>/<code>false</code> ou <code>0</code>/<code>1</code></li>
</ul>
<p>Si une ligne n'a pas 13 valeurs, l'API renvoie une erreur <code>422</code>.</p>

<p><strong>Exemple de requête (matrice) :</strong></p>
<pre>{
  "input": [
    ["Citroën", 140411, 100, "diesel", "black", "convertible", 1, 1, 0, 0, 1, 1, 1]
  ]
}</pre>

<p><strong>curl :</strong></p>
<pre>curl -X POST "https://anabeldg-getaround-pricing-api.hf.space/predict" \
-H "Content-Type: application/json" \
-d '{"input":[["Citroën",140411,100,"diesel","black","convertible",1,1,0,0,1,1,1]]}'</pre>

<p><strong>Python :</strong></p>
<pre>import requests

payload = {
  "input": [
    ["Citroën", 140411, 100, "diesel", "black", "convertible", 1, 1, 0, 0, 1, 1, 1]
  ]
}

r = requests.post("https://anabeldg-getaround-pricing-api.hf.space/predict", json=payload)
print(r.json())
# {"prediction": [106.57]}</pre>

<h3>2) Format dictionnaires (compatibilité)</h3>
<p>Ce format est accepté pour des raisons de compatibilité. Toutes les colonnes attendues doivent être présentes ; l'API réordonne ensuite selon <code>FEATURE_ORDER</code>.</p>

<p><strong>Exemple de requête (dictionnaires) :</strong></p>
<pre>{
  "input": [
    {
      "model_key": "Citroën",
      "mileage": 140411,
      "engine_power": 100,
      "fuel": "diesel",
      "paint_color": "black",
      "car_type": "convertible",
      "private_parking_available": true,
      "has_gps": true,
      "has_air_conditioning": false,
      "automatic_car": false,
      "has_getaround_connect": true,
      "has_speed_regulator": true,
      "winter_tires": true
    }
  ]
}</pre>

<h3>Réponse</h3>
<p>Une prédiction par ligne.</p>
<pre>{
  "prediction": [106.57]
}</pre>

<h2>Erreurs possibles</h2>
<ul>
  <li><code>422</code> — entrée invalide (mauvaise dimension de matrice, colonnes manquantes, JSON invalide)</li>
  <li><code>500</code> — erreur interne lors de la prédiction (échec du modèle)</li>
</ul>

<div class="note">
  <strong>Notes :</strong>
  <ul>
    <li>L'API supporte des prédictions en batch (plusieurs lignes dans <code>input</code>).</li>
    <li>Les catégories inconnues sont gérées par le pipeline du modèle.</li>
    <li>Pour éviter les erreurs 422, respecter strictement l'ordre et le nombre de features en mode matrice.</li>
  </ul>
</div>

</body>
</html>