ethicallama
A local-first, privacy-respecting LLM inference wrapper for running large language models entirely on your own hardware.
Features
- Local-Only Inference: Everything runs on your machine. No data ever leaves your computer unless you explicitly configure it otherwise.
- Multi-Engine Support: Use llama.cpp, whisper.cpp, or any custom inference engine via Jinja2-templated configuration.
- Multiple GPU Backends: Choose between Vulkan, ROCm, CUDA, or CPU inference.
- Built-in HTTP API: Optional FastAPI-powered REST API for remote inference.
- Model Indexing: Automatically discover and manage models across your configured directories.
- Configurable Telemetry: Telemetry is DISABLED by default. Opt-in only with explicit confirmation.
Quick Start
Prerequisites
- Python 3.10+
- Rust/Cargo (for building the native core)
- Git
Installation
Pick the install method that matches your workflow. ethicallama is
local-only: nothing is sent to the network and no telemetry runs unless
you explicitly enable it.
Using pip (recommended, once on PyPI)
The standard, works-everywhere install. Wheels are pre-built for Linux and macOS on Python 3.10+.
pip install ethicallama
# With API server support:
pip install "ethicallama[api]"
# With everything (API, HF pulling, Safetensors conversion):
pip install "ethicallama[all]"
Using uv (10-100× faster than pip)
uv is a Rust-based Python package
manager — drop-in faster pip. Use it inside an existing virtualenv
or for one-off pip-style installs.
# Inside a uv-managed venv
uv pip install ethicallama
uv pip install "ethicallama[api]"
# Run without permanently installing (one-shot)
uv run --with ethicallama ethllama run llama3.2
Using pipx (isolated CLI, no venv management)
pipx installs Python CLI tools in their own
isolated virtualenv and exposes the ethllama executable on your
PATH globally — ideal if you just want the CLI on your machine.
pipx install ethicallama
# With API server support:
pipx install "ethicallama[api]"
# Upgrade later:
pipx upgrade ethicallama
From source (latest code, full Rust core)
For the latest unreleased code, custom Rust core builds, or contributing to the project:
git clone --recursive https://github.com/luluthehungrycat/ethicallama
cd ethicallama
# Set up a venv (uv or stdlib venv both work)
uv venv && source .venv/bin/activate
# (or: python3 -m venv .venv && source .venv/bin/activate)
uv pip install maturin ".[all]"
# (or: pip install maturin ".[all]")
# Build the Rust extension and install the Python package
maturin develop --release
After installing, initialize the user config:
ethllama config --init
Optional extras
| Extra | Adds |
|---|---|
[api] |
FastAPI server (ethllama serve) + uvicorn + pydantic |
[pull] |
HuggingFace Hub model pulling (ethllama pull) |
[convert] |
Safetensors → GGUF conversion (ethllama convert) |
[all] |
All of the above |
Extras are stacked with commas, e.g. pip install "ethicallama[api,pull]".
Basic Usage
# Run a model with default settings
ethllama run ~/models/qwen2.5-7b-q4_k_m.gguf --prompt "What is the capital of France?"
# Use a specific GPU backend
ethllama run ~/models/model.gguf --gpu cuda --gpu-layers 32
# Enable the HTTP API
ethllama serve --host 127.0.0.1 --port 10434
# List all indexed models
ethllama index list
# Index a directory of models
ethllama index add ~/models
CLI Reference
Global Options
| Option | Description |
|---|---|
--config |
Path to config file (default: ~/.ethllama/config.yaml) |
--verbose |
Enable verbose logging |
Commands
| Command | Description |
|---|---|
run |
Run inference with a model |
serve |
Start the HTTP API server |
config |
Manage configuration |
index |
Manage model index |
run
ethllama run <model> [options]
Options:
| Option | Default | Description |
|---|---|---|
--prompt, -p |
"Hello" |
Input prompt |
--temperature, -t |
0.7 |
Sampling temperature |
--top-p |
0.95 |
Top-p sampling |
--top-k |
40 |
Top-k sampling |
--threads |
4 |
Number of CPU threads |
--gpu |
cpu |
GPU backend: vulkan, rocm, cuda, cpu |
--gpu-layers |
0 |
Number of layers offloaded to GPU |
--engine |
llama-cpp |
Engine to use |
--output, -o |
None |
Output file path |
Examples:
# Basic inference
ethllama run model.gguf --prompt "Write a poem about AI"
# With GPU acceleration
ethllama run model.gguf --gpu cuda --gpu-layers 35 --threads 8
# Using a custom engine
ethllama run model.safetensors --engine my-custom-engine
# Save output to file
ethllama run model.gguf --prompt "Translate to French: Hello" --output result.txt
serve
ethllama serve [options]
Options:
| Option | Default | Description |
|---|---|---|
--host |
127.0.0.1 |
Bind address |
--port |
10434 |
Port number |
--api-key |
"" |
API key for authentication |
Example:
ethllama serve --host 0.0.0.0 --port 10434 --api-key "YOUR_API_KEY"
Configuration
Configuration is stored in ~/.ethllama/config.yaml:
gpu:
backend: vulkan
fallback: true
api:
enabled: false
host: 127.0.0.1
port: 10434
api_key: ""
telemetry:
enabled: false
model_dirs:
- /home/user/models
Run the interactive setup:
ethllama config --init
Architecture
┌─────────────────────────────────────────────┐
│ ethllama (Python CLI) │
│ ┌─────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Config │ │ Index │ │ Engines │ │
│ │ Manager │ │ Manager │ │ (YAML defs) │ │
│ └────┬────┘ └────┬─────┘ └──────┬───────┘ │
└───────┼───────────┼──────────────┼─────────┘
│ │ │
┌───────┴───────────┴──────────────┴──────────┐
│ ethllama-core (Rust/PyO3) │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ Model Loader │ │ Inference Engine │ │
│ └──────┬──────┘ └────────┬─────────┘ │
└─────────┼──────────────────┼────────────────┘
│ │
┌─────────┴──────────────────┴────────────────┐
│ External Backends (llama.cpp, whisper.cpp) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Vulkan │ │ ROCm │ │ CUDA │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────┘
Components
- ethllama (Python): CLI interface, configuration management, model indexing, and engine orchestration using Jinja2-templated YAML engine definitions.
- ethllama-core (Rust): Native model loading and inference via PyO3 bindings to llama.cpp.
- Engines (YAML): Pluggable engine configurations that define how to invoke external inference binaries (llama.cpp, whisper.cpp, or custom).
Engine Configuration
Engines are defined as YAML files placed in ~/.ethllama/engines/. See docs/examples/ for ready-to-use templates.
Each engine config specifies:
- The binary to invoke
- A Jinja2 args template for building CLI commands
- Environment variables
- A pre-check command for validation
- Streaming support flag
- Supported model file extensions
Development
Setup
# Clone and enter the project
git clone https://github.com/luluthehungrycat/ethicallama.git
cd ethicallama
# Initialize submodules (for llama.cpp dependency)
git submodule update --init --recursive
# Build the Rust core
cargo build --release -p ethllama-core
# Install the Python package in editable mode
pip install -e ".[dev]"
Project Structure
ethicallama/
├── ethllama/ # Python package
│ ├── __init__.py # Package exports
│ ├── config.py # Configuration management
│ ├── engines.py # Engine config loading/running
│ └── index.py # Model index management
├── ethllama-core/ # Rust core (PyO3 bindings)
│ ├── src/
│ │ ├── lib.rs # PyO3 module definition
│ │ ├── llama.rs # llama.cpp FFI bindings
│ │ └── utils.rs # Utilities
│ ├── build.rs # Build script (links llama.cpp)
│ └── Cargo.toml
├── docs/ # Documentation
│ ├── USAGE.md # Detailed usage guide
│ ├── PRIVACY.md # Privacy policy
│ └── examples/ # Example engine configs
├── scripts/ # Helper scripts
│ ├── setup.sh # Development setup
│ └── benchmark.sh # Simple benchmark
├── CREDITS.md # Open-source credits
├── LICENSE # MIT License
└── README.md # This file
Testing
# Run Python tests
pytest
# Run Rust tests
cargo test -p ethllama-core
Using uv? The entire project works seamlessly with
uv— see AGENTS.md for the full uv development workflow (venv creation, maturin builds, and the recommended test commands).
Credits
ethicallama is built on the shoulders of several excellent open-source projects. See CREDITS.md for the full list.
Key dependencies:
- llama.cpp - GGUF model loading and inference
- whisper.cpp - Speech-to-text (planned)
- PyO3 - Rust-Python bindings
- FastAPI - HTTP API server
License
MIT License. See LICENSE for details.
Metadata
Release files for ethicallama 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ethicallama-0.2.0.tar.gz | 138.4 kB | With provenance | Details for ethicallama-0.2.0.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| ethicallama-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.39+ x86-64 | Details for ethicallama-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl |
| ethicallama-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.39+ x86-64 | Details for ethicallama-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl |
| ethicallama-0.2.0-cp311-cp311-manylinux_2_39_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.39+ x86-64 | Details for ethicallama-0.2.0-cp311-cp311-manylinux_2_39_x86_64.whl |
| ethicallama-0.2.0-cp310-cp310-manylinux_2_39_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.39+ x86-64 | Details for ethicallama-0.2.0-cp310-cp310-manylinux_2_39_x86_64.whl |
Total release size: 9.4 MB
Release files / ethicallama-0.2.0.tar.gz
| Download URL | ethicallama-0.2.0.tar.gz |
|---|---|
| Size | 138.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
99dd07d3361bac7284c74c78d20da7d7594a93fdce54be7d850d0f90c9a1364a
|
|
BLAKE2b-256 checksum How to use checksums |
5e441f78fd89139cbbbcf2707487b1efeed3851901f7972364ca3f297047dc8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / ethicallama-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl
| Download URL | ethicallama-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.13 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
b888055c06a09c910e3b32fc26193aa8d89f531e30904e222d80b96ca7a0efba
|
|
BLAKE2b-256 checksum How to use checksums |
30ed9b53c4700d7a1b93536368636e0470d5b48f239c0035a175e9eedc381efc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / ethicallama-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl
| Download URL | ethicallama-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.12 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
a2255a86e605fb7d6d6fe2c47819d63ad935b10186842ff84970181508efbf56
|
|
BLAKE2b-256 checksum How to use checksums |
6476d5be92a000a8373993d2d858649582ce7eeecdd7722f4a849d4a43921676
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / ethicallama-0.2.0-cp311-cp311-manylinux_2_39_x86_64.whl
| Download URL | ethicallama-0.2.0-cp311-cp311-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.11 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
3bc4dcc8d11f71611a79f4da81373242fe7258f42c772a947a55957c1763fecf
|
|
BLAKE2b-256 checksum How to use checksums |
f0f6542720c6d60473fca26905bd941a0d9ce61dea658f9aff15601341c029a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / ethicallama-0.2.0-cp310-cp310-manylinux_2_39_x86_64.whl
| Download URL | ethicallama-0.2.0-cp310-cp310-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.10 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
5c2679fbd88aa57f40a4054a94edb4171e6e457d16615326d546b9cf1729aba0
|
|
BLAKE2b-256 checksum How to use checksums |
529b304b14f49de58a61a3ae2451de89e1dfe42448bb21df3282cce423255173
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logSecurity for ethicallama 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 5 files in this release have been uploaded with provenance metadata.
Attestation for ethicallama-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.