diff --git a/pyproject.toml b/pyproject.toml index 3e16dc08f..688318dd1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,6 +50,7 @@ dependencies = [ "asyncpg", # for metadata store "sqlalchemy[asyncio]>=2.0.41", # server - for conversations "starlette>=0.49.1", + "psycopg2-binary", ] [project.optional-dependencies] diff --git a/src/llama_stack/core/build.py b/src/llama_stack/core/build.py index 757763bd1..ef64f2036 100644 --- a/src/llama_stack/core/build.py +++ b/src/llama_stack/core/build.py @@ -43,7 +43,6 @@ def get_provider_dependencies( config = config.build_config() providers = config.providers - additional_pip_packages = config.additional_pip_packages deps = [] external_provider_deps = [] @@ -81,8 +80,6 @@ def get_provider_dependencies( else: normal_deps.append(package) - normal_deps.extend(additional_pip_packages or []) - return list(set(normal_deps)), list(set(special_deps)), list(set(external_provider_deps)) diff --git a/src/llama_stack/core/datatypes.py b/src/llama_stack/core/datatypes.py index 245491332..94d235678 100644 --- a/src/llama_stack/core/datatypes.py +++ b/src/llama_stack/core/datatypes.py @@ -535,11 +535,6 @@ can be instantiated multiple times (with different configs) if necessary. description="Configuration for the HTTP(S) server", ) - additional_pip_packages: list[str] = Field( - default_factory=list, - description="Additional pip packages to install in the distribution. These packages will be installed in the distribution environment.", - ) - external_providers_dir: Path | None = Field( default=None, description="Path to directory containing external provider implementations. The providers code and dependencies must be installed on the system.", @@ -631,10 +626,6 @@ class BuildConfig(BaseModel): description="Path to directory containing external provider implementations. The providers packages will be resolved from this directory. " "pip_packages MUST contain the provider package name.", ) - additional_pip_packages: list[str] = Field( - default_factory=list, - description="Additional pip packages to install in the distribution. These packages will be installed in the distribution environment.", - ) external_apis_dir: Path | None = Field( default=None, description="Path to directory containing external API implementations. The APIs code and dependencies must be installed on the system.", diff --git a/src/llama_stack/distributions/ci-tests/build.yaml b/src/llama_stack/distributions/ci-tests/build.yaml index f29ac7712..a4a9b6354 100644 --- a/src/llama_stack/distributions/ci-tests/build.yaml +++ b/src/llama_stack/distributions/ci-tests/build.yaml @@ -53,8 +53,3 @@ distribution_spec: batches: - provider_type: inline::reference image_type: venv -additional_pip_packages: -- aiosqlite -- asyncpg -- psycopg2-binary -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/dell/build.yaml b/src/llama_stack/distributions/dell/build.yaml index 7bc26ca9e..2c809e0fe 100644 --- a/src/llama_stack/distributions/dell/build.yaml +++ b/src/llama_stack/distributions/dell/build.yaml @@ -28,6 +28,3 @@ distribution_spec: - provider_type: remote::tavily-search - provider_type: inline::rag-runtime image_type: venv -additional_pip_packages: -- aiosqlite -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/meta-reference-gpu/build.yaml b/src/llama_stack/distributions/meta-reference-gpu/build.yaml index 1513742a7..62a845b83 100644 --- a/src/llama_stack/distributions/meta-reference-gpu/build.yaml +++ b/src/llama_stack/distributions/meta-reference-gpu/build.yaml @@ -27,6 +27,3 @@ distribution_spec: - provider_type: inline::rag-runtime - provider_type: remote::model-context-protocol image_type: venv -additional_pip_packages: -- aiosqlite -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/nvidia/build.yaml b/src/llama_stack/distributions/nvidia/build.yaml index 8ddd12439..86e085575 100644 --- a/src/llama_stack/distributions/nvidia/build.yaml +++ b/src/llama_stack/distributions/nvidia/build.yaml @@ -24,6 +24,3 @@ distribution_spec: files: - provider_type: inline::localfs image_type: venv -additional_pip_packages: -- aiosqlite -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/oci/build.yaml b/src/llama_stack/distributions/oci/build.yaml index 7e082e1f6..ac9fe967d 100644 --- a/src/llama_stack/distributions/oci/build.yaml +++ b/src/llama_stack/distributions/oci/build.yaml @@ -30,6 +30,3 @@ distribution_spec: files: - provider_type: inline::localfs image_type: venv -additional_pip_packages: -- aiosqlite -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/open-benchmark/build.yaml b/src/llama_stack/distributions/open-benchmark/build.yaml index 05acd98e3..9613ef60d 100644 --- a/src/llama_stack/distributions/open-benchmark/build.yaml +++ b/src/llama_stack/distributions/open-benchmark/build.yaml @@ -31,6 +31,3 @@ distribution_spec: - provider_type: inline::rag-runtime - provider_type: remote::model-context-protocol image_type: venv -additional_pip_packages: -- aiosqlite -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/starter-gpu/build.yaml b/src/llama_stack/distributions/starter-gpu/build.yaml index 10cbb1389..57ba12dc4 100644 --- a/src/llama_stack/distributions/starter-gpu/build.yaml +++ b/src/llama_stack/distributions/starter-gpu/build.yaml @@ -54,8 +54,3 @@ distribution_spec: batches: - provider_type: inline::reference image_type: venv -additional_pip_packages: -- aiosqlite -- asyncpg -- psycopg2-binary -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/starter/build.yaml b/src/llama_stack/distributions/starter/build.yaml index acd51f773..9fe7ccd14 100644 --- a/src/llama_stack/distributions/starter/build.yaml +++ b/src/llama_stack/distributions/starter/build.yaml @@ -54,8 +54,3 @@ distribution_spec: batches: - provider_type: inline::reference image_type: venv -additional_pip_packages: -- aiosqlite -- asyncpg -- psycopg2-binary -- sqlalchemy[asyncio] diff --git a/src/llama_stack/distributions/starter/starter.py b/src/llama_stack/distributions/starter/starter.py index 32264eebb..8a0efdf1f 100644 --- a/src/llama_stack/distributions/starter/starter.py +++ b/src/llama_stack/distributions/starter/starter.py @@ -275,7 +275,6 @@ def get_distribution_template(name: str = "starter") -> DistributionTemplate: container_image=None, template_path=None, providers=providers, - additional_pip_packages=list(set(PostgresSqlStoreConfig.pip_packages() + PostgresKVStoreConfig.pip_packages())), run_configs={ "run.yaml": base_run_settings, "run-with-postgres-store.yaml": postgres_run_settings, diff --git a/src/llama_stack/distributions/template.py b/src/llama_stack/distributions/template.py index 90b458805..a8e5f2839 100644 --- a/src/llama_stack/distributions/template.py +++ b/src/llama_stack/distributions/template.py @@ -36,9 +36,7 @@ from llama_stack.core.storage.datatypes import ( StorageBackendType, ) from llama_stack.core.storage.kvstore.config import SqliteKVStoreConfig -from llama_stack.core.storage.kvstore.config import get_pip_packages as get_kv_pip_packages from llama_stack.core.storage.sqlstore.sqlstore import SqliteSqlStoreConfig -from llama_stack.core.storage.sqlstore.sqlstore import get_pip_packages as get_sql_pip_packages from llama_stack.core.utils.dynamic import instantiate_class_type from llama_stack.core.utils.image_types import LlamaStackImageType from llama_stack.providers.utils.inference.model_registry import ProviderModelEntry @@ -322,33 +320,7 @@ class DistributionTemplate(BaseModel): available_models_by_provider: dict[str, list[ProviderModelEntry]] | None = None - # we may want to specify additional pip packages without necessarily indicating a - # specific "default" inference store (which is what typically used to dictate additional - # pip packages) - additional_pip_packages: list[str] | None = None - def build_config(self) -> BuildConfig: - additional_pip_packages: list[str] = [] - for run_config in self.run_configs.values(): - run_config_ = run_config.run_config(self.name, self.providers, self.container_image) - - # TODO: This is a hack to get the dependencies for internal APIs into build - # We should have a better way to do this by formalizing the concept of "internal" APIs - # and providers, with a way to specify dependencies for them. - - storage_cfg = run_config_.get("storage", {}) - for backend_cfg in storage_cfg.get("backends", {}).values(): - store_type = backend_cfg.get("type") - if not store_type: - continue - if str(store_type).startswith("kv_"): - additional_pip_packages.extend(get_kv_pip_packages(backend_cfg)) - elif str(store_type).startswith("sql_"): - additional_pip_packages.extend(get_sql_pip_packages(backend_cfg)) - - if self.additional_pip_packages: - additional_pip_packages.extend(self.additional_pip_packages) - # Create minimal providers for build config (without runtime configs) build_providers = {} for api, providers in self.providers.items(): @@ -368,7 +340,6 @@ class DistributionTemplate(BaseModel): providers=build_providers, ), image_type=LlamaStackImageType.VENV.value, # default to venv - additional_pip_packages=sorted(set(additional_pip_packages)), ) def generate_markdown_docs(self) -> str: diff --git a/src/llama_stack/distributions/watsonx/build.yaml b/src/llama_stack/distributions/watsonx/build.yaml index dba1a94e2..8fc27c8c8 100644 --- a/src/llama_stack/distributions/watsonx/build.yaml +++ b/src/llama_stack/distributions/watsonx/build.yaml @@ -28,6 +28,3 @@ distribution_spec: files: - provider_type: inline::localfs image_type: venv -additional_pip_packages: -- aiosqlite -- sqlalchemy[asyncio] diff --git a/tests/external/ramalama-stack/build.yaml b/tests/external/ramalama-stack/build.yaml index 150edb4fb..4403339f1 100644 --- a/tests/external/ramalama-stack/build.yaml +++ b/tests/external/ramalama-stack/build.yaml @@ -8,6 +8,3 @@ distribution_spec: module: ramalama_stack==0.3.0a0 image_type: venv image_name: ramalama-stack-test -additional_pip_packages: -- aiosqlite -- sqlalchemy[asyncio] diff --git a/uv.lock b/uv.lock index 8c648c362..a3ca9881c 100644 --- a/uv.lock +++ b/uv.lock @@ -2008,6 +2008,7 @@ dependencies = [ { name = "opentelemetry-sdk" }, { name = "pillow" }, { name = "prompt-toolkit" }, + { name = "psycopg2-binary" }, { name = "pydantic" }, { name = "pyjwt", extra = ["crypto"] }, { name = "python-dotenv" }, @@ -2160,6 +2161,7 @@ requires-dist = [ { name = "opentelemetry-sdk", specifier = ">=1.30.0" }, { name = "pillow" }, { name = "prompt-toolkit" }, + { name = "psycopg2-binary" }, { name = "pydantic", specifier = ">=2.11.9" }, { name = "pyjwt", extras = ["crypto"], specifier = ">=2.10.0" }, { name = "python-dotenv" },