CLI Enhancement Summary¶
Overview¶
The CLI has been significantly enhanced to support the research-to-production workflow with modular pipeline projects.
New Commands¶
1. run (Updated)¶
- Renamed from
build_pipelinetorun - Added
--configoption for custom config files - Better error messages with Rich formatting
2. list (New)¶
- Lists all available pipelines
- Shows pipeline type (Built-in vs Linked)
- Displays config status
- Optional verbose mode (
-v) shows component counts - Optional
--linksflag shows symlink sources - Rich table formatting
3. inspect (New)¶
- Detailed component inspection
- Shows all permanences and processes
- Tree view visualization
- Optional docstring display (
--docs) - Shows config file location and status
4. create (New)¶
- Creates standalone pipeline projects
- Generates complete project structure
- Includes pyproject.toml, README, .gitignore
- Optional example implementations (
--example) - Custom location support (
--location)
5. add (New)¶
- Links local projects as subpackages
- Clones from git repositories
- Creates symlinks in pipelines directory
- Supports SSH and HTTPS git URLs
- Branch selection for git repos (
--branch) - Custom clone location (
--location) - Validates package structure
6. remove (New)¶
- Removes linked subpackages
- Safely unlinks symlinks
- Optional source deletion (
--delete-source) - Safety checks for built-in pipelines
- Only deletes cloned repos in submodules/
7. validate (New)¶
- Validates pipeline configuration
- Checks module imports
- Validates class inheritance
- Checks TOML syntax
- Verifies config sections
- Clear success/failure reporting
Workflow Support¶
Creating New Projects¶
# Create standalone project
tipi create my_pipeline --example
# Project structure created:
my_pipeline/
├── my_pipeline/ # Package
│ ├── __init__.py
│ ├── permanences.py
│ └── processes.py
├── configs/
│ └── pipeline_config.toml
├── pyproject.toml
├── README.md
└── .gitignore
Adding Projects¶
# Link local project
tipi add ./my_pipeline
# Clone from git
tipi add https://github.com/user/pipeline.git
# Creates symlink:
# tipi/pipelines/my_pipeline -> source
Managing Projects¶
# List all
tipi list -v
# Inspect specific
tipi inspect my_pipeline --docs
# Validate
tipi validate my_pipeline
# Run
tipi run my_pipeline
# Remove
tipi remove my_pipeline
File Generators¶
_generate_project_init()¶
Creates package __init__.py with:
- Component registration dictionaries
- Version information
- Proper imports
_generate_permanence_file()¶
Creates permanences.py with:
- Base imports
- Example permanence class (optional)
- Template comments
- Lifecycle methods
_generate_processes_file()¶
Creates processes.py with:
- Base imports
- Example process class (optional)
- Template comments
- Execute and skip methods
_generate_config_file()¶
Creates TOML config with:
- Permanence definitions
- Process definitions
- Example configurations (optional)
- Inline comments
_generate_readme()¶
Creates project README with:
- Structure overview
- Installation instructions
- Usage examples
- Development guide
_generate_pyproject()¶
Creates pyproject.toml with:
- Package metadata
- Dependencies
- Development dependencies
- Ruff configuration
- Build system setup
_generate_gitignore()¶
Creates .gitignore with:
- Python artifacts
- Virtual environments
- IDE files
- Testing artifacts
- OS files
Rich Formatting¶
All commands use Rich library for beautiful output:
- Tables: List command with colored columns
- Trees: Inspect command with hierarchical view
- Panels: Success/error messages with borders
- Colors: Semantic coloring (green=success, red=error, yellow=warning)
- Console: Consistent formatting throughout
Safety Features¶
Link Management¶
- Validates package structure before linking
- Checks for naming conflicts
- Confirms before overwriting links
- Distinguishes between built-in and linked pipelines
Source Deletion¶
- Only deletes sources in
submodules/directory - Requires explicit
--delete-sourceflag - Interactive confirmation before deletion
- Prevents accidental deletion of external projects
Validation¶
- Module import checking
- Class inheritance validation
- TOML syntax verification
- Config section requirements
- Detailed error reporting
Integration with Progressive Enhancement¶
The CLI now supports the Level 5 workflow:
Level 4: Functions Level 5: Full Pipeline
───────────────────── ────────────────────────
@pipeline_process → tipi create my_pipeline
def train(): → Edit permanences.py & processes.py
... → Update config.toml
→ tipi add ./my_pipeline
Run as script → tipi run my_pipeline
Example Workflows¶
Researcher Creates New Pipeline¶
# Day 1: Create project
tipi create research_pipeline --example
cd research_pipeline
# Day 2-7: Develop (edit files)
# Edit research_pipeline/permanences.py
# Edit research_pipeline/processes.py
# Edit configs/pipeline_config.toml
# Week 2: Link to main pipeline
cd /path/to/TensorImgPipeline
tipi add ../research_pipeline
# Validate and run
tipi validate research_pipeline
tipi run research_pipeline
Team Member Uses Existing Pipeline¶
# Clone from team repo
tipi add https://github.com/team/ml-pipeline.git
# Inspect what it does
tipi inspect ml-pipeline --docs
# Run it
tipi validate ml-pipeline
tipi run ml-pipeline
Cleanup Old Projects¶
# List all pipelines
tipi list -v
# Remove old one (keep source)
tipi remove old_pipeline
# Remove cloned repo (delete source)
tipi remove temp_pipeline --delete-source
Benefits¶
- Modular: Projects are self-contained and reusable
- Flexible: Link local projects or clone from git
- Safe: Multiple validation and confirmation steps
- User-friendly: Rich formatting and clear messages
- Complete: Full project scaffolding
- Discoverable: List and inspect commands
- Maintainable: Easy to add/remove projects
Future Enhancements¶
Possible future additions:
tipi update <name>- Update git-cloned packagestipi test <name>- Run pipeline teststipi export <name>- Export pipeline as standalone packagetipi template list- Show available templatestipi template create <name>- Create custom templates- Auto-completion support
- Configuration validation with JSON schema
- Pipeline dependency resolution
- Version management
Documentation¶
Created documentation:
docs/cli_reference.md- Complete CLI reference- Updated
docs/architecture_diagram.md- Architecture overview - Updated
docs/progressive_enhancement.md- Level 5 workflow
Technical Details¶
Symlink Management¶
- Uses
Path.symlink_to()for cross-platform compatibility - Resolves symlinks with
Path.resolve() - Checks symlink status with
Path.is_symlink()
Git Integration¶
- Uses
subprocess.run()for git commands - Supports HTTPS and SSH URLs
- Branch selection with
--branchflag - Error handling with stderr capture
Module Loading¶
- Uses
importlib.import_module()for dynamic loading - Handles ImportError gracefully
- Validates class inheritance with
issubclass() - Accesses module attributes with
getattr()
File Generation¶
- Template strings with f-strings
- Conditional content based on flags
- Consistent formatting and style
- Includes comments and documentation