ekte — LLM relay reality check
🇬🇧 English · 🇨🇳 中文 · 🇫🇷 Français · 🇪🇸 Español · 🇵🇹 Português · 🇮🇹 Italiano · 🇩🇪 Deutsch · 🇳🇴 Norsk
ekte is a local-first tool that audits whether an API relay (reseller /
proxy) actually serves the model it claims to — or quietly substitutes a cheaper
one, truncates your context window, fakes streaming, or inflates token billing.
In short: do you get what you paid for? It speaks the OpenAI Chat Completions
API, the Anthropic Messages API and the OpenAI Responses API
(/v1/responses) — auto-detected, or forced with --api openai|anthropic|responses.
You point it at a relay endpoint and the model it claims to serve; ekte runs a battery of black-box probes, compares what it observes with a bundled knowledge base of 130 model profiles from 7 providers, and gives a clear, evidence-backed verdict — on the command line, in a local web UI, or as JSON for another tool or LLM.
ekte reports black-box evidence of divergence and risk, not cryptographic proof of fraud. See Responsible use.
Why
The relay-key market is full of "GPT-4o for 1/10th the price" offers. Many are honest. Some are not — and the dishonest ones are hard to catch by eye:
- You ask for
gpt-4o; you're quietly servedgpt-4o-minior an open model. - The relay advertises a 1M-token context but silently truncates to 32K.
- "Streaming" is the full response buffered and re-chunked, with no latency win.
- Reported
usagetokens are inflated, so your balance burns faster than it should. - A model that should support tool calling / JSON mode quietly doesn't.
ekte turns "this feels off" into a reproducible report.
Install
Requires Python 3.11+ on Linux, macOS or Windows.
pip install 'ekte[web]' # or: uv tool install 'ekte[web]'
The web extra adds the local web UI; leave it out for the command line only.
From source, with uv or in Docker: Install.
Quick start
export EKTE_API_KEY=sk-your-relay-key
# audit a relay against the model it claims to serve
ekte check --base-url https://relay.example.com/v1 --api-key env:EKTE_API_KEY \
--model gpt-4o --suite standard
# the strongest check: compare against a trusted baseline of the same model
export OPENAI_API_KEY=sk-your-openai-key
ekte compare \
--target-base-url https://relay.example.com/v1 --target-api-key env:EKTE_API_KEY --target-model gpt-4o \
--baseline-base-url https://api.openai.com/v1 --baseline-api-key env:OPENAI_API_KEY --baseline-model gpt-4o
# or point and click: the local web UI
ekte serve
More examples, config files and use from scripts or LLM agents: Quick start. The web UI: Web UI.
What it checks
ekte scores ten dimensions. The four core dimensions — model identity, context window, capability claims and billing & usage — most directly reveal a bait-and-switch. The names are the ones the web UI and reports use.
| Dimension | Id | What it catches |
|---|---|---|
| Model identity | model_identity |
Silent model downgrade or substitution |
| Context window | context_window |
Silent context truncation and lost-in-the-middle |
| Capability claims | capability |
Tool calling, JSON mode, max output or vision that isn't delivered |
| Protocol compliance | protocol |
Request parameters and response attributes that are dropped or ignored |
| Billing & usage | billing |
Inflated or missing token usage |
| Connectivity | connectivity |
Endpoint reachability and the advertised model list |
| Streaming authenticity | streaming |
Fake streaming (buffer-then-chunk) |
| Concurrency reliability | reliability |
Failures and slowdowns under concurrent load |
| Transport security | security |
Plain HTTP, secret echo, injected system prompts, tampering |
| Performance | performance |
How consistent latency, time to first token and throughput are |
How every check works and how the verdict is reached: Methodology.
Documentation
| User guide | |
|---|---|
| Install | pip, uv, from source, optional extras |
| Quick start | First audits, config files, use by scripts and LLM agents |
| Web UI | Pages, background audits, analytics, languages |
| Suites and compare mode | Suites, custom suite, trusted baseline, LLM judge |
| Performance | The performance section, the probe and request timeouts |
| Monitoring | Scheduled re-audits, webhook alerts, API key storage |
| Embedding, rerank, image and audio | Audits of endpoints that are not chat |
| Knowledge base | Model profiles and adding your own |
| Reports | Report formats and contents |
| Privacy and local data | What stays on your machine; responsible use |
| GitHub Action | Gate a CI workflow on a relay audit |
| Docker | Run the web UI in a container |
| Methodology | Every check, its scoring scale and its caveats |
| Coming from zing | What changes for an existing zing install |
| Reference (English) | |
|---|---|
| Command line | Every command and option, and the exit codes |
| Report and webhook schemas | The JSON formats and their schema_version |
| Stability and compatibility | What semver protects, deprecation, supported Python and systems |
| Changelog | What changed in each release |
Contributing: Contributing guide and Developer guide (English). Security issues: Security policy.
License
Metadata
Release files for ekte 0.33.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 | Provenance | Actions |
|---|---|---|---|---|
| ekte-0.33.1.tar.gz | 2.0 MB | With provenance | Details for ekte-0.33.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ekte-0.33.1-py3-none-any.whl | Python 3 | none | any | Details for ekte-0.33.1-py3-none-any.whl |
Total release size: 3.4 MB
Release files / ekte-0.33.1.tar.gz
| Download URL | ekte-0.33.1.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1038f0e21b9e8c1f91a0d99c7926cd3bd1ab53b127f524c3b8b39f2bb0eb8e4b
|
|
BLAKE2b-256 checksum How to use checksums |
517f7c3256832a2701a12a5d2595206eaea9eba3bf2b385bee006ea2dfa788c7
|
| 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 / ekte-0.33.1-py3-none-any.whl
| Download URL | ekte-0.33.1-py3-none-any.whl |
|---|---|
| Size | 1.3 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
82912e093e312de32f43cc823a55e4cf82af02c6f85e199106bad2802904d2e5
|
|
BLAKE2b-256 checksum How to use checksums |
6395ad5c940cd3aabbdb2dafe307185bc8ad947da9a2eb5f54c71c13dcc0ba4a
|
| 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 ekte 0.33.1
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 ekte-0.33.1.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.