diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index edd9b2b89..28a8a0a89 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,40 +1,38 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/universal -{ - "name": "LangChain Dev Container", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/universal:2-linux", - "features": { - "ghcr.io/devcontainers/features/aws-cli:1": {}, - "ghcr.io/devcontainers/features/docker-in-docker": {}, - "ghcr.io/devcontainers-contrib/features/poetry": {} - }, - "customizations": { - "vscode": {"extensions": [ - "actboy168.tasks", - "GitHub.copilot", - "ms-python.python", - "sourcery.sourcery", - "eamodio.gitlens" - ]} - }, - - "containerEnv": { - "POETRY_VIRTUALENVS_IN_PROJECT": "true" - }, - - // Features to add to the dev container. More info: https://containers.dev/features. - // "features": {}, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "poetry install" - - // Configure tool-specific properties. - // "customizations": {}, - - // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "root" -} +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/universal +{ + "name": "LangChain Dev Container", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/python:1-3.10-bullseye", + + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/devcontainers/features/node": {}, + "ghcr.io/devcontainers-contrib/features/poetry": {} + }, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "make setup_devcontainer", + + "containerEnv": { + "POETRY_VIRTUALENVS_IN_PROJECT": "true" + }, + + // Configure tool-specific properties. + "customizations": { + "vscode": {"extensions": [ + "actboy168.tasks", + "GitHub.copilot", + "ms-python.python", + "sourcery.sourcery", + "eamodio.gitlens", + "ms-vscode.makefile-tools" + ]} + } + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/Makefile b/Makefile index f96931a4d..4b9b3c754 100644 --- a/Makefile +++ b/Makefile @@ -1,116 +1,121 @@ -.PHONY: all init format lint build build_frontend install_frontend run_frontend run_backend dev help tests coverage - -all: help - -init: - @echo 'Installing pre-commit hooks' - git config core.hooksPath .githooks - @echo 'Making pre-commit hook executable' - chmod +x .githooks/pre-commit - @echo 'Installing backend dependencies' - make install_backend - @echo 'Installing frontend dependencies' - make install_frontend - -coverage: - poetry run pytest --cov \ - --cov-config=.coveragerc \ - --cov-report xml \ - --cov-report term-missing:skip-covered - -tests: - poetry run pytest tests - -format: - poetry run black . - poetry run ruff . --fix - cd src/frontend && npm run format - -lint: - poetry run mypy . - poetry run black . --check - poetry run ruff . --fix - -install_frontend: - cd src/frontend && npm install; - -install_frontendc: - cd src/frontend && npm ci; - -run_frontend: - cd src/frontend && npm start - -frontend: - make install_frontend - make run_frontend - -frontendc: - make install_frontendc - make run_frontend - -install_backend: - poetry install - -backend: - make install_backend - poetry run uvicorn --factory src.backend.langflow.main:create_app --port 7860 --reload --log-level debug - -build_and_run: - echo 'Removing dist folder' - rm -rf dist - make build && poetry run pip install dist/*.tar.gz && poetry run langflow - -build_and_install: - echo 'Removing dist folder' - rm -rf dist - make build && poetry run pip install dist/*.tar.gz - -build_frontend: - cd src/frontend && CI='' npm run build - cp -r src/frontend/build src/backend/langflow/frontend - -build: - make install_frontend - make build_frontend - poetry build --format sdist - rm -rf src/backend/langflow/frontend - -lcserve_push: - make build_frontend - @version=$$(poetry version --short); \ - lc-serve push --app langflow.lcserve:app --app-dir . \ - --image-name langflow --image-tag $${version} --verbose --public - -lcserve_deploy: - @:$(if $(uses),,$(error `uses` is not set. Please run `make uses=... lcserve_deploy`)) - lc-serve deploy jcloud --app langflow.lcserve:app --app-dir . \ - --uses $(uses) --config src/backend/langflow/jcloud.yml --verbose - -dev: - make install_frontend -ifeq ($(build),1) - @echo 'Running docker compose up with build' - docker compose $(if $(debug),-f docker-compose.debug.yml) up --build -else - @echo 'Running docker compose up without build' - docker compose $(if $(debug),-f docker-compose.debug.yml) up -endif - -publish: - make build - poetry publish - -help: - @echo '----' - @echo 'format - run code formatters' - @echo 'lint - run linters' - @echo 'install_frontend - install the frontend dependencies' - @echo 'build_frontend - build the frontend static files' - @echo 'run_frontend - run the frontend in development mode' - @echo 'run_backend - run the backend in development mode' - @echo 'build - build the frontend static files and package the project' - @echo 'publish - build the frontend static files and package the project and publish it to PyPI' - @echo 'dev - run the project in development mode with docker compose' - @echo 'tests - run the tests' - @echo 'coverage - run the tests and generate a coverage report' - @echo '----' +.PHONY: all init format lint build build_frontend install_frontend run_frontend run_backend dev help tests coverage + +all: help + +init: + @echo 'Installing pre-commit hooks' + git config core.hooksPath .githooks + @echo 'Making pre-commit hook executable' + chmod +x .githooks/pre-commit + @echo 'Installing backend dependencies' + make install_backend + @echo 'Installing frontend dependencies' + make install_frontend + +coverage: + poetry run pytest --cov \ + --cov-config=.coveragerc \ + --cov-report xml \ + --cov-report term-missing:skip-covered + +tests: + poetry run pytest tests + +format: + poetry run black . + poetry run ruff . --fix + cd src/frontend && npm run format + +lint: + poetry run mypy . + poetry run black . --check + poetry run ruff . --fix + +install_frontend: + cd src/frontend && npm install; + +install_frontendc: + cd src/frontend && npm ci; + +run_frontend: + cd src/frontend && npm start + +setup_devcontainer: + make init + make build_frontend + poetry run langflow --path src/frontend/build + +frontend: + make install_frontend + make run_frontend + +frontendc: + make install_frontendc + make run_frontend + +install_backend: + poetry install + +backend: + make install_backend + poetry run uvicorn --factory src.backend.langflow.main:create_app --port 7860 --reload --log-level debug + +build_and_run: + echo 'Removing dist folder' + rm -rf dist + make build && poetry run pip install dist/*.tar.gz && poetry run langflow + +build_and_install: + echo 'Removing dist folder' + rm -rf dist + make build && poetry run pip install dist/*.tar.gz + +build_frontend: + cd src/frontend && CI='' npm run build + cp -r src/frontend/build src/backend/langflow/frontend + +build: + make install_frontend + make build_frontend + poetry build --format sdist + rm -rf src/backend/langflow/frontend + +lcserve_push: + make build_frontend + @version=$$(poetry version --short); \ + lc-serve push --app langflow.lcserve:app --app-dir . \ + --image-name langflow --image-tag $${version} --verbose --public + +lcserve_deploy: + @:$(if $(uses),,$(error `uses` is not set. Please run `make uses=... lcserve_deploy`)) + lc-serve deploy jcloud --app langflow.lcserve:app --app-dir . \ + --uses $(uses) --config src/backend/langflow/jcloud.yml --verbose + +dev: + make install_frontend +ifeq ($(build),1) + @echo 'Running docker compose up with build' + docker compose $(if $(debug),-f docker-compose.debug.yml) up --build +else + @echo 'Running docker compose up without build' + docker compose $(if $(debug),-f docker-compose.debug.yml) up +endif + +publish: + make build + poetry publish + +help: + @echo '----' + @echo 'format - run code formatters' + @echo 'lint - run linters' + @echo 'install_frontend - install the frontend dependencies' + @echo 'build_frontend - build the frontend static files' + @echo 'run_frontend - run the frontend in development mode' + @echo 'run_backend - run the backend in development mode' + @echo 'build - build the frontend static files and package the project' + @echo 'publish - build the frontend static files and package the project and publish it to PyPI' + @echo 'dev - run the project in development mode with docker compose' + @echo 'tests - run the tests' + @echo 'coverage - run the tests and generate a coverage report' + @echo '----'