This guide uses source checks from Sep 27, 2026. Provider and gateway prices can change; preserve the checked date with every forecast.
Why This Topic Matters Now
The Sep 26 report included `responses api streaming` and an intelligent-retry query, but a production load test needs a different boundary. It should answer how a known concurrency pattern behaves under a declared budget, not create a burst of uncontrolled retries or expose customer prompts. A test that records only HTTP status can miss token growth, output truncation, queue age, and duplicate work.
This runbook is for Tier 1 and Tier 2 teams testing an OpenAI-compatible Chinese AI API before a launch or route change. It combines synthetic fixtures, staged concurrency, hard budget stops, rate-limit classification, and request receipts. The method is intentionally reversible: start small, compare the evidence to the acceptance contract, and stop when the route or budget boundary is unknown.
Source Facts Checked Today
AIWave /api/pricing was checked from production on Sep 27, 2026 and returned HTTP 200, success=true, 73 live route rows, pricing_version a42d372ccf0b5dd13ecf71203521f9d2, auto_groups=['default'], group_ratio default=1 and vip=0.9, with supported_endpoint=openai. The public /api/v1/pricing endpoint also returned HTTP 200 with 56 dated USD rows, pricing_version 83f77abde81ee3a096a672ed959ccc096f5d37a45c177ae8e03229456b5415a5, checked=2026-09-10, and updated_at=2026-09-18. Use the live response for route availability and the dated JSON for a forecast; they are not one interchangeable rate table.
The k6 load-testing guide checked on Sep 27, 2026 distinguishes load, stress, spike, and soak styles. The article uses that taxonomy to keep a first AI API trial narrow: begin with a staged load test, then expand only after the receipt and budget gates are understood. A taxonomy is not a production capacity guarantee.
The OpenAI rate-limit guide and MDN 429 reference checked on Sep 27, 2026 describe rate-limit responses as a signal that the caller should change its request behavior. For a gateway trial, record the response code, any retry guidance, queue age, attempt count, and final stop reason; do not turn 429 into an unlimited retry loop.
The dated AIWave JSON checked in this run lists deepseek-v4-flash at $0.638 input, $0.0202884 cache-hit input, and $1.914 output per 1M tokens; qwen3.5-plus at $0.4463422255 input and $2.6780533528 output; and kimi-k3 at $4.50 input, $0.90 cache-hit input, and $22.50 output, effective 2026-08-27. These rows support a labeled test forecast; recheck the public endpoints before an actual run.
Planning Matrix
A source-dated planning matrix keeps the page useful for engineers and procurement reviewers. It turns a search query into an auditable route decision instead of a loose model preference.
| Stage | Control | Stop evidence |
|---|---|---|
| Baseline | One fixture and one worker | Receipt schema passes |
| Ramp | Increase concurrency in steps | Queue and error thresholds |
| Rate limit | Bounded backoff and attempts | 429 fields and retry count |
| Budget | Token estimate and hard ceiling | Spend estimate and owner |
| Quality | Stable prompt and output checks | Parser and acceptance result |
| Rollback | End test and restore baseline | Final report and next action |
Implementation Pattern
The implementation pattern keeps credentials as placeholders, pins the AIWave base URL, records the model, and leaves room for route-specific controls. Production applications should move credentials into environment or secret storage.
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY_HERE", base_url="https://aiwave.live/v1")
policy = {"model": "deepseek-v4-flash", "concurrency": 2, "max_attempts": 1,
"max_tokens": 120, "fixture": "load-v1", "checked_at": "2026-09-27"}
result = client.chat.completions.create(
model=policy["model"],
messages=[{"role": "user", "content": "Return one deterministic load-test receipt."}],
temperature=0.0, max_tokens=policy["max_tokens"],
)
print({"fixture": policy["fixture"], "concurrency": policy["concurrency"],
"finish": result.choices[0].finish_reason, "usage": result.usage})
Turn the Workload Into a Contract
For a staged synthetic-fixture load test, define the request shape, model ID, data class, output ceiling, timeout, retry ceiling, owner, and source date before the first trial. A short contract gives engineering, security, and finance the same object to review when a route, SDK, or billing field changes.
Separate Live Routes From Dated Rates
The live AIWave pricing response answers which route rows and endpoint types are visible at check time. The public pricing JSON is a dated USD snapshot for forecasting. Store both URLs, versions, checked dates, model IDs, and account-group context instead of presenting a volatile source as a permanent quote.
Use Synthetic Fixtures First
Start with redacted, deterministic fixtures that exercise the same schema, output ceiling, and failure branches as production. Synthetic work protects customer data while exposing queue growth, parser failures, unexpected token use, and unsafe retries before a real workload is placed on the route.
Keep Evidence Bounded
A useful receipt records request ID, model ID, status, usage, finish reason, timing, retry count, and policy outcome. It does not require raw prompts, reusable credentials, or customer identifiers. Hash or version the fixture and keep the raw payload behind a separate access policy when an incident requires it.
Make the Stop Rule Explicit
Every canary needs a hard stop: a budget ceiling, error threshold, queue-age limit, schema-failure rate, or missing receipt field. A stop rule is not a reliability promise; it is the mechanism that keeps a trial from silently becoming an unreviewed production change.
Use AIWave's Public Evidence Layer
Use the Chat Completions docs, live pricing API, Status, and Trust. Recheck the live route table before rollout, the dated pricing JSON before a budget review, the status page before a launch window, and the docs page before changing an SDK contract. Keep each checked date visible in the decision record.
Release or Roll Back
Promotion is ready when the source is dated, the exact route is rechecked, the synthetic acceptance set passes, billing fields are understood, and a named owner can stop or reverse the change. If a field is unknown, label the work as a trial rather than production.