Record and replay ASGI web page loads
Project description
asgi-replay
A tool for recording and replaying requests using ASGI.
Very early prototype
This is an early prototype. I have used this tool exactly once.
Installation
pip install asgi-replay
Usage
The tool provides two commands - one for recording logs of ASGI requests and one for running a server to replay them.
Recording
asgi-replay record https://www.example.com log.json --port 8000
This runs a local server on port 8000 that proxies content through to www.example.com - and logs each request to log.json.
The log.json file will be over-written for each request. This tool is mainly designed for capturing a single HTTP interaction.
If you add --increment a new file will be written for each request, starting with log-0.json and then log-1.json and so on.
Replaying
To replay a single log - such that any HTTP request to the local server will replay that exact response - run this:
asgi-replay replay log.json --port 8000
(8000 is the default port for both commands.)
What I built this for
I wanted to build a tiny application that could simulate the streaming response from an OpenAI completion endpoint.
The app I built is here: https://github.com/simonw/openai-canned-completion
You can hit it using LLM like this:
OPENAI_API_KEY='x' \
OPENAI_API_BASE='https://openai-canned-completion.vercel.app/v1' \
llm 'hello'
I first ran the following on my own machine:
asgi-replay record https://api.openai.com log.json --port 8000
Then:
OPENAI_API_BASE='http://localhost:8000/v1' \
llm 'hello'
This ran a real request against OpenAI and saved the response in log.json.
Then I ran the replay like this:
asgi-replay record https://api.openai.com log.json --port 8000
And when I ran the llm command again I got the same response, without hitting the OpenAI API:
OPENAI_API_BASE='http://localhost:8000/v1' \
llm 'hello'
Hello! How can I assist you today?
I copied the saved ASGI logs into this ASGI app: https://github.com/simonw/openai-canned-completion/blob/main/canned.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file asgi-replay-0.1a0.tar.gz.
File metadata
- Download URL: asgi-replay-0.1a0.tar.gz
- Upload date:
- Size: 3.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3721a22aa3a0c207cc2d70c9f9865c91e786686d6475e958a13dd61b6acb910f
|
|
| MD5 |
7182ddd1016c91dcf76c7af187d7a180
|
|
| BLAKE2b-256 |
e5e891358cb41bc2eb1861927fa8376bc622c3d3bfc402081a5f180969ff7ebf
|
File details
Details for the file asgi_replay-0.1a0-py3-none-any.whl.
File metadata
- Download URL: asgi_replay-0.1a0-py3-none-any.whl
- Upload date:
- Size: 3.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe48bac162e73a96d1e9232287aa5a3bbed55f73cda9af121e922aad7c6a4c37
|
|
| MD5 |
06a7e08f375166474e996b574a4e9227
|
|
| BLAKE2b-256 |
f0e41c8fe2155bb9317e0702fdd4e3655083908cd637652efdaa38e3224be819
|