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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

secondwind-0.3.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.3.2-py3-none-win_amd64.whl.

File metadata

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

File hashes

Hashes for secondwind-0.3.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 95523d28edf21f4f005c6fe642799ead2c4a48ce1963f438046cc94753a671f5
MD5 d50206f94a7f342c1ea8d7e8291a162d
BLAKE2b-256 80e5df3e3c4c40a99935dba62085483e10dca119f00ba228f7c6f866ee01aca0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for secondwind-0.3.2-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7967505c4a6fb3c0749d49d0f8d76db25c7e4597e83e031fbdc7166ba4a686e2
MD5 99a200b86c2009b73ff0788fa7284af5
BLAKE2b-256 21a3ec9c88252f17aa7ad36fdc4457f6d7ddee21aea13233d274bc51207c652d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for secondwind-0.3.2-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 244c3a2366dfdf79368440d72a03fbbfb76b41c656f3b88cfa1ef21e6773d212
MD5 68d944718bd6a424a2b22e27e18dc6a7
BLAKE2b-256 ca2ccdeaef5aba1398c3f7a7b95982163c892c1a754fb1df49154c2a7c8753b7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for secondwind-0.3.2-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8a39f8e20303a32fda92f0a7dabc138f977ad06f7144f6cdc51314a5e8ba5a37
MD5 a06e28f62a33641f49114d274978d8cb
BLAKE2b-256 915447c4adc99016be5c94d5ff32083c2d5ef9f5d5a7f0603171df011f8a6d8b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for secondwind-0.3.2-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 eb6d5e2d76e9ffd19097f4e69a58c83d15ecfd0b311af9e4a2a5cc3349d90310
MD5 7acb42eed763b3fb9736c0d3426d9a11
BLAKE2b-256 01f48dc32d232263dd75a00ade31a662ca65573c2b247268a8a5d4a1d49dd43b

See more details on using hashes here.

Provenance

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

This release

0.3.2 This release

5 files

0.3.1

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