* fix(ai): honor Retry-After when retry-after-ms is unparseable The ChatGPT Responses retry path returned as soon as `retry-after-ms` was present, so a malformed or empty value discarded a valid `Retry-After` header sent alongside it and the client fell back to blind exponential backoff. The sibling parser in `provider-transport-fetch.ts` treats the two headers as ordered preferences and falls through on a parse failure; this aligns the Responses path with that contract. * test(ai): deduplicate retry header coverage --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
@openclaw/ai
Reusable model API contracts, provider adapters, and streaming primitives from OpenClaw. The package supports isolated runtime instances; importing it does not register providers globally.
import { createLlmRuntime } from "@openclaw/ai";
import { registerBuiltInApiProviders } from "@openclaw/ai/providers";
const runtime = createLlmRuntime();
registerBuiltInApiProviders(runtime.registry);
Provider-neutral contracts, validation, diagnostics, and event streams are
available from the package root and focused subpaths such as
@openclaw/ai/event-stream and @openclaw/ai/validation. No second OpenClaw
runtime package is required.
Provider ids, credentials, model catalogs, retries, and failover remain
application concerns. OpenClaw supplies those policies around this package.
Host policy (request fetch guarding, secret redaction, strict-tool defaults,
diagnostics logging) can be injected with configureAiTransportHost; the
defaults are inert.
@openclaw/ai/internal/* subpaths exist for the OpenClaw application itself.
They carry no semver guarantee and can change or disappear in any release; do
not depend on them outside OpenClaw.