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-dev.txt
|
||||
# pip install -e .
|
||||
# poetry install
|
||||
# pipenv install --dev
|
||||
# uv sync
|
||||
# uv sync --group dev
|
||||
|
||||
# ============================================================================
|
||||
# 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
|
||||
- source: pyproject.toml
|
||||
dest: pyproject.toml
|
||||
- source: poetry.lock
|
||||
dest: poetry.lock
|
||||
- source: uv.lock
|
||||
dest: uv.lock
|
||||
- source: setup.sh
|
||||
dest: setup.sh
|
||||
- source: .env.example
|
||||
|
|
|
|||
72
.github/workflows/ci.yml
vendored
72
.github/workflows/ci.yml
vendored
|
|
@ -32,52 +32,38 @@ jobs:
|
|||
- uses: actions/checkout@v3
|
||||
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
|
||||
# reference the matrixe python version here.
|
||||
- uses: actions/setup-python@v4
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.11"
|
||||
# Cache the installation of Poetry 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
|
||||
# number in the cache key, and the "-0" suffix: this allows you to invalidate the cache
|
||||
# manually if/when you want to upgrade Poetry, or if something goes wrong. This could be
|
||||
# mildly cleaner by using an environment variable, but I don't really care.
|
||||
- name: cache poetry install
|
||||
uses: actions/cache@v3
|
||||
# Install uv (fast, single-file binary)
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
# Cache uv's download/resolve cache to speed up CI (optional but nice)
|
||||
- name: Cache uv global cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.local
|
||||
key: poetry-1.7.1
|
||||
# Install Poetry. You could do this manually, or there are several actions that do this.
|
||||
# `snok/install-poetry` seems to be minimal yet complete, and really just calls out to
|
||||
# Poetry's default install script, which feels correct. I pin the Poetry version here
|
||||
# because Poetry does occasionally change APIs between versions and I don't want my
|
||||
# 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
|
||||
path: ~/.cache/uv
|
||||
key: uv-cache-${{ runner.os }}-${{ hashFiles('**/pyproject.toml', '**/uv.lock') }}
|
||||
# Cache the project virtualenv (keyed by Python version + lockfile)
|
||||
- name: Cache venv
|
||||
id: cache-venv
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .venv
|
||||
key: pydeps-${{ hashFiles('**/poetry.lock') }}
|
||||
# Install dependencies. `--no-root` means "install all dependencies but not the project
|
||||
# itself", which is what you want to avoid caching _your_ code. The `if` statement
|
||||
# ensures this only runs on a cache miss.
|
||||
- run: poetry install --no-interaction --no-root
|
||||
if: steps.cache-deps.outputs.cache-hit != 'true'
|
||||
# Now install _your_ project. This isn't necessary for many types of projects -- particularly
|
||||
# things like Django apps don't need this. But it's a good idea since it fully-exercises the
|
||||
# pyproject.toml and makes that if you add things like console-scripts at some point that
|
||||
# they'll be installed and working.
|
||||
- run: poetry install --no-interaction
|
||||
key: venv-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version || '3.11' }}-${{ hashFiles('**/uv.lock') }}
|
||||
# Create/refresh the environment (installs main + dev groups)
|
||||
- name: Sync deps with uv
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
uv lock
|
||||
uv sync --group dev
|
||||
# Ensure venv is current even on cache hit (cheap no-op if up to date)
|
||||
- name: Ensure environment is up to date
|
||||
if: steps.cache-venv.outputs.cache-hit == 'true'
|
||||
run: |
|
||||
uv sync --group dev
|
||||
# Finally, run pre-commit.
|
||||
- name: Run all pre-commit hooks
|
||||
uses: pre-commit/action@v3.0.0
|
||||
|
|
@ -102,14 +88,14 @@ jobs:
|
|||
AZURE_GPT4O_MINI_API_VERSION: "dummy"
|
||||
AWS_REGION: "us-east-1"
|
||||
ENABLE_BEDROCK: "true"
|
||||
run: poetry run ./run_alembic_check.sh
|
||||
run: uv run ./run_alembic_check.sh
|
||||
- name: trigger tests
|
||||
env:
|
||||
ENABLE_OPENAI: "true"
|
||||
OPENAI_API_KEY: "sk-dummy"
|
||||
AWS_ACCESS_KEY_ID: "dummy"
|
||||
AWS_SECRET_ACCESS_KEY: "dummy"
|
||||
run: poetry run pytest
|
||||
run: uv run pytest
|
||||
fe-lint-build:
|
||||
name: Frontend Lint and Build
|
||||
runs-on: ubuntu-latest
|
||||
|
|
|
|||
23
.github/workflows/codeflash.yaml
vendored
23
.github/workflows/codeflash.yaml
vendored
|
|
@ -22,22 +22,23 @@ jobs:
|
|||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.11"
|
||||
- name: Install Project Dependencies
|
||||
- name: Install uv
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install poetry
|
||||
poetry install --all-extras
|
||||
poetry add codeflash
|
||||
- name: create test dir
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
- name: Sync project dependencies
|
||||
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
|
||||
run: |
|
||||
poetry env use python
|
||||
poetry run codeflash
|
||||
run: uv run codeflash
|
||||
- name: remove test dir
|
||||
run: |-
|
||||
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
|
||||
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
|
||||
# reference the matrixe python version here.
|
||||
- uses: actions/setup-python@v4
|
||||
- name: Setup Python
|
||||
id: setup-python
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.11"
|
||||
# Cache the installation of Poetry 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
|
||||
# number in the cache key, and the "-0" suffix: this allows you to invalidate the cache
|
||||
# manually if/when you want to upgrade Poetry, or if something goes wrong. This could be
|
||||
# mildly cleaner by using an environment variable, but I don't really care.
|
||||
- name: cache poetry install
|
||||
uses: actions/cache@v3
|
||||
# Cache the installation of `uv` itself, e.g. the next step. This prevents the workflow
|
||||
# from installing `uv` every time, which can be slow.
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
# Cache uv's global cache (resolver/downloads) for speed
|
||||
- name: Cache uv cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.local
|
||||
key: poetry-1.7.1
|
||||
# Install Poetry. You could do this manually, or there are several actions that do this.
|
||||
# `snok/install-poetry` seems to be minimal yet complete, and really just calls out to
|
||||
# Poetry's default install script, which feels correct. I pin the Poetry version here
|
||||
# because Poetry does occasionally change APIs between versions and I don't want my
|
||||
# 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
|
||||
path: ~/.cache/uv
|
||||
key: uv-cache-${{ runner.os }}-${{ hashFiles('**/pyproject.toml', '**/uv.lock') }}
|
||||
# Cache the project venv (keyed by lockfile + Python)
|
||||
- name: Cache venv
|
||||
id: cache-venv
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .venv
|
||||
key: pydeps-${{ hashFiles('**/poetry.lock') }}
|
||||
# Install dependencies. `--no-root` means "install all dependencies but not the project
|
||||
# itself", which is what you want to avoid caching _your_ code. The `if` statement
|
||||
# ensures this only runs on a cache miss.
|
||||
- run: poetry install --no-interaction --no-root
|
||||
if: steps.cache-deps.outputs.cache-hit != 'true'
|
||||
# Now install _your_ project. This isn't necessary for many types of projects -- particularly
|
||||
# things like Django apps don't need this. But it's a good idea since it fully-exercises the
|
||||
# pyproject.toml and makes that if you add things like console-scripts at some point that
|
||||
# they'll be installed and working.
|
||||
- run: poetry install --no-interaction
|
||||
key: venv-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version || '3.11' }}-${{ hashFiles('**/uv.lock') }}
|
||||
# Create/refresh environment. We install dev deps to get twine/build.
|
||||
- name: Sync dependencies
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
uv sync --group dev
|
||||
- name: Ensure environment is up to date (on cache hit)
|
||||
if: steps.cache-venv.outputs.cache-hit == 'true'
|
||||
run: uv sync --group dev
|
||||
- name: Clean dist directory
|
||||
run: rm -rf dist
|
||||
- name: Build Package
|
||||
run: poetry build
|
||||
run: uv build
|
||||
- name: Publish to PyPI
|
||||
env:
|
||||
TWINE_USERNAME: __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
|
||||
|
||||
### Python Backend Commands
|
||||
- **Install dependencies**: `poetry install`
|
||||
- **Install dependencies**: `uv sync`
|
||||
- **Run Skyvern service**: `skyvern run all` (starts both backend and UI)
|
||||
- **Run backend only**: `skyvern run server`
|
||||
- **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
|
||||
- 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)
|
||||
- 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
|
||||
|
||||
WORKDIR /tmp
|
||||
RUN pip install poetry
|
||||
RUN poetry self add poetry-plugin-export
|
||||
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
|
||||
&& ln -s /root/.local/bin/uv /usr/local/bin/uv
|
||||
COPY ./pyproject.toml /tmp/pyproject.toml
|
||||
COPY ./poetry.lock /tmp/poetry.lock
|
||||
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
|
||||
COPY ./uv.lock /tmp/uv.lock
|
||||
RUN uv pip compile pyproject.toml -o requirements.txt --no-annotate --no-header
|
||||
|
||||
FROM python:3.11-slim-bookworm
|
||||
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"/>
|
||||
</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
|
||||
|
||||
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"
|
||||
version = "0.2.0"
|
||||
description = ""
|
||||
authors = ["lawyzheng <lawy@skyvern.com>"]
|
||||
packages = [{ include = "skyvern_langchain" }]
|
||||
authors = [{ name = "lawyzheng", email = "lawy@skyvern.com" }]
|
||||
requires-python = ">=3.11,<3.14"
|
||||
readme = "README.md"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.11,<3.14"
|
||||
skyvern = ">=0.2.0"
|
||||
langchain = "^0.3.19"
|
||||
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
twine = "^6.1.0"
|
||||
dependencies = [
|
||||
"skyvern>=0.2.0",
|
||||
"langchain>=0.3.19,<0.4",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
requires = ["hatchling"]
|
||||
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"
|
||||
version = "0.2.1"
|
||||
description = "Skyvern integration for LlamaIndex"
|
||||
authors = ["lawyzheng <lawy@skyvern.com>"]
|
||||
packages = [{ include = "skyvern_llamaindex" }]
|
||||
authors = [{ name = "lawyzheng", email = "lawy@skyvern.com" }]
|
||||
requires-python = ">=3.11,<3.14"
|
||||
readme = "README.md"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.11,<3.14"
|
||||
skyvern = ">=0.2.0"
|
||||
llama-index = "^0.12.19"
|
||||
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
twine = "^6.1.0"
|
||||
dependencies = [
|
||||
"skyvern>=0.2.0",
|
||||
"llama-index>=0.12.19,<0.13",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
requires = ["hatchling"]
|
||||
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
256
pyproject.toml
256
pyproject.toml
|
|
@ -1,136 +1,150 @@
|
|||
[tool.poetry]
|
||||
[project]
|
||||
name = "skyvern"
|
||||
version = "0.2.6"
|
||||
description = ""
|
||||
authors = ["Skyvern AI <info@skyvern.com>"]
|
||||
authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }]
|
||||
requires-python = ">=3.11,<3.14"
|
||||
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 = [
|
||||
{ path = "skyvern-frontend", format = "sdist" },
|
||||
{ path = "skyvern-frontend/src", format = ["sdist", "wheel"] },
|
||||
{ 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"] }
|
||||
"skyvern",
|
||||
"alembic",
|
||||
]
|
||||
|
||||
exclude = [
|
||||
{ path = "skyvern-frontend/node_modules", format = ["sdist", "wheel"] },
|
||||
{ path = "skyvern-frontend/dist", format = ["sdist", "wheel"] }
|
||||
"skyvern-frontend/node_modules",
|
||||
"skyvern-frontend/dist",
|
||||
]
|
||||
[tool.hatch.build.targets.sdist.force-include]
|
||||
"skyvern-frontend" = "skyvern-frontend"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
azure-storage-blob = ">=12.26.0"
|
||||
python = ">=3.11,<3.14"
|
||||
python-dotenv = "^1.0.0"
|
||||
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"}
|
||||
[tool.hatch.build.targets.wheel]
|
||||
include = [
|
||||
"skyvern",
|
||||
"alembic",
|
||||
]
|
||||
greenlet = [
|
||||
{version = ">3.0.3", python = ">=3.12,<3.14"},
|
||||
{version = "=3.0.3", python = ">=3.11,<3.12"}
|
||||
]
|
||||
pillow = "^10.1.0"
|
||||
starlette-context = "^0.3.6"
|
||||
ddtrace = "^2.3.2"
|
||||
pydantic = "^2.5.2"
|
||||
pydantic-settings = "^2.1.0"
|
||||
fastapi = "^0.115.4"
|
||||
psycopg = [
|
||||
{version = "3.1.18", extras = ["binary", "pool"], python = ">=3.11, <3.13"},
|
||||
{version = ">=3.2.2,<3.3.0", extras = ["binary", "pool"], python = ">=3.13, <3.14"}
|
||||
]
|
||||
alembic = "^1.12.1"
|
||||
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"}
|
||||
[tool.hatch.build.targets.wheel.force-include]
|
||||
"skyvern-frontend/src" = "skyvern-frontend/src"
|
||||
"skyvern-frontend/public" = "skyvern-frontend/public"
|
||||
"skyvern-frontend/package.json" = "skyvern-frontend/package.json"
|
||||
"skyvern-frontend/package-lock.json" = "skyvern-frontend/package-lock.json"
|
||||
"skyvern-frontend/postcss.config.js" = "skyvern-frontend/postcss.config.js"
|
||||
"skyvern-frontend/tailwind.config.js" = "skyvern-frontend/tailwind.config.js"
|
||||
"skyvern-frontend/vite.config.ts" = "skyvern-frontend/vite.config.ts"
|
||||
"skyvern-frontend/index.html" = "skyvern-frontend/index.html"
|
||||
"skyvern-frontend/README.md" = "skyvern-frontend/README.md"
|
||||
"skyvern-frontend/.env.example" = "skyvern-frontend/.env.example"
|
||||
"skyvern-frontend/artifactServer.js" = "skyvern-frontend/artifactServer.js"
|
||||
"skyvern-frontend/localServer.js" = "skyvern-frontend/localServer.js"
|
||||
"skyvern-frontend/tsconfig.json" = "skyvern-frontend/tsconfig.json"
|
||||
"skyvern-frontend/tsconfig.node.json" = "skyvern-frontend/tsconfig.node.json"
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.ruff]
|
||||
exclude = [
|
||||
|
|
@ -183,7 +197,7 @@ skip = ["webeye/actions/__init__.py", "forge/sdk/__init__.py"]
|
|||
[tool.mypy]
|
||||
plugins = "sqlalchemy.ext.mypy.plugin"
|
||||
|
||||
[tool.poetry.scripts]
|
||||
[project.scripts]
|
||||
skyvern = "skyvern.cli.commands:cli_app"
|
||||
|
||||
[tool.codeflash]
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ if [ ! -f .env ]; then
|
|||
echo "Please add your api keys to the .env file."
|
||||
fi
|
||||
# shellcheck source=/dev/null
|
||||
source "$(poetry env info --path)/bin/activate"
|
||||
poetry install
|
||||
uv sync
|
||||
./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:
|
||||
- [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
|
||||
|
||||
|
|
@ -33,7 +33,7 @@ Before you begin, ensure you have the following installed:
|
|||
2. **Install dependencies**
|
||||
|
||||
```sh
|
||||
poetry install
|
||||
uv sync
|
||||
```
|
||||
|
||||
3. *Define the following environment variables*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue