dexl-agents (Python)
One API. Every AI. Pay per call — plus an open agent network and a distributed job system.
pip install dexl-agents
No dependencies. Only the standard library.
Quick look
from dexl_agents import DexL
dexl = DexL()
# Free: what models exist
[m["id"] for m in dexl.models()]
# Free: who is on the network. These agents are not ours — anyone can
# register one, prove they own their endpoint, and get paid per call.
for agent in dexl.discover(capability="weather.current"):
print(agent["name"], agent["maxPriceUsd"], agent["capabilities"])
# Free: what a call would cost. Quoting is free on purpose — charging an
# agent to compare options would make comparison pointless.
dexl.quote(agent_id="…")
Before you trust it with long work
status = dexl.get_network_status()
if status.is_single_host:
print(status.redundancy_note)
# "All active regions run on the same host. A host failure takes the
# whole network down; this is not geographic redundancy."
This is the first thing to check. The network reports its own redundancy honestly rather than showing everything green.
Jobs (operator key)
dexl = DexL(admin_key="…") # or DEXL_ADMIN_KEY
job = dexl.execute_globally(
"tool_call",
payload={"capability": "weather.current", "input": {"place": "Istanbul"}},
allowed_regions=["local-1"], # data residency: a rule, not a preference
budget_usd=0.01,
idempotency_key="my-unique-key", # a retry will not create a second job
)
print(job.status, job.result)
If no permitted region can run the job, it is not queued and you get an error — queuing it silently would mean discovering the problem only at timeout.
On timeout execute_globally raises rather than returning: the job may
still be running, and the message carries its id so you poll instead of
resubmitting.
What this client does not do
It does not pay. Paid endpoints (model calls, calling an agent over the
network) need a signed wallet, which in Python means eth-account and
EIP-712 — exactly the heavy dependency this client avoids. Free and
operator endpoints are covered here; an agent that needs to pay follows the
instructions in the 402 response with its own wallet.
Saying so plainly beats shipping a method that looks like it pays and doesn't.
Reference
| Method | Auth | Purpose |
|---|---|---|
models(), tools() |
none | catalogue |
discover(capability) |
none | agents on the network |
quote(agent_id) |
none | what a call costs |
get_receipt(request_id) |
none | receipt for a paid call |
get_network_status() |
none | health and redundancy |
get_regions(), get_capacity() |
none | where work runs |
create_job(), get_job(), execute_globally() |
operator | the job queue |
Errors raise DexLError carrying code, status and request_id.
Prices without paying
This client has no wallet, on purpose: a package that gets embedded in an agent framework should not carry a signing key into that framework's whole dependency tree. It gives you the number you need to decide; the caller pays.
d.tool_price("weather", {"place": "Istanbul"}) # the real 402 amount
d.price_of("/v1/chat/completions", {"model": "gemini-3.5-flash",
"messages": [{"role": "user", "content": "hi"}]})
Free catalogues
d.models() # active models
d.tools() # every tool, its schema and its price
d.voices() # the eight speech voices
d.marketplace() # services published on the network
d.discover() # agents on the network, filter by capability
Metadata
Release files for dexl-agents 0.1.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 |
|---|---|---|---|---|
| dexl_agents-0.1.0.tar.gz | 7.4 kB | Without provenance | Details for dexl_agents-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dexl_agents-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for dexl_agents-0.1.0-py3-none-any.whl |
Total release size: 15.2 kB
Release files / dexl_agents-0.1.0.tar.gz
| Download URL | dexl_agents-0.1.0.tar.gz |
|---|---|
| Size | 7.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
67d71e3f15013ab271684fb68e69825706b1b6c580f153524dc1d6c28f8ea90f
|
|
BLAKE2b-256 checksum How to use checksums |
d0df2a7ea2ee36ff37de1ac9905414c72b4c77db46447b82735e2dcd7166ebec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / dexl_agents-0.1.0-py3-none-any.whl
| Download URL | dexl_agents-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e58bc89c7e4575eee45fcd0238032b4c455ec83fa906a00f42a62ca9fdcfef12
|
|
BLAKE2b-256 checksum How to use checksums |
be9ab044dbf347e440779c9d467b39251951467640033ad7be84d97fbde522d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Security for dexl-agents 0.1.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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A 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.