Просмотр исходного кода

tests : conditional python & node json schema tests (#6207)

* json: only attempt python & node schema conversion tests if their bins are present

Tests introduced in https://github.com/ggerganov/llama.cpp/pull/5978
disabled in https://github.com/ggerganov/llama.cpp/pull/6198

* json: orange warnings when tests skipped

* json: ensure py/js schema conv tested on ubuntu-focal-make

* json: print env vars in test
Olivier Chafik 1 год назад
Родитель
Сommit
f77a8ffd3b
2 измененных файлов с 36 добавлено и 12 удалено
  1. 11 0
      .github/workflows/build.yml
  2. 25 12
      tests/test-json-schema-to-grammar.cpp

+ 11 - 0
.github/workflows/build.yml

@@ -135,6 +135,9 @@ jobs:
 
   ubuntu-focal-make:
     runs-on: ubuntu-20.04
+    env:
+      LLAMA_NODE_AVAILABLE: true
+      LLAMA_PYTHON_AVAILABLE: true
 
     steps:
       - name: Clone
@@ -147,6 +150,14 @@ jobs:
           sudo apt-get update
           sudo apt-get install build-essential gcc-8
 
+      - uses: actions/setup-node@v4
+        with:
+          node-version: "20"
+
+      - uses: actions/setup-python@v4
+        with:
+          python-version: "3.11"
+
       - name: Build
         id: make_build
         env:

+ 25 - 12
tests/test-json-schema-to-grammar.cpp

@@ -799,6 +799,9 @@ static void test_all(const std::string & lang, std::function<void(const TestCase
 }
 
 int main() {
+    fprintf(stderr, "LLAMA_NODE_AVAILABLE = %s\n", getenv("LLAMA_NODE_AVAILABLE") ? "true" : "false");
+    fprintf(stderr, "LLAMA_PYTHON_AVAILABLE = %s\n", getenv("LLAMA_PYTHON_AVAILABLE") ? "true" : "false");
+
     test_all("C++", [](const TestCase & tc) {
         try {
             tc.verify(json_schema_to_grammar(nlohmann::ordered_json::parse(tc.schema)));
@@ -808,18 +811,28 @@ int main() {
             tc.verify_status(FAILURE);
         }
     });
-    //test_all("Python", [](const TestCase & tc) {
-    //    write("test-json-schema-input.tmp", tc.schema);
-    //    tc.verify_status(std::system(
-    //        "python ./examples/json-schema-to-grammar.py test-json-schema-input.tmp > test-grammar-output.tmp") == 0 ? SUCCESS : FAILURE);
-    //    tc.verify(read("test-grammar-output.tmp"));
-    //});
-    //test_all("JavaScript", [](const TestCase & tc) {
-    //    write("test-json-schema-input.tmp", tc.schema);
-    //    tc.verify_status(std::system(
-    //        "node ./tests/run-json-schema-to-grammar.mjs test-json-schema-input.tmp > test-grammar-output.tmp") == 0 ? SUCCESS : FAILURE);
-    //    tc.verify(read("test-grammar-output.tmp"));
-    //});
+
+    if (getenv("LLAMA_PYTHON_AVAILABLE") || (std::system("python --version") == 0)) {
+        test_all("Python", [](const TestCase & tc) {
+            write("test-json-schema-input.tmp", tc.schema);
+            tc.verify_status(std::system(
+                "python ./examples/json-schema-to-grammar.py test-json-schema-input.tmp > test-grammar-output.tmp") == 0 ? SUCCESS : FAILURE);
+            tc.verify(read("test-grammar-output.tmp"));
+        });
+    } else {
+        fprintf(stderr, "\033[33mWARNING: Python not found, skipping Python JSON schema -> grammar tests.\n\033[0m");
+    }
+
+    if (getenv("LLAMA_NODE_AVAILABLE") || (std::system("node --version") == 0)) {
+        test_all("JavaScript", [](const TestCase & tc) {
+            write("test-json-schema-input.tmp", tc.schema);
+            tc.verify_status(std::system(
+                "node ./tests/run-json-schema-to-grammar.mjs test-json-schema-input.tmp > test-grammar-output.tmp") == 0 ? SUCCESS : FAILURE);
+            tc.verify(read("test-grammar-output.tmp"));
+        });
+    } else {
+        fprintf(stderr, "\033[33mWARNING: Node not found, skipping JavaScript JSON schema -> grammar tests.\n\033[0m");
+    }
 
     test_all("Check Expectations Validity", [](const TestCase & tc) {
         if (tc.expected_status == SUCCESS) {