Skip to main content

🕵 LLM Fingerprint

Status Tag PyPI

Identify LLMs by their response fingerprints


Research Question

Is it possible to identify which LLM generated a response by analyzing its semantic patterns across multiple standardized prompts?

Approach

LLM Fingerprint uses semantic similarity patterns across multiple prompts to create model-specific "fingerprints":

  1. Fingerprint Creation: Generate multiple responses from known LLMs using standardized prompts

    • Fixed sampling parameters to ensure consistent sampling behavior
    • Multiple response samples per prompt to account for sampling variance
    • Several distinct prompts to capture model characteristics
  2. Similarity Analysis: Measure semantic similarity within and between prompt response groups

    • Within-prompt similarity reveals consistency characteristics
    • Cross-prompt similarity patterns create a unique model signature
  3. Model Identification: Match patterns from unknown models against the fingerprint database

    • Generate responses from the unknown model using the same standardized prompts
    • Compare similarity patterns with known models
    • Identify the closest matching fingerprint

Usage

Set required environment variables. See .envrc.example for more details.

Creating Model Fingerprints

# Generate samples for known model responses
llm-fingerprint generate \
  --language-model "model-1" "model-2" "model-3" \
  --prompts-path "./data/prompts/prompts_general_v1.jsonl" \
  --samples-path "samples.jsonl" \
  --samples-num 4

# Upload samples to ChromaDB
llm-fingerprint upload \
  --language-model "embedding-model" \
  --samples-path "samples.jsonl" \
  --collection-name "samples"

Identifying Unknown Models

# Generate samples for unknown model (or use an external service)
# Let's suppose the we don't know we are using model-2
llm-fingerprint generate \
  --language-model "model-2" \
  --prompts-path "./data/prompts/prompts_single_v1.jsonl" \
  --samples-path "unk-samples.jsonl" \
  --samples-num 1

# Query ChromaDB for model identification
llm-fingerprint query \
  --language-model "embedding-model" \
  --samples-path "unk-samples.jsonl" \
  --results-path "results.jsonl" \
  --results-num 2

# matches.jsonl will contain the results
# {"model": "model-2", "score": ... }
# {"model": "model-1", "score": ... }

Installation

The preferred way to install llm-fingerprint is using uv (although you can also use pip).

# Clone the repository
git clone https://github.com/S1M0N38/llm-fingerprint.git
cd llm-fingerprint

# Create a virtual environment
uv venv

# Install the package
uv sync # --all-groups # for installing ml and dev groups

Requirements

  • Python 3.11+
  • OpenAI-compatible API endpoints (/chat/completions and /embeddings)
  • Access to ChromaDB (locally or hosted)

Contributing

This toy/research project is still in its early stages, and I welcome any feedback, suggestions, and contributions! If you're interested in discussing ideas or have questions about the approach, please start a conversation in GitHub Discussions.

For detailed information on setting up your development environment, understanding the project structure, and the contribution workflow, please refer to CONTRIBUTING.md.

Metadata

Release files for llm_fingerprint 0.7.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 llm_fingerprint 0.7.0
File Size Uploaded Provenance
llm_fingerprint-0.7.0.tar.gz 129.8 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 145.0 kB

Release files / llm_fingerprint-0.7.0.tar.gz

Download URL llm_fingerprint-0.7.0.tar.gz
Size 129.8 kB
Tags Source
SHA-256 checksum
How to use checksums
43b94c2d35a9a176361471a102a5f75f4704924ac700f7aee1021c2cb458c38e
BLAKE2b-256 checksum
How to use checksums
16b467645b4f8b0bd2a8d0a8fc5e6ea58421aab8f2c06641ea230f24443045c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / llm_fingerprint-0.7.0-py3-none-any.whl

Download URL llm_fingerprint-0.7.0-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
248f008ecf4e7f653c2e3c29bef770ba9718d32344af07a7cb4b9a7c4185ba1f
BLAKE2b-256 checksum
How to use checksums
4508790ac706ae34f5831daeea13f792fc4557ce87769000143525bdd2b7c88c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for llm_fingerprint 0.7.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.

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