A tool for recording and replaying requests using ASGI.
This is an early prototype. I have used this tool exactly once.
pip install asgi-replay
The tool provides two commands - one for recording logs of ASGI requests and one for running a server to replay them.
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.
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.)
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