Skip to main content

llmwho

Passive LLM endpoint identity and stability instrumentation for Python.

pip install llmwho
import llmwho

handle = llmwho.init()

Direct Anthropic Messages API calls need no LLMWho-specific wrapper:

import llmwho
from anthropic import Anthropic

llmwho.init()
client = Anthropic()
client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=64,
    messages=[{"role": "user", "content": "Hello"}],
)

One call instruments installed HTTPX (sync and async) and requests clients for recognized LLM routes. It writes content-free observations to ~/.llmwho/events.jsonl; it never sends active traffic. Calls are idempotent, streaming responses are not consumed, and handle.shutdown() safely restores only LLMWho-owned patches.

Send the same observations to a self-hosted Collector without changing request sites:

handle = llmwho.init(
    collector_url="http://127.0.0.1:7734",
    collector_token="…",
)

The remote queue is bounded, non-blocking, and fail-open. Native and OTLP modes are available; no Collector URL keeps the local JSONL default. Run the service with llmwho collector; deployment and security details are in the Collector guide.

The CLI also accepts content-free Claude Code and Codex lifecycle events: llmwho hook claude-code|codex --event EVENT. Project configuration and privacy details are in the agent hook guide.

Run an explicit OpenAI-compatible compatibility canary:

report = llmwho.probe(
    base_url="https://api.openai.com/v1",
    api_key="…",
    model="gpt-4o-mini",
)

Compare explicitly supplied output corpora without network or persistence:

report = llmwho.science.output_affinity_matrix({
    "reference": ["reference answer"],
    "endpoint": ["endpoint answer"],
})
print(report["evidence"]["matrix"][0][1])

The symmetric character-trigram distance measures surface style only. It does not prove model identity, distillation, or capability transfer. Full method and limits: Output-affinity matrix.

Inspect local history:

llmwho summary
llmwho dashboard

Version 0.4 records the response body's declared model field only as a provider declaration. It never turns that declaration into model identity or confidence. Identity remains unknown unless an independent calibrated detector supplies evidence. Undocumented model response headers are ignored; the smoke suite measures capability and does not uniquely identify arbitrary model weights. Raw prompts, responses, headers, query strings, and credentials are never stored.

Full documentation, research review, and source: github.com/tcztzy/llmwho.

Metadata

Release files for llmwho 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for llmwho 0.4.0
File Size Uploaded Provenance
llmwho-0.4.0.tar.gz 37.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for llmwho 0.4.0
File Interpreter ABI Platform
llmwho-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 84.3 kB

Release files / llmwho-0.4.0.tar.gz

Download URL llmwho-0.4.0.tar.gz
Size 37.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6e117163f650288c146503d4bbb1ff8cc3866310394b10f7b19cbfc4bfb722aa
BLAKE2b-256 checksum
How to use checksums
d9d656f8cdd61cc908e00fc0e95d58a690dc84ccaf9d9e44d5d09c1a69d6bd2a
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 25, 2026.

Transparency log

Release files / llmwho-0.4.0-py3-none-any.whl

Download URL llmwho-0.4.0-py3-none-any.whl
Size 46.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4e8faf54b1d335d72ea351d5d3de2026f139531abf967c52b301ac391e33c5bd
BLAKE2b-256 checksum
How to use checksums
1ff87beaee0da4233a0fbf18645ce7a51e3e0c339aabe8f97662880489b62b95
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 25, 2026.

Transparency log

Security for llmwho 0.4.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.

Select from 2 files

Attestation for llmwho-0.4.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 25, 2026.

Transparency log

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page