012 packaging extras and release hygiene
Task 012: Packaging + extras + release hygiene (third-party friendly installs)¶
Date: 2026-01-23
Status: Completed
Priority: P1
Update (2026-02-04):
- The current pyproject.toml is “batteries included” (base install pulls local-backend deps like Torch/Diffusers).
- Treat this backlog item as historical context for how we thought about extras; pyproject.toml is the current source of truth.
Main goals¶
- Make
abstractvisioninstallation and dependency behavior predictable for third parties: pip install abstractvisionstays dependency-light and import-safe- heavy stacks are opt-in extras with clear names
- Align packaging metadata with the intended integration story (tools/backends/artifacts).
Secondary goals¶
- Add minimal release hygiene:
- a CHANGELOG entry workflow
- version bump conventions
Context / problem¶
Third parties adopt libraries based on install experience: - base installs must not pull GPU stacks unexpectedly, - optional features must be discoverable via extras, - package metadata should reflect runtime behavior.
abstractvision currently uses a minimal setup.py and has no declared extras. As the project grows (HTTP backend, HF backend, tool integration), we need explicit packaging boundaries.
Constraints¶
- No heavy dependencies in base install.
- Cross-platform where possible; use platform markers where not.
Research, options, and references¶
- Option A: Keep
setup.pyand add conditional imports only. - Pros: minimal changes.
- Cons: harder to express extras cleanly; drifts from the rest of the ecosystem.
- Option B (chosen): Move to
pyproject.toml(PEP 621) with explicit optional dependencies. - Pros: clearer third-party consumption; easier tooling; consistent with other packages in the workspace.
Decision¶
Chosen approach:
- Introduce pyproject.toml for abstractvision and define clear extras, e.g.:
- abstractvision[openai-compatible] → httpx (and any small helpers)
- abstractvision[huggingface] → torch/diffusers/transformers (behind explicit opt-in)
- abstractvision[abstractcore] → abstractcore (tool integration module)
- Ensure the capabilities JSON asset is included in wheels/sdists.
Dependencies¶
- Backlog tasks:
- Completed:
docs/backlog/completed/006_openai_compatible_backend_for_image_and_video.md - Completed:
docs/backlog/completed/007_local_hf_backend_strategy_diffusers.md - Completed:
docs/backlog/completed/011_abstractcore_tool_integration_and_artifact_refs.md
Implementation plan¶
- Add
pyproject.tomlwith: - project metadata
- package discovery (
src/layout) - package data inclusion for
assets/*.json - optional dependency groups (extras)
- Add a minimal
CHANGELOG.mdand version bump guideline. - Add a packaging smoke check command to Task 009 CI notes:
- install base + import + load registry
Success criteria¶
pip install abstractvisiondoes not pull heavy ML deps andimport abstractvisionworks.pip install "abstractvision[openai-compatible]"enables the HTTP backend.pip install "abstractvision[huggingface]"enables the local backend (where supported).
Test plan¶
python -m unittest discover -s tests -p "test_*.py" -q- (optional) local packaging smoke: build wheel and install into a clean venv
Report (fill only when completed)¶
Summary¶
- Migrated
abstractvisionpackaging topyproject.toml(PEP 621) with: - dependency-light base install (
dependencies = []) - optional extras for heavy/optional features:
abstractvision[huggingface]for local diffusers backendabstractvision[abstractcore]for tool integration moduleabstractvision[openai-compatible]kept (currently empty; forward-compatible)
- console script entrypoint:
abstractvision = abstractvision.cli:main - dynamic version from
abstractvision.__version__ - wheel/sdist inclusion for
assets/*.json - Added
CHANGELOG.mdwith an initial 0.1.0 entry.
Validation¶
- Tests:
python -m unittest discover -s tests -p "test_*.py" -q - Packaging sanity:
pyproject.tomlparses viatomllib. - Editable install (src layout):
python -m pip install -e ".[huggingface]"