[LIVE] [eeshsaxena/standin] 2 endpoint(s)
ChatGPT
API Proxy/ChatGPT
2,155 characters
Status: [LIVE]
Endpoints found:
https://api.openai.com/v1/chat/completions
https://api.openai.com/v1/chat
Source: https://github.com/eeshsaxena/standin
# standin
**A stand-in for the real LLM in your tests.** Record your LLM API calls once, then replay them forever: fast, free, deterministic, and fully offline. One line, any provider.
<p align="center"><img src="demo/standin.gif" alt="standin: record LLM calls once, replay them instantly and offline" width="820"></p>
```python
import standin
with standin.use_cassette("tests/cassettes/summary.json"):
reply = client.chat.completions.create(model="gpt-4o", messages=[...])
# First run: hits the real API and records it.
# Every run after: replayed from disk. No network, no cost, same answer.
```
Your LLM tests are slow, flaky, and cost money because they hit real APIs. `standin` makes them **deterministic and offline** by recording the real HTTP calls once and replaying them after, with the things LLM devs actually need: **streaming**, **tool-calls**, **secret redaction**, and **body-aware matching**.
---
## Why not just VCR.py?
VCR.py is great, but it's a general HTTP tool. `standin` is built for LLMs:
- **Provider-agnostic, zero wiring.** It hooks `httpx`, `requests`, and `aiohttp`, so it works with **OpenAI, Anthropic, Gemini, Mistral, Cohere, litellm, LangChain, LlamaIndex** and anything else built on those three clients. No per-SDK adapters.
- **Streaming just works.** Server-sent event (SSE) responses are recorded and replayed intact.
- **Safe to commit.** Auth headers, secret-shaped tokens (OpenAI, Anthropic, AWS, Google, GitHub, Slack, JWTs), secret field names in bodies, and credentials in the URL (basic-auth userinfo, `?api_key=`/`?key=` query params, form-encoded `client_secret`) are **redacted automatically**, so cassettes can live in a public repo. `standin verify` re-checks a cassette in CI and fails if anything still looks live.
- **Body-aware matching.** Requests match on normalized JSON, so key ordering and formatting noise don't break replays. Repeated identical calls (agent loops) replay in order.
- **Replay misses explain themselves.** W