Skip to main content

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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

secondwind-0.2.2-py3-none-win_amd64.whl (16.0 MB view details)

Uploaded Python 3Windows x86-64

secondwind-0.2.2-py3-none-manylinux_2_34_x86_64.whl (16.1 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ x86-64

secondwind-0.2.2-py3-none-manylinux_2_34_aarch64.whl (16.1 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ ARM64

secondwind-0.2.2-py3-none-macosx_11_0_x86_64.whl (16.0 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

secondwind-0.2.2-py3-none-macosx_11_0_universal2.whl (16.1 MB view details)

Uploaded Python 3macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file secondwind-0.2.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: secondwind-0.2.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 16.0 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for secondwind-0.2.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 ede4c85e34d24a0d85c5d6072a5c3968155f707aac6843bd3a1617706931d8ec
MD5 beceeb4296cee755bd4e9d62ab12aa09
BLAKE2b-256 99383882ae47645513d7270f0075a51c84009e47521b5af47ced4cb03d3421e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.2.2-py3-none-win_amd64.whl:

Publisher: wheels.yml on orchetron/secondwind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file secondwind-0.2.2-py3-none-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for secondwind-0.2.2-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d7f198601ff644b4d6d8b6f713f706146faeba00c9e4fccb2f636c285816752d
MD5 6cdb6d7c0905b933b50534b60abd8584
BLAKE2b-256 56ba11950696afa5df01ea051866ccc95873540019437e4169fd49e53a025bcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.2.2-py3-none-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on orchetron/secondwind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file secondwind-0.2.2-py3-none-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for secondwind-0.2.2-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 6ea3b0ce6c63e64fe18f2c70b4cd5bfeff7d7d572812a1fd04e827f258f92f47
MD5 203e0708888610a31fcf6dd4d5bf377d
BLAKE2b-256 74f54d47cf611b5cb23d559a24f39d96d8ca454d98f28662d99f1a3c700016c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.2.2-py3-none-manylinux_2_34_aarch64.whl:

Publisher: wheels.yml on orchetron/secondwind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file secondwind-0.2.2-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for secondwind-0.2.2-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 c1289500649b98498ab53485939055963245f343431a1706ad3aa61b369a3855
MD5 5b427ed65a46641455813d4ca02a7ada
BLAKE2b-256 97f23b71701472f5b62286b6da6e33d1722b309e068a1035a285ee019a4f572f

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.2.2-py3-none-macosx_11_0_x86_64.whl:

Publisher: wheels.yml on orchetron/secondwind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file secondwind-0.2.2-py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for secondwind-0.2.2-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d43a6fb2a939131b131843690529707532e1ac3ada8ee7f2ffc1c41afd1c0514
MD5 be56075760c9c130812ec12fb7648b4f
BLAKE2b-256 7ebdfe7449412584b627910a5b8970dd632c44a937d1e9d95ec6060d0eaa2b71

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.2.2-py3-none-macosx_11_0_universal2.whl:

Publisher: wheels.yml on orchetron/secondwind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.2

5 files

0.3.1

5 files

0.3.0

5 files

This release

0.2.2 This release

5 files

0.2.1

5 files

0.2.0

5 files

0.1.3

5 files

0.1.2

5 files

0.1.1

5 files

0.1.0

5 files

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