diff --git a/.github/actions/setup-runner/action.yml b/.github/actions/setup-runner/action.yml index 972dcbdae..6cba4fdc3 100644 --- a/.github/actions/setup-runner/action.yml +++ b/.github/actions/setup-runner/action.yml @@ -13,7 +13,7 @@ runs: - name: Install dependencies shell: bash run: | - uv sync --all-extras + uv sync --all-groups uv pip install ollama faiss-cpu # always test against the latest version of the client # TODO: this is not necessarily a good idea. we need to test against both published and latest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7ff1a5217..aaec469e4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -61,6 +61,7 @@ repos: "--frozen", "--no-hashes", "--no-emit-project", + "--no-default-groups", "--output-file=requirements.txt" ] @@ -89,7 +90,7 @@ repos: name: Distribution Template Codegen additional_dependencies: - uv==0.7.8 - entry: uv run --extra codegen ./scripts/distro_codegen.py + entry: uv run --group codegen ./scripts/distro_codegen.py language: python pass_filenames: false require_serial: true @@ -98,7 +99,7 @@ repos: name: API Spec Codegen additional_dependencies: - uv==0.7.8 - entry: sh -c 'uv run --with ".[dev]" ./docs/openapi_generator/run_openapi_generator.sh > /dev/null' + entry: sh -c 'uv run ./docs/openapi_generator/run_openapi_generator.sh > /dev/null' language: python pass_filenames: false require_serial: true diff --git a/pyproject.toml b/pyproject.toml index 2098e9a92..21c453809 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,14 @@ dependencies = [ ] [project.optional-dependencies] +ui = [ + "streamlit", + "pandas", + "llama-stack-client>=0.2.8", + "streamlit-option-menu", +] + +[dependency-groups] dev = [ "pytest", "pytest-timeout", @@ -112,12 +120,6 @@ docs = [ "sphinxcontrib.openapi", ] codegen = ["rich", "pydantic", "jinja2>=3.1.6"] -ui = [ - "streamlit", - "pandas", - "llama-stack-client>=0.2.8", - "streamlit-option-menu", -] [project.urls] Homepage = "https://github.com/meta-llama/llama-stack" diff --git a/requirements.txt b/requirements.txt index 923e7e2f2..0b77355d3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # This file was autogenerated by uv via the following command: -# uv export --frozen --no-hashes --no-emit-project --output-file=requirements.txt +# uv export --frozen --no-hashes --no-emit-project --no-default-groups --output-file=requirements.txt annotated-types==0.7.0 # via pydantic anyio==4.8.0 diff --git a/scripts/unit-tests.sh b/scripts/unit-tests.sh index 5cfaa989b..771205150 100755 --- a/scripts/unit-tests.sh +++ b/scripts/unit-tests.sh @@ -10,10 +10,10 @@ PYTHON_VERSION=${PYTHON_VERSION:-3.10} command -v uv >/dev/null 2>&1 || { echo >&2 "uv is required but it's not installed. Exiting."; exit 1; } -uv python find $PYTHON_VERSION +uv python find "$PYTHON_VERSION" FOUND_PYTHON=$? if [ $FOUND_PYTHON -ne 0 ]; then - uv python install $PYTHON_VERSION + uv python install "$PYTHON_VERSION" fi -uv run --python $PYTHON_VERSION --with-editable . --with-editable ".[dev]" --with-editable ".[unit]" pytest --asyncio-mode=auto -s -v tests/unit/ $@ +uv run --python "$PYTHON_VERSION" --with-editable . --group unit pytest --asyncio-mode=auto -s -v tests/unit/ $@ diff --git a/uv.lock b/uv.lock index b51d31f79..e5168d5fe 100644 --- a/uv.lock +++ b/uv.lock @@ -1477,6 +1477,14 @@ dependencies = [ ] [package.optional-dependencies] +ui = [ + { name = "llama-stack-client" }, + { name = "pandas" }, + { name = "streamlit" }, + { name = "streamlit-option-menu" }, +] + +[package.dev-dependencies] codegen = [ { name = "jinja2" }, { name = "pydantic" }, @@ -1533,12 +1541,6 @@ test = [ { name = "torchvision", version = "0.21.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, { name = "transformers" }, ] -ui = [ - { name = "llama-stack-client" }, - { name = "pandas" }, - { name = "streamlit" }, - { name = "streamlit-option-menu" }, -] unit = [ { name = "aiohttp" }, { name = "aiosqlite" }, @@ -1555,89 +1557,101 @@ unit = [ [package.metadata] requires-dist = [ - { name = "aiohttp", marker = "extra == 'test'" }, - { name = "aiohttp", marker = "extra == 'unit'" }, - { name = "aiosqlite", marker = "extra == 'test'" }, - { name = "aiosqlite", marker = "extra == 'unit'" }, - { name = "autoevals", marker = "extra == 'test'" }, - { name = "black", marker = "extra == 'dev'" }, - { name = "blobfile", marker = "extra == 'unit'" }, - { name = "chardet", marker = "extra == 'test'" }, - { name = "chardet", marker = "extra == 'unit'" }, - { name = "datasets", marker = "extra == 'test'" }, - { name = "fastapi", marker = "extra == 'dev'" }, { name = "fire" }, { name = "h11", specifier = ">=0.16.0" }, { name = "httpx" }, { name = "huggingface-hub" }, { name = "jinja2", specifier = ">=3.1.6" }, - { name = "jinja2", marker = "extra == 'codegen'", specifier = ">=3.1.6" }, { name = "jsonschema" }, - { name = "linkify", marker = "extra == 'docs'" }, { name = "llama-stack-client", specifier = ">=0.2.8" }, { name = "llama-stack-client", marker = "extra == 'ui'", specifier = ">=0.2.8" }, - { name = "mcp", marker = "extra == 'test'" }, - { name = "mcp", marker = "extra == 'unit'" }, - { name = "myst-parser", marker = "extra == 'docs'" }, - { name = "nbval", marker = "extra == 'dev'" }, { name = "openai", specifier = ">=1.66" }, - { name = "openai", marker = "extra == 'test'" }, - { name = "openai", marker = "extra == 'unit'" }, - { name = "opentelemetry-exporter-otlp-proto-http", marker = "extra == 'test'" }, - { name = "opentelemetry-exporter-otlp-proto-http", marker = "extra == 'unit'" }, - { name = "opentelemetry-sdk", marker = "extra == 'test'" }, { name = "pandas", marker = "extra == 'ui'" }, { name = "pillow" }, - { name = "pre-commit", marker = "extra == 'dev'" }, { name = "prompt-toolkit" }, { name = "pydantic", specifier = ">=2" }, - { name = "pydantic", marker = "extra == 'codegen'" }, - { name = "pypdf", marker = "extra == 'test'" }, - { name = "pypdf", marker = "extra == 'unit'" }, - { name = "pytest", marker = "extra == 'dev'" }, - { name = "pytest-asyncio", marker = "extra == 'dev'" }, - { name = "pytest-cov", marker = "extra == 'dev'" }, - { name = "pytest-html", marker = "extra == 'dev'" }, - { name = "pytest-json-report", marker = "extra == 'dev'" }, - { name = "pytest-timeout", marker = "extra == 'dev'" }, { name = "python-dotenv" }, { name = "python-jose" }, - { name = "qdrant-client", marker = "extra == 'unit'" }, { name = "requests" }, { name = "rich" }, - { name = "rich", marker = "extra == 'codegen'" }, - { name = "ruamel-yaml", marker = "extra == 'dev'" }, - { name = "ruff", marker = "extra == 'dev'" }, { name = "setuptools" }, - { name = "sphinx", marker = "extra == 'docs'" }, - { name = "sphinx-autobuild", marker = "extra == 'docs'" }, - { name = "sphinx-copybutton", marker = "extra == 'docs'" }, - { name = "sphinx-design", marker = "extra == 'docs'" }, - { name = "sphinx-rtd-dark-mode", marker = "extra == 'docs'" }, - { name = "sphinx-rtd-theme", marker = "extra == 'docs'" }, - { name = "sphinx-tabs", marker = "extra == 'docs'" }, - { name = "sphinxcontrib-mermaid", marker = "extra == 'docs'" }, - { name = "sphinxcontrib-openapi", marker = "extra == 'docs'" }, - { name = "sphinxcontrib-redoc", marker = "extra == 'docs'" }, - { name = "sphinxcontrib-video", marker = "extra == 'docs'" }, - { name = "sqlalchemy", marker = "extra == 'test'" }, - { name = "sqlalchemy", marker = "extra == 'unit'" }, - { name = "sqlalchemy", extras = ["asyncio"], marker = "extra == 'test'", specifier = ">=2.0.41" }, - { name = "sqlalchemy", extras = ["asyncio"], marker = "extra == 'unit'", specifier = ">=2.0.41" }, - { name = "sqlite-vec", marker = "extra == 'unit'" }, { name = "streamlit", marker = "extra == 'ui'" }, { name = "streamlit-option-menu", marker = "extra == 'ui'" }, { name = "termcolor" }, { name = "tiktoken" }, - { name = "tomli", marker = "extra == 'docs'" }, - { name = "torch", marker = "extra == 'test'", specifier = ">=2.6.0", index = "https://download.pytorch.org/whl/cpu" }, - { name = "torchvision", marker = "extra == 'test'", specifier = ">=0.21.0", index = "https://download.pytorch.org/whl/cpu" }, - { name = "transformers", marker = "extra == 'test'" }, - { name = "types-requests", marker = "extra == 'dev'" }, - { name = "types-setuptools", marker = "extra == 'dev'" }, - { name = "uvicorn", marker = "extra == 'dev'" }, ] -provides-extras = ["dev", "unit", "test", "docs", "codegen", "ui"] +provides-extras = ["ui"] + +[package.metadata.requires-dev] +codegen = [ + { name = "jinja2", specifier = ">=3.1.6" }, + { name = "pydantic" }, + { name = "rich" }, +] +dev = [ + { name = "black" }, + { name = "fastapi" }, + { name = "nbval" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-cov" }, + { name = "pytest-html" }, + { name = "pytest-json-report" }, + { name = "pytest-timeout" }, + { name = "ruamel-yaml" }, + { name = "ruff" }, + { name = "types-requests" }, + { name = "types-setuptools" }, + { name = "uvicorn" }, +] +docs = [ + { name = "linkify" }, + { name = "myst-parser" }, + { name = "sphinx" }, + { name = "sphinx-autobuild" }, + { name = "sphinx-copybutton" }, + { name = "sphinx-design" }, + { name = "sphinx-rtd-dark-mode" }, + { name = "sphinx-rtd-theme" }, + { name = "sphinx-tabs" }, + { name = "sphinxcontrib-mermaid" }, + { name = "sphinxcontrib-openapi" }, + { name = "sphinxcontrib-redoc" }, + { name = "sphinxcontrib-video" }, + { name = "tomli" }, +] +test = [ + { name = "aiohttp" }, + { name = "aiosqlite" }, + { name = "autoevals" }, + { name = "chardet" }, + { name = "datasets" }, + { name = "mcp" }, + { name = "openai" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "opentelemetry-sdk" }, + { name = "pypdf" }, + { name = "sqlalchemy" }, + { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0.41" }, + { name = "torch", specifier = ">=2.6.0", index = "https://download.pytorch.org/whl/cpu" }, + { name = "torchvision", specifier = ">=0.21.0", index = "https://download.pytorch.org/whl/cpu" }, + { name = "transformers" }, +] +unit = [ + { name = "aiohttp" }, + { name = "aiosqlite" }, + { name = "blobfile" }, + { name = "chardet" }, + { name = "mcp" }, + { name = "openai" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "pypdf" }, + { name = "qdrant-client" }, + { name = "sqlalchemy" }, + { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0.41" }, + { name = "sqlite-vec" }, +] [[package]] name = "llama-stack-client"