Skip to content

Updated code due to dependencies' API changes#583

Merged
MMelQin merged 11 commits into
mainfrom
mq/updates_for_newer_dependencies
Jun 8, 2026
Merged

Updated code due to dependencies' API changes#583
MMelQin merged 11 commits into
mainfrom
mq/updates_for_newer_dependencies

Conversation

@MMelQin

@MMelQin MMelQin commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Update the code due to changes in the following dependencies:

  • nvimgcodec
  • holoscan in v4.1
  • holoscan-cli in v4.1 and its v4.2 support holoscan v4.2 and older

Summary by CodeRabbit

  • Chores

    • Pinned holoscan dependencies to >=4.0.0,<4.3.0
    • Added extras support for nvidia-nvimgcodec-cu12
    • Improved Holoscan import/initialization handling to be more robust across installations
  • Documentation

    • Refreshed tutorial notebooks to remove captured outputs
    • Updated packaging examples to include CUDA 12 and dynamically derive Holoscan CLI manifest versions (Edit: later removed as the default URL path for the manifest file had been restored)
  • Bug Fixes

    • Preserved expected graph export behavior for downstream workflows and improved compatibility

Signed-off-by: M Q <mingmelvinq@nvidia.com>
@MMelQin MMelQin requested a review from Copilot June 4, 2026 06:54
@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds runtime holoscan init generation and graphs import fallback for Holoscan layout changes, pins Holoscan deps, clears notebook execution outputs, and updates notebook packaging to compute holoscan_cli manifest URLs and include --cuda 12.

Changes

Holoscan 4.1+ compatibility and packaging updates

Layer / File(s) Summary
Runtime holoscan init template & requirements
monai/deploy/utils/importutil.py, requirements.txt, requirements-examples.txt
Detect installed holoscan layout (flow_graphs vs graphs), build/write a computed holoscan/__init__.py lazy-import template, pin holoscan-cu12 and holoscan-cli to >=4.0.0,<4.3.0, and require nvidia-nvimgcodec-cu12[all]>=0.6.1.
Graphs import fallback and alias
monai/deploy/graphs/__init__.py
Try importing holoscan.flow_graphs, fall back to holoscan.graphs only when appropriate, and alias FlowGraph = FlowGraphImpl when the symbol was renamed; set explicit __all__ in the flow_graphs path.
Operator import cleanup
monai/deploy/operators/monet_bundle_inference_operator.py
Remove unused import symbol and reorder/rewrap imports; no runtime logic changes.
Model registry typing
monai/deploy/core/models/model.py
Add explicit type annotation to REGISTERED_MODELS: List[type[\"Model\"]] = [].
Mypy config update
setup.cfg
Enable namespace packages and explicit package bases; extend mypy exclude to skip examples and models.
Notebook: mednist prebuilt packaging & output cleanup
notebooks/tutorials/02_mednist_app-prebuilt.ipynb
Clear execution outputs and update packaging to compute manifest_url from holoscan_cli.__version__, passing it via --source and adding --cuda 12.
Notebook: mednist packaging, generated app init, and output cleanup
notebooks/tutorials/02_mednist_app.ipynb
Clear execution outputs; update packaging to derive manifest_url and add --cuda 12 --source; generated script now initializes app context with AppContext({}).
Notebook: segmentation packaging & output cleanup
notebooks/tutorials/03_segmentation_app.ipynb
Clear execution outputs and update packaging to compute manifest_url and use --cuda 12 --source.
Notebook: multi-model app updates & output cleanup
notebooks/tutorials/05_multi_model_app.ipynb
Clear execution outputs; update generated my_app/app.py to use Application.init_app_context({}) and remove module-level if __name__ == "__main__": block; update packaging to compute manifest_url and add --cuda 12 --source.

Sequence Diagram

sequenceDiagram
    participant NotebookClient
    participant holoscan_cli
    participant monai_deploy
    participant HoloscanManifest as HoloscanCLIManifest
    NotebookClient->>holoscan_cli: import __version__
    holoscan_cli-->>NotebookClient: version string
    NotebookClient->>NotebookClient: build manifest_url from version
    NotebookClient->>monai_deploy: call package --cuda 12 --source {manifest_url}
    monai_deploy->>HoloscanManifest: fetch manifest_url
    HoloscanManifest-->>monai_deploy: return manifest/config
    monai_deploy-->>NotebookClient: produce packaged image
Loading

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested reviewers:

  • chezhia
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 57.14% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the main theme of the changeset: updates to handle dependencies' API changes across holoscan, holoscan-cli, and nvimgcodec.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch mq/updates_for_newer_dependencies

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates dependency constraints and adjusts SDK integration points and tutorial notebooks to accommodate upstream API/layout changes in Holoscan (notably v4.1+) and related tooling.

Changes:

  • Pin holoscan-cu12 and holoscan-cli to a compatible version range (>=4.0.0,<4.3.0) and update example requirements for nvimgcodec extras.
  • Update tutorial notebooks to use a holoscan-cli release-tag manifest URL and pass --cuda/--source when packaging.
  • Add Holoscan v4.1 compatibility shims by importing from holoscan.flow_graphs with fallback to holoscan.graphs and aliasing FlowGraph.

Reviewed changes

Copilot reviewed 7 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
requirements.txt Pins Holoscan dependencies to an explicit compatible range.
requirements-examples.txt Adjusts nvimgcodec dependency to include extras.
notebooks/tutorials/05_multi_model_app.ipynb Updates packaging command to use a holoscan-cli release manifest URL; clears cell outputs.
notebooks/tutorials/02_mednist_app.ipynb Updates packaging command to use a holoscan-cli release manifest URL; clears cell outputs.
notebooks/tutorials/02_mednist_app-prebuilt.ipynb Updates packaging command to use a holoscan-cli release manifest URL; clears cell outputs.
monai/deploy/utils/importutil.py Updates Holoscan lazy-module patch content to include flow_graphs/graphs.
monai/deploy/graphs/init.py Adds Holoscan v4.1+ import fallback (flow_graphsgraphs) and FlowGraph aliasing.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread monai/deploy/graphs/__init__.py Outdated
Comment thread monai/deploy/utils/importutil.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
monai/deploy/utils/importutil.py (1)

437-465: ⚡ Quick win

Lazy module loading may fail for version-specific modules.

The _EXTRA_MODULES list now includes both "flow_graphs" (holoscan >= 4.1.0) and "graphs" (holoscan < 4.1.0), but only one of these modules exists in any given holoscan version. The __getattr__ function (lines 455-465) will attempt to import whichever module is accessed, but doesn't catch ModuleNotFoundError when the module doesn't exist.

For example, if code tries to access holoscan.graphs with holoscan 4.1.0+ installed, line 461's importlib.import_module(module_name) will raise ModuleNotFoundError, which is not caught.

This may be intentional (letting import errors propagate naturally), but consider whether the lazy loader should:

  1. Catch ModuleNotFoundError and provide a more informative error message indicating version compatibility
  2. Dynamically filter _EXTRA_MODULES based on available modules to prevent failed imports from appearing in __dir__ autocomplete
💡 Optional: Add version-aware error handling
 def __getattr__(name):
     import importlib
     import sys

     if name in _EXTRA_MODULES:
         module_name = f"{__name__}.{name}"
-        module = importlib.import_module(module_name)  # import
-        sys.modules[module_name] = module  # cache
-        return module
+        try:
+            module = importlib.import_module(module_name)  # import
+            sys.modules[module_name] = module  # cache
+            return module
+        except ModuleNotFoundError:
+            # Provide version-specific guidance
+            if name == "flow_graphs":
+                raise AttributeError(f"module {__name__} has no attribute {name}. "
+                                   f"flow_graphs requires holoscan >= 4.1.0") from None
+            elif name == "graphs":
+                raise AttributeError(f"module {__name__} has no attribute {name}. "
+                                   f"graphs is only available in holoscan < 4.1.0") from None
+            raise
     else:
         raise AttributeError(f"module {__name__} has no attribute {name}")
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@monai/deploy/utils/importutil.py` around lines 437 - 465, The lazy loader can
raise ModuleNotFoundError for version-specific names in _EXTRA_MODULES (e.g.,
"flow_graphs" vs "graphs"); update __getattr__ to catch ModuleNotFoundError
around importlib.import_module(module_name) and re-raise a clearer
AttributeError that mentions the missing module and the holoscan version
compatibility (or suggest the alternative module name), and also update __dir__
(or compute a runtime-visible list) to filter _EXTRA_MODULES to only include
modules that can be imported so autocomplete does not advertise unavailable
names; reference __getattr__, __dir__, _EXTRA_MODULES and the
importlib.import_module call when making the changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@monai/deploy/utils/importutil.py`:
- Around line 437-465: The lazy loader can raise ModuleNotFoundError for
version-specific names in _EXTRA_MODULES (e.g., "flow_graphs" vs "graphs");
update __getattr__ to catch ModuleNotFoundError around
importlib.import_module(module_name) and re-raise a clearer AttributeError that
mentions the missing module and the holoscan version compatibility (or suggest
the alternative module name), and also update __dir__ (or compute a
runtime-visible list) to filter _EXTRA_MODULES to only include modules that can
be imported so autocomplete does not advertise unavailable names; reference
__getattr__, __dir__, _EXTRA_MODULES and the importlib.import_module call when
making the changes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2ff2d8c8-566d-44bd-ba3c-a34d24c37ad2

📥 Commits

Reviewing files that changed from the base of the PR and between 37d319d and 109d906.

📒 Files selected for processing (10)
  • monai/deploy/graphs/__init__.py
  • monai/deploy/utils/importutil.py
  • notebooks/tutorials/01_simple_app.ipynb
  • notebooks/tutorials/02_mednist_app-prebuilt.ipynb
  • notebooks/tutorials/02_mednist_app.ipynb
  • notebooks/tutorials/03_segmentation_app.ipynb
  • notebooks/tutorials/04_monai_bundle_app.ipynb
  • notebooks/tutorials/05_multi_model_app.ipynb
  • requirements-examples.txt
  • requirements.txt

Signed-off-by: M Q <mingmelvinq@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@monai/deploy/utils/importutil.py`:
- Around line 414-418: The _holoscan_package_path function currently imports
holoscan which forces package init to run; change it to locate the installed
package directory without importing by using importlib.util.find_spec (or
importlib.machinery.ModuleSpec): call importlib.util.find_spec("holoscan"), then
if spec.submodule_search_locations exists use the first entry as the package
directory, otherwise use Path(spec.origin).resolve().parent; return that Path
and raise a clear error if find_spec returns None. Update callers such as
fix_holoscan_import to use the new behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 73d2d66d-0463-442c-b904-1252b85d7604

📥 Commits

Reviewing files that changed from the base of the PR and between 109d906 and 382dbde.

📒 Files selected for processing (2)
  • monai/deploy/graphs/__init__.py
  • monai/deploy/utils/importutil.py

Comment thread monai/deploy/utils/importutil.py Outdated
Signed-off-by: M Q <mingmelvinq@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
monai/deploy/utils/importutil.py (1)

496-521: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Error handling bug: exceptions are treated as success.

fix_holoscan_import() returns the exception object on failure (line 508), but the CLI code at line 517 checks if file_path:. Since exception objects are truthy, errors are incorrectly treated as success—the exception gets printed to stdout and the script exits with code 0.

This silently masks failures in the run script which captures stdout and assumes success.

🐛 Proposed fix
 def fix_holoscan_import():
     """Fix holoscan __init__ to enable lazy load for avoiding failure on loading low level libs."""

     try:
         holoscan_pkg_path = _holoscan_package_path()
         holoscan_init_path = holoscan_pkg_path / "__init__.py"
         extra_modules = _build_holoscan_extra_modules(holoscan_pkg_path)

         with open(str(holoscan_init_path), "w") as f_w:
             f_w.write(_build_holoscan_init_content(extra_modules))
         return str(holoscan_init_path)
     except Exception as ex:
-        return ex
+        return None  # Or: raise to propagate the error


 if __name__ == "__main__":
     """Utility functions that can be used in the command line."""

     argv = sys.argv
     if len(argv) == 2 and argv[1] == "fix_holoscan_import":
         file_path = fix_holoscan_import()
-        if file_path:
+        if file_path and isinstance(file_path, str):
             print(file_path)
             sys.exit(0)
         else:
             sys.exit(1)

Alternatively, consider re-raising the exception so the caller can see the actual error message:

     except Exception as ex:
-        return ex
+        print(f"Error: {ex}", file=sys.stderr)
+        return None
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@monai/deploy/utils/importutil.py` around lines 496 - 521, The CLI treats any
truthy return from fix_holoscan_import() as success, and fix_holoscan_import
currently returns an Exception object on error; change fix_holoscan_import() so
it does not return exceptions (either re-raise the caught exception with raise
or return None), and update the __main__ CLI block to call fix_holoscan_import()
inside a try/except that prints the real error to stderr and exits with non-zero
status on failure; specifically modify fix_holoscan_import() to remove "return
ex" and use "raise" (or "return None"), and update the main logic that calls
fix_holoscan_import() to catch Exception as e, print the error (to stderr), and
sys.exit(1) so failures are not treated as success.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@monai/deploy/utils/importutil.py`:
- Around line 496-521: The CLI treats any truthy return from
fix_holoscan_import() as success, and fix_holoscan_import currently returns an
Exception object on error; change fix_holoscan_import() so it does not return
exceptions (either re-raise the caught exception with raise or return None), and
update the __main__ CLI block to call fix_holoscan_import() inside a try/except
that prints the real error to stderr and exits with non-zero status on failure;
specifically modify fix_holoscan_import() to remove "return ex" and use "raise"
(or "return None"), and update the main logic that calls fix_holoscan_import()
to catch Exception as e, print the error (to stderr), and sys.exit(1) so
failures are not treated as success.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 56faac18-9dcf-46c4-b29d-8d72fd3dd7c0

📥 Commits

Reviewing files that changed from the base of the PR and between 382dbde and 9ac5005.

📒 Files selected for processing (3)
  • monai/deploy/graphs/__init__.py
  • monai/deploy/operators/monet_bundle_inference_operator.py
  • monai/deploy/utils/importutil.py
✅ Files skipped from review due to trivial changes (1)
  • monai/deploy/operators/monet_bundle_inference_operator.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • monai/deploy/graphs/init.py

MMelQin added 6 commits June 4, 2026 00:54
Signed-off-by: M Q <mingmelvinq@nvidia.com>
Signed-off-by: M Q <mingmelvinq@nvidia.com>
Signed-off-by: M Q <mingmelvinq@nvidia.com>
Signed-off-by: M Q <mingmelvinq@nvidia.com>
Signed-off-by: M Q <mingmelvinq@nvidia.com>
Signed-off-by: M Q <mingmelvinq@nvidia.com>
@MMelQin MMelQin self-assigned this Jun 4, 2026
@MMelQin MMelQin requested review from bluna301, chezhia and vikashg June 4, 2026 09:02

@chezhia chezhia left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changes look consistent and should be a stable solution until Holoscan cli 4.3.0 is released.

… resource path was restored

Signed-off-by: M Q <mingmelvinq@nvidia.com>
@MMelQin

MMelQin commented Jun 5, 2026

Copy link
Copy Markdown
Collaborator Author

The changes look consistent and should be a stable solution until Holoscan cli 4.3.0 is released.

@chezhia Thanks for the review! It has become clear that the holoscan-cli will cease to support packaging MAP/HAP starting in v4.3, and correspondingly only holoscan SDK versions up to v4.2 will be supported. Given that holoscan SDK and holoscan-cli have long term support by NVIDIA, MONAI Deploy App SDK should still work for a long time.

Also, I raised an issue on the missing holoscan-cli manifest file at the original path in its repo, and it has been addressed, so there is no need to explicitly specify --source when packaging an MAP.

@bluna301 bluna301 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me as well. Thanks for the notification regarding holoscan-cli deprecation of HAP/MAP support.

Any concerns that seemingly only artifacts for holoscan==4.2.0 will be supported in the holoscan-cli repo? Legacy artifacts were removed in this commit. Pinning to holoscan-cli<=4.2.0 makes sense, but would MAP builds with holoscan-cli<4.2.0 fail because artifacts are not available to be pulled?

Tried building a MAP with holoscan and holoscan-cli == 3.10.0, getting the below error when trying to fetch from GitHub and grab artifact after initiating a MAP build. Worked-around by downloading holoscan-cli==3.10.0 artifacts-cu12.json locally and editing artifact_sources.py to fetch locally instead of from GitHub. Not sure if we could fix on App SDK side, if we want to address we probably need holoscan-cli alignment.

[2026-06-08 13:42:47,920] [INFO] (common) - Downloading CLI manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json...
[2026-06-08 13:42:48,164] [DEBUG] (packager) - Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found
Traceback (most recent call last):
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 134, in _download_manifest_internal
    manifest.raise_for_status()
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/requests/models.py", line 1026, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/packager.py", line 120, in execute_package_command
    _package_application(args)
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/packager.py", line 91, in _package_application
    packaging_args = PackagingArguments(args, temp_dir)
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/arguments.py", line 62, in __init__
    self._artifact_sources.download_manifest()
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 125, in download_manifest
    self._download_manifest_internal(
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 136, in _download_manifest_internal
    raise ManifestDownloadError(
holoscan_cli.common.exceptions.ManifestDownloadError: Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found
[2026-06-08 13:42:48,182] [ERROR] (packager) - Error packaging application:

Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found

@MMelQin

MMelQin commented Jun 8, 2026

Copy link
Copy Markdown
Collaborator Author

Looks good to me as well. Thanks for the notification regarding holoscan-cli deprecation of HAP/MAP support.

Any concerns that seemingly only artifacts for holoscan==4.2.0 will be supported in the holoscan-cli repo? Legacy artifacts were removed in this commit. Pinning to holoscan-cli<=4.2.0 makes sense, but would MAP builds with holoscan-cli<4.2.0 fail because artifacts are not available to be pulled?

Tried building a MAP with holoscan and holoscan-cli == 3.10.0, getting the below error when trying to fetch from GitHub and grab artifact after initiating a MAP build. Worked-around by downloading holoscan-cli==3.10.0 artifacts-cu12.json locally and editing artifact_sources.py to fetch locally instead of from GitHub. Not sure if we could fix on App SDK side, if we want to address we probably need holoscan-cli alignment.

[2026-06-08 13:42:47,920] [INFO] (common) - Downloading CLI manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json...
[2026-06-08 13:42:48,164] [DEBUG] (packager) - Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found
Traceback (most recent call last):
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 134, in _download_manifest_internal
    manifest.raise_for_status()
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/requests/models.py", line 1026, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/packager.py", line 120, in execute_package_command
    _package_application(args)
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/packager.py", line 91, in _package_application
    packaging_args = PackagingArguments(args, temp_dir)
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/arguments.py", line 62, in __init__
    self._artifact_sources.download_manifest()
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 125, in download_manifest
    self._download_manifest_internal(
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 136, in _download_manifest_internal
    raise ManifestDownloadError(
holoscan_cli.common.exceptions.ManifestDownloadError: Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found
[2026-06-08 13:42:48,182] [ERROR] (packager) - Error packaging application:

Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found

Thanks Bryan @bluna301 ! Yes, on the same page with regard to the hotfix only works for holoscan-cli v4.2.0. I'd requested a v4.2.0 patch release to properly update the holoscan-cli code to work with the newly changed resource locations for all CLI releases, and it was agreed and noted as follow-up in the hotfix PR. In the meantime, MONAI Deploy users need to pin holoscan-cli and holoscan at v4.2.0. We'll also need to release a new version of the MONAI Deploy App SDK containing the update in this and your open PRs ASAP.

@bluna301

bluna301 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Looks good to me as well.

Looks good to me as well. Thanks for the notification regarding holoscan-cli deprecation of HAP/MAP support.
Any concerns that seemingly only artifacts for holoscan==4.2.0 will be supported in the holoscan-cli repo? Legacy artifacts were removed in this commit. Pinning to holoscan-cli<=4.2.0 makes sense, but would MAP builds with holoscan-cli<4.2.0 fail because artifacts are not available to be pulled?
Tried building a MAP with holoscan and holoscan-cli == 3.10.0, getting the below error when trying to fetch from GitHub and grab artifact after initiating a MAP build. Worked-around by downloading holoscan-cli==3.10.0 artifacts-cu12.json locally and editing artifact_sources.py to fetch locally instead of from GitHub. Not sure if we could fix on App SDK side, if we want to address we probably need holoscan-cli alignment.

[2026-06-08 13:42:47,920] [INFO] (common) - Downloading CLI manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json...
[2026-06-08 13:42:48,164] [DEBUG] (packager) - Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found
Traceback (most recent call last):
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 134, in _download_manifest_internal
    manifest.raise_for_status()
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/requests/models.py", line 1026, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/packager.py", line 120, in execute_package_command
    _package_application(args)
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/packager.py", line 91, in _package_application
    packaging_args = PackagingArguments(args, temp_dir)
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/packager/arguments.py", line 62, in __init__
    self._artifact_sources.download_manifest()
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 125, in download_manifest
    self._download_manifest_internal(
  File "/home/bluna301/miniconda3/envs/ped-abd-ct-seg/lib/python3.10/site-packages/holoscan_cli/common/artifact_sources.py", line 136, in _download_manifest_internal
    raise ManifestDownloadError(
holoscan_cli.common.exceptions.ManifestDownloadError: Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found
[2026-06-08 13:42:48,182] [ERROR] (packager) - Error packaging application:

Error downloading manifest file from https://raw.githubusercontent.com/nvidia-holoscan/holoscan-cli/refs/heads/main/releases/3.10.0/artifacts-cu12.json: Not Found

Thanks Bryan @bluna301 ! Yes, on the same page with regard to the hotfix only works for holoscan-cli v4.2.0. I'd requested a v4.2.0 patch release to properly update the holoscan-cli code to work with the newly changed resource locations for all CLI releases, and it was agreed and noted as follow-up in the hotfix PR. In the meantime, MONAI Deploy users need to pin holoscan-cli and holoscan at v4.2.0. We'll also need to release a new version of the MONAI Deploy App SDK containing the update in this and your open PRs ASAP.

Perfect, thanks @MMelQin! On the same page regarding short and long term fixes here.

and simplified the requirements for nvidia-nvimgcodec

Signed-off-by: M Q <mingmelvinq@nvidia.com>
@sonarqubecloud

sonarqubecloud Bot commented Jun 8, 2026

Copy link
Copy Markdown

@MMelQin

MMelQin commented Jun 8, 2026

Copy link
Copy Markdown
Collaborator Author

I've also updated the README to clarify the highest compatible holoscan-cli and holoscan versions.

@MMelQin MMelQin merged commit fbb1347 into main Jun 8, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants