ntropi
Python SDK and runtime for the Entropi stack. One import to run and operate the whole stack from Python — a full dev tool to develop, teach, trace, and connect to the nbot ecosystem.
| Component | What it is | In ntropi |
|---|---|---|
| nbot | the cognitive-compute node — tasks, agents, tools, satellites, the model pool, RL, mesh, KB, blueprints (orchestration is one layer, not the whole) | ntropi.nbot |
| Horizon | eval / observability — suites, datasets, RL train, traces, judge; live web UI | ntropi.horizon |
| NBotWeb | the chat-app gateway — integrations, auth/RBAC — for building chat apps | ntropi.web |
It wraps the full surface — the HTTP API, every slash/utility command, config, and process lifecycle — with typed models, sync and async clients, and a runtime that can launch the services (or connect to running ones).
Quickstart
import ntropi
# develop: define a (sovereign) node's pool + config from Python — no TOML editing
cfg = ntropi.nbot.Config.create("/my/project", node_id="rtx")
cfg.pool.add("gemma", endpoint="https://api.infercom.ai/v1",
model="gemma-4-31B-it", api_key="env:INFERCOM_APIKEY",
modalities=["image_in"])
cfg.set_network(encrypt=True).set_rl("thompson")
cfg.set_security(allowed_paths=["/data"]) # jurisdiction / data-in-place
cfg.save()
# connect to a running node (auto-discovers .nconfig/control.json)
c = ntropi.nbot.Client(project="/my/project")
for m in c.pool.list():
print(m.id, m.capacity, m.modalities)
# trace: run and observe a turn as typed events
for ev in c.tasks.stream("Plot the data in report.csv", new_session=True):
if ev.is_token:
print(ev.text, end="")
# teach: freeze learning for a clean eval, inspect the policy, give feedback
c.rl.set_learning(False)
print(c.routing.policies()["active"])
c.rl.feedback("s-123", "positive")
# connect: blueprints, connectors, mesh — all typed
c.blueprints.run("kyc-check", {"customer_id": "42"})
print(c.connectors.list())
# every slash-command is a typed method (a bare string is a message)
print(c.command.pool())
print(c.command.rl())
# drop-in OpenAI-compatible facade
c.chat.completions.create(model="nbot", messages=[{"role": "user", "content": "hi"}])
Everything above has an async twin with an identical surface — for all three components:
async with ntropi.nbot.AsyncClient(project="/my/project") as ac:
await ac.tasks.submit("hello")
print(await ac.rl.learning())
async with ntropi.horizon.AsyncClient("http://127.0.0.1:8848") as ah:
job = await ah.rl.env_train(prompt="do X", iterations=5)
async for point in job.stream():
print(point["reward"])
Launch the stack from Python
# start nbot (+ Horizon UI, + the NBotWeb chat gateway) for a project
stack = ntropi.launch("/my/project", with_web=True)
print(stack.nbot.health())
# … Horizon is live on :8848, the web gateway on :8080 …
stack.close() # stops only what it started
Build a chat app on the gateway
w = ntropi.web.Client("http://127.0.0.1:8080")
w.tasks.submit("summarise the attached report", new_session=True)
key = w.admin.keys.create("mobile-app") # secret returned once
w.admin.users.create("dev@team.com", role="user", projects=["/my/project"])
From the shell (pip install 'ntropi[cli]')
ntropi launch ./my-project --web
ntropi pool --project ./my-project
ntropi chat "summarise report.csv" --project ./my-project
ntropi rl-learning off --project ./my-project # freeze for eval
Install
pip install ntropi
Extras: "ntropi[cli]" adds the ntropi command. The gateway extra pulls in
nbot-gateway, which is not published yet, so leave it off until it is.
The same wheels are mirrored on the platform's own index for air-gapped
installs: pip install --extra-index-url https://platform.entropi.ai/pip/ ntropi.
Install (dev)
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev,cli]"
pytest -q
Requires Python ≥ 3.10. ntropi drives the nbot / nbot-horizon / nbot-web
binaries — it does not bundle them; install them and put them on PATH (or set
NTROPI_NBOT_BIN / NTROPI_HORIZON_BIN / NTROPI_WEB_BIN).
Status
0.5.0 — full coverage across the stack:
- nbot — pool, projects, sessions, tasks, chat (+ OpenAI facade), models, the typed command namespace, and the structured surface (node RL, blueprints, kb, research, artifacts, prompts, notes, connectors, routing, agents, satellites, trace, files, manifesto).
- Horizon — suites, datasets, RL train/env-train (
Job), sessions/traces. - NBotWeb — the full gateway: auth, tasks/chat, read surfaces, adapters, admin (keys/users/settings), MCP, proxy.
- Sync and async everywhere; typed
Config; runtimelaunch; antropiCLI.
See CHANGELOG.md and docs/plans.
Metadata
Release files for ntropi 0.8.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 |
|---|---|---|---|---|
| ntropi-0.8.0.tar.gz | 80.5 kB | With provenance | Details for ntropi-0.8.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ntropi-0.8.0-py3-none-any.whl | Python 3 | none | any | Details for ntropi-0.8.0-py3-none-any.whl |
Total release size: 134.3 kB
Release files / ntropi-0.8.0.tar.gz
| Download URL | ntropi-0.8.0.tar.gz |
|---|---|
| Size | 80.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
34d3b5065302eeafbf1b593311dd106fa69c39c9de4118fa7e165373133aa08a
|
|
BLAKE2b-256 checksum How to use checksums |
5c64596f49fd7b79f96081b213e8b950bfd8f5ecb863930c5191239f41e625c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 2, 2026.
Transparency logRelease files / ntropi-0.8.0-py3-none-any.whl
| Download URL | ntropi-0.8.0-py3-none-any.whl |
|---|---|
| Size | 53.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a277edb4b09bedd06945301866499b392dd000974a5bddac69036ffb7ac2c1ab
|
|
BLAKE2b-256 checksum How to use checksums |
20ca91b5a4323a94c63b1e3a7ada73e5daa7584783310f4beebcea2ed64c1f50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 2, 2026.
Transparency logSecurity for ntropi 0.8.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 2 files in this release have been uploaded with provenance metadata.
Attestation for ntropi-0.8.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 Nov 2, 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.