Skip to content

Commit 5009017

Browse files
committed
fix(deps): make OCI dependencies optional
Signed-off-by: Sumanth Kamenani <skamenan@redhat.com>
1 parent b104ecc commit 5009017

3 files changed

Lines changed: 74 additions & 15 deletions

File tree

pyproject.toml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,18 @@ dependencies = [
5757
"psycopg2-binary",
5858
"tornado>=6.5.3",
5959
"urllib3>=2.6.3",
60-
"oracledb>=3.4.1",
61-
"oci>=2.165.0",
62-
"numpy>=2.3.2",
6360
"mcp>=1.23.0", # for connectors
6461
]
6562

6663
[project.optional-dependencies]
6764
client = [
6865
"llama-stack-client==0.5.2", # Optional for library-only usage
6966
]
67+
oci = [
68+
"numpy>=2.3.2",
69+
"oci>=2.165.0",
70+
"oracledb>=3.4.1",
71+
]
7072

7173
[dependency-groups]
7274
dev = [

tests/unit/distribution/test_stack_list_deps.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
# the root directory of this source tree.
66

77
import argparse
8+
import tomllib
89
from io import StringIO
10+
from pathlib import Path
911
from unittest.mock import patch
1012

1113
from llama_stack.cli.stack._list_deps import (
@@ -14,6 +16,27 @@
1416
)
1517

1618

19+
def _package_names(dependencies: list[str]) -> set[str]:
20+
return {
21+
dependency.split("[", 1)[0].split("<", 1)[0].split(">", 1)[0].split("=", 1)[0] for dependency in dependencies
22+
}
23+
24+
25+
def _output_deps(output: str) -> set[str]:
26+
return {dependency.strip("'") for dependency in output.split()}
27+
28+
29+
def test_base_dependencies_do_not_include_oci():
30+
pyproject = tomllib.loads(Path("pyproject.toml").read_text())
31+
base_dependencies = _package_names(pyproject["project"]["dependencies"])
32+
oci_extra = _package_names(pyproject["project"]["optional-dependencies"]["oci"])
33+
34+
assert "oci" not in base_dependencies
35+
assert "oracledb" not in base_dependencies
36+
assert "oci" in oci_extra
37+
assert "oracledb" in oci_extra
38+
39+
1740
def test_stack_list_deps_basic():
1841
args = argparse.Namespace(
1942
config=None,
@@ -51,6 +74,38 @@ def test_stack_list_deps_with_distro_uv():
5174
assert "uv pip install" in output
5275

5376

77+
def test_starter_distro_list_deps_does_not_include_oci():
78+
args = argparse.Namespace(
79+
config="starter",
80+
env_name=None,
81+
providers=None,
82+
format="deps-only",
83+
)
84+
85+
with patch("sys.stdout", new_callable=StringIO) as mock_stdout:
86+
run_stack_list_deps_command(args)
87+
output = mock_stdout.getvalue()
88+
89+
deps = _output_deps(output)
90+
assert "oci" not in deps
91+
assert "oracledb" not in deps
92+
93+
94+
def test_explicit_oci_provider_still_lists_oci_dependency():
95+
args = argparse.Namespace(
96+
config=None,
97+
env_name="test-env",
98+
providers="inference=remote::oci",
99+
format="deps-only",
100+
)
101+
102+
with patch("sys.stdout", new_callable=StringIO) as mock_stdout:
103+
run_stack_list_deps_command(args)
104+
output = mock_stdout.getvalue()
105+
106+
assert "oci" in _output_deps(output)
107+
108+
54109
def test_list_deps_formatting_quotes_only_for_uv():
55110
deps_only = format_output_deps_only(["mcp>=1.23.0"], [], [], uv=False)
56111
assert deps_only.strip() == "mcp>=1.23.0"

uv.lock

Lines changed: 14 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)