ICA Lens
ICA Lens fits, shares, and applies Independent Component Analysis bases for language-model activations. The core API operates on activations supplied by the caller; it does not load language models or capture activations.
uv add icalens
Load a published lens:
from icalens import ICALens
lens = ICALens.from_pretrained("sida/icalens-gpt2-small-pile10k")
scores = lens.transform(activations, layer=6)
reconstructed = lens.inverse_transform(scores, layer=6)
energy = lens.energy(scores) # per-token component fractions summing to 1
Fit and publish your own:
from icalens import ICALens
lens = ICALens(
model_id="openai-community/gpt2",
model_type="base",
activation_site="resid_post",
)
lens.fit(activations, layer=6, random_state=0)
lens.save("./my-icalens")
lens.push_to_hub("username/icalens-gpt2-small")
For the standalone publishing demo, create a project-root .env file containing
a Hugging Face token with write permission:
HF_TOKEN=hf_...
The .env file is ignored by Git. Publish a saved lens with:
uv run python demo/publish.py \
--lens ./my-icalens \
username/icalens-model-name
Instruction-tuned checkpoints use the same activation-level API and are identified explicitly in their portable metadata:
lens = ICALens(
model_id="Qwen/Qwen2.5-0.5B-Instruct",
model_type="instruct",
)
model_type describes the checkpoint and accepts "base" or "instruct".
The standard icalens installation can capture and analyze text or completed
chat conversations directly. result = lens.analyze(text, layer=6) returns aligned
tokens, activations, signed scores, and per-token component energy shares.
Inputs may be NumPy arrays or PyTorch tensors. Leading dimensions are treated as sample dimensions and the final dimension must be the model hidden size. Fitting uses ICA Lens's built-in PyTorch FastICA implementation and can run on the input tensor's device. NumPy inputs are fitted on CPU. ICA Lens does not depend on scikit-learn or SciPy.
See docs/api.md and
docs/artifact-format.md for the public API and
portable artifact format.
For the 1,000-token GPT-2/Pile-10k fitting demo, run:
uv sync
uv run python demo/fit.py
For the corresponding instruct-model demo using assistant tokens from UltraChat conversations, run:
uv run python demo/fit_chat.py --layers 12
Then inspect assistant-token component scores with:
uv run python demo/apply_chat.py
Both apply.py and apply_chat.py also write standalone interactive HTML
explorers under demo/output/; pass --output-file to choose another path.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file icalens-0.2.1.tar.gz.
File metadata
- Download URL: icalens-0.2.1.tar.gz
- Upload date:
- Size: 300.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b056d1fb3743cd5ec35863b5bcae348af416b6adb6cf6787cc48f6af7378871e
|
|
| MD5 |
043ee567d54f7012f6b2337ae7495956
|
|
| BLAKE2b-256 |
8b0d177a4a1bee118bef72080cb3a24a16d746c81f8714815902edc764d944c9
|
Provenance
The following attestation bundles were made for icalens-0.2.1.tar.gz:
Publisher:
release.yml on liusida/icalens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
icalens-0.2.1.tar.gz -
Subject digest:
b056d1fb3743cd5ec35863b5bcae348af416b6adb6cf6787cc48f6af7378871e - Sigstore transparency entry: 2406108857
- Sigstore integration time:
-
Permalink:
liusida/icalens@530963b48c546b7fb97288cd93ace018cf3bb979 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/liusida
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@530963b48c546b7fb97288cd93ace018cf3bb979 -
Trigger Event:
release
-
Statement type:
File details
Details for the file icalens-0.2.1-py3-none-any.whl.
File metadata
- Download URL: icalens-0.2.1-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f353b5982214372fbbcf602f1935fbb03235416f83c10cb5724003d76d34a908
|
|
| MD5 |
6af3f12cfbcf2e772577f4d204ff6159
|
|
| BLAKE2b-256 |
827de146e0657f72e77ec5ab80835d7e776875ecf32d65ae2ff070a309984925
|
Provenance
The following attestation bundles were made for icalens-0.2.1-py3-none-any.whl:
Publisher:
release.yml on liusida/icalens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
icalens-0.2.1-py3-none-any.whl -
Subject digest:
f353b5982214372fbbcf602f1935fbb03235416f83c10cb5724003d76d34a908 - Sigstore transparency entry: 2406108974
- Sigstore integration time:
-
Permalink:
liusida/icalens@530963b48c546b7fb97288cd93ace018cf3bb979 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/liusida
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@530963b48c546b7fb97288cd93ace018cf3bb979 -
Trigger Event:
release
-
Statement type: