From ccd916babe8b24ff8a2ef5d9c2a8a53487388f2a Mon Sep 17 00:00:00 2001 From: Brigit Murtaugh Date: Fri, 16 Jun 2023 15:42:14 -0700 Subject: [PATCH] Update dev container (#6189) Fixes https://github.com/hwchase17/langchain/issues/6172 As described in https://github.com/hwchase17/langchain/issues/6172, I'd love to help update the dev container in this project. **Summary of changes:** - Dev container now builds (the current container in this repo won't build for me) - Dockerfile updates - Update image to our [currently-maintained Python image](https://github.com/devcontainers/images/tree/main/src/python/.devcontainer) (`mcr.microsoft.com/devcontainers/python`) rather than the deprecated image from vscode-dev-containers - Move Dockerfile to root of repo - in order for `COPY` to work properly, it needs the files (in this case, `pyproject.toml` and `poetry.toml`) in the same directory - devcontainer.json updates - Removed `customizations` and `remoteUser` since they should be covered by the updated image in the Dockerfile - Update comments - Update docker-compose.yaml to properly point to updated Dockerfile - Add a .gitattributes to avoid line ending conversions, which can result in hundreds of pending changes ([info](https://code.visualstudio.com/docs/devcontainers/tips-and-tricks#_resolving-git-line-ending-issues-in-containers-resulting-in-many-modified-files)) - Add a README in the .devcontainer folder and info on the dev container in the contributing.md **Outstanding questions:** - Is it expected for `poetry install` to take some time? It takes about 30 minutes for this dev container to finish building in a Codespace, but a user should only have to experience this once. Through some online investigation, this doesn't seem unusual - Versions of poetry newer than 1.3.2 failed every time - based on some of the guidance in contributing.md and other online resources, it seemed changing poetry versions might be a good solution. 1.3.2 is from Jan 2023 --------- Co-authored-by: bamurtaugh Co-authored-by: Samruddhi Khandale --- .devcontainer/README.md | 37 ++++++++++++++++++ .devcontainer/devcontainer.json | 45 ++++++++++++---------- .devcontainer/docker-compose.yaml | 7 ++-- .gitattributes | 3 ++ .github/CONTRIBUTING.md | 2 + .devcontainer/Dockerfile => dev.Dockerfile | 11 +++--- 6 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 .devcontainer/README.md create mode 100644 .gitattributes rename .devcontainer/Dockerfile => dev.Dockerfile (85%) diff --git a/.devcontainer/README.md b/.devcontainer/README.md new file mode 100644 index 0000000000..fca59d8492 --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,37 @@ +# Dev container + +This project includes a [dev container](https://containers.dev/), which lets you use a container as a full-featured dev environment. + +You can use the dev container configuration in this folder to build and run the app without needing to install any of its tools locally! You can use it in [GitHub Codespaces](https://github.com/features/codespaces) or the [VS Code Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). + +## GitHub Codespaces +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/hwchase17/langchain) + +You may use the button above, or follow these steps to open this repo in a Codespace: +1. Click the **Code** drop-down menu at the top of https://github.com/hwchase17/langchain. +1. Click on the **Codespaces** tab. +1. Click **Create codespace on master** . + +For more info, check out the [GitHub documentation](https://docs.github.com/en/free-pro-team@latest/github/developing-online-with-codespaces/creating-a-codespace#creating-a-codespace). + +## VS Code Dev Containers +[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/hwchase17/langchain) + +If you already have VS Code and Docker installed, you can use the button above to get started. This will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use. + +You can also follow these steps to open this repo in a container using the VS Code Dev Containers extension: + +1. If this is your first time using a development container, please ensure your system meets the pre-reqs (i.e. have Docker installed) in the [getting started steps](https://aka.ms/vscode-remote/containers/getting-started). + +2. Open a locally cloned copy of the code: + + - Clone this repository to your local filesystem. + - Press F1 and select the **Dev Containers: Open Folder in Container...** command. + - Select the cloned copy of this folder, wait for the container to start, and try things out! + +You can learn more in the [Dev Containers documentation](https://code.visualstudio.com/docs/devcontainers/containers). + +## Tips and tricks + +* If you are working with the same repository folder in a container and Windows, you'll want consistent line endings (otherwise you may see hundreds of changes in the SCM view). The `.gitattributes` file in the root of this repo will disable line ending conversion and should prevent this. See [tips and tricks](https://code.visualstudio.com/docs/devcontainers/tips-and-tricks#_resolving-git-line-ending-issues-in-containers-resulting-in-many-modified-files) for more info. +* If you'd like to review the contents of the image used in this dev container, you can check it out in the [devcontainers/images](https://github.com/devcontainers/images/tree/main/src/python) repo. diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b3e3efb513..4c7b352b06 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,24 +1,26 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-docker-compose { + // Name for the dev container + "name": "langchain", + + // Point to a Docker Compose file "dockerComposeFile": "./docker-compose.yaml", + + // Required when using Docker Compose. The name of the service to connect to once running "service": "langchain", - "workspaceFolder": "/workspaces/langchain", - "name": "langchain", - "customizations": { - "vscode": { - "extensions": [ - "ms-python.python" - ], - "settings": { - "python.defaultInterpreterPath": "/home/vscode/langchain-py-env/bin/python3.11" - } - } - - }, - - // Features to add to the dev container. More info: https://containers.dev/features. - "features": {}, + + // The optional 'workspaceFolder' property is the path VS Code should open by default when + // connected. This is typically a file mount in .devcontainer/docker-compose.yml + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + + // Prevent the container from shutting down + "overrideCommand": true + + // Features to add to the dev container. More info: https://containers.dev/features + // "features": { + // "ghcr.io/devcontainers-contrib/features/poetry:2": {} + // } // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], @@ -26,8 +28,9 @@ // Uncomment the next line to run commands after the container is created. // "postCreateCommand": "cat /etc/os-release", - // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "devcontainer" - "remoteUser": "vscode", - "overrideCommand": true + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" } diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index 824b7e7843..144eb68c09 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -2,10 +2,11 @@ version: '3' services: langchain: build: - dockerfile: .devcontainer/Dockerfile - context: ../ + dockerfile: dev.Dockerfile + context: .. volumes: - - ../:/workspaces/langchain + # Update this to wherever you want VS Code to mount the folder of your project + - ..:/workspaces:cached networks: - langchain-network # environment: diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..5dc46e6b38 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto eol=lf +*.{cmd,[cC][mM][dD]} text eol=crlf +*.{bat,[bB][aA][tT]} text eol=crlf \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f878c9eacd..5d489e496c 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -59,6 +59,8 @@ we do not want these to get in the way of getting good code into the codebase. ## 🚀 Quick Start +> **Note:** You can run this repository locally (which is described below) or in a [development container](https://containers.dev/) (which is described in the [.devcontainer folder](https://github.com/hwchase17/langchain/tree/master/.devcontainer)). + This project uses [Poetry](https://python-poetry.org/) as a dependency manager. Check out Poetry's [documentation on how to install it](https://python-poetry.org/docs/#installation) on your system before proceeding. ❗Note: If you use `Conda` or `Pyenv` as your environment / package manager, avoid dependency conflicts by doing the following first: diff --git a/.devcontainer/Dockerfile b/dev.Dockerfile similarity index 85% rename from .devcontainer/Dockerfile rename to dev.Dockerfile index 4c5d56bd2c..4383ecc895 100644 --- a/.devcontainer/Dockerfile +++ b/dev.Dockerfile @@ -1,15 +1,15 @@ -# This is a Dockerfile for Developer Container +# This is a Dockerfile for the Development Container # Use the Python base image ARG VARIANT="3.11-bullseye" -FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} AS langchain-dev-base +FROM mcr.microsoft.com/devcontainers/python:0-${VARIANT} AS langchain-dev-base USER vscode # Define the version of Poetry to install (default is 1.4.2) # Define the directory of python virtual environment ARG PYTHON_VIRTUALENV_HOME=/home/vscode/langchain-py-env \ - POETRY_VERSION=1.4.2 + POETRY_VERSION=1.3.2 ENV POETRY_VIRTUALENVS_IN_PROJECT=false \ POETRY_NO_INTERACTION=true @@ -35,8 +35,7 @@ FROM langchain-dev-base AS langchain-dev-dependencies ARG PYTHON_VIRTUALENV_HOME # Copy only the dependency files for installation -COPY pyproject.toml poetry.lock poetry.toml ./ +COPY pyproject.toml poetry.toml ./ # Install the Poetry dependencies (this layer will be cached as long as the dependencies don't change) -RUN poetry install --no-interaction --no-ansi --with dev,test,docs - +RUN poetry install --no-interaction --no-ansi --with dev,test,docs \ No newline at end of file