This repo has two layers of verification:
- Rust checks:
fmt,clippy, unit tests - proxy integration tests: real Claude-shaped requests against a running proxy
Against a running proxy:
CHUTES_TEST_API_KEY=cpk_your_key ./test.sh --allDefaults:
PROXY_URL=http://127.0.0.1:8080MODEL=zai-org/GLM-4.5-Air
Build the release binary first:
cargo build --releaseStart the mock backend:
python3 tests/mock_openai_backend.py --port 8000Start the proxy in another shell:
BACKEND_URL=http://127.0.0.1:8000/v1/chat/completions \
HOST_PORT=8080 \
target/release/claude_openai_proxyRun the main suite:
CHUTES_TEST_API_KEY=test \
PROXY_URL=http://127.0.0.1:8080 \
./test.sh --ci --allRun the feature scripts:
CHUTES_TEST_API_KEY=test PROXY_URL=http://127.0.0.1:8080 ./tests/test_non_streaming.sh
MODEL=deepseek-r1 CHUTES_TEST_API_KEY=test PROXY_URL=http://127.0.0.1:8080 ./tests/test_thinking.sh
CHUTES_TEST_API_KEY=test PROXY_URL=http://127.0.0.1:8080 ./tests/validate_claude_api.sh- basic requests, conversations, and parallel requests
- Claude Code request shapes
- streaming SSE responses
stream: falseJSON responses- tool use and tool results
- multimodal image inputs
- token counting
- model 404 handling and case correction
- thinking output for reasoning-capable models
test.shunified entry point for the core suitetests/mock_openai_backend.pydeterministic OpenAI-compatible backend used in CI and local reprostests/test_non_streaming.shverifies non-streaming success and Anthropic-style JSON errorstests/validate_claude_api.shchecks response shape for Claude-facing compatibility