commit f2fe78cce40250e621c248cd7855a3689be3d68e Author: bbh Date: Wed Aug 13 00:03:21 2025 +0800 'build' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78e0cf7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +app.egg-info +*.pyc +.mypy_cache +.coverage +htmlcov +.cache +.venv \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6f00803 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +services: + bentoml-serve: + build: ./ + container_name: bentoml_serve + ports: + - "3000:3000" + networks: + - traefik-public + - default + +networks: + traefik-public: + # Allow setting it to false for testing + external: false \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..8600fae --- /dev/null +++ b/dockerfile @@ -0,0 +1,9 @@ +FROM python:3.10 + +WORKDIR /app/ + +COPY ./src /app/ + +RUN pip install --no-cache-dir scikit-learn bentoml -i https://mirrors.aliyun.com/pypi/simple/ + +CMD ["bentoml", "serve"] diff --git a/src/models/logistic_model_0810.pkl b/src/models/logistic_model_0810.pkl new file mode 100644 index 0000000..89495c7 Binary files /dev/null and b/src/models/logistic_model_0810.pkl differ diff --git a/src/models/vectorizer_0810.pkl b/src/models/vectorizer_0810.pkl new file mode 100644 index 0000000..57da181 Binary files /dev/null and b/src/models/vectorizer_0810.pkl differ diff --git a/src/service.py b/src/service.py new file mode 100644 index 0000000..4f48fa3 --- /dev/null +++ b/src/service.py @@ -0,0 +1,33 @@ +import bentoml +import joblib + +my_image = bentoml.images.Image(python_version="3.10") \ + .python_packages("scikit-learn", "numpy") + +@bentoml.service( + image=my_image +) + +class NewsClassifierService: + model_logistic_path = "./models/logistic_model_0810.pkl" + model_vectorizer_path = "./models/vectorizer_0810.pkl" + + def __init__(self) -> None: + self.model_logistic = joblib.load(self.model_logistic_path) + self.model_vectorizer = joblib.load(self.model_vectorizer_path) + + @bentoml.api + def classify(self,text: str) -> dict: + categories = ['Competition News','financial news','Medical news','sports news'] + token_text =self.model_vectorizer.transform([text]) + prediction = self.model_logistic.predict(token_text) + print(f"Prediction: {prediction}") + predict = categories[prediction[0]] + + json_response = { + "text": text, + "predict": predict + } + + return json_response + \ No newline at end of file