gnosisx commited on
Commit
cdb8d77
·
verified ·
1 Parent(s): 83b6fdd

Simplified app with compatible versions

Browse files
Dockerfile CHANGED
@@ -6,13 +6,13 @@ WORKDIR /app
6
  COPY requirements.txt .
7
  RUN pip install --no-cache-dir -r requirements.txt
8
 
9
- # Copy model files and app
10
- COPY calibrated_*.joblib .
11
- COPY calibrated_model_metadata.json .
12
- COPY app.py .
13
 
14
  # Expose port
15
  EXPOSE 7860
16
 
17
- # Run the application
18
- CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
 
6
  COPY requirements.txt .
7
  RUN pip install --no-cache-dir -r requirements.txt
8
 
9
+ # Copy all model files and app
10
+ COPY *.joblib .
11
+ COPY *.json .
12
+ COPY simple_app.py .
13
 
14
  # Expose port
15
  EXPOSE 7860
16
 
17
+ # Run the simple application
18
+ CMD ["uvicorn", "simple_app:app", "--host", "0.0.0.0", "--port", "7860"]
requirements.txt CHANGED
@@ -1,7 +1,7 @@
1
- fastapi==0.104.1
2
- uvicorn[standard]==0.24.0
3
- joblib==1.3.2
4
- numpy==2.2.3
5
- pandas==2.0.3
6
- scikit-learn==1.7.2
7
- pydantic==2.4.2
 
1
+ fastapi
2
+ uvicorn[standard]
3
+ joblib
4
+ numpy
5
+ pandas
6
+ scikit-learn
7
+ pydantic
simple_app.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ import joblib
4
+ import numpy as np
5
+ import pandas as pd
6
+
7
+ app = FastAPI(title="EPL Predictions")
8
+
9
+ # Load model
10
+ try:
11
+ model = joblib.load('simple_rf_model.joblib')
12
+ scaler = joblib.load('simple_scaler.joblib')
13
+ print("Models loaded successfully")
14
+ except:
15
+ model = None
16
+ scaler = None
17
+ print("Failed to load models")
18
+
19
+ class MatchRequest(BaseModel):
20
+ home_team: str
21
+ away_team: str
22
+ home_xg: float = 1.5
23
+ away_xg: float = 1.3
24
+
25
+ class PredictionResponse(BaseModel):
26
+ home_team: str
27
+ away_team: str
28
+ home_win: float
29
+ draw: float
30
+ away_win: float
31
+ prediction: str
32
+ confidence: float
33
+
34
+ @app.get("/")
35
+ def root():
36
+ return {"status": "EPL Prediction API", "model_loaded": model is not None}
37
+
38
+ @app.get("/health")
39
+ def health():
40
+ return {"status": "healthy", "models_loaded": model is not None}
41
+
42
+ @app.post("/predict")
43
+ def predict(match: MatchRequest):
44
+ if model is None or scaler is None:
45
+ return {"error": "Models not loaded"}
46
+
47
+ # Prepare features
48
+ features = pd.DataFrame([{
49
+ 'home_xg': match.home_xg * 0.82, # Apply calibration
50
+ 'away_xg': match.away_xg * 0.82
51
+ }])
52
+
53
+ # Scale and predict
54
+ X_scaled = scaler.transform(features)
55
+ probs = model.predict_proba(X_scaled)[0]
56
+
57
+ # Map probabilities (0=away, 1=draw, 2=home)
58
+ away_prob = probs[0]
59
+ draw_prob = probs[1] if len(probs) > 2 else 0.25
60
+ home_prob = probs[2] if len(probs) > 2 else probs[1]
61
+
62
+ # Get prediction
63
+ if home_prob > draw_prob and home_prob > away_prob:
64
+ prediction = "Home"
65
+ confidence = home_prob
66
+ elif away_prob > draw_prob:
67
+ prediction = "Away"
68
+ confidence = away_prob
69
+ else:
70
+ prediction = "Draw"
71
+ confidence = draw_prob
72
+
73
+ return PredictionResponse(
74
+ home_team=match.home_team,
75
+ away_team=match.away_team,
76
+ home_win=float(home_prob),
77
+ draw=float(draw_prob),
78
+ away_win=float(away_prob),
79
+ prediction=prediction,
80
+ confidence=float(confidence)
81
+ )
82
+
83
+ if __name__ == "__main__":
84
+ import uvicorn
85
+ uvicorn.run(app, host="0.0.0.0", port=7860)
simple_metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "features": [
3
+ "home_xg",
4
+ "away_xg"
5
+ ],
6
+ "training_samples": 1560,
7
+ "model_type": "RandomForestClassifier"
8
+ }
simple_rf_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dab4165f1667e4e0a75f818ffeebac6a16cf8f42d930a9074ff5f6c6078bd3c3
3
+ size 26257
simple_scaler.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3a4b9c7e698c810506da4385e6e36029c69cb1725f9048275b83dfc5927e2780
3
+ size 935