Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
f974ced
Add new model: TopItemsByCoverage
Varfalamei Nov 23, 2022
2e83d04
Update models_zoo.py
Mostovik71 Nov 24, 2022
6784219
Update views.py
Mostovik71 Nov 24, 2022
ed97687
Add new KNN models
Varfalamei Nov 24, 2022
8f6b1be
Add KNN's blending (cos sim, bm25, tfidf)
Varfalamei Nov 26, 2022
e63f49b
add notebook with fitting knn (bm25), refactor views and models_zoo, …
Varfalamei Nov 26, 2022
f5eee08
refactor views and models_zoo by mypy's comments
Varfalamei Nov 26, 2022
152415d
update test
Varfalamei Nov 26, 2022
e615e7f
del this test cause before makefile have to download data
Varfalamei Nov 26, 2022
cf386c1
Add files via upload
Mostovik71 Nov 27, 2022
fb6ac9d
Initialize DVC
Varfalamei Nov 29, 2022
5edcc2b
Delete DVC
Varfalamei Nov 29, 2022
ea91ee2
Add files via upload
Mostovik71 Nov 30, 2022
f449147
Delete KNN_RecSysv2.ipynb
Mostovik71 Dec 1, 2022
c8e51bc
add dvc and add online knn model
Varfalamei Dec 4, 2022
04ffddd
pass all tests
Varfalamei Dec 4, 2022
24d5c92
del data from gitignore
Varfalamei Dec 5, 2022
fdf4d9f
delete dvc and init dvc lfs
Varfalamei Dec 5, 2022
c926d62
update github actions
Varfalamei Dec 5, 2022
62f711b
remove data from gitignore
Varfalamei Dec 5, 2022
422d64e
add first file from git lfs
Varfalamei Dec 5, 2022
c923da7
fix for tests
Varfalamei Dec 7, 2022
c7942d8
rm data from git
Varfalamei Dec 7, 2022
2de8371
update
Varfalamei Dec 9, 2022
59c407f
Delete popular.ipynb
Mostovik71 Dec 10, 2022
caeb5f4
Add files via upload
Mostovik71 Dec 10, 2022
97863b1
Delete popular.ipynb
Mostovik71 Dec 10, 2022
fb7cfbf
Fixed imports, removed features
Mostovik71 Dec 10, 2022
bc482af
Delete knn.ipynb
Mostovik71 Dec 10, 2022
fb74cd7
Some fixes
Mostovik71 Dec 10, 2022
214e184
Delete popular.ipynb
Mostovik71 Dec 10, 2022
48fcc02
Some fixes
Mostovik71 Dec 10, 2022
be2d6db
del test set
Varfalamei Dec 10, 2022
593d59f
rename unique func to unique_reco
Varfalamei Dec 10, 2022
4025f1a
Delete knn.ipynb
Mostovik71 Dec 10, 2022
898ff49
some fixes again
Mostovik71 Dec 10, 2022
6f93f63
update knn
Varfalamei Dec 10, 2022
8797725
Delete knn.ipynb
Mostovik71 Dec 11, 2022
7c9f2fc
Add files via upload
Mostovik71 Dec 11, 2022
4a8ce5c
Delete knnfinal.ipynb
Mostovik71 Dec 11, 2022
b312530
last fixes
Mostovik71 Dec 11, 2022
1a733c1
Delete knnfinal.ipynb
Mostovik71 Dec 11, 2022
d647acf
last fixes
Mostovik71 Dec 11, 2022
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
3 changes: 3 additions & 0 deletions .dvcignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Add patterns of files dvc should ignore, which could improve
# the performance. Learn more at
# https://dvc.org/doc/user-guide/dvcignore
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*.csv filter=lfs diff=lfs merge=lfs -text
*.pickle filter=lfs diff=lfs merge=lfs -text
*.csv.gz filter=lfs diff=lfs merge=lfs -text
data/ filter=lfs diff=lfs merge=lfs -text
data/kion_train filter=lfs diff=lfs merge=lfs -text
2 changes: 2 additions & 0 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: "3.8"
- name: Checkout LFS objects
run: git lfs checkout
- run: pip install poetry
- run: make setup
- run: make lint
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
.vscode/
.idea/

.zip

# Mac/OSX
.DS_Store

Expand Down Expand Up @@ -65,5 +67,3 @@ venv.bak/

# mypy
.mypy_cache/


156 changes: 15 additions & 141 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,153 +1,27 @@
# Шаблон сервиса рекомендаций
# Сервис рекомендаций фильмов на основе данных с сайта Kion

## Подготовка

## Установка окружения
```bash
python3 -m pip install poetry
poetry install
```

## Установить CloudFlare
```bash
brew install cloudflared
cloudflared tunnel --url http://localhost:8000/
```

### Python

В данном шаблоне используется Python3.8, однако вы можете использовать более свежие версии, если хотите.
Но мы не гарантируем, что все будет работать.

### Make

[Make](https://www.gnu.org/software/make/) - это очень популярная утилита,
предназначенная для преобразования одних файлов в другие через определенную последовательность команд.
Однако ее можно использовать для исполнения произвольных последовательностей команд.
Команды и правила их исполнения прописываются в `Makefile`.

Мы будем активно использовать `make` в данном проекте, поэтому рекомендуем познакомится с ней поближе.

На MacOS и *nix системах `make` обычно идет в комплекте или ее можно легко установить.
Некоторые варианты, как можно поставить `make` на `Windows`,
описаны [здесь](https://stackoverflow.com/questions/32127524/how-to-install-and-use-make-in-windows).

### Poetry

[Poetry](https://python-poetry.org/) - это удобный инструмент для работы с зависимостями в Python.
Мы будем использовать его для подготовки окружения.

Поэтому перед началом работы необходимо выполнить [шаги по установке](https://python-poetry.org/docs/#installation).


## Виртуальное окружение

Мы будем работать в виртуальном окружении, которое создадим специально для данного проекта.
Если вы не знакомы с концепцией виртуальных окружений в Python, обязательно
[познакомьтесь](https://docs.python.org/3.8/tutorial/venv.html).
Мы рекомендуем использовать отдельное виртуальное окружение для каждого вашего проекта.

### Инициализация окружения

Выполните команду
```
make setup
```

Будет создано новое виртуальное окружение в папке `.venv`.
В него будут установлены пакеты, перечисленные в файле `pyproject.toml`.

Обратите внимание: если вы один раз выполнили `make setup`, при попытке повторного ее выполнения ничего не произойдет,
поскольку единственная ее зависимость - директория `.venv` - уже существует.
Если вам по какой-то причине нужно пересобрать окружение с нуля,
выполните сначала команду `make clean` - она удалит старое окружение.

### Установка/удаление пакетов

Для установки новых пакетов используйте команду `poetry add`, для удаления - `poetry remove`.
Мы не рекомендуем вручную редактировать секцию с зависимостями в `pyproject.toml`.

## Линтеры, тесты и автоформатирование

### Автоформатирование

Командой `make format` можно запустить автоматическое форматирование вашего кода.

Сейчас ее выполнение приведет лишь к запуску [isort](https://github.com/PyCQA/isort) - утилиты
для сортировки импортов в нужном порядке.
При желании вы также можете добавить другие инструменты, например [black](https://github.com/psf/black) или
[yapf](https://github.com/google/yapf), которые могут действительно отформатировать код.


### Статическая проверка кода

Командой `make lint` вы запустите проверку линтерами - инструментами для статического анализа кода.
Они помогают выявить ошибки в коде еще до его запуска, а также обнаруживают несоответствия стандарту
[PEP8](https://peps.python.org/pep-0008).

### Тесты

Командой `make test` вы запустите тесты при помощи утилиты [pytest](https://pytest.org/).


## Запуск приложения

### Способ 1: Python + Uvicorn

```
python main.py
```

Приложение запустится локально, в одном процессе.
Хост и порт по умолчанию: `127.0.0.1` и `8080`.
Их можно изменить через переменные окружения `HOST` и `PORT`.

Управляет процессом легковесный [ASGI](https://asgi.readthedocs.io/en/latest/) server [uvicorn](https://www.uvicorn.org/).

Обратите внимание: для запуска нужно использовать `python` из окружения проекта.

### Способ 2: Uvicorn

```
uvicorn main:app
```

Очень похож на предыдущий, только запуск идет напрямую.
Хост и порт можно передать через аргументы командной строки.

Обратите внимание: для запуска нужно использовать `uvicorn` из окружения проекта.


### Способ 3: Gunicorn

```
gunicorn main:app -c gunicorn.config.py
```

Способ похож на предыдущий, только вместо `uvicorn` используется
более функциональный сервер [gunicorn](https://gunicorn.org/) (`uvicorn` используется внутри него).
Параметры задаются через конфиг, хост и порт можно задать
через переменные окружения или аргументы командной строки.

Сервис запускается в несколько параллельных процессов, по умолчанию их число
равно числу ядер процессора.

Обратите внимание: для запуска нужно использовать `gunicorn` из окружения проекта.

### Способ 4: Docker

Делаем все то же самое, но внутри docker-контейнера.
Если вы не знакомы с [docker](https://www.docker.com/), обязательно познакомьтесь.

Внутри контейнера можно использовать любой из способов, описанных выше.
В продакшене рекомендуется использовать `gunicorn`.

Собрать и запустить образ можно командой

```
make run
## Установка данных с рекомендациями
```bash
pip install -U --no-cache-dir gdown --pre
gdown --id 1ZK_iUE1U9WhD4t2e4jXZdQ9dAbSYcahV
```

## CI/CD

Когда вы делаете пуш в гит (в любую ветку), выполняется процесс CI.
Что именно выполняется в этом процессе и как он триггерится (в данном случае по пушу),
описывается в специальных `.yaml` конфигах в папке `.github/workflows`.

Сейчас там есть только один конфиг, который запускает процесс, в котором создается виртуальное окружение,
прогоняются линтеры и тесты. Если что-то пошло не так, процесс падает с ошибкой и в Github появляется красный крестик.
Вам нужно посмотреть логи, исправить ошибку и запушить изменения.
## Contributors
1. Renat Shakirov
2. Vladislav Mostovik
3. Robert Zaraev
1 change: 1 addition & 0 deletions mypy.ini
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
[mypy]
allow_untyped_calls = true
ignore_missing_imports = True
Loading