Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions api/server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from fastapi import FastAPI
from pydantic import BaseModel
from models.decision_tree import DecisionTreeModel
from utils.data_helpers import generate_sample_regression_data
import pandas as pd
import uvicorn

app = FastAPI(title="ML Simulator API", version="1.0")

# ----- Request Schema -----
class ModelRequest(BaseModel):
model: str
task_type: str = "classification" # or regression
features: list

# ----- Endpoints -----
@app.get("/")
def home():
return {"message": "Welcome to the ML Simulator API 🎯"}

@app.post("/predict")
def predict(req: ModelRequest):
"""
Example Input:
{
"model": "decision_tree",
"task_type": "classification",
"features": [[5.1, 3.5, 1.4, 0.2]]
}
"""
model_name = req.model.lower()
task_type = req.task_type.lower()

# Load or initialize model
if model_name == "decision_tree":
model = DecisionTreeModel(task_type=task_type)
# Generate training data just for demo
if task_type == "classification":
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=len(req.features[0]), random_state=42)
else:
df = generate_sample_regression_data(n_samples=100, n_features=len(req.features[0]))
X, y = df.iloc[:, :-1], df.iloc[:, -1]

# Train model
model.train(X, y)

# Predict
prediction = model.predict(pd.DataFrame(req.features))
return {
"model_used": f"Decision Tree ({task_type})",
"prediction": prediction.tolist()
}
else:
return {"error": "Model not implemented yet."}


if __name__ == "__main__":
uvicorn.run("api.server:app", host="0.0.0.0", port=8000, reload=True)
38 changes: 38 additions & 0 deletions api/server_flask.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from flask import Flask, request, jsonify
from models.decision_tree import DecisionTreeModel
from utils.data_helpers import generate_sample_regression_data
import pandas as pd
from sklearn.datasets import make_classification

app = Flask(__name__)

@app.route('/')
def home():
return jsonify({"message": "Welcome to ML Simulator Flask API"})

@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json()
model_name = data.get('model', 'decision_tree')
task_type = data.get('task_type', 'classification')
features = data.get('features', [])

if model_name == "decision_tree":
model = DecisionTreeModel(task_type=task_type)
if task_type == "classification":
X, y = make_classification(n_samples=100, n_features=len(features[0]), random_state=42)
else:
df = generate_sample_regression_data(n_samples=100, n_features=len(features[0]))
X, y = df.iloc[:, :-1], df.iloc[:, -1]

model.train(X, y)
prediction = model.predict(pd.DataFrame(features))
return jsonify({
"model_used": f"Decision Tree ({task_type})",
"prediction": prediction.tolist()
})
else:
return jsonify({"error": "Model not implemented"}), 400

if __name__ == '__main__':
app.run(debug=True)