Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions docs/reference/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,25 @@ ng_prepare_data "+config_paths=[$config_paths]" \
```


# How To: ng_pip_list - Debug Package Versions
Each server has its own isolated virtual environment. To inspect the packages:

**List all packages**
```bash
ng_pip_list +entrypoint=resources_servers/example_simple_weather
```

**Output as JSON**
```bash
ng_pip_list +entrypoint=resources_servers/example_simple_weather +format=json
```

**Check for outdated packages**
```bash
ng_pip_list +entrypoint=resources_servers/example_simple_weather +outdated
```


# How To: ng_dump_config - Dump a YAML config as exactly as NeMo Gym sees it
```bash
# Example ng_run command
Expand Down
44 changes: 44 additions & 0 deletions nemo_gym/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,50 @@ def display_help(): # pragma: no cover
print(script)


class PipListConfig(RunConfig):
format: Optional[str] = Field(
default=None,
description="Output format for pip list. Options: 'columns' (default), 'freeze', 'json'",
)
outdated: bool = Field(
default=False,
description="List outdated packages",
)


def pip_list(): # pragma: no cover
"""List packages installed in a server's virtual environment."""
global_config_dict = get_global_config_dict()
config = PipListConfig.model_validate(global_config_dict)

dir_path = Path(config.entrypoint)
venv_path = dir_path / ".venv"

if not venv_path.exists():
print(f" Virtual environment not found at: {venv_path}")
print(" Run tests or setup the server first using:")
print(f" ng_test +entrypoint={config.entrypoint}")
exit(1)

pip_list_cmd = "uv pip list"
if config.format:
pip_list_cmd += f" --format={config.format}"
if config.outdated:
pip_list_cmd += " --outdated"

command = f"""cd {dir_path} \\
&& source .venv/bin/activate \\
&& {pip_list_cmd}"""

print(f" Package list for: {config.entrypoint}")
print(f"Virtual environment: {venv_path.absolute()}")
print("-" * 72)

proc = _run_command(command, dir_path)
return_code = proc.wait()
exit(return_code)


class VersionConfig(BaseNeMoGymCLIConfig):
"""
Display gym version and system information.
Expand Down
5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -284,11 +284,14 @@ ng_dump_config = "nemo_gym.cli:dump_config"
nemo_gym_help = "nemo_gym.cli:display_help"
ng_help = "nemo_gym.cli:display_help"

# Environment-specific uv pip list
nemo_gym_pip_list = "nemo_gym.cli:pip_list"
ng_pip_list = "nemo_gym.cli:pip_list"

# Display version
nemo_gym_version = "nemo_gym.cli:version"
ng_version = "nemo_gym.cli:version"


[tool.setuptools.packages.find]
where = ["."]
include = ["resources_servers", "responses_api_agents", "responses_api_models", "nemo_gym"]
Expand Down