private String generateNotStrings(Set<String> strings) {
        var trie = new TrieNode();

        for (var s : strings) {
            trie.insert(s);
        }

        String charRule = addPrimitive("char", PRIMITIVE_RULES.get("char"));

        var content = new StringBuilder();
        content.append("[\"] ( ");
        generateNotStringsVisit(trie, charRule, content);
        content.append(" )")
                .append(trie.isEndOfString ? "" : "?")
                .append(" [\"] space");

        return content.toString();
    }
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