File size: 4,606 Bytes
07423df |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
PYTHON_VERSION ?= 3.10
PYTHON ?= python$(PYTHON_VERSION)
PIP ?= $(PYTHON) -m pip
PIPENV ?= $(PYTHON) -m pipenv
PIPENV_PYTHON = $(PIPENV) run python
PIPENV_PIP = $(PIPENV_PYTHON) -m pip
PWD = $(shell pwd)
DOCKER_IMAGE ?= gcr.io/vorvan/h2oai/h2o-llmstudio:nightly
ifeq ($(origin H2O_LLM_STUDIO_WORKDIR), environment)
WORKDIR := $(H2O_LLM_STUDIO_WORKDIR)
else
WORKDIR := $(shell pwd)
endif
ifeq ($(LOG_LEVEL), $(filter $(LOG_LEVEL), debug trace))
PW_DEBUG = DEBUG=pw:api
else
PW_DEBUG =
endif
PHONY: pipenv
pipenv:
$(PIP) install pip==24.0
$(PIP) install pipenv==2023.12.1
.PHONY: setup
setup: pipenv
$(PIPENV) install --verbose --python $(PYTHON_VERSION)
-$(PIPENV_PIP) install flash-attn==2.5.5 --no-build-isolation --upgrade --no-cache-dir
.PHONY: setup-dev
setup-dev: pipenv
$(PIPENV) install --verbose --dev --python $(PYTHON_VERSION)
- $(PIPENV_PIP) install flash-attn==2.5.5 --no-build-isolation --upgrade --no-cache-dir
$(PIPENV) run playwright install
.PHONY: setup-no-flash
setup-no-flash: pipenv
$(PIPENV) install --verbose --python $(PYTHON_VERSION)
setup-ui: pipenv
$(PIPENV) install --verbose --categories=dev-packages --python $(PYTHON_VERSION)
$(PIPENV) run playwright install
.PHONY: export-requirements
export-requirements: pipenv
$(PIPENV) requirements > requirements.txt
clean-env:
$(PIPENV) --rm
clean-data:
rm -rf data
clean-output:
rm -rf output
reports:
mkdir -p reports
.PHONY: style
style: reports pipenv
@echo -n > reports/flake8_errors.log
@echo -n > reports/mypy_errors.log
@echo -n > reports/mypy.log
@echo
-$(PIPENV) run flake8 | tee -a reports/flake8_errors.log
@if [ -s reports/flake8_errors.log ]; then exit 1; fi
-$(PIPENV) run mypy . --check-untyped-defs | tee -a reports/mypy.log
@if ! grep -Eq "Success: no issues found in [0-9]+ source files" reports/mypy.log ; then exit 1; fi
.PHONY: format
format: pipenv
$(PIPENV) run isort .
$(PIPENV) run black .
.PHONY: isort
isort: pipenv
$(PIPENV) run isort .
.PHONY: black
black: pipenv
$(PIPENV) run black .
.PHONY: test
test: reports
@bash -c 'set -o pipefail; export PYTHONPATH=$(PWD); \
$(PIPENV) run pytest -v --junitxml=reports/junit.xml \
--import-mode importlib \
--html=./reports/pytest.html \
--cov=llm_studio \
--cov-report term \
--cov-report html:./reports/coverage.html \
-o log_cli=true -o log_level=INFO -o log_file=reports/tests.log \
tests/* 2>&1 | tee reports/tests.log'
.PHONY: test-ui
test-ui: reports setup-ui
$(PW_DEBUG) $(PIPENV) run pytest \
-v \
--junitxml=reports/junit_ui.xml \
--html=./reports/pytest_ui.html \
-o log_cli=true \
-o log_level=$(LOG_LEVEL) \
-o log_file=reports/tests_ui.log \
tests/ui/test.py 2>&1 | tee reports/tests_ui.log
.PHONY: test-ui-headed
test-ui-headed: setup-ui
$(PW_DEBUG) $(PIPENV) run pytest \
-vvs \
--headed \
--video=on \
--screenshot=on \
--slowmo=100 \
tests/ui/test.py 2>&1 | tee reports/tests.log
.PHONY: wave
wave:
HF_HUB_ENABLE_HF_TRANSFER=True \
H2O_WAVE_APP_ADDRESS=http://127.0.0.1:8756 \
H2O_WAVE_MAX_REQUEST_SIZE=25MB \
H2O_WAVE_NO_LOG=true \
H2O_WAVE_PRIVATE_DIR="/download/@$(WORKDIR)/output/download" \
$(PIPENV) run wave run app
.PHONY: llmstudio
llmstudio:
H2O_WAVE_APP_ADDRESS=http://127.0.0.1:8756 \
H2O_WAVE_MAX_REQUEST_SIZE=25MB \
H2O_WAVE_NO_LOG=true \
H2O_WAVE_PRIVATE_DIR="/download/@$(WORKDIR)/output/download" \
$(PIPENV) run wave run --no-reload app
.PHONY: docker-build-nightly
docker-build-nightly:
docker build -t $(DOCKER_IMAGE) .
.PHONY: docker-run-nightly
docker-run-nightly:
ifeq (,$(wildcard ./data))
mkdir data
endif
ifeq (,$(wildcard ./output))
mkdir output
endif
docker run \
--runtime=nvidia \
--shm-size=64g \
--init \
--rm \
-u `id -u`:`id -g` \
-p 10101:10101 \
-v `pwd`/data:/workspace/data \
-v `pwd`/output:/workspace/output \
$(DOCKER_IMAGE)
.PHONY: docker-clean-all
docker-clean-all:
@CONTAINERS=$$(docker ps -a -q --filter ancestor=$(DOCKER_IMAGE)); \
if [ -n "$$CONTAINERS" ]; then \
docker stop $$CONTAINERS; \
docker rm $$CONTAINERS; \
fi
docker rmi $(DOCKER_IMAGE)
.PHONY: shell
shell:
$(PIPENV) shell
setup-doc: # Install documentation dependencies
cd documentation && npm install
run-doc: # Run the doc locally
cd documentation && npm start
update-documentation-infrastructure:
cd documentation && npm update @h2oai/makersaurus
cd documentation && npm ls
build-doc-locally: # Bundles your website into static files for production
cd documentation && npm run build
serve-doc-locally: # Serves the built website locally
cd documentation && npm run serve
|