import logging import pandas as pd from fastapi import FastAPI PATH_TO_SIMILAR_ITEMS = '../../recommendations/similar_items.parquet' logger = logging.getLogger("uvicorn.error") class SimilarItems: def __init__(self, path, **kwargs): """ Загружаем данные из файла """ logger.info(f"Loading data") self._similar_items = pd.read_parquet(path) self._similar_items = self._similar_items[kwargs['columns']] self._similar_items = self._similar_items.set_index('item_id') logger.info(f"Loaded") def get(self, item_id: int, k: int = 10): """ Возвращает список k похожих объектов """ try: i2i = self._similar_items.loc[item_id].head(k) i2i = {"item_id_2": i2i["sim_item_id"].tolist(), "score": i2i['score'].tolist()} except KeyError: logger.error("No recommendations found") i2i = {"item_id_2": [], "score": []} except: logger.error("problem with similar recomendations") return i2i sim_items_store = SimilarItems( PATH_TO_SIMILAR_ITEMS, columns=["item_id", "sim_item_id", "score"]) logger.info("Ready!") # создаём приложение FastAPI app = FastAPI(title="features") @app.get("/similar_items") async def recommendations(item_id: int, k: int = 10): """ Возвращает список похожих объектов длиной k для item_id """ i2i = sim_items_store.get(item_id, k) return i2i