mirror of
https://github.com/Skyvern-AI/skyvern.git
synced 2026-04-26 10:41:14 +00:00
Migrate Skyvern to uv from poetry (#3554)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> Co-authored-by: stas <stas@skyvern.com>
This commit is contained in:
parent
878ef36a36
commit
d61179e132
19 changed files with 17563 additions and 23282 deletions
|
|
@ -21,8 +21,8 @@ echo "🔧 Running Devsy setup..."
|
||||||
# pip install -r requirements.txt
|
# pip install -r requirements.txt
|
||||||
# pip install -r requirements-dev.txt
|
# pip install -r requirements-dev.txt
|
||||||
# pip install -e .
|
# pip install -e .
|
||||||
# poetry install
|
# uv sync
|
||||||
# pipenv install --dev
|
# uv sync --group dev
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# NODE.JS / JAVASCRIPT / TYPESCRIPT PROJECTS
|
# NODE.JS / JAVASCRIPT / TYPESCRIPT PROJECTS
|
||||||
|
|
|
||||||
4
.github/sync.yml
vendored
4
.github/sync.yml
vendored
|
|
@ -4,8 +4,8 @@ Skyvern-AI/skyvern-cloud:
|
||||||
deleteOrphaned: true
|
deleteOrphaned: true
|
||||||
- source: pyproject.toml
|
- source: pyproject.toml
|
||||||
dest: pyproject.toml
|
dest: pyproject.toml
|
||||||
- source: poetry.lock
|
- source: uv.lock
|
||||||
dest: poetry.lock
|
dest: uv.lock
|
||||||
- source: setup.sh
|
- source: setup.sh
|
||||||
dest: setup.sh
|
dest: setup.sh
|
||||||
- source: .env.example
|
- source: .env.example
|
||||||
|
|
|
||||||
72
.github/workflows/ci.yml
vendored
72
.github/workflows/ci.yml
vendored
|
|
@ -32,52 +32,38 @@ jobs:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
|
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
|
||||||
# reference the matrixe python version here.
|
# reference the matrixe python version here.
|
||||||
- uses: actions/setup-python@v4
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: "3.11"
|
python-version: "3.11"
|
||||||
# Cache the installation of Poetry itself, e.g. the next step. This prevents the workflow
|
# Install uv (fast, single-file binary)
|
||||||
# from installing Poetry every time, which can be slow. Note the use of the Poetry version
|
- name: Install uv
|
||||||
# number in the cache key, and the "-0" suffix: this allows you to invalidate the cache
|
run: |
|
||||||
# manually if/when you want to upgrade Poetry, or if something goes wrong. This could be
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
# mildly cleaner by using an environment variable, but I don't really care.
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||||
- name: cache poetry install
|
# Cache uv's download/resolve cache to speed up CI (optional but nice)
|
||||||
uses: actions/cache@v3
|
- name: Cache uv global cache
|
||||||
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/.local
|
path: ~/.cache/uv
|
||||||
key: poetry-1.7.1
|
key: uv-cache-${{ runner.os }}-${{ hashFiles('**/pyproject.toml', '**/uv.lock') }}
|
||||||
# Install Poetry. You could do this manually, or there are several actions that do this.
|
# Cache the project virtualenv (keyed by Python version + lockfile)
|
||||||
# `snok/install-poetry` seems to be minimal yet complete, and really just calls out to
|
- name: Cache venv
|
||||||
# Poetry's default install script, which feels correct. I pin the Poetry version here
|
id: cache-venv
|
||||||
# because Poetry does occasionally change APIs between versions and I don't want my
|
uses: actions/cache@v4
|
||||||
# actions to break if it does.
|
|
||||||
#
|
|
||||||
# The key configuration value here is `virtualenvs-in-project: true`: this creates the
|
|
||||||
# venv as a `.venv` in your testing directory, which allows the next step to easily
|
|
||||||
# cache it.
|
|
||||||
- uses: snok/install-poetry@v1
|
|
||||||
with:
|
|
||||||
version: 1.7.1
|
|
||||||
virtualenvs-create: true
|
|
||||||
virtualenvs-in-project: true
|
|
||||||
# Cache your dependencies (i.e. all the stuff in your `pyproject.toml`). Note the cache
|
|
||||||
# key: if you're using multiple Python versions, or multiple OSes, you'd need to include
|
|
||||||
# them in the cache key. I'm not, so it can be simple and just depend on the poetry.lock.
|
|
||||||
- name: cache deps
|
|
||||||
id: cache-deps
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
with:
|
||||||
path: .venv
|
path: .venv
|
||||||
key: pydeps-${{ hashFiles('**/poetry.lock') }}
|
key: venv-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version || '3.11' }}-${{ hashFiles('**/uv.lock') }}
|
||||||
# Install dependencies. `--no-root` means "install all dependencies but not the project
|
# Create/refresh the environment (installs main + dev groups)
|
||||||
# itself", which is what you want to avoid caching _your_ code. The `if` statement
|
- name: Sync deps with uv
|
||||||
# ensures this only runs on a cache miss.
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||||
- run: poetry install --no-interaction --no-root
|
run: |
|
||||||
if: steps.cache-deps.outputs.cache-hit != 'true'
|
uv lock
|
||||||
# Now install _your_ project. This isn't necessary for many types of projects -- particularly
|
uv sync --group dev
|
||||||
# things like Django apps don't need this. But it's a good idea since it fully-exercises the
|
# Ensure venv is current even on cache hit (cheap no-op if up to date)
|
||||||
# pyproject.toml and makes that if you add things like console-scripts at some point that
|
- name: Ensure environment is up to date
|
||||||
# they'll be installed and working.
|
if: steps.cache-venv.outputs.cache-hit == 'true'
|
||||||
- run: poetry install --no-interaction
|
run: |
|
||||||
|
uv sync --group dev
|
||||||
# Finally, run pre-commit.
|
# Finally, run pre-commit.
|
||||||
- name: Run all pre-commit hooks
|
- name: Run all pre-commit hooks
|
||||||
uses: pre-commit/action@v3.0.0
|
uses: pre-commit/action@v3.0.0
|
||||||
|
|
@ -102,14 +88,14 @@ jobs:
|
||||||
AZURE_GPT4O_MINI_API_VERSION: "dummy"
|
AZURE_GPT4O_MINI_API_VERSION: "dummy"
|
||||||
AWS_REGION: "us-east-1"
|
AWS_REGION: "us-east-1"
|
||||||
ENABLE_BEDROCK: "true"
|
ENABLE_BEDROCK: "true"
|
||||||
run: poetry run ./run_alembic_check.sh
|
run: uv run ./run_alembic_check.sh
|
||||||
- name: trigger tests
|
- name: trigger tests
|
||||||
env:
|
env:
|
||||||
ENABLE_OPENAI: "true"
|
ENABLE_OPENAI: "true"
|
||||||
OPENAI_API_KEY: "sk-dummy"
|
OPENAI_API_KEY: "sk-dummy"
|
||||||
AWS_ACCESS_KEY_ID: "dummy"
|
AWS_ACCESS_KEY_ID: "dummy"
|
||||||
AWS_SECRET_ACCESS_KEY: "dummy"
|
AWS_SECRET_ACCESS_KEY: "dummy"
|
||||||
run: poetry run pytest
|
run: uv run pytest
|
||||||
fe-lint-build:
|
fe-lint-build:
|
||||||
name: Frontend Lint and Build
|
name: Frontend Lint and Build
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
||||||
23
.github/workflows/codeflash.yaml
vendored
23
.github/workflows/codeflash.yaml
vendored
|
|
@ -22,22 +22,23 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: "3.11"
|
python-version: "3.11"
|
||||||
- name: Install Project Dependencies
|
- name: Install uv
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
pip install poetry
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||||
poetry install --all-extras
|
- name: Sync project dependencies
|
||||||
poetry add codeflash
|
|
||||||
- name: create test dir
|
|
||||||
run: |
|
run: |
|
||||||
mkdir -p codeflash-tests
|
uv sync --group dev
|
||||||
|
- name: Install Codeflash into venv
|
||||||
|
run: |
|
||||||
|
uv pip install codeflash
|
||||||
|
- name: Create test dir
|
||||||
|
run: mkdir -p codeflash-tests
|
||||||
- name: Run Codeflash to optimize code
|
- name: Run Codeflash to optimize code
|
||||||
run: |
|
run: uv run codeflash
|
||||||
poetry env use python
|
|
||||||
poetry run codeflash
|
|
||||||
- name: remove test dir
|
- name: remove test dir
|
||||||
run: |-
|
run: |-
|
||||||
rm -rf codeflash-tests
|
rm -rf codeflash-tests
|
||||||
|
|
|
||||||
72
.github/workflows/sdk-release.yml
vendored
72
.github/workflows/sdk-release.yml
vendored
|
|
@ -45,58 +45,44 @@ jobs:
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
|
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
|
||||||
# reference the matrixe python version here.
|
# reference the matrixe python version here.
|
||||||
- uses: actions/setup-python@v4
|
- name: Setup Python
|
||||||
|
id: setup-python
|
||||||
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: "3.11"
|
python-version: "3.11"
|
||||||
# Cache the installation of Poetry itself, e.g. the next step. This prevents the workflow
|
# Cache the installation of `uv` itself, e.g. the next step. This prevents the workflow
|
||||||
# from installing Poetry every time, which can be slow. Note the use of the Poetry version
|
# from installing `uv` every time, which can be slow.
|
||||||
# number in the cache key, and the "-0" suffix: this allows you to invalidate the cache
|
- name: Install uv
|
||||||
# manually if/when you want to upgrade Poetry, or if something goes wrong. This could be
|
run: |
|
||||||
# mildly cleaner by using an environment variable, but I don't really care.
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
- name: cache poetry install
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||||
uses: actions/cache@v3
|
# Cache uv's global cache (resolver/downloads) for speed
|
||||||
|
- name: Cache uv cache
|
||||||
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/.local
|
path: ~/.cache/uv
|
||||||
key: poetry-1.7.1
|
key: uv-cache-${{ runner.os }}-${{ hashFiles('**/pyproject.toml', '**/uv.lock') }}
|
||||||
# Install Poetry. You could do this manually, or there are several actions that do this.
|
# Cache the project venv (keyed by lockfile + Python)
|
||||||
# `snok/install-poetry` seems to be minimal yet complete, and really just calls out to
|
- name: Cache venv
|
||||||
# Poetry's default install script, which feels correct. I pin the Poetry version here
|
id: cache-venv
|
||||||
# because Poetry does occasionally change APIs between versions and I don't want my
|
uses: actions/cache@v4
|
||||||
# actions to break if it does.
|
|
||||||
#
|
|
||||||
# The key configuration value here is `virtualenvs-in-project: true`: this creates the
|
|
||||||
# venv as a `.venv` in your testing directory, which allows the next step to easily
|
|
||||||
# cache it.
|
|
||||||
- uses: snok/install-poetry@v1
|
|
||||||
with:
|
|
||||||
version: 1.7.1
|
|
||||||
virtualenvs-create: true
|
|
||||||
virtualenvs-in-project: true
|
|
||||||
# Cache your dependencies (i.e. all the stuff in your `pyproject.toml`). Note the cache
|
|
||||||
# key: if you're using multiple Python versions, or multiple OSes, you'd need to include
|
|
||||||
# them in the cache key. I'm not, so it can be simple and just depend on the poetry.lock.
|
|
||||||
- name: cache deps
|
|
||||||
id: cache-deps
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
with:
|
||||||
path: .venv
|
path: .venv
|
||||||
key: pydeps-${{ hashFiles('**/poetry.lock') }}
|
key: venv-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version || '3.11' }}-${{ hashFiles('**/uv.lock') }}
|
||||||
# Install dependencies. `--no-root` means "install all dependencies but not the project
|
# Create/refresh environment. We install dev deps to get twine/build.
|
||||||
# itself", which is what you want to avoid caching _your_ code. The `if` statement
|
- name: Sync dependencies
|
||||||
# ensures this only runs on a cache miss.
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||||
- run: poetry install --no-interaction --no-root
|
run: |
|
||||||
if: steps.cache-deps.outputs.cache-hit != 'true'
|
uv sync --group dev
|
||||||
# Now install _your_ project. This isn't necessary for many types of projects -- particularly
|
- name: Ensure environment is up to date (on cache hit)
|
||||||
# things like Django apps don't need this. But it's a good idea since it fully-exercises the
|
if: steps.cache-venv.outputs.cache-hit == 'true'
|
||||||
# pyproject.toml and makes that if you add things like console-scripts at some point that
|
run: uv sync --group dev
|
||||||
# they'll be installed and working.
|
|
||||||
- run: poetry install --no-interaction
|
|
||||||
- name: Clean dist directory
|
- name: Clean dist directory
|
||||||
run: rm -rf dist
|
run: rm -rf dist
|
||||||
- name: Build Package
|
- name: Build Package
|
||||||
run: poetry build
|
run: uv build
|
||||||
- name: Publish to PyPI
|
- name: Publish to PyPI
|
||||||
env:
|
env:
|
||||||
TWINE_USERNAME: __token__
|
TWINE_USERNAME: __token__
|
||||||
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
||||||
run: poetry run twine upload --repository pypi dist/*
|
run: uv run twine upload --repository pypi dist/*
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||||
## Development Commands
|
## Development Commands
|
||||||
|
|
||||||
### Python Backend Commands
|
### Python Backend Commands
|
||||||
- **Install dependencies**: `poetry install`
|
- **Install dependencies**: `uv sync`
|
||||||
- **Run Skyvern service**: `skyvern run all` (starts both backend and UI)
|
- **Run Skyvern service**: `skyvern run all` (starts both backend and UI)
|
||||||
- **Run backend only**: `skyvern run server`
|
- **Run backend only**: `skyvern run server`
|
||||||
- **Run UI only**: `skyvern run ui`
|
- **Run UI only**: `skyvern run ui`
|
||||||
|
|
@ -67,7 +67,7 @@ Skyvern is a browser automation platform that uses LLMs and computer vision to i
|
||||||
|
|
||||||
### Environment Setup
|
### Environment Setup
|
||||||
- Requires Python 3.11+ and Node.js
|
- Requires Python 3.11+ and Node.js
|
||||||
- Uses Poetry for Python dependency management
|
- Uses UV for Python dependency management
|
||||||
- PostgreSQL database (managed via Docker or local install)
|
- PostgreSQL database (managed via Docker or local install)
|
||||||
- Browser dependencies installed via Playwright
|
- Browser dependencies installed via Playwright
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ FROM python:3.11 AS requirements-stage
|
||||||
# Run `skyvern init llm` before building to generate the .env file
|
# Run `skyvern init llm` before building to generate the .env file
|
||||||
|
|
||||||
WORKDIR /tmp
|
WORKDIR /tmp
|
||||||
RUN pip install poetry
|
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
|
||||||
RUN poetry self add poetry-plugin-export
|
&& ln -s /root/.local/bin/uv /usr/local/bin/uv
|
||||||
COPY ./pyproject.toml /tmp/pyproject.toml
|
COPY ./pyproject.toml /tmp/pyproject.toml
|
||||||
COPY ./poetry.lock /tmp/poetry.lock
|
COPY ./uv.lock /tmp/uv.lock
|
||||||
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
|
RUN uv pip compile pyproject.toml -o requirements.txt --no-annotate --no-header
|
||||||
|
|
||||||
FROM python:3.11-slim-bookworm
|
FROM python:3.11-slim-bookworm
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
|
||||||
13
README.md
13
README.md
|
|
@ -397,6 +397,19 @@ We love to see how Skyvern is being used in the wild. Here are some examples of
|
||||||
<img src="fern/images/geico_shu_recording_cropped.gif"/>
|
<img src="fern/images/geico_shu_recording_cropped.gif"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
# Contributor Setup
|
||||||
|
Make sure to have [uv](https://docs.astral.sh/uv/getting-started/installation/) installed.
|
||||||
|
1. Run this to create your virtual environment (`.venv`)
|
||||||
|
```bash
|
||||||
|
uv sync --group dev
|
||||||
|
```
|
||||||
|
2. Perform initial server configuration
|
||||||
|
```bash
|
||||||
|
uv run skyvern quickstart
|
||||||
|
```
|
||||||
|
3. Navigate to `http://localhost:8080` in your browser to start using the UI
|
||||||
|
*The Skyvern CLI supports Windows, WSL, macOS, and Linux environments.*
|
||||||
|
|
||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
More extensive documentation can be found on our [📕 docs page](https://docs.skyvern.com). Please let us know if something is unclear or missing by opening an issue or reaching out to us [via email](mailto:founders@skyvern.com) or [discord](https://discord.gg/fG2XXEuQX3).
|
More extensive documentation can be found on our [📕 docs page](https://docs.skyvern.com). Please let us know if something is unclear or missing by opening an issue or reaching out to us [via email](mailto:founders@skyvern.com) or [discord](https://discord.gg/fG2XXEuQX3).
|
||||||
|
|
|
||||||
6280
integrations/langchain/poetry.lock
generated
6280
integrations/langchain/poetry.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,20 +1,25 @@
|
||||||
[tool.poetry]
|
[project]
|
||||||
name = "skyvern-langchain"
|
name = "skyvern-langchain"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
description = ""
|
description = ""
|
||||||
authors = ["lawyzheng <lawy@skyvern.com>"]
|
authors = [{ name = "lawyzheng", email = "lawy@skyvern.com" }]
|
||||||
packages = [{ include = "skyvern_langchain" }]
|
requires-python = ">=3.11,<3.14"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
dependencies = [
|
||||||
python = "^3.11,<3.14"
|
"skyvern>=0.2.0",
|
||||||
skyvern = ">=0.2.0"
|
"langchain>=0.3.19,<0.4",
|
||||||
langchain = "^0.3.19"
|
]
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
|
||||||
twine = "^6.1.0"
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core"]
|
requires = ["hatchling"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = ["twine>=6.1.0,<7"]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.sdist]
|
||||||
|
include = ["skyvern_langchain"]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
include = ["skyvern_langchain"]
|
||||||
|
|
|
||||||
5157
integrations/langchain/uv.lock
generated
Normal file
5157
integrations/langchain/uv.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
6733
integrations/llama_index/poetry.lock
generated
6733
integrations/llama_index/poetry.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,20 +1,24 @@
|
||||||
[tool.poetry]
|
[project]
|
||||||
name = "skyvern-llamaindex"
|
name = "skyvern-llamaindex"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
description = "Skyvern integration for LlamaIndex"
|
description = "Skyvern integration for LlamaIndex"
|
||||||
authors = ["lawyzheng <lawy@skyvern.com>"]
|
authors = [{ name = "lawyzheng", email = "lawy@skyvern.com" }]
|
||||||
packages = [{ include = "skyvern_llamaindex" }]
|
requires-python = ">=3.11,<3.14"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
dependencies = [
|
||||||
[tool.poetry.dependencies]
|
"skyvern>=0.2.0",
|
||||||
python = "^3.11,<3.14"
|
"llama-index>=0.12.19,<0.13",
|
||||||
skyvern = ">=0.2.0"
|
]
|
||||||
llama-index = "^0.12.19"
|
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
|
||||||
twine = "^6.1.0"
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core"]
|
requires = ["hatchling"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = ["twine>=6.1.0,<7"]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.sdist]
|
||||||
|
include = ["skyvern_llamaindex"]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
include = ["skyvern_llamaindex"]
|
||||||
|
|
|
||||||
5534
integrations/llama_index/uv.lock
generated
Normal file
5534
integrations/llama_index/uv.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
10008
poetry.lock
generated
10008
poetry.lock
generated
File diff suppressed because one or more lines are too long
258
pyproject.toml
258
pyproject.toml
|
|
@ -1,136 +1,150 @@
|
||||||
[tool.poetry]
|
[project]
|
||||||
name = "skyvern"
|
name = "skyvern"
|
||||||
version = "0.2.6"
|
version = "0.2.6"
|
||||||
description = ""
|
description = ""
|
||||||
authors = ["Skyvern AI <info@skyvern.com>"]
|
authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }]
|
||||||
|
requires-python = ">=3.11,<3.14"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
packages = [{ include = "skyvern" }, { include = "alembic" }]
|
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
"azure-storage-blob>=12.26.0",
|
||||||
|
"python-dotenv>=1.0.0,<2",
|
||||||
|
"openai>=1.68.2",
|
||||||
|
"sqlalchemy[mypy]>=2.0.29,<3",
|
||||||
|
"aiohttp>=3.8.5,<4",
|
||||||
|
"python-multipart>=0.0.18,<0.0.19",
|
||||||
|
"toml>=0.10.2,<0.11",
|
||||||
|
"jinja2>=3.1.2,<4",
|
||||||
|
"uvicorn[standard]>=0.24.0.post1,<0.25",
|
||||||
|
"litellm>=1.75.8",
|
||||||
|
"playwright>1.46.0 ; python_version >= '3.12' and python_version < '3.14'",
|
||||||
|
"playwright==1.46.0 ; python_version >= '3.11' and python_version < '3.12'",
|
||||||
|
"greenlet>3.0.3 ; python_version >= '3.12' and python_version < '3.14'",
|
||||||
|
"greenlet==3.0.3 ; python_version >= '3.11' and python_version < '3.12'",
|
||||||
|
"pillow>=10.1.0,<11",
|
||||||
|
"starlette-context>=0.3.6,<0.4",
|
||||||
|
"ddtrace>=2.3.2,<3",
|
||||||
|
"pydantic>=2.5.2,<3",
|
||||||
|
"pydantic-settings>=2.1.0,<3",
|
||||||
|
"fastapi>=0.115.4,<0.116",
|
||||||
|
"psycopg[binary, pool]==3.1.18 ; python_version >= '3.11' and python_version < '3.13'",
|
||||||
|
"psycopg[binary, pool]>=3.2.2,<3.3.0 ; python_version >= '3.13' and python_version < '3.14'",
|
||||||
|
"alembic>=1.12.1,<2",
|
||||||
|
"python-jose[cryptography]>=3.4.0,<4",
|
||||||
|
"cachetools>=5.3.2,<6",
|
||||||
|
"aioboto3>=14.3.0,<15",
|
||||||
|
"asyncache>=0.3.1,<0.4",
|
||||||
|
"orjson>=3.9.10,<4",
|
||||||
|
"structlog>=23.2.0,<24",
|
||||||
|
"typer>=0.16.0",
|
||||||
|
"types-toml>=0.10.8.7,<0.11",
|
||||||
|
"httpx[socks]>=0.27.0",
|
||||||
|
"filetype>=1.2.0,<2",
|
||||||
|
"redis>=5.0.3,<6",
|
||||||
|
"onnxruntime>=1.20.0,<1.23.0 ; python_version >= '3.12' and python_version < '3.14'",
|
||||||
|
"onnxruntime<1.17 ; python_version >= '3.11' and python_version < '3.12'",
|
||||||
|
"aioredlock>=0.7.3,<0.8",
|
||||||
|
"stripe>=9.7.0,<10",
|
||||||
|
"tldextract>=5.1.2,<6",
|
||||||
|
"websockets~=12.0",
|
||||||
|
"email-validator>=2.2.0,<3",
|
||||||
|
"temporalio>=1.6.0,<2",
|
||||||
|
"requests-toolbelt>=1.0.0,<2",
|
||||||
|
"rich[jupyter]>=13.7.0,<14",
|
||||||
|
"posthog>=3.7.0,<4",
|
||||||
|
"aiofiles>=24.1.0,<25",
|
||||||
|
"pyotp>=2.9.0,<3",
|
||||||
|
"asyncpg>=0.30.0,<0.31",
|
||||||
|
"json-repair>=0.34.0,<0.35",
|
||||||
|
"pypdf>=5.1.0,<6",
|
||||||
|
"fastmcp>=2.10.1,<3",
|
||||||
|
"psutil>=7.0.0",
|
||||||
|
"tiktoken>=0.9.0",
|
||||||
|
"anthropic>=0.50.0,<0.51",
|
||||||
|
"google-cloud-aiplatform>=1.90.0,<2",
|
||||||
|
"alive-progress>=3.2.0,<4",
|
||||||
|
"colorama>=0.4.6,<0.5",
|
||||||
|
"onepassword-sdk==0.3.0",
|
||||||
|
"types-boto3[full]>=1.38.31,<2",
|
||||||
|
"lark>=1.2.2,<2",
|
||||||
|
"libcst>=1.8.2,<2",
|
||||||
|
"curlparser>=0.1.0,<0.2",
|
||||||
|
"lmnr[all]>=0.7.0,<0.8",
|
||||||
|
"openpyxl>=3.1.5,<4",
|
||||||
|
"pandas>=2.3.1,<3",
|
||||||
|
"azure-identity>=1.24.0,<2",
|
||||||
|
"azure-keyvault>=4.2.0,<5",
|
||||||
|
"dramatiq[asyncio]>=1.18.0,<2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"isort>=5.13.2,<6",
|
||||||
|
"mypy>=1.18.2,<2",
|
||||||
|
"flake8>=6.0.0,<7",
|
||||||
|
"types-requests>=2.31.0.2,<3",
|
||||||
|
"pytest>=7.4.0,<8",
|
||||||
|
"pytest-asyncio>=0.21.1,<0.22",
|
||||||
|
"watchdog>=3.0.0,<4",
|
||||||
|
"mock>=5.1.0,<6",
|
||||||
|
"autoflake>=2.2.0,<3",
|
||||||
|
"pydevd-pycharm>=233.6745.319,<234",
|
||||||
|
"ipython>=8.17.2,<9",
|
||||||
|
"typer>=0.16.0,<0.17",
|
||||||
|
"ipykernel>=6.26.0,<7",
|
||||||
|
"notebook>=7.0.6,<8",
|
||||||
|
"freezegun>=1.2.2,<2",
|
||||||
|
"snoop>=0.4.3,<0.5",
|
||||||
|
"rich[jupyter]>=13.7.0,<14",
|
||||||
|
"fpdf>=1.7.2,<2",
|
||||||
|
"pypdf>=5.0.1,<6",
|
||||||
|
"twine>=6.1.0,<7",
|
||||||
|
"build>=1.2.2.post1,<2",
|
||||||
|
"pre-commit>=4.2.0,<5",
|
||||||
|
"ruff>=0.11.12,<0.12",
|
||||||
|
"aiosqlite>=0.21.0,<0.22",
|
||||||
|
"moto[s3, server]>=5.1.5,<6",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.hatch.build]
|
||||||
|
packages = ["skyvern", "alembic"]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.sdist]
|
||||||
include = [
|
include = [
|
||||||
{ path = "skyvern-frontend", format = "sdist" },
|
"skyvern",
|
||||||
{ path = "skyvern-frontend/src", format = ["sdist", "wheel"] },
|
"alembic",
|
||||||
{ path = "skyvern-frontend/public", format = ["sdist", "wheel"] },
|
|
||||||
{ path = "skyvern-frontend/package.json", format = ["sdist", "wheel"] },
|
|
||||||
{ path = "skyvern-frontend/package-lock.json", format = ["sdist", "wheel"] },
|
|
||||||
{ path = "skyvern-frontend/*.config.*", format = ["sdist", "wheel"] },
|
|
||||||
{ path = "skyvern-frontend/*.html", format = ["sdist", "wheel"] },
|
|
||||||
{ path = "skyvern-frontend/*.md", format = ["sdist", "wheel"] }
|
|
||||||
]
|
]
|
||||||
|
|
||||||
exclude = [
|
exclude = [
|
||||||
{ path = "skyvern-frontend/node_modules", format = ["sdist", "wheel"] },
|
"skyvern-frontend/node_modules",
|
||||||
{ path = "skyvern-frontend/dist", format = ["sdist", "wheel"] }
|
"skyvern-frontend/dist",
|
||||||
]
|
]
|
||||||
|
[tool.hatch.build.targets.sdist.force-include]
|
||||||
|
"skyvern-frontend" = "skyvern-frontend"
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.hatch.build.targets.wheel]
|
||||||
azure-storage-blob = ">=12.26.0"
|
include = [
|
||||||
python = ">=3.11,<3.14"
|
"skyvern",
|
||||||
python-dotenv = "^1.0.0"
|
"alembic",
|
||||||
openai = ">=1.68.2"
|
|
||||||
sqlalchemy = {extras = ["mypy"], version = "^2.0.29"}
|
|
||||||
aiohttp = "^3.8.5"
|
|
||||||
python-multipart = "^0.0.18"
|
|
||||||
toml = "^0.10.2"
|
|
||||||
jinja2 = "^3.1.2"
|
|
||||||
uvicorn = {extras = ["standard"], version = "^0.24.0.post1"}
|
|
||||||
litellm = ">=1.75.8"
|
|
||||||
playwright = [
|
|
||||||
{version = ">1.46.0", python = ">=3.12,<3.14"},
|
|
||||||
{version = "=1.46.0", python = ">=3.11,<3.12"}
|
|
||||||
]
|
]
|
||||||
greenlet = [
|
[tool.hatch.build.targets.wheel.force-include]
|
||||||
{version = ">3.0.3", python = ">=3.12,<3.14"},
|
"skyvern-frontend/src" = "skyvern-frontend/src"
|
||||||
{version = "=3.0.3", python = ">=3.11,<3.12"}
|
"skyvern-frontend/public" = "skyvern-frontend/public"
|
||||||
]
|
"skyvern-frontend/package.json" = "skyvern-frontend/package.json"
|
||||||
pillow = "^10.1.0"
|
"skyvern-frontend/package-lock.json" = "skyvern-frontend/package-lock.json"
|
||||||
starlette-context = "^0.3.6"
|
"skyvern-frontend/postcss.config.js" = "skyvern-frontend/postcss.config.js"
|
||||||
ddtrace = "^2.3.2"
|
"skyvern-frontend/tailwind.config.js" = "skyvern-frontend/tailwind.config.js"
|
||||||
pydantic = "^2.5.2"
|
"skyvern-frontend/vite.config.ts" = "skyvern-frontend/vite.config.ts"
|
||||||
pydantic-settings = "^2.1.0"
|
"skyvern-frontend/index.html" = "skyvern-frontend/index.html"
|
||||||
fastapi = "^0.115.4"
|
"skyvern-frontend/README.md" = "skyvern-frontend/README.md"
|
||||||
psycopg = [
|
"skyvern-frontend/.env.example" = "skyvern-frontend/.env.example"
|
||||||
{version = "3.1.18", extras = ["binary", "pool"], python = ">=3.11, <3.13"},
|
"skyvern-frontend/artifactServer.js" = "skyvern-frontend/artifactServer.js"
|
||||||
{version = ">=3.2.2,<3.3.0", extras = ["binary", "pool"], python = ">=3.13, <3.14"}
|
"skyvern-frontend/localServer.js" = "skyvern-frontend/localServer.js"
|
||||||
]
|
"skyvern-frontend/tsconfig.json" = "skyvern-frontend/tsconfig.json"
|
||||||
alembic = "^1.12.1"
|
"skyvern-frontend/tsconfig.node.json" = "skyvern-frontend/tsconfig.node.json"
|
||||||
python-jose = {extras = ["cryptography"], version = "^3.4.0"}
|
|
||||||
cachetools = "^5.3.2"
|
|
||||||
aioboto3 = "^14.3.0"
|
|
||||||
asyncache = "^0.3.1"
|
|
||||||
orjson = "^3.9.10"
|
|
||||||
structlog = "^23.2.0"
|
|
||||||
typer = ">=0.16.0"
|
|
||||||
types-toml = "^0.10.8.7"
|
|
||||||
httpx = {version = ">=0.27.0", extras = ["socks"]}
|
|
||||||
filetype = "^1.2.0"
|
|
||||||
redis = "^5.0.3"
|
|
||||||
onnxruntime = [
|
|
||||||
{ version = ">=1.20.0,<1.23.0", python = ">=3.12, <3.14"},
|
|
||||||
{ version = "<1.17", python = ">=3.11, <3.12"}
|
|
||||||
]
|
|
||||||
aioredlock = "^0.7.3"
|
|
||||||
stripe = "^9.7.0"
|
|
||||||
tldextract = "^5.1.2"
|
|
||||||
websockets = "^12.0"
|
|
||||||
email-validator = "^2.2.0"
|
|
||||||
temporalio = "^1.6.0"
|
|
||||||
requests-toolbelt = "^1.0.0"
|
|
||||||
rich = {extras = ["jupyter"], version = "^13.7.0"}
|
|
||||||
posthog = "^3.7.0"
|
|
||||||
aiofiles = "^24.1.0"
|
|
||||||
pyotp = "^2.9.0"
|
|
||||||
asyncpg = "^0.30.0"
|
|
||||||
json-repair = "^0.34.0"
|
|
||||||
pypdf = "^5.1.0"
|
|
||||||
fastmcp = "^2.10.1"
|
|
||||||
psutil = ">=7.0.0"
|
|
||||||
tiktoken = ">=0.9.0"
|
|
||||||
anthropic = "^0.50.0"
|
|
||||||
google-cloud-aiplatform = "^1.90.0"
|
|
||||||
alive-progress = "^3.2.0"
|
|
||||||
colorama = "^0.4.6"
|
|
||||||
onepassword-sdk = "0.3.0"
|
|
||||||
types-boto3 = {extras = ["full"], version = "^1.38.31"}
|
|
||||||
lark = "^1.2.2"
|
|
||||||
libcst = "^1.8.2"
|
|
||||||
curlparser = "^0.1.0"
|
|
||||||
lmnr = {extras = ["all"], version = "^0.7.0"}
|
|
||||||
openpyxl = "^3.1.5"
|
|
||||||
pandas = "^2.3.1"
|
|
||||||
azure-identity = "^1.24.0"
|
|
||||||
azure-keyvault = "^4.2.0"
|
|
||||||
dramatiq = {version = "^1.18.0", extras = ["asyncio"]}
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
|
||||||
isort = "^5.13.2"
|
|
||||||
mypy = "^1.18.2"
|
|
||||||
flake8 = "^6.0.0"
|
|
||||||
types-requests = "^2.31.0.2"
|
|
||||||
pytest = "^7.4.0"
|
|
||||||
pytest-asyncio = "^0.21.1"
|
|
||||||
watchdog = "^3.0.0"
|
|
||||||
mock = "^5.1.0"
|
|
||||||
autoflake = "^2.2.0"
|
|
||||||
pydevd-pycharm = "^233.6745.319"
|
|
||||||
ipython = "^8.17.2"
|
|
||||||
typer = "^0.16.0"
|
|
||||||
ipykernel = "^6.26.0"
|
|
||||||
notebook = "^7.0.6"
|
|
||||||
freezegun = "^1.2.2"
|
|
||||||
snoop = "^0.4.3"
|
|
||||||
rich = {extras = ["jupyter"], version = "^13.7.0"}
|
|
||||||
fpdf = "^1.7.2"
|
|
||||||
pypdf = "^5.0.1"
|
|
||||||
twine = "^6.1.0"
|
|
||||||
build = "^1.2.2.post1"
|
|
||||||
pre-commit = "^4.2.0"
|
|
||||||
ruff = "^0.11.12"
|
|
||||||
aiosqlite = "^0.21.0"
|
|
||||||
moto = {extras = ["s3", "server"], version = "^5.1.5"}
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["hatchling"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
exclude = [
|
exclude = [
|
||||||
|
|
@ -183,10 +197,10 @@ skip = ["webeye/actions/__init__.py", "forge/sdk/__init__.py"]
|
||||||
[tool.mypy]
|
[tool.mypy]
|
||||||
plugins = "sqlalchemy.ext.mypy.plugin"
|
plugins = "sqlalchemy.ext.mypy.plugin"
|
||||||
|
|
||||||
[tool.poetry.scripts]
|
[project.scripts]
|
||||||
skyvern = "skyvern.cli.commands:cli_app"
|
skyvern = "skyvern.cli.commands:cli_app"
|
||||||
|
|
||||||
[tool.codeflash]
|
[tool.codeflash]
|
||||||
# All paths are relative to this pyproject.toml's directory.
|
# All paths are relative to this pyproject.toml's directory.
|
||||||
module-root = "skyvern"
|
module-root = "skyvern"
|
||||||
tests-root = "codeflash-tests"
|
tests-root = "codeflash-tests"
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ if [ ! -f .env ]; then
|
||||||
echo "Please add your api keys to the .env file."
|
echo "Please add your api keys to the .env file."
|
||||||
fi
|
fi
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source "$(poetry env info --path)/bin/activate"
|
uv sync
|
||||||
poetry install
|
|
||||||
./run_alembic_check.sh
|
./run_alembic_check.sh
|
||||||
poetry run python -m skyvern.forge
|
uv run python -m skyvern.forge
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ These instructions will get you a copy of the project up and running on your loc
|
||||||
|
|
||||||
Before you begin, ensure you have the following installed:
|
Before you begin, ensure you have the following installed:
|
||||||
- [Python 3.11](https://www.python.org/downloads/)
|
- [Python 3.11](https://www.python.org/downloads/)
|
||||||
- [Poetry](https://python-poetry.org/docs/#installation)
|
- [uv](https://docs.astral.sh/uv/getting-started/installation/)
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ Before you begin, ensure you have the following installed:
|
||||||
2. **Install dependencies**
|
2. **Install dependencies**
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
3. *Define the following environment variables*
|
3. *Define the following environment variables*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue