Lossless, provable, composable LLM context compression
Project description
secondwind
Lossless, provable, composable LLM tool-output compression, in-process.
import secondwind
session = secondwind.Session()
out = session.rewrite(request) # compress a whole request's tool outputs
print(out["stats"]) # tokens saved
secondwind.compress(block) # or compress a single tool-output block
# one-line LiteLLM integration:
import litellm
from secondwind.litellm import SecondwindCallback
litellm.callbacks = [SecondwindCallback()]
# ASGI gateway (Starlette / FastAPI): rewrite request bodies before you forward them upstream
from secondwind.asgi import SecondwindMiddleware
app.add_middleware(SecondwindMiddleware)
# LangChain (LCEL): compress tool outputs before the model call
from secondwind.langchain import compress_tool_outputs
chain = compress_tool_outputs() | model
# LangGraph: compress the tool outputs an agent loop re-sends before each model call
from secondwind.langchain import compress_pre_model_hook
agent = create_react_agent(model, tools, pre_model_hook=compress_pre_model_hook())
# Agno: a lossless drop-in for its LLM-based tool-result compression
from secondwind.agno import SecondwindCompressionManager
agent = Agent(model=..., compress_tool_results=True,
compression_manager=SecondwindCompressionManager(compress_tool_results=True))
# Strands Agents: compress tool results as they are produced
from secondwind.strands import SecondwindHooks
agent = Agent(model=..., tools=[...], hooks=[SecondwindHooks()])
# Cursor: a postToolUse hook that rewrites MCP tool output the model sees
# ~/.cursor/hooks.json -> { "version": 1, "hooks": { "postToolUse": [ { "command": "python -m secondwind.cursor" } ] } }
# Bring your own codec: it competes in the best-of-N search, and secondwind proves
# decode(encode(x)) == x for every block, so a wrong codec is dropped, never shipped.
class MyCodec:
def encode(self, text): ... # -> str | None
def decode(self, wire): ... # -> str | None
session = secondwind.Session(codec=MyCodec()) # reckless is safe: proven per-instance
session = secondwind.Session(proposers=False) # turn the aggressive search off
# Offload big blocks and recover them on demand, or back the store with Redis / S3 / a database.
session = secondwind.Session(resolver="resolve", offload_dir="~/.secondwind/offload")
session = secondwind.Session(store=MyStore()) # any object with put(id, value) and get(id)
Every result is lossless: an inline wire is independently verifiable with secondwind.verify(wire, hash), and a large block is offloaded to a recoverable marker. The native library is bundled, so
there is no build step and no model download.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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 secondwind-0.1.2-py3-none-win_amd64.whl.
File metadata
- Download URL: secondwind-0.1.2-py3-none-win_amd64.whl
- Upload date:
- Size: 15.9 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6e07f78bee6504670a52a94e013b63f91a085cd0df207838d1d3097609fef27
|
|
| MD5 |
8e3f41c8e2072f4ec35134b8b8b215e7
|
|
| BLAKE2b-256 |
b47d1acca7e23a5270d8e8d2d2f6f89032864d8b727c4c26699f9e6b947ada44
|
Provenance
The following attestation bundles were made for secondwind-0.1.2-py3-none-win_amd64.whl:
Publisher:
wheels.yml on orchetron/secondwind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
secondwind-0.1.2-py3-none-win_amd64.whl -
Subject digest:
a6e07f78bee6504670a52a94e013b63f91a085cd0df207838d1d3097609fef27 - Sigstore transparency entry: 2209975789
- Sigstore integration time:
-
Permalink:
orchetron/secondwind@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/orchetron
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Trigger Event:
push
-
Statement type:
File details
Details for the file secondwind-0.1.2-py3-none-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: secondwind-0.1.2-py3-none-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 16.1 MB
- Tags: Python 3, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf34093b7697253a3aa46836e9f25a460c0e5ff0dd55cc786d495783abe1ab6b
|
|
| MD5 |
f608b11d00cd4e2bbeff4aac085c3664
|
|
| BLAKE2b-256 |
a3d75141d1c263cfc146476a2d2c31a96b6e5d6709f1f0fc5e61734d3eefef97
|
Provenance
The following attestation bundles were made for secondwind-0.1.2-py3-none-manylinux_2_34_x86_64.whl:
Publisher:
wheels.yml on orchetron/secondwind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
secondwind-0.1.2-py3-none-manylinux_2_34_x86_64.whl -
Subject digest:
cf34093b7697253a3aa46836e9f25a460c0e5ff0dd55cc786d495783abe1ab6b - Sigstore transparency entry: 2209975891
- Sigstore integration time:
-
Permalink:
orchetron/secondwind@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/orchetron
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Trigger Event:
push
-
Statement type:
File details
Details for the file secondwind-0.1.2-py3-none-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: secondwind-0.1.2-py3-none-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 16.0 MB
- Tags: Python 3, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
820dfa4d7a17bd7bde79179fd28370bd80d9afbeffb1379665afc90261f92a6a
|
|
| MD5 |
886d33f5ddf6de43e140ba12ae4c9a1a
|
|
| BLAKE2b-256 |
3102ff4aaea5ba192b7c735112e375c74451defcb641ee3885b579b3ec3016aa
|
Provenance
The following attestation bundles were made for secondwind-0.1.2-py3-none-manylinux_2_34_aarch64.whl:
Publisher:
wheels.yml on orchetron/secondwind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
secondwind-0.1.2-py3-none-manylinux_2_34_aarch64.whl -
Subject digest:
820dfa4d7a17bd7bde79179fd28370bd80d9afbeffb1379665afc90261f92a6a - Sigstore transparency entry: 2209975747
- Sigstore integration time:
-
Permalink:
orchetron/secondwind@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/orchetron
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Trigger Event:
push
-
Statement type:
File details
Details for the file secondwind-0.1.2-py3-none-macosx_11_0_x86_64.whl.
File metadata
- Download URL: secondwind-0.1.2-py3-none-macosx_11_0_x86_64.whl
- Upload date:
- Size: 15.9 MB
- Tags: Python 3, macOS 11.0+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
790f2196b480ee83649ac46d0f881b3180c3ddbf44ae14c8c672b1615ce85ee6
|
|
| MD5 |
fd6ab243b0860842d091d3076e609938
|
|
| BLAKE2b-256 |
aab47b006e4e37a7b16f72f8a330a010cfc196f682a045f4c041e1a6bdd0fffc
|
Provenance
The following attestation bundles were made for secondwind-0.1.2-py3-none-macosx_11_0_x86_64.whl:
Publisher:
wheels.yml on orchetron/secondwind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
secondwind-0.1.2-py3-none-macosx_11_0_x86_64.whl -
Subject digest:
790f2196b480ee83649ac46d0f881b3180c3ddbf44ae14c8c672b1615ce85ee6 - Sigstore transparency entry: 2209975865
- Sigstore integration time:
-
Permalink:
orchetron/secondwind@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/orchetron
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Trigger Event:
push
-
Statement type:
File details
Details for the file secondwind-0.1.2-py3-none-macosx_11_0_universal2.whl.
File metadata
- Download URL: secondwind-0.1.2-py3-none-macosx_11_0_universal2.whl
- Upload date:
- Size: 16.0 MB
- Tags: Python 3, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbcb4544b253ba3c56602778a0216f1373f7e989351ec511fc4f2fd6fe120e0a
|
|
| MD5 |
25bf21f859d2fb3f41f6f4a57ac15f60
|
|
| BLAKE2b-256 |
5f95af1f22e1015e022c10d8fe4b80b09b15b289430b48f02607805eb02d235d
|
Provenance
The following attestation bundles were made for secondwind-0.1.2-py3-none-macosx_11_0_universal2.whl:
Publisher:
wheels.yml on orchetron/secondwind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
secondwind-0.1.2-py3-none-macosx_11_0_universal2.whl -
Subject digest:
bbcb4544b253ba3c56602778a0216f1373f7e989351ec511fc4f2fd6fe120e0a - Sigstore transparency entry: 2209975834
- Sigstore integration time:
-
Permalink:
orchetron/secondwind@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/orchetron
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@bee6eac9bd7243221b5b2c1b538d3b5e3114de53 -
Trigger Event:
push
-
Statement type: