Metadata-Version: 2.5
Name: echoChain
Version: 0.2.0
Summary: Measure how information degrades across repeated LLM transformations.
Project-URL: Homepage, https://github.com/smusali/echoChain
Project-URL: Repository, https://github.com/smusali/echoChain
Project-URL: Issues, https://github.com/smusali/echoChain/issues
Project-URL: Changelog, https://github.com/smusali/echoChain/blob/main/docs/CHANGELOG.md
Project-URL: Documentation, https://github.com/smusali/echoChain/blob/main/docs/USAGE.md
Author-email: Samir Musali <samir.musali@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: cli,evaluation,information-degradation,llm,openrouter
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3.15
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: httpx2<3,>=2
Requires-Dist: jinja2<4,>=3.1
Requires-Dist: openai<4,>=3
Requires-Dist: pydantic<3,>=2
Provides-Extra: baseline
Requires-Dist: sentence-transformers<7,>=3.4; extra == 'baseline'
Description-Content-Type: text/markdown

# echoChain

echoChain measures how an answer changes when models rewrite it in a loop.

```mermaid
flowchart LR
  S["Seed text"] --> Q["a2q: ask"]
  Q --> A["q2a: answer"]
  A --> J["Judge vs seed"]
  J --> R["Write JSONL row"]
  R --> C{"Stop?"}
  C -->|"no"| Q
  C -->|"yes"| M["Write manifest"]
```

## Install

```bash
pip install echochain
```

The optional `baseline` extra adds sentence-transformer scores:

```bash
pip install "echochain[baseline]"
```

Set `OPENROUTER_API_KEY` in the environment or in `.env`.

## Commands

Dry-run the packaged seed:

```bash
echochain run --config examples/echochain.toml --dry-run
```

Run one live cycle:

```bash
echochain run --start "Redis uses epoll for I/O" --max-cycles 1 --yes
```

Summarize a finished run:

```bash
echochain analyze runs/RUN_ID
```

Flags, configuration, output files, and exit codes are in the
[usage guide](https://github.com/smusali/echoChain/blob/main/docs/USAGE.md).

## Stability

Before 1.0.0, an incompatible change bumps the minor version and is listed in the
[changelog](https://github.com/smusali/echoChain/blob/main/docs/CHANGELOG.md).

## More

- [Methodology](https://github.com/smusali/echoChain/blob/main/docs/METHODOLOGY.md)
- [Contributing](https://github.com/smusali/echoChain/blob/main/docs/CONTRIBUTING.md)
- [Example config](https://github.com/smusali/echoChain/blob/main/examples/echochain.toml)
