Skip to main content
Droste

Droste

Ask questions about data too large for a context window.

Droste is an open source Recursive Language Model (RLM) engine. It gives a model a Python REPL over your data, so the model can search, filter, count, and delegate small pieces of interpretation without loading the full corpus into its context.

uvx droste "which customer had a failed charge, and why?" server.log
uvx droste "which plan has the highest refund rate vs its MRR?" shop.db
uvx droste "how do the authentication flows differ?" ./docs

droste answering a two-part question over a 444 kB server log, streaming its code as it works

Why Droste

Code handles work that should be exact, such as searching, counting, joining, and aggregating. Model calls handle the parts that require interpretation. Droste combines both while keeping the full dataset outside the model's context window.

The root model sees only what its code prints and the bounded results of any subcalls it makes. Runs have explicit limits for iterations, subcalls, time, and model output.

Use it

Install the command and sign in once:

uv tool install droste
droste login

Then ask a question about files, directories, SQLite databases, or piped text:

droste "what changed between these?" report.txt logs.txt
droste "which customers churned last month?" app.db
tail -5000 app.log | droste "why did it crash?"

For a one-off run, use uvx droste instead of installing it. The command also supports an existing ModelRelay key or your own OpenAI-compatible or Anthropic endpoint. See the quickstart for credentials, directories, SQLite, and useful flags.

Good fits

  • Exact counts, aggregates, and joins over logs, exports, or databases.
  • Classification or review across many records using bounded model batches.
  • Questions that need both computation and close reading.

If the data already fits comfortably in a context window, or the task is open-ended agent work rather than a question about a corpus, use a general agent instead. The quickstart includes examples for logs, archives, and SQLite.

Results

Published runs show the largest gains on tasks that require aggregation across scattered or oversized context.

Benchmark Direct baseline Droste Recorded cost
OOLONG, 131K tokens 0.6020 0.6432 $10.16 vs $26.18
OOLONG-Pairs, 32K tokens 0.034 0.80 $2.14 vs $2.50
BrowseComp-Plus, 6.0M to 11.1M tokens Could not run 0.9400 $24.54

These are individual published runs, not universal quality or cost guarantees. See the results and caveats, or open the repository's benchmark guide for artifacts and reproduction steps.

Use it as a library

The same package is a dependency-free Python library. You can supply your own models and data providers, set hard compute budgets, and consume structured traces. Start with the embedding guide. Protocol and host implementers can use the technical reference.

Development

uv sync
uv run pytest
uv build

See CONTRIBUTING.md for the contribution workflow.

License

Apache-2.0. See LICENSE.

Download files

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

Source Distribution

droste-0.26.0.tar.gz (5.1 MB view details)

Uploaded Source

Built Distribution

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

droste-0.26.0-py3-none-any.whl (319.1 kB view details)

Uploaded Python 3

File details

Details for the file droste-0.26.0.tar.gz.

File metadata

  • Download URL: droste-0.26.0.tar.gz
  • Upload date:
  • Size: 5.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for droste-0.26.0.tar.gz
Algorithm Hash digest
SHA256 6fcd9e86bf7053b5fc55d615bf1dd1b8cf9d928946c62a9c84b92e021b6bb8ee
MD5 5d45d59607ba68579cb68e18d8a33eae
BLAKE2b-256 7b17ea68c1b9cdf1ca4be1b0428d6e2f9c1d41bd4c58a3df104f3f0bd9d26bb6

See more details on using hashes here.

File details

Details for the file droste-0.26.0-py3-none-any.whl.

File metadata

  • Download URL: droste-0.26.0-py3-none-any.whl
  • Upload date:
  • Size: 319.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for droste-0.26.0-py3-none-any.whl
Algorithm Hash digest
SHA256 06219b2707fbe696b9f1703a66590423a77ea27bd4b9d8a08bee4f89f06e57b0
MD5 9fa6e98470585754908d97cbd3333c1e
BLAKE2b-256 3977776bab46b732d436369af4937935514d7365958163f64b05e17cd38831ce

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.26.0 This release

2 files

0.25.0

2 files

0.24.0

2 files

0.23.0

2 files

0.22.0

2 files

0.21.1

2 files

0.21.0

2 files

0.20.1

2 files

0.20.0

2 files

0.19.2

2 files

0.19.1

2 files

0.19.0

2 files

0.18.0

2 files

0.17.0

2 files

0.16.0

2 files

0.15.5

2 files

0.15.4

2 files

0.15.3

2 files

0.15.2

2 files

0.15.1

2 files

0.15.0

2 files

0.14.1

2 files

0.13.1

2 files

0.13.0

2 files

0.12.1

2 files

0.12.0

2 files

0.11.0

2 files

0.10.6

2 files

0.10.5

2 files

0.10.4

2 files

0.10.3

2 files

0.10.2

2 files

0.10.1

2 files

0.10.0

2 files

0.9.0

2 files

0.0.1

2 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