Licantha SDK
License-gated, encrypted-model SDK for on-prem AI services.
📦 Available on PyPI:
pip install licantha-sdk
The SDK validates a customer's license against a Keygen.sh server (or an
offline Ed25519-signed .lic file for air-gapped deployments), activates
this machine, runs a background heartbeat, and decrypts AES-256-GCM
encrypted model files using keys delivered through license metadata.
✨ Features
- Online activation against a self-hosted Keygen server (
SecureClient) - Offline / air-gapped mode via signed
.licfiles - AES-256-GCM model envelope with embedded
model_idfor multi-model licenses - Background heartbeat daemon with clean SIGTERM-safe shutdown
- Pluggable
KeyProviderabstraction (lease today, GPU-attestation tomorrow) - Pydantic-validated config (
SecureClientConfigPM) and.envloader (SecureClientCliConfig) - Self-contained example mini-apps for every flow
🛠 Installation
1. 🚧 Prerequisites
- Install Python (>= v3.10) and pip (>= 23):
- [RECOMMENDED] Miniconda (v3)
- [arm64/aarch64] Miniforge (v3)
- [Python virtual environment] venv
[OPTIONAL] For DEVELOPMENT environment:
2. 📥 Download or clone the repository
[TIP] Skip this step, if you're going to install the package directly from PyPi or GitHub repository.
2.1. Prepare projects directory (if not exists):
# Create projects directory:
mkdir -pv ~/workspaces/projects
# Enter into projects directory:
cd ~/workspaces/projects
2.2. Follow one of the below options [A], [B] or [C]:
OPTION A. Clone the repository:
git clone https://github.com/humblebeeai/int-sdk-python-licensing.git && \
cd int-sdk-python-licensing
OPTION B. Clone the repository (for DEVELOPMENT: git + ssh key):
git clone git@github.com:humblebeeai/int-sdk-python-licensing.git && \
cd int-sdk-python-licensing
OPTION C. Download source code:
- Download archived zip file from releases.
- Extract it into the projects directory.
3. 📦 Install the package
[NOTE] Choose one of the following methods to install the package [A ~ E]:
OPTION A. [RECOMMENDED] Install from PyPI:
pip install -U licantha-sdk
OPTION B. Install from the downloaded source code:
# Install directly from the source code:
pip install .
# Or install with editable mode:
pip install -e .
OPTION C. Install for DEVELOPMENT environment:
pip install -e .[dev]
# Install pre-commit hooks:
pre-commit install
OPTION D. Install from pre-built release files:
- Download
.whlor.tar.gzfile from PyPI downloads - Install with pip:
# Install from .whl file:
pip install ./licantha_sdk-[VERSION]-py3-none-any.whl
# Or install from .tar.gz file:
pip install ./licantha_sdk-[VERSION].tar.gz
OPTION E. Copy the module into the project directory (for testing):
# Install python dependencies:
pip install -r ./requirements.txt
# Copy the module source code into the project:
cp -r ./src/licantha_sdk [PROJECT_DIR]
# For example:
cp -r ./src/licantha_sdk /some/path/project/
🚸 Usage/Examples
Simple
# Standard libraries
import sys
import logging
from pathlib import Path
# Third-party libraries
from dotenv import load_dotenv
# Internal modules
from licantha_sdk import LicenseError, SecureClient, SecureClientCliConfig
HERE = Path(__file__).parent
load_dotenv(HERE / ".env")
logger = logging.getLogger("quickstart")
def serve(weights: bytes) -> None:
logger.info(f"model loaded — {len(weights)} bytes")
def main() -> int:
logging.basicConfig(level=logging.INFO)
_config = SecureClientCliConfig() # picks up LICANTHA_SDK_* from .env / env
with SecureClient(config=_config) as _client:
try:
_weights = _client.decrypt_model(str(HERE / "model.encrypted"))
except LicenseError as _e:
logger.critical(f"cannot start: {_e}")
return 2
serve(_weights)
return 0
if __name__ == "__main__":
sys.exit(main())
See examples/ for offline / custom-inference / multi-model / manual-lifecycle / error-shape variants.
⚙️ Configuration
Production callers construct SecureClientConfigPM explicitly — they do
NOT pull env vars from inside a compiled binary:
from licantha_sdk import SecureClient, SecureClientConfigPM
config = SecureClientConfigPM(
account_id="...",
license_key="...",
app_id="my-product",
api_url="https://licensing.your-company.com",
# public_key="..." # 64-char hex Ed25519 — only needed for offline .lic mode
)
with SecureClient(config=config) as client:
weights = client.decrypt_model("model.enc")
Dev / examples can load from .env via SecureClientCliConfig instead.
🌎 Environment Variables
# Required:
LICANTHA_SDK_ACCOUNT_ID=
LICANTHA_SDK_LICENSE_KEY=
LICANTHA_SDK_PUBLIC_KEY=
# Optional:
# LICANTHA_SDK_APP_ID=licantha-default
# LICANTHA_SDK_API_URL=https://licensing.your-company.com
# LICANTHA_SDK_OFFLINE_LICENSE_PATH=./license.lic
# LICANTHA_SDK_HEARTBEAT_INTERVAL=60
# LICANTHA_SDK_DEACTIVATE_ON_EXIT=true
🧪 Running Tests
To run tests, run the following command:
# Install python test dependencies:
pip install .[test]
# Run tests:
python -m pytest -sv -o log_cli=true
# Or use the test script:
./scripts/test.sh -l -v -c
🏗️ Build Package
To build the python package, run the following command:
# Install python build dependencies:
pip install -r ./requirements/requirements.build.txt
# Build python package:
python -m build
# Or use the build script:
./scripts/build.sh
📝 Generate Docs
To build the documentation, run the following command:
# Install python documentation dependencies:
pip install -r ./requirements/requirements.docs.txt
# Serve documentation locally (for development):
mkdocs serve -a 0.0.0.0:8000 --livereload
# Or use the docs script:
./scripts/docs.sh
# Or build documentation:
mkdocs build
# Or use the docs script:
./scripts/docs.sh -b
📚 Documentation
📑 References
Metadata
Release files for licantha-sdk 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| licantha_sdk-0.4.1.tar.gz | 36.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| licantha_sdk-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 74.4 kB
Release files / licantha_sdk-0.4.1.tar.gz
| Download URL | licantha_sdk-0.4.1.tar.gz |
|---|---|
| Size | 36.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1303c04d1cb504a1814413ba6f0e3e01324303b2aa3f14ef2a7cf13bfc26e23a
|
|
BLAKE2b-256 checksum How to use checksums |
fa936832b101a62a7c95723009cbb322dba95a4e7bedf08ead8a511d74c156cf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.16
|
Release files / licantha_sdk-0.4.1-py3-none-any.whl
| Download URL | licantha_sdk-0.4.1-py3-none-any.whl |
|---|---|
| Size | 37.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2aa2ca6a7544994006c81b89c74351c8617564520a0a5156ae6737e26ff2cd2a
|
|
BLAKE2b-256 checksum How to use checksums |
0e79675f7ef190c4766f0b8220cc551012ee017b78bde41402096f87be5c8f9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.16
|