]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
common : add -jf / --json-schema-file flag (#12011)
authorOlivier Chafik <redacted>
Wed, 30 Apr 2025 12:52:35 +0000 (13:52 +0100)
committerGitHub <redacted>
Wed, 30 Apr 2025 12:52:35 +0000 (14:52 +0200)
common/arg.cpp

index 6633c3a1db8a4e8c57c388b67581f95fe458e6ba..b8c72ee6457dcf68d7eeb2f5f67ebdcf5c6c8152 100644 (file)
@@ -1948,6 +1948,23 @@ common_params_context common_params_parser_init(common_params & params, llama_ex
             params.sampling.grammar = json_schema_to_grammar(json::parse(value));
         }
     ).set_sparam());
+    add_opt(common_arg(
+        {"-jf", "--json-schema-file"}, "FILE",
+        "File containing a JSON schema to constrain generations (https://json-schema.org/), e.g. `{}` for any JSON object\nFor schemas w/ external $refs, use --grammar + example/json_schema_to_grammar.py instead",
+        [](common_params & params, const std::string & value) {
+            std::ifstream file(value);
+            if (!file) {
+                throw std::runtime_error(string_format("error: failed to open file '%s'\n", value.c_str()));
+            }
+            std::string schema;
+            std::copy(
+                std::istreambuf_iterator<char>(file),
+                std::istreambuf_iterator<char>(),
+                std::back_inserter(schema)
+            );
+            params.sampling.grammar = json_schema_to_grammar(json::parse(schema));
+        }
+    ).set_sparam());
     add_opt(common_arg(
         {"--pooling"}, "{none,mean,cls,last,rank}",
         "pooling type for embeddings, use model default if unspecified",