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.3.1-py3-none-win_amd64.whl (16.0 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

secondwind-0.3.1-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.3.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: secondwind-0.3.1-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/7.0.0 CPython/3.13.14

File hashes

Hashes for secondwind-0.3.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 42c35f4c684e3ec708a79bd32b0d98ffd87712971b8d848ef7ae8005e7c8a677
MD5 ab0f3a743c80341db2cb0c14e386ab1b
BLAKE2b-256 203b82c173cff6c3099c89b32f6efb974dc08daf60d414107ac8676a87b23f1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.3.1-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.3.1-py3-none-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for secondwind-0.3.1-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e5828acf99314251e3973681310d4cbd027c6ef019e9f44775d33355c8365b14
MD5 104b1149166fd09bc512d18add6026be
BLAKE2b-256 0c2b03b6270dfc3cbd00653ce7ef61824b41ff33ab27e44023e1774711fef6a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.3.1-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.3.1-py3-none-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for secondwind-0.3.1-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 abf23108b66e6f22f888659185dc4e979c59af37433180f7210391c6d0dbf13c
MD5 9cb11d0d23e29aabff2f0d678021808d
BLAKE2b-256 fb931b52a77e991b3506d5166ec059a30d957cfbc87110f72f08defe992a7ba3

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.3.1-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.3.1-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for secondwind-0.3.1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f4aefa6c1c7dd8ca77505c706101ac9e49102480875c625e9e3d5935b9a0c37e
MD5 4b8719ca31146f2a6ef8231a09fa46a7
BLAKE2b-256 4f49431e50beba87a21c22d2fa687370681a92f57fc7856ed261fadaa7a5689c

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.3.1-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.3.1-py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for secondwind-0.3.1-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 a79701f5a84d20b82ac6a5293e3fc564d2294633f412ed4b6053238532ff32d0
MD5 f91c5f0fc78699161d46b7365dcc4073
BLAKE2b-256 c3869655d21ab3606101658c6b64ac4b8d67e8abb0b8bc983eb7a48a5e3439a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for secondwind-0.3.1-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

This release

0.3.1 This release

5 files

0.3.0

5 files

0.2.2

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