1
0

json-schema-to-grammar.h 1.4 KB

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