Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
8 changes: 5 additions & 3 deletions .github/workflows/pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ name: PyPI Publish

on:
workflow_call:
secrets:
PYPI_TOKEN:
required: true
workflow_dispatch:
inputs:
version:
Expand All @@ -28,7 +31,7 @@ jobs:
- uses: ./.github/actions/stamp-version

- name: Install SDL2 (live microphone transcription)
run: brew install sdl2
run: brew install sdl2 sdl3

- name: Build native library
run: |
Expand Down Expand Up @@ -147,8 +150,6 @@ jobs:
needs: [wheels-macos, wheels-linux, sdist]
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
Expand All @@ -158,4 +159,5 @@ jobs:
- uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist
password: ${{ secrets.PYPI_TOKEN }}
attestations: false
5 changes: 3 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,17 @@ concurrency:
jobs:
pypi:
permissions:
id-token: write
contents: read
uses: ./.github/workflows/pypi.yml
secrets:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}

homebrew:
needs: pypi
runs-on: ubuntu-24.04
timeout-minutes: 15
env:
PACKAGE: cactus-compute
PACKAGE: cactus-engine
TAP: cactus-compute/homebrew-cactus
TAG: ${{ github.event.release.tag_name }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion cactus-code/scripts/bundle-for-pypi.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
#
# Bundle the built Cactus coding agent into the Python package so it ships in the
# pypi wheel and `cactus code` works after `pip install cactus-compute`.
# pypi wheel and `cactus code` works after `pip install cactus-engine`.
#
# Produces a self-contained payload at python/cactus/code/ with the four built
# packages plus a production-only node_modules (workspace packages copied in via
Expand Down
10 changes: 8 additions & 2 deletions python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,21 @@ keywords: ["Python package", "Python bindings", "on-device AI", "Python FFI", "e

# Cactus Python Package

Python bindings for Cactus Engine via FFI. Auto-installed when you run `source ./setup`.
Python bindings for Cactus Engine via FFI. Install with `pip install cactus-engine`.

This package was previously published as `cactus-compute` through version 2.2.2.
The Python import remains `cactus` and the command remains `cactus`.
`cactus-compute` 3.3.0 and later provides the Needle and Whistle model package.
To migrate an existing engine environment, run `pip uninstall cactus-compute`
followed by `pip install cactus-engine`.

> **Model bundles:** Pre-built runtime bundles for all supported models at [huggingface.co/Cactus-Compute](https://huggingface.co/Cactus-Compute).

## Getting Started

<!-- --8<-- [start:install] -->
```bash
git clone https://github.com/cactus-compute/cactus && cd cactus && source ./setup
git clone https://github.com/cactus-compute/engine && cd engine && source ./setup
cactus build --python
```
<!-- --8<-- [end:install] -->
Expand Down
2 changes: 1 addition & 1 deletion python/cactus/bindings/cactus.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def _find_library():

raise RuntimeError(
f"Cactus library ({_LIB_NAME}) not found.\n"
f"Install with: pip install cactus-compute\n"
f"Install with: pip install cactus-engine\n"
f"Or build from source: cactus build --python"
)

Expand Down
2 changes: 1 addition & 1 deletion python/cactus/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ def main():

if args.command in _REPO_ONLY and not is_repo_checkout():
print(f"Error: `cactus {args.command}` requires a git clone of the cactus repository.")
print("See: https://github.com/cactus-compute/cactus")
print("See: https://github.com/cactus-compute/engine")
sys.exit(1)

handler = _COMMANDS.get(args.command)
Expand Down
2 changes: 1 addition & 1 deletion python/cactus/cli/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def convert_toolchain_error():
+ ", ".join(missing) + ").\n"
" Converting a model from source needs it. Either:\n"
" - use a prebuilt model: cactus run <model> or cactus download <model>\n"
" - install the toolchain: pip install \"cactus-compute[convert]\""
" - install the toolchain: pip install \"cactus-engine[convert]\""
)


Expand Down
6 changes: 3 additions & 3 deletions python/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
name = "cactus-compute"
name = "cactus-engine"
dynamic = ["version"]
description = "On-device AI inference — LLM, vision, speech, embeddings, and RAG"
readme = "README.md"
Expand Down Expand Up @@ -52,9 +52,9 @@ convert = [

[project.urls]
Homepage = "https://cactuscompute.com"
Repository = "https://github.com/cactus-compute/cactus"
Repository = "https://github.com/cactus-compute/engine"
Documentation = "https://docs.cactuscompute.com"
"Bug Tracker" = "https://github.com/cactus-compute/cactus/issues"
"Bug Tracker" = "https://github.com/cactus-compute/engine/issues"

[project.scripts]
cactus = "cactus.cli:main"
Expand Down
Loading