Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
73 строки
1.8 KiB
Python
73 строки
1.8 KiB
Python
from os import getenv
|
|
from pathlib import Path
|
|
|
|
from fastapi import FastAPI
|
|
from prometheus_fastapi_instrumentator import Instrumentator
|
|
from pydantic import BaseModel, Field
|
|
|
|
from ._meta import PACKAGE_PATH
|
|
from .predictor import (
|
|
FuelType, SellingType, TransmissionType, PricePredictionFeatures, PricePredictor,
|
|
)
|
|
|
|
|
|
MODELS_PATH = getenv('MODELS_PATH', None)
|
|
if MODELS_PATH is not None:
|
|
MODELS_PATH = Path(MODELS_PATH)
|
|
else:
|
|
SERVICES_PATH = PACKAGE_PATH.parents[1]
|
|
assert SERVICES_PATH.name == 'services'
|
|
MODELS_PATH = SERVICES_PATH / 'models'
|
|
|
|
MODEL_PATH = MODELS_PATH / 'model.pkl'
|
|
|
|
|
|
predictor = PricePredictor(MODEL_PATH)
|
|
|
|
|
|
API_BASE_PATH = '/api'
|
|
|
|
|
|
app = FastAPI(
|
|
title='Сервис ML',
|
|
version='0.1.0',
|
|
root_path=API_BASE_PATH,
|
|
#redoc_url=None,
|
|
)
|
|
|
|
|
|
_ = (
|
|
Instrumentator(excluded_handlers=['/metrics'])
|
|
.instrument(app)
|
|
.expose(app, endpoint='/metrics')
|
|
)
|
|
|
|
|
|
@app.get('/', summary='Тестовый эндпоинт')
|
|
async def root():
|
|
return {'Hello': 'World'}
|
|
|
|
|
|
class PricePredictionRequest(BaseModel):
|
|
|
|
selling_price: float = Field(..., gt=0)
|
|
driven_kms: float = Field(..., ge=0)
|
|
age: float = Field(..., ge=0)
|
|
fuel_type: FuelType
|
|
selling_type: SellingType
|
|
transmission_type: TransmissionType
|
|
|
|
|
|
@app.post('/predict', summary='Предсказать цену подержанного автомобиля')
|
|
def predict_price(item_id: int, req: PricePredictionRequest):
|
|
features = PricePredictionFeatures(
|
|
selling_price=req.selling_price,
|
|
driven_kms=req.driven_kms,
|
|
age=req.age,
|
|
fuel_type=req.fuel_type,
|
|
selling_type=req.selling_type,
|
|
transmission_type=req.transmission_type,
|
|
)
|
|
pred = predictor.predict(features)
|
|
return {'item_id': item_id, 'price': pred}
|