Skip to content

Commit

Permalink
feat: implement init api sample
Browse files Browse the repository at this point in the history
  • Loading branch information
kpostekk committed Dec 11, 2024
1 parent f4dcf23 commit ac9051f
Show file tree
Hide file tree
Showing 8 changed files with 685 additions and 637 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -164,3 +164,4 @@ cython_debug/
# Project
healthcare-dataset-stroke-data.csv
catboost_info/
cvepred_model.pkl
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,14 @@ RUN poetry install --only main

COPY cvepred /app/cvepred

FROM base AS train

RUN poetry run python3 -m cvepred.model

FROM base AS api

RUN poetry install --only main,api

COPY --from=train /app/cvepred/cvepred_model.pkl /app/cvepred/cvepred_model.pkl

CMD ["poetry", "run", "fastapi", "run", "cvepred/api.py"]
33 changes: 31 additions & 2 deletions cvepred/api.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,37 @@
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from cvepred.dataset import create_dataset, split_datasets, RANDOM_STATE
from cvepred.api_models import CveModels
from pycaret.classification import setup

app = FastAPI()

samples = create_dataset()
(df_train, df_test) = split_datasets(samples)

s = setup(
data=df_train,
test_data=df_test,
target="hasExploit",
session_id=RANDOM_STATE,
preprocess=False,
)
model = s.load_model("cvepred_model")


@app.get("/")
def read_root():
return {"Hello": "World"}
def redirect_to_docs():
return RedirectResponse(url="/docs")


@app.get("/sample")
def sample() -> CveModels:
data = samples.sample(n=20).drop(columns=["hasExploit"]).to_dict("records")

return CveModels.model_validate({"data": data})


@app.post("/predict")
def predict(inputs: CveModels):
# s.predict_model(model, )
raise Exception("Not implemented yet")
28 changes: 28 additions & 0 deletions cvepred/api_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from pydantic import BaseModel
import typing as ty

# attackVector category
# attackComplexity category
# privilegesRequired category
# userInteraction category
# scope category
# confidentialityImpact category
# integrityImpact category
# availabilityImpact category
# hasExploit bool


class CveModel(BaseModel):
attackVector: str
attackComplexity: str
privilegesRequired: str
userInteraction: str
scope: str
confidentialityImpact: str
integrityImpact: str
availabilityImpact: str
# hasExploit: bool


class CveModels(BaseModel):
data: ty.List[CveModel]
3 changes: 3 additions & 0 deletions cvepred/dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,3 +113,6 @@ def create_train_datasets():
print("Datasets created")

return df_balanced_train, xdf_balanced_test

if __name__ == '__main__':
print(create_dataset().dtypes)
1 change: 1 addition & 0 deletions cvepred/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
cvepred_model = s.create_model("rf", verbose=False)

if __name__ == "__main__":
s.save_model(cvepred_model, "cvepred_model")
print(s.pull())
1,249 changes: 615 additions & 634 deletions poetry.lock

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ kagglehub = "^0.3.3"
pycaret = "^3.3.2"
kaleido = "0.2.1"
matplotlib = "<3.8.0"
catboost = "^1.2.7"
imbalanced-learn = "^0.12.4"
httpx = "^0.27.2"

Expand Down

0 comments on commit ac9051f

Please sign in to comment.