1#pragma once
2
3#include <nlohmann/json_fwd.hpp>
4
5#include <functional>
6#include <memory>
7#include <string>
8
9std::string json_schema_to_grammar(const nlohmann::ordered_json & schema,
10 bool force_gbnf = false);
11
12class common_schema_converter;
13
14// Probes a JSON schema to extract information about its structure and type constraints.
15class common_schema_info {
16 std::unique_ptr<common_schema_converter> impl_;
17
18 public:
19 common_schema_info();
20 ~common_schema_info();
21
22 common_schema_info(const common_schema_info &) = delete;
23 common_schema_info & operator=(const common_schema_info &) = delete;
24 common_schema_info(common_schema_info &&) noexcept;
25 common_schema_info & operator=(common_schema_info &&) noexcept;
26
27 void resolve_refs(nlohmann::ordered_json & schema);
28 bool resolves_to_string(const nlohmann::ordered_json & schema);
29};
30
31struct common_grammar_builder {
32 std::function<std::string(const std::string &, const std::string &)> add_rule;
33 std::function<std::string(const std::string &, const nlohmann::ordered_json &)> add_schema;
34 std::function<void(nlohmann::ordered_json &)> resolve_refs;
35};
36
37struct common_grammar_options {
38 bool dotall = false;
39};
40
41std::string gbnf_format_literal(const std::string & literal);
42
43std::string build_grammar(const std::function<void(const common_grammar_builder &)> & cb, const common_grammar_options & options = {});