public Optional<String> maybeVisit(JsonNode schema, String baseName, String name) {
            var typeText = getTypeText(schema);

            if ((typeText == null || typeText.equals("object")) && schema.has("allOf")) {
                var required = new HashSet<String>();
                var properties = new ArrayList<Map.Entry<String, JsonNode>>();

                BiConsumer<JsonNode, Boolean> addComponent = (compNode, isRequired) -> {
                    if (compNode.has("properties")) {
                        compNode.get("properties").fields().forEachRemaining(properties::add);
                        if (isRequired) {
                            compNode.get("properties").fieldNames().forEachRemaining(required::add);
                        }
                    }
                };

                for (var allOfChildNode : schema.get("allOf")) {
                    if (allOfChildNode.has("anyOf")) {
                        for (JsonNode anyOfChild : allOfChildNode.get("anyOf")) {
                            addComponent.accept(anyOfChild, false);
                        }
                    } else {
                        addComponent.accept(allOfChildNode, true);
                    }
                }

                var rule = addRule(name, generateObject(properties, required, baseName, null));
                return Optional.of(rule);
            }

            return Optional.empty();
        }
Converts a JSON Schema to a GBNF grammar to be used for structured output with llama.cpp.
It is a port of Python implementation from llama.cpp repository.
Current implementation doesn't support regex patterns, resolving $ref or fetching schemas from URLs.
The plan is to replace this with C++ implementation from llama.cpp though JNI.
model-integration/src/main/java/ai/vespa/llm/clients/JsonSchemaToGrammar.java