Ai_provider.Provider_optionsSourceProvider-specific options using an extensible GADT. Each provider registers its own typed key without circular dependencies.
Implementation uses Obj.Extension_constructor.id for key identity and Obj.magic for type recovery — type-safe by construction since matching extension constructor IDs guarantee identical type parameters. This is the standard pattern used by Printexc and other stdlib modules. OCaml 5.1+ Type.eq would replace this with a first-class witness.
Extensible GADT — each provider adds a constructor via +=.
Existential wrapper: a typed key paired with its value.
GADT key for raw provider metadata from upstream re-submissions. Stores the upstream providerMetadata JSON blob (Record<string, Record<string, JsonValue>>). Each provider reads its own namespace (e.g. "anthropic").
Create a t containing only raw provider metadata.
Extract raw provider metadata if present.