OpenAiStructuredOutput
Adapts Effect schemas for OpenAI structured output.
OpenAI structured output accepts only a subset of JSON Schema. This module converts an Effect Schema.Codec into a provider-compatible JSON Schema and a matching codec for decoding the model response back into the original application type. Unsupported constraints can be omitted from the provider schema and remain enforced by the returned codec.
Transforming
toCodecOpenAI
Added in v4.0.0
Source
Signature
declare function toCodecOpenAI<T, E, RD, RE>(
schema: ConstraintCodec<T, E, RD, RE>,
): {
codec: ConstraintCodec<T, unknown, RD, RE>;
jsonSchema: JsonSchema;
};
Converts a
Schema.Codecto OpenAI structured-output JSON Schema and a matching codec for model output.When to use
Use when you send Effect Schema-backed structured output requests to OpenAI standard models and need provider-compatible JSON Schema without losing the decoded application type.
Details
Returns the JSON Schema to include in the request and the codec to use when decoding the model response. The codec remains authoritative: the provider JSON Schema can be a lossy, less restrictive representation when OpenAI cannot express an Effect Schema constraint. Conversion throws when the resulting root is not an object or contains
anyOf.Gotchas
- Some schemas use a provider-safe encoded shape: tuples become objects with numeric string keys, objects with index signatures become arrays of
[key, value]pairs, and optional properties become required nullable properties. -oneOfunions are emitted asanyOfunions. - Compatible regex patterns are merged because OpenAI structured output does not supportallOf. - The root JSON Schema must be an object and cannot useanyOf. - Constraints insideallOfare retained only when they have an explicit, semantics-preserving normalization rule. - Structural constraints insideallOf, such asproperties,required,additionalProperties, anditems, are omitted instead of being merged with a different meaning. - Unsupported constraints are removed from the provider schema and are still checked while decoding with the returned codec. - Compatibility targets standard OpenAI models. Fine-tuned models support a smaller JSON Schema subset.