From 586d1d09c85a5233d6926898b4bc9b283e3dadf8 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 2 Apr 2026 12:34:24 +0800 Subject: [PATCH 1/6] Fix quickstart dependency resolution and CLI integration tests --- .github/workflows/ci-test.yml | 2 +- pyproject.toml | 6 ++++-- src/sage/studio/_version.py | 2 +- tests/integration/test_studio_cli.py | 21 +++++++++------------ 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index bb67d3c..554ee07 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -169,7 +169,7 @@ jobs: - name: Install dependencies run: | pip install --upgrade pip - pip install ruff==0.15.4 + pip install "ruff>=0.14.0,<0.16.0" - name: Run Ruff run: | diff --git a/pyproject.toml b/pyproject.toml index 16e8ecf..a74a389 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,7 +56,8 @@ dependencies = [ "isage-finetune>=0.1.0.5", # Backend API dependencies - "pydantic[email]>=2.10.0,<3.0.0", + "pydantic>=2.10.0,<3.0.0", + "email-validator>=2.2.0", "fastapi>=0.115.0,<1.0.0", "starlette>=0.40,<0.53", "uvicorn[standard]>=0.34.0,<1.0.0", @@ -93,9 +94,10 @@ full = [ ] dev = [ + "isage-studio[full]", "pytest>=7.4.0", "pytest-asyncio>=0.21.0", - "ruff==0.15.4", + "ruff>=0.14.0,<0.16.0", "isage-pypi-publisher>=0.2.1.0", ] diff --git a/src/sage/studio/_version.py b/src/sage/studio/_version.py index 57d195e..77fb9f5 100644 --- a/src/sage/studio/_version.py +++ b/src/sage/studio/_version.py @@ -1,6 +1,6 @@ """Version information for sage-studio package.""" # 独立硬编码版本 -__version__ = "0.2.4.37" +__version__ = "0.2.4.38" __author__ = "IntelliStream Team" __email__ = "shuhao_zhang@hust.edu.cn" diff --git a/tests/integration/test_studio_cli.py b/tests/integration/test_studio_cli.py index 4f655a0..819cd86 100644 --- a/tests/integration/test_studio_cli.py +++ b/tests/integration/test_studio_cli.py @@ -5,11 +5,10 @@ from unittest.mock import patch import pytest - -# Import from sage-cli (which hosts the studio command) -from sage.cli.main import app as sage_app from typer.testing import CliRunner +from sage.studio.cli import app as studio_app + # Test runner runner = CliRunner() @@ -88,9 +87,7 @@ def test_studio_start_command(mock_studio_manager): """Test that 'sage studio start' command works.""" # Patch at the import location before CLI invocation with patch("sage.studio.cli.studio_manager", mock_studio_manager): - result = runner.invoke( - sage_app, ["studio", "start", "--host", "127.0.0.1", "--port", "9001"] - ) + result = runner.invoke(studio_app, ["start", "--host", "127.0.0.1", "--port", "9001"]) # Print output for debugging if result.exit_code != 0: print(f"Exit code: {result.exit_code}") @@ -108,7 +105,7 @@ def test_studio_start_command(mock_studio_manager): def test_studio_status_command(mock_studio_manager): """Test that 'sage studio status' command works.""" with patch("sage.studio.cli.studio_manager", mock_studio_manager): - result = runner.invoke(sage_app, ["studio", "status"]) + result = runner.invoke(studio_app, ["status"]) assert result.exit_code == 0 @@ -118,7 +115,7 @@ def test_studio_stop_command(mock_studio_manager): mock_studio_manager._running = True with patch("sage.studio.cli.studio_manager", mock_studio_manager): - result = runner.invoke(sage_app, ["studio", "stop"]) + result = runner.invoke(studio_app, ["stop"]) assert result.exit_code == 0 # After stop command, manager should not be running assert mock_studio_manager._running is False @@ -127,20 +124,20 @@ def test_studio_stop_command(mock_studio_manager): def test_studio_install_command(mock_studio_manager): """Test that 'sage studio install' command works.""" with patch("sage.studio.cli.studio_manager", mock_studio_manager): - result = runner.invoke(sage_app, ["studio", "install"]) + result = runner.invoke(studio_app, ["install"]) assert result.exit_code == 0 def test_studio_build_command(mock_studio_manager): """Test that 'sage studio build' command works.""" with patch("sage.studio.cli.studio_manager", mock_studio_manager): - result = runner.invoke(sage_app, ["studio", "build"]) + result = runner.invoke(studio_app, ["build"]) assert result.exit_code == 0 def test_studio_help_command(): """Test that 'sage studio --help' command works.""" - result = runner.invoke(sage_app, ["studio", "--help"]) + result = runner.invoke(studio_app, ["--help"]) assert result.exit_code == 0 assert "Studio" in result.stdout or "studio" in result.stdout @@ -148,6 +145,6 @@ def test_studio_help_command(): def test_studio_npm_command(mock_studio_manager): """Test that 'sage studio npm install' command works.""" with patch("sage.studio.cli.studio_manager", mock_studio_manager): - result = runner.invoke(sage_app, ["studio", "npm", "install"]) + result = runner.invoke(studio_app, ["npm", "install"]) assert result.exit_code == 0 assert getattr(mock_studio_manager, "_last_npm", None) == ["install"] From d338f19a69a73621a4a69cb46b3d89386d478317 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 2 Apr 2026 12:45:10 +0800 Subject: [PATCH 2/6] Fix Python 3.10 finetune dependency resolution --- pyproject.toml | 4 +++- src/sage/studio/_version.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a74a389..c938c9e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,9 @@ dependencies = [ "isage-data>=0.2.3.2", # Dataset management (used by finetune data endpoints) # Fine-tune dependencies (independent package) - "isage-finetune>=0.1.0.5", + # PyPI currently exposes newer finetune builds for 3.11+ while 3.10 resolves up to 0.1.0.3. + "isage-finetune>=0.1.0.3; python_version == '3.10'", + "isage-finetune>=0.1.0.5; python_version >= '3.11'", # Backend API dependencies "pydantic>=2.10.0,<3.0.0", diff --git a/src/sage/studio/_version.py b/src/sage/studio/_version.py index 77fb9f5..fc6e1fe 100644 --- a/src/sage/studio/_version.py +++ b/src/sage/studio/_version.py @@ -1,6 +1,6 @@ """Version information for sage-studio package.""" # 独立硬编码版本 -__version__ = "0.2.4.38" +__version__ = "0.2.4.39" __author__ = "IntelliStream Team" __email__ = "shuhao_zhang@hust.edu.cn" From 4a7f9243d05d63634afda04c9e5c46dfcb52d782 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 2 Apr 2026 13:48:12 +0800 Subject: [PATCH 3/6] Gate Python-specific dependency floors for CI compatibility --- pyproject.toml | 7 +++++-- src/sage/studio/_version.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c938c9e..cc15e5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,7 +75,9 @@ dependencies = [ "packaging>=24.0,<27.0", # 兼容 streamlit 等版本 # SAGE kernel integration (includes sage.middleware.* pipeline layer) - "isage-kernel>=0.2.5.0", + # Py3.10 resolves kernel up to 0.2.4.13; newer builds target 3.11+. + "isage-kernel>=0.2.4.13; python_version == '3.10'", + "isage-kernel>=0.2.5.0; python_version >= '3.11'", "isage-vida>=0.1.0", ] @@ -84,7 +86,8 @@ license = { text = "MIT" } [project.optional-dependencies] full = [ # Continual-learning / coreset selection for tool-use features - "isage-sias>=0.1.0", + # SIAS wheels are not currently published for Python 3.10. + "isage-sias>=0.1.0; python_version >= '3.11'", # Backend API / auth / config helpers (optional for lightweight studio installs) "aiofiles>=23.0.0", "configparser>=5.3.0", diff --git a/src/sage/studio/_version.py b/src/sage/studio/_version.py index fc6e1fe..0f1f248 100644 --- a/src/sage/studio/_version.py +++ b/src/sage/studio/_version.py @@ -1,6 +1,6 @@ """Version information for sage-studio package.""" # 独立硬编码版本 -__version__ = "0.2.4.39" +__version__ = "0.2.4.40" __author__ = "IntelliStream Team" __email__ = "shuhao_zhang@hust.edu.cn" From 9093c230cd86f0ca094c7ec8c6c6e653f381cef4 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 2 Apr 2026 13:54:23 +0800 Subject: [PATCH 4/6] Gate isage-agentic on Python 3.11+ --- pyproject.toml | 5 +++-- src/sage/studio/_version.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index cc15e5f..dd5ddd2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,8 +43,9 @@ dependencies = [ "isagellm>=0.5.4.3", # Agentic dependencies (independent packages) - "isage-agentic>=0.1.0.3", - "isage-libs-intent>=0.1.0.7", # Intent recognition (L3) + # Python 3.10 CI cannot resolve transitive dependency isage-intent from isage-agentic. + "isage-agentic>=0.1.0.3; python_version >= '3.11'", + "isage-libs-intent>=0.1.0.7", # Intent recognition (L3) # Memory management (independent package) "isage-neuromem>=0.2.1.4", # Memory collection & vector storage (L4) diff --git a/src/sage/studio/_version.py b/src/sage/studio/_version.py index 0f1f248..e445b03 100644 --- a/src/sage/studio/_version.py +++ b/src/sage/studio/_version.py @@ -1,6 +1,6 @@ """Version information for sage-studio package.""" # 独立硬编码版本 -__version__ = "0.2.4.40" +__version__ = "0.2.4.41" __author__ = "IntelliStream Team" __email__ = "shuhao_zhang@hust.edu.cn" From 15e12a09280a89ff604099d6f16991d99f32d8ed Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 2 Apr 2026 14:20:36 +0800 Subject: [PATCH 5/6] Gate isage-neuromem on Python 3.11+ --- pyproject.toml | 3 ++- src/sage/studio/_version.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dd5ddd2..912741f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,8 @@ dependencies = [ "isage-libs-intent>=0.1.0.7", # Intent recognition (L3) # Memory management (independent package) - "isage-neuromem>=0.2.1.4", # Memory collection & vector storage (L4) + # Python 3.10 CI cannot resolve neuromem transitive dependency isage-libs>=0.2.4.29. + "isage-neuromem>=0.2.1.4; python_version >= '3.11'", # Memory collection & vector storage (L4) # Data management (independent package) "isage-data>=0.2.3.2", # Dataset management (used by finetune data endpoints) diff --git a/src/sage/studio/_version.py b/src/sage/studio/_version.py index e445b03..c66aee7 100644 --- a/src/sage/studio/_version.py +++ b/src/sage/studio/_version.py @@ -1,6 +1,6 @@ """Version information for sage-studio package.""" # 独立硬编码版本 -__version__ = "0.2.4.41" +__version__ = "0.2.4.42" __author__ = "IntelliStream Team" __email__ = "shuhao_zhang@hust.edu.cn" From ed6718d575d9d97bcdc7c29782bc6c55894d04db Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 2 Apr 2026 14:36:32 +0800 Subject: [PATCH 6/6] Fix py310 resolver by gating isage-common deps --- pyproject.toml | 9 ++++++--- src/sage/studio/_version.py | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 912741f..f365be0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,8 @@ dependencies = [ "isage>=0.2.4.21", # Flownet runtime (distributed dataflow execution, replaces Ray) - "isage-flownet>=0.1.1", + # Python 3.10 CI cannot resolve transitive dependency isage-common from flownet. + "isage-flownet>=0.1.1; python_version >= '3.11'", # sageLLM - IntelliStream自研推理引擎(包含Gateway、Control Plane、Backend等完整推理能力) "isagellm>=0.5.4.3", @@ -52,7 +53,8 @@ dependencies = [ "isage-neuromem>=0.2.1.4; python_version >= '3.11'", # Memory collection & vector storage (L4) # Data management (independent package) - "isage-data>=0.2.3.2", # Dataset management (used by finetune data endpoints) + # Python 3.10 CI cannot resolve transitive dependency isage-common from data. + "isage-data>=0.2.3.2; python_version >= '3.11'", # Dataset management (used by finetune data endpoints) # Fine-tune dependencies (independent package) # PyPI currently exposes newer finetune builds for 3.11+ while 3.10 resolves up to 0.1.0.3. @@ -80,7 +82,8 @@ dependencies = [ # Py3.10 resolves kernel up to 0.2.4.13; newer builds target 3.11+. "isage-kernel>=0.2.4.13; python_version == '3.10'", "isage-kernel>=0.2.5.0; python_version >= '3.11'", - "isage-vida>=0.1.0", + # Python 3.10 CI cannot resolve transitive dependency isage-common from vida. + "isage-vida>=0.1.0; python_version >= '3.11'", ] license = { text = "MIT" } diff --git a/src/sage/studio/_version.py b/src/sage/studio/_version.py index c66aee7..8278f4d 100644 --- a/src/sage/studio/_version.py +++ b/src/sage/studio/_version.py @@ -1,6 +1,6 @@ """Version information for sage-studio package.""" # 独立硬编码版本 -__version__ = "0.2.4.42" +__version__ = "0.2.4.43" __author__ = "IntelliStream Team" __email__ = "shuhao_zhang@hust.edu.cn"