Metadata-Version: 2.5
Name: airprompter-datastore-redis
Version: 0.5.0
Summary: The AirPrompter release datastore over Redis or Valkey: a KvStore with atomic Lua conditional writes and a sorted-set index, for kv_release_datastore. Bring your own client (redis-py).
Project-URL: Homepage, https://github.com/airprompter/airprompter-agent-sdk
Project-URL: Source, https://github.com/airprompter/airprompter-agent-sdk/tree/main/sdk-python/packages/datastore-redis
Project-URL: Protocol, https://github.com/airprompter/airprompter-agent-sdk/blob/main/protocol/datastore-format.md
Project-URL: Changelog, https://github.com/airprompter/airprompter-agent-sdk/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/airprompter/airprompter-agent-sdk/issues
Author: AirPrompter
License-Expression: BSD-3-Clause
License-File: LICENSE
Keywords: agent,airprompter,datastore,llm,prompts,redis,valkey
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.10
Requires-Dist: airprompter-agent-sync==0.5.0
Provides-Extra: redis
Requires-Dist: redis>=5; extra == 'redis'
Description-Content-Type: text/markdown

# airprompter-datastore-redis

The AirPrompter release datastore over Redis (6.2+) or Valkey: a `KvStore`
for `kv_release_datastore` (`airprompter-agent-sync`)
([docs/datastore.md](https://github.com/airprompter/airprompter-agent-sdk/blob/main/docs/datastore.md)).
The keys, hashes, index and Lua scripts are `@airprompter/datastore-redis`'s,
so Python and TypeScript share one namespace.

```python
import redis
from airprompter_agent import kv_release_datastore
from airprompter_datastore_redis import redis_kv_store

releases = kv_release_datastore(redis_kv_store(client=redis.Redis.from_url(os.environ["REDIS_URL"])))
```

- `client` is anything with `execute_command(*args)`; bytes or decoded replies both work.
- Each conditional write is one atomic `EVAL`; `list` is an exact range over
  a sorted-set index (never a `SCAN` glob); every key is `{namespace}:…`, one
  cluster slot.
- Durability is Redis's: run with AOF, or accept that a restart loses the
  rows (runtimes keep serving; the next pull writes the release again).
