Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

linode-llm-toolkit

Unofficial project. Not affiliated with, endorsed by, or supported by Akamai Technologies, Inc. or Linode LLC. Akamai and Linode are trademarks of their respective owners.

linode-llm-toolkit is an independently maintained, experimental open-source CLI for deploying a small, reviewed catalog of Ollama-hosted LLMs on Linode instances. The compatibility command is linode-llm; w7089 is the maintainer and release authority.

One-command LLM deployment is limited to the reviewed public-alpha instance path described below.

Quickstart: deploy a personal model

You need Python 3.12+, a Linode account, and a Linode API token. Install the exact alpha with uv:

uv tool install 'linode-llm-toolkit==0.1.0a3'

Then deploy with only the token:

export LINODE_TOKEN='…'
linode-llm deploy

In a terminal, deploy shows only reviewed catalog models for which this account currently has a viable live placement and complete price. Select one, or deploy a known catalog model directly:

linode-llm deploy qwen2.5:1.5b

The CLI calculates sizing, cheapest eligible plan, region capacity, and live price behind the scenes, then shows the resolved model, plan, region, and price before creating anything. Non-interactive callers that omit the model use the reviewed Qwen 1.5B default.

When the model is ready, the success output includes values ready for an OpenAI-compatible app:

export OPENAI_BASE_URL='http://<endpoint>/v1'
export OPENAI_MODEL='<selected-model>'
export OPENAI_API_KEY='not-needed'

WebUI and SSH are off. The CLI detects your public IPv4 address and creates a default-deny firewall that allows plain HTTP on port 80 only from that address's /32.

This is a personal prototype boundary, not production security: the endpoint is plain HTTP with no application credential, protected only by source-IP filtering. Do not use it for sensitive prompts or data, shared access, or a public service. Resources remain billable until you destroy them. Save the deployment ID from the success output, then run exactly:

linode-llm destroy <deployment-id>

See Simple deployment for the tested lifecycle, exact boundary, app setup, and cleanup.

Status and limitations

This is not a production service and carries no production or Marketplace support commitment. The instance path is the public-alpha path; the bundled LKE/Helm chart and StackScript are experimental developer-preview paths and are not Marketplace release candidates.

Before using it, understand these limits:

  • A deployment needs a live, authenticated Linode API overlay. Cached plan data is for offline planning only and cannot establish account or regional availability.
  • Billing can continue until you remove billable resources; a guest shutdown does not make its Linode free.
  • The tool records local state, but state can be lost or damaged. Use reconcile and destroy --plan to inspect owned remote resources before cleanup.
  • Runtime artifacts are pinned for this experimental profile, but the runtime/deployment release profile remains fail-closed and is not release-eligible. The published production-PyPI alpha 0.1.0a3 is a package-scoped release only; it does not change that runtime boundary. See RELEASING.md.

Installation alternatives

The package-scoped 0.1.0a3 alpha is available from PyPI. If you do not use uv, install it with pip inside a Python 3.12+ virtual environment:

python3.12 -m venv .venv
. .venv/bin/activate
python -m pip install 'linode-llm-toolkit==0.1.0a3'
linode-llm --help

Do not install into the operating system's Python with a bare pip install. Debian and Ubuntu protect that environment under PEP 668; activating a virtual environment and using python -m pip also makes it clear which interpreter receives the CLI.

This package publication does not make the deployment runtime, LKE chart, or StackScript production-ready or Marketplace-supported. The earlier TestPyPI 0.1.0a1 rehearsal remains transport evidence only.

For a source checkout, use uv sync --extra dev and uv run linode-llm --help.

Reviewed catalog

The alpha catalog snapshot is phase0-alpha-2026-08-04. Inspect the installed snapshot rather than copying a model name from older material:

linode-llm catalog
linode-llm catalog --json

Entries with additional acceptance requirements need their exact catalog ID. The permissively licensed simple default does not require a separate acknowledgement:

Catalog ID Alias Quantization Context Preferred reviewed plan
qwen2.5-1.5b-instruct-q4-k-m qwen2.5:1.5b Q4_K_M 32,768 tokens g6-standard-2 (4 GB shared CPU; live lifecycle passed 2026-08-04)
gpt-oss-20b-mxfp4 gpt-oss:20b MXFP4 131,072 tokens g2-gpu-rtx4000a1-s
gpt-oss-120b-mxfp4 gpt-oss:120b MXFP4 131,072 tokens g3-gpu-rtxpro6000-blackwell-1

The models command also shows pre-alpha compatibility records. Those are legacy_unverified, remain discoverable for compatibility, and cannot be planned or deployed. Artifact identities, license evidence, and acceptance requirements are in MODEL_NOTICES.md.

Advanced options

Authenticated TLS, credentials, licenses, and explicit placement

Set a Linode API token only in your environment; never commit or print it. A plan and deployment also require separate inference and administration endpoint credentials. The values are resolved at use time from references and only references are stored in deployment state.

export LINODE_TOKEN='…'
export INFERENCE_KEY='…'
export ADMINISTRATION_KEY='…'

linode-llm plan \
  --model gpt-oss:20b \
  --accept-license gpt-oss-20b-mxfp4 \
  --budget 400 \
  --maximum-lifetime-hours 24 \
  --fqdn llm.example.com

linode-llm deploy \
  --model gpt-oss:20b \
  --accept-license gpt-oss-20b-mxfp4 \
  --budget 400 \
  --maximum-lifetime-hours 24 \
  --fqdn llm.example.com \
  --inference-credential environment:INFERENCE_KEY \
  --administration-credential environment:ADMINISTRATION_KEY

Public mode requires a caller-managed FQDN and Caddy automatic HTTPS. Without a domain, use authenticated, source-restricted developer mode instead:

linode-llm deploy \
  --model gpt-oss:20b \
  --accept-license gpt-oss-20b-mxfp4 \
  --budget 400 \
  --maximum-lifetime-hours 24 \
  --allow-cidr 203.0.113.0/24 \
  --inference-credential environment:INFERENCE_KEY \
  --administration-credential environment:ADMINISTRATION_KEY

When explicitly selecting an advanced security profile, use one of --fqdn, --allow-cidr, or the public-HTTP acknowledgement. Omitting all three selects the source-restricted personal-prototype default. Public anonymous HTTP is experimental and requires the exact acknowledgement I_ACKNOWLEDGE_PUBLIC_HTTP_IS_UNSAFE.

Use the inference credential for /v1/* and the separate administration credential for /api/*. Do not place either value in source code, a shell history you share, or deployment state.

Security

For an advanced internet-facing deployment, use authenticated public TLS or authenticated source-restricted developer mode. Provide an SSH public key with --ssh-key when you need instance login; without one, you cannot log in to the instance. See SECURITY.md for private reporting and the full security boundary.

Cost and planning

For advanced cost policy, run linode-llm plan before deploy. It is mutation-free and emits a stable, itemized JSON plan. It distinguishes live, cached, estimated, and unknown amounts; unknown amounts are never treated as zero. When --budget is supplied, a rejected budget plan cannot proceed to deployment. The simple path displays live compute pricing without requiring this guard.

--budget is a pre-deploy estimate guard, not spend enforcement. --maximum-lifetime-hours is a planning horizon; it does not schedule deletion.

linode-llm cost displays the approved cached snapshot linode-plans-2026-08-04, observed 2026-08-04, for offline planning only. It is not live pricing. The approved cached hourly/monthly values in USD are:

Plan Hardware Hourly Monthly Availability note
g6-standard-2 Shared CPU (4 GiB) $0.036 $24.00 Live lifecycle passed 2026-08-04; live overlay still required
g6-standard-4 Shared CPU (8 GiB) $0.072 $48.00 Lifecycle validation candidate; live overlay still required
g6-dedicated-16 CPU $0.432 $288.00 Live overlay still required
g2-gpu-rtx4000a1-s NVIDIA RTX 4000 Ada (20 GiB) $0.52 $350.00 Live overlay still required
g1-gpu-rtx6000-1 NVIDIA Quadro RTX 6000 (24 GiB) $1.50 $1,000.00 Limited availability
g3-gpu-rtxpro6000-blackwell-1 NVIDIA RTX PRO 6000 Blackwell Server Edition (96 GiB) $2.50 $1,665.00 Limited availability; must appear in the authenticated live API for the account and region

Actual regional pricing, capacity, account restrictions, storage, network, and other charges can differ or be unknown. The plan reports exclusions and unknowns explicitly.

Cleanup and recovery

Inspect before deleting, then remove the deployment and verify it is gone:

linode-llm reconcile
linode-llm destroy --plan <deploy-id>
linode-llm destroy <deploy-id>
linode-llm reconcile

reconcile classifies resources as owned, foreign, or ambiguous. Foreign and ambiguous resources are not automatically adopted or deleted. Check the Linode control plane as well: cleanup is your responsibility, and there is no approved automatic account-side expiry deletion mechanism in this alpha.

Commands

Run linode-llm --help for the authoritative options. Older compatibility-oriented commands may expose records that are not deployable; use catalog and plan for alpha decisions.

Command Purpose
linode-llm bench Benchmark a deployed LLM.
linode-llm catalog Inspect the reviewed catalog snapshot.
linode-llm chat Open an interactive chat session with a deployment.
linode-llm cost Display dated cached cost estimates.
linode-llm deploy Validate and create an instance deployment.
linode-llm destroy Preview or remove a deployment.
linode-llm init Create an application starter.
linode-llm logs Show deployment diagnostics.
linode-llm models List deployable and legacy compatibility records.
linode-llm plan Create a mutation-free deployment plan.
linode-llm ps List models on a deployment.
linode-llm pull Pull an additional model on a deployment.
linode-llm reconcile Inspect owned, foreign, and ambiguous resources.
linode-llm rm Remove a model from a deployment.
linode-llm status Check deployment status.
linode-llm templates List application starters.

Support, compatibility, and security

For a guided introduction see docs/BEGINNER_GUIDE.md; contributors should start with docs/DEVELOPER_GUIDE.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

linode_llm_toolkit-0.1.0a3.tar.gz (244.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

linode_llm_toolkit-0.1.0a3-py3-none-any.whl (104.8 kB view details)

Uploaded Python 3

File details

Details for the file linode_llm_toolkit-0.1.0a3.tar.gz.

File metadata

  • Download URL: linode_llm_toolkit-0.1.0a3.tar.gz
  • Upload date:
  • Size: 244.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for linode_llm_toolkit-0.1.0a3.tar.gz
Algorithm Hash digest
SHA256 277397e9efcf2d38c2d46b4e14eaf3cd1dd4e3a1f16b5cdc285e3767458d3b82
MD5 6aa2f62281560aebb673ae58d6fc5155
BLAKE2b-256 65eaf977bd0e4d9515991afc657f87bf67f4f9f4069541153a37656dd9a68613

See more details on using hashes here.

Provenance

The following attestation bundles were made for linode_llm_toolkit-0.1.0a3.tar.gz:

Publisher: publish.yml on w7089/linode-llm-toolkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file linode_llm_toolkit-0.1.0a3-py3-none-any.whl.

File metadata

File hashes

Hashes for linode_llm_toolkit-0.1.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 bbabc6cb976a39ebd82f36682712558462846d8911170762c93a58f986c31d78
MD5 e09fcf4dc884a72a2c1b4b840fe470bf
BLAKE2b-256 c6d603f26193d2d2cd0057f614f55175b89156fb3e04edd2bd902c8d66b02a03

See more details on using hashes here.

Provenance

The following attestation bundles were made for linode_llm_toolkit-0.1.0a3-py3-none-any.whl:

Publisher: publish.yml on w7089/linode-llm-toolkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page