2790import com.openai.client.okhttp.OpenAIOkHttpClient;2790import com.openai.client.okhttp.OpenAIOkHttpClient;
2791import com.openai.core.JsonValue;2791import com.openai.core.JsonValue;
2792import com.openai.models.chat.completions.ChatCompletionCreateParams;2792import com.openai.models.chat.completions.ChatCompletionCreateParams;
2793import java.util.LinkedHashMap;
2793import java.util.List;2794import java.util.List;
2794import java.util.Map;2795import java.util.Map;
2795 2796
2960 }2961 }
2961 """2962 """
2962 .strip();2963 .strip();
2963Map<String, Object> metaSchema =2964// The same recursive grammar governs properties, arrays, references, and unions.
2964 Map.ofEntries(2965Map<String, Object> schemaRef = Map.of("$ref", "#/$defs/schema_definition");
2965 Map.entry("name", "metaschema"),2966Map<String, Object> schemaProperties =
2966 Map.entry(
2967 "schema",
2968 Map.ofEntries(2967 Map.ofEntries(
2969 Map.entry("type", "object"),2968 Map.entry("description", Map.of("type", "string")),
2970 Map.entry(
2971 "properties",
2972 Map.ofEntries(
2973 Map.entry(
2974 "name",
2975 Map.ofEntries(
2976 Map.entry("type", "string"),
2977 Map.entry("description", "The name of the schema"))),
2978 Map.entry(2969 Map.entry(
2979 "type",2970 "type",
2980 Map.ofEntries(2971 Map.of(
2981 Map.entry("type", "string"),2972 "type",
2982 Map.entry(2973 "string",
2983 "enum",2974 "enum",
2984 List.of(2975 List.of("object", "array", "string", "number", "boolean", "null"))),
2985 "object", "array", "string", "number", "boolean",2976 Map.entry("properties", Map.of("type", "object", "additionalProperties", schemaRef)),
2986 "null")))),
2987 Map.entry(
2988 "properties",
2989 Map.ofEntries(
2990 Map.entry("type", "object"),
2991 Map.entry(
2992 "additionalProperties",
2993 Map.ofEntries(
2994 Map.entry("$ref", "#/$defs/schema_definition"))))),
2995 Map.entry(2977 Map.entry(
2996 "items",2978 "items",
2997 Map.ofEntries(2979 Map.of("anyOf", List.of(schemaRef, Map.of("type", "array", "items", schemaRef)))),
2998 Map.entry(2980 Map.entry("required", Map.of("type", "array", "items", Map.of("type", "string"))),
2999 "anyOf",2981 Map.entry("additionalProperties", Map.of("type", "boolean")),
3000 List.of(2982 Map.entry("enum", Map.of("type", "array", "minItems", 1, "uniqueItems", true)),
3001 Map.ofEntries(2983 Map.entry("$ref", Map.of("type", "string")),
3002 Map.entry("$ref", "#/$defs/schema_definition")),2984 Map.entry("$defs", Map.of("type", "object", "additionalProperties", schemaRef)),
3003 Map.ofEntries(2985 Map.entry("anyOf", Map.of("type", "array", "minItems", 1, "items", schemaRef)));
3004 Map.entry("type", "array"),2986Map<String, Object> objectCondition =
3005 Map.entry(2987 Map.of(
3006 "items",2988 "required", List.of("type"), "properties", Map.of("type", Map.of("const", "object")));
3007 Map.ofEntries(2989Map<String, Object> objectRequirements = Map.of("required", List.of("properties"));
3008 Map.entry(2990Map<String, Object> schemaDefinition =
3009 "$ref",2991 Map.of(
3010 "#/$defs/schema_definition")))))))),
3011 Map.entry(
3012 "required",
3013 Map.ofEntries(
3014 Map.entry("type", "array"),
3015 Map.entry(
3016 "items", Map.ofEntries(Map.entry("type", "string"))))),
3017 Map.entry(
3018 "additionalProperties",
3019 Map.ofEntries(Map.entry("type", "boolean"))))),
3020 Map.entry("required", List.of("type")),
3021 Map.entry("additionalProperties", false),
3022 Map.entry(
3023 "if",
3024 Map.ofEntries(
3025 Map.entry(
3026 "properties",
3027 Map.ofEntries(
3028 Map.entry(
3029 "type", Map.ofEntries(Map.entry("const", "object"))))))),
3030 Map.entry("then", Map.ofEntries(Map.entry("required", List.of("properties")))),
3031 Map.entry(
3032 "$defs",
3033 Map.ofEntries(
3034 Map.entry(
3035 "schema_definition",
3036 Map.ofEntries(
3037 Map.entry("type", "object"),
3038 Map.entry(
3039 "properties",
3040 Map.ofEntries(
3041 Map.entry(
3042 "type",2992 "type",
3043 Map.ofEntries(2993 "object",
3044 Map.entry("type", "string"),
3045 Map.entry(
3046 "enum",
3047 List.of(
3048 "object", "array", "string", "number",
3049 "boolean", "null")))),
3050 Map.entry(
3051 "properties",2994 "properties",
3052 Map.ofEntries(2995 schemaProperties,
3053 Map.entry("type", "object"),
3054 Map.entry(
3055 "additionalProperties",2996 "additionalProperties",
3056 Map.ofEntries(2997 false,
3057 Map.entry(2998 "if",
3058 "$ref",2999 objectCondition,
3059 "#/$defs/schema_definition"))))),3000 "then",
3060 Map.entry(3001 objectRequirements,
3061 "items",
3062 Map.ofEntries(
3063 Map.entry(
3064 "anyOf",3002 "anyOf",
3065 List.of(3003 List.of(
3066 Map.ofEntries(3004 Map.of("required", List.of("type")),
3067 Map.entry(3005 Map.of("required", List.of("$ref")),
3068 "$ref",3006 Map.of("required", List.of("anyOf"))));
3069 "#/$defs/schema_definition")),3007var rootProperties = new LinkedHashMap<>(schemaProperties);
3070 Map.ofEntries(3008rootProperties.put("name", Map.of("type", "string", "description", "The name of the schema"));
3071 Map.entry("type", "array"),3009Map<String, Object> metaSchema =
3072 Map.entry(3010 Map.of(
3073 "items",3011 "name",
3074 Map.ofEntries(3012 "metaschema",
3075 Map.entry(3013 "schema",
3076 "$ref",3014 Map.of(
3077 "#/$defs/schema_definition")))))))),3015 "type",
3078 Map.entry(3016 "object",
3017 "properties",
3018 rootProperties,
3079 "required",3019 "required",
3080 Map.ofEntries(3020 List.of("type"),
3081 Map.entry("type", "array"),
3082 Map.entry(
3083 "items",
3084 Map.ofEntries(
3085 Map.entry("type", "string"))))),
3086 Map.entry(
3087 "additionalProperties",3021 "additionalProperties",
3088 Map.ofEntries(Map.entry("type", "boolean"))))),3022 false,
3089 Map.entry("required", List.of("type")),
3090 Map.entry("additionalProperties", false),
3091 Map.entry(
3092 "if",3023 "if",
3093 Map.ofEntries(3024 objectCondition,
3094 Map.entry(
3095 "properties",
3096 Map.ofEntries(
3097 Map.entry(
3098 "type",
3099 Map.ofEntries(
3100 Map.entry("const", "object"))))))),
3101 Map.entry(
3102 "then",3025 "then",
3103 Map.ofEntries(3026 objectRequirements,
3104 Map.entry("required", List.of("properties")))))))))));3027 "$defs",
3028 Map.of("schema_definition", schemaDefinition)));
3105 3029
3106ChatCompletionCreateParams params =3030ChatCompletionCreateParams params =
3107 ChatCompletionCreateParams.builder()3031 ChatCompletionCreateParams.builder()
4582 "type", "object",4506 "type", "object",
4583 "properties",4507 "properties",
4584 Map.of(4508 Map.of(
4509 "enum",
4510 Map.of("type", "array", "minItems", 1, "uniqueItems", true),
4511 "description",
4512 Map.of("type", "string"),
4585 "type",4513 "type",
4586 Map.of(4514 Map.of(
4587 "type",4515 "type",
4604 "array",4532 "array",
4605 "items",4533 "items",
4606 Map.of("$ref", "#/$defs/schema_definition")))),4534 Map.of("$ref", "#/$defs/schema_definition")))),
4607 "required", Map.of("type", "array", "items", Map.of("type", "string")),4535 "required",
4608 "additionalProperties", Map.of("type", "boolean")),4536 Map.of("type", "array", "items", Map.of("type", "string")),
4537 "additionalProperties",
4538 Map.of("type", "boolean")),
4609 "required", List.of("type"),4539 "required", List.of("type"),
4610 "additionalProperties", false,4540 "additionalProperties", false,
4611 "if", Map.of("properties", Map.of("type", Map.of("const", "object"))),4541 "if", Map.of("properties", Map.of("type", Map.of("const", "object"))),