npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

logitping

v0.1.0

Published

Streaming behavioral fingerprint probes for LLM endpoints and local developer CLIs

Readme

logitping

logitping (lping) is a Node.js CLI and TypeScript library for collecting LLM behavior samples and comparing them with measured reference fingerprints. Use it to investigate endpoint behavior, compare candidate models, and build your own reference bank.

Experimental 0.1.0. Results describe behavioral similarity, not proof of model identity. confidence is a relative likelihood under statistical assumptions, not an empirically validated identity probability. Do not use a match as the sole basis for a security or billing decision.

The bundled bank contains 13 models collected through OpenRouter on 2026-10-03, with 10 training and 5 threshold-calibration runs per model. It uses 512 English integer samples per run. Early stopping is disabled pending independent evaluation. See the model list, collection settings, and evaluation status.

Install

Use Node.js 22 or later and npm; CI checks Node.js 22 and 24 on Linux.

npm install -g logitping
lping --help

Both logitping and lping run the same CLI. To try the CLI without a global installation:

npx logitping --help

The npm package includes ESM/CommonJS library exports, TypeScript declarations, and the reference documentation under docs/. See Contributing for development checks.

Quickstart

This example probes openai/gpt-6.1-sol through OpenRouter using the Responses format and 8,192 output-token budget recorded in its reference fingerprint. You need an OpenRouter account with access to that route and an API key already exported as OPENROUTER_API_KEY through your shell or secret manager. .env files are not loaded automatically.

Running this command sends one provider request and may incur charges, including reasoning tokens. It does not refresh the bank or retry a failed probe. The CLI streams the response; the bank was collected without streaming, and transfer between those modes has not been independently evaluated. OpenRouter documents its Responses endpoint and authentication.

LOGITPING_API_KEY="${OPENROUTER_API_KEY:?Export OPENROUTER_API_KEY first}" \
  lping \
  --provider openai \
  --endpoint https://openrouter.ai/api/v1 \
  --model openai/gpt-6.1-sol \
  --api-format responses \
  --max-tokens 8192 \
  --json \
  --no-interactive

The explicit key mapping is required: the probe CLI reads LOGITPING_API_KEY, not OPENROUTER_API_KEY. Keep real keys out of commands, screenshots, and issue reports. A supplied key is sent to the endpoint you choose; use an endpoint you trust. More credential options include --key-file.

A completed probe may return INCONCLUSIVE or UNKNOWN_MODEL. The following is an excerpt from an offline replay of a stored gpt-6.1-sol calibration run, not a promised live result. The full JSON also contains samples, scores, timing, and warnings.

{
  "status": "INCONCLUSIVE",
  "model": null,
  "confidence": null,
  "reason": "Insufficient separation between enrolled models, or likelihood and OOD checks disagree",
  "evaluatedSamples": 512,
  "requestedSamples": 512,
  "earlyStopped": false
}

Understand the result

| Status | Meaning | Exit code | | --- | --- | --- | | IDENTIFIED | One reference passed the nominal likelihood and distance checks; this is not identity attestation | 0 | | HEURISTIC_MATCH | An explicitly enabled comparison across transports found a reference candidate; confidence is null | 2 | | INCONCLUSIVE | Insufficient separation, disagreeing checks, or an incomplete response | 2 | | UNKNOWN_MODEL | All enrolled distance regions rejected the observation; drift can also cause this | 2 | | UNCALIBRATED | Samples were collected without a usable calibrated bank for this transport | 2 | | ERROR | Invalid configuration, transport failure, or malformed output | 1 |

Exit 2 reports one of the four result statuses above; inspect status and reason rather than treating it as a transport failure. Cancellation exits with 130; successful utility commands exit with 0.

A local replay of 65 threshold-calibration runs produced 24 label matches and 41 inconclusive results. Removing each tested model from the bank produced four wrong matches in 65 trials, each with nominal confidence above 99.99%. These are limited diagnostics, not independent accuracy estimates. Read the evaluation notes before interpreting scores.

Supported connections

| Connection | Behavior with the bundled bank | | --- | --- | | OpenAI-compatible Chat Completions or Responses API | Compares samples with API references when protocol settings match | | Anthropic Messages API | Compares samples with API references when protocol settings match | | Locally authenticated Claude or Codex CLI | Collects samples and returns UNCALIBRATED; identification needs a bank enrolled through that driver | | CLI with --allow-transport-mismatch | Experimental comparison with API references; a match is reported as HEURISTIC_MATCH |

API compatibility permits a comparison; it does not establish accuracy across hosts, API formats, or streaming modes. The bundled bank requires English, 512 samples, and omitted temperature (null in the bank). Other settings require a matching bank. The CLI reference covers custom banks, token budgets, streaming, JSON errors, and credential handling.

Local CLI probes reuse your login and may incur provider usage or charges. Run them only with trusted binaries and backends. Codex may start a tool before the driver detects and terminates it; its temporary working directory and read-only configuration are not a complete isolation boundary. Read the transport limitations first.

# Collection only with the bundled API bank; normally exits with code 2.
lping --driver claude --json
lping --driver codex --json

Library

Install the library into your application:

npm install logitping

Then use the same reference settings:

import { HttpClient, fingerprint } from 'logitping';

const apiKey = process.env.LOGITPING_API_KEY;
if (!apiKey) throw new Error('Set LOGITPING_API_KEY to your OpenRouter API key');

const result = await fingerprint(new HttpClient({
  provider: 'openai',
  baseURL: 'https://openrouter.ai/api/v1',
  model: 'openai/gpt-6.1-sol',
  apiFormat: 'responses',
  apiKey,
}), {
  maxTokens: 8192,
  signal: AbortSignal.timeout(120_000),
});

console.log(result.status, result.model, result.confidence);

This makes the same kind of paid probe as the Quickstart. See the library reference for custom banks, transports, cancellation, and error codes.

Install from source

From an existing checkout or source archive, run:

npm ci
node dist/bin/logitping.js --help

npm ci builds through prepare. When following CLI examples from a source checkout, replace lping with node dist/bin/logitping.js. To install your local build instead of the registry version, run npm pack and npm install -g ./logitping-0.1.0.tgz.

Documentation and contributing

Contributions are welcome, especially reproducible bug reports, independent evaluations, and improvements to protocol coverage. Follow the contribution guide to keep credentials and private data out of reports.

License

MIT. Builds include dependency license texts in dist/THIRD_PARTY_NOTICES.md.