2025-01-18 16:18:15 +02:00
llama_add_compile_flags ( )
2025-04-24 16:00:10 +03:00
function ( llama_build source )
if ( DEFINED LLAMA_TEST_NAME )
set ( TEST_TARGET ${ LLAMA_TEST_NAME } )
else ( )
get_filename_component ( TEST_TARGET ${ source } NAME_WE )
endif ( )
add_executable ( ${ TEST_TARGET } ${ source } )
target_link_libraries ( ${ TEST_TARGET } PRIVATE common )
install ( TARGETS ${ TEST_TARGET } RUNTIME )
endfunction ( )
2024-04-29 16:58:41 +03:00
function ( llama_test target )
include ( CMakeParseArguments )
set ( options )
set ( oneValueArgs NAME LABEL WORKING_DIRECTORY )
set ( multiValueArgs ARGS )
cmake_parse_arguments ( LLAMA_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
if ( NOT DEFINED LLAMA_TEST_LABEL )
set ( LLAMA_TEST_LABEL "main" )
endif ( )
if ( NOT DEFINED LLAMA_TEST_WORKING_DIRECTORY )
set ( LLAMA_TEST_WORKING_DIRECTORY . )
endif ( )
if ( DEFINED LLAMA_TEST_NAME )
set ( TEST_NAME ${ LLAMA_TEST_NAME } )
else ( )
set ( TEST_NAME ${ target } )
endif ( )
set ( TEST_TARGET ${ target } )
add_test (
N A M E $ { T E S T _ N A M E }
W O R K I N G _ D I R E C T O R Y $ { L L A M A _ T E S T _ W O R K I N G _ D I R E C T O R Y }
C O M M A N D $ < T A R G E T _ F I L E : $ { T E S T _ T A R G E T } >
$ { L L A M A _ T E S T _ A R G S } )
set_property ( TEST ${ TEST_NAME } PROPERTY LABELS ${ LLAMA_TEST_LABEL } )
endfunction ( )
2025-06-11 17:16:32 +02:00
function ( llama_test_cmd target )
include ( CMakeParseArguments )
set ( options )
set ( oneValueArgs NAME LABEL WORKING_DIRECTORY )
set ( multiValueArgs ARGS )
cmake_parse_arguments ( LLAMA_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
if ( NOT DEFINED LLAMA_TEST_LABEL )
set ( LLAMA_TEST_LABEL "main" )
endif ( )
if ( NOT DEFINED LLAMA_TEST_WORKING_DIRECTORY )
set ( LLAMA_TEST_WORKING_DIRECTORY . )
endif ( )
if ( DEFINED LLAMA_TEST_NAME )
set ( TEST_NAME ${ LLAMA_TEST_NAME } )
else ( )
set ( TEST_NAME ${ target } )
endif ( )
add_test (
N A M E $ { T E S T _ N A M E }
W O R K I N G _ D I R E C T O R Y $ { L L A M A _ T E S T _ W O R K I N G _ D I R E C T O R Y }
C O M M A N D $ { t a r g e t }
$ { L L A M A _ T E S T _ A R G S } )
set_property ( TEST ${ TEST_NAME } PROPERTY LABELS ${ LLAMA_TEST_LABEL } )
endfunction ( )
json-schema-to-grammar improvements (+ added to server) (#5978)
* json: fix arrays (disallow `[,1]`)
* json: support tuple types (`[number, string]`)
* json: support additionalProperties (`{[k: string]: [string,number][]}`)
* json: support required / optional properties
* json: add support for pattern
* json: resolve $ref (and support https schema urls)
* json: fix $ref resolution
* join: support union types (mostly for nullable types I think)
* json: support allOf + nested anyOf
* json: support any (`{}` or `{type: object}`)
* json: fix merge
* json: temp fix for escapes
* json: spaces in output and unrestricted output spaces
* json: add typings
* json:fix typo
* Create ts-type-to-grammar.sh
* json: fix _format_literal (json.dumps already escapes quotes)
* json: merge lit sequences and handle negatives
{"type": "string", "pattern": "^({\"question\": \"[^\"]+\", \"response\": \"[^\"]+\"}\\n)+$"}
* json: handle pattern repetitions
* Update json-schema-to-grammar.mjs
* Create regex-to-grammar.py
* json: extract repeated regexp patterns to subrule
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* json: handle schema from pydantic Optional fields
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update ts-type-to-grammar.sh
* Update ts-type-to-grammar.sh
* json: simplify nullable fields handling
* json: accept duplicate identical rules
* json: revert space to 1 at most
* json: reuse regexp pattern subrules
* json: handle uuid string format
* json: fix literal escapes
* json: add --allow-fetch
* json: simplify range escapes
* json: support negative ranges in patterns
* Delete commit.txt
* json: custom regex parser, adds dot support & JS-portable
* json: rm trailing spaces
* Update json-schema-to-grammar.mjs
* json: updated server & chat `( cd examples/server && ./deps.sh )`
* json: port fixes from mjs to python
* Update ts-type-to-grammar.sh
* json: support prefixItems alongside array items
* json: add date format + fix uuid
* json: add date, time, date-time formats
* json: preserve order of props from TS defs
* json: port schema converter to C++, wire in ./server
* json: nits
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* json: fix mjs implementation + align outputs
* Update json-schema-to-grammar.mjs.hpp
* json: test C++, JS & Python versions
* json: nits + regen deps
* json: cleanup test
* json: revert from c++17 to 11
* json: nit fixes
* json: dirty include for test
* json: fix zig build
* json: pass static command to std::system in tests (fixed temp files)
* json: fix top-level $refs
* json: don't use c++20 designated initializers
* nit
* json: basic support for reserved names `{number:{number:{root:number}}}`
* Revamp test cmake to allow args (WORKING_DIRECTORY needed for JSON test)
* json: re-ran server deps.sh
* json: simplify test
* json: support mix of additional props & required/optional
* json: add tests for some expected failures
* json: fix type=const in c++, add failure expectations for non-str const&enum
* json: test (& simplify output of) empty schema
* json: check parsing in test + fix value & string refs
* json: add server tests for OAI JSON response_format
* json: test/fix top-level anyOf
* json: improve grammar parsing failures
* json: test/fix additional props corner cases
* json: fix string patterns (was missing quotes)
* json: ws nit
* json: fix json handling in server when there's no response_format
* json: catch schema conversion errors in server
* json: don't complain about unknown format type in server if unset
* json: cleaner build of test
* json: create examples/json-schema-pydantic-example.py
* json: fix date pattern
* json: move json.hpp & json-schema-to-grammar.{cpp,h} to common
* json: indent 4 spaces
* json: fix naming of top-level c++ function (+ drop unused one)
* json: avoid using namespace std
* json: fix zig build
* Update server.feature
* json: iostream -> fprintf
* json: space before & refs for consistency
* json: nits
2024-03-21 11:50:43 +00:00
# Builds and runs a test source file.
# Optional args:
# - NAME: name of the executable & test target (defaults to the source file name without extension)
# - LABEL: label for the test (defaults to main)
# - ARGS: arguments to pass to the test executable
# - WORKING_DIRECTORY
2025-04-24 16:00:10 +03:00
function ( llama_build_and_test source )
json-schema-to-grammar improvements (+ added to server) (#5978)
* json: fix arrays (disallow `[,1]`)
* json: support tuple types (`[number, string]`)
* json: support additionalProperties (`{[k: string]: [string,number][]}`)
* json: support required / optional properties
* json: add support for pattern
* json: resolve $ref (and support https schema urls)
* json: fix $ref resolution
* join: support union types (mostly for nullable types I think)
* json: support allOf + nested anyOf
* json: support any (`{}` or `{type: object}`)
* json: fix merge
* json: temp fix for escapes
* json: spaces in output and unrestricted output spaces
* json: add typings
* json:fix typo
* Create ts-type-to-grammar.sh
* json: fix _format_literal (json.dumps already escapes quotes)
* json: merge lit sequences and handle negatives
{"type": "string", "pattern": "^({\"question\": \"[^\"]+\", \"response\": \"[^\"]+\"}\\n)+$"}
* json: handle pattern repetitions
* Update json-schema-to-grammar.mjs
* Create regex-to-grammar.py
* json: extract repeated regexp patterns to subrule
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* json: handle schema from pydantic Optional fields
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update ts-type-to-grammar.sh
* Update ts-type-to-grammar.sh
* json: simplify nullable fields handling
* json: accept duplicate identical rules
* json: revert space to 1 at most
* json: reuse regexp pattern subrules
* json: handle uuid string format
* json: fix literal escapes
* json: add --allow-fetch
* json: simplify range escapes
* json: support negative ranges in patterns
* Delete commit.txt
* json: custom regex parser, adds dot support & JS-portable
* json: rm trailing spaces
* Update json-schema-to-grammar.mjs
* json: updated server & chat `( cd examples/server && ./deps.sh )`
* json: port fixes from mjs to python
* Update ts-type-to-grammar.sh
* json: support prefixItems alongside array items
* json: add date format + fix uuid
* json: add date, time, date-time formats
* json: preserve order of props from TS defs
* json: port schema converter to C++, wire in ./server
* json: nits
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* json: fix mjs implementation + align outputs
* Update json-schema-to-grammar.mjs.hpp
* json: test C++, JS & Python versions
* json: nits + regen deps
* json: cleanup test
* json: revert from c++17 to 11
* json: nit fixes
* json: dirty include for test
* json: fix zig build
* json: pass static command to std::system in tests (fixed temp files)
* json: fix top-level $refs
* json: don't use c++20 designated initializers
* nit
* json: basic support for reserved names `{number:{number:{root:number}}}`
* Revamp test cmake to allow args (WORKING_DIRECTORY needed for JSON test)
* json: re-ran server deps.sh
* json: simplify test
* json: support mix of additional props & required/optional
* json: add tests for some expected failures
* json: fix type=const in c++, add failure expectations for non-str const&enum
* json: test (& simplify output of) empty schema
* json: check parsing in test + fix value & string refs
* json: add server tests for OAI JSON response_format
* json: test/fix top-level anyOf
* json: improve grammar parsing failures
* json: test/fix additional props corner cases
* json: fix string patterns (was missing quotes)
* json: ws nit
* json: fix json handling in server when there's no response_format
* json: catch schema conversion errors in server
* json: don't complain about unknown format type in server if unset
* json: cleaner build of test
* json: create examples/json-schema-pydantic-example.py
* json: fix date pattern
* json: move json.hpp & json-schema-to-grammar.{cpp,h} to common
* json: indent 4 spaces
* json: fix naming of top-level c++ function (+ drop unused one)
* json: avoid using namespace std
* json: fix zig build
* Update server.feature
* json: iostream -> fprintf
* json: space before & refs for consistency
* json: nits
2024-03-21 11:50:43 +00:00
include ( CMakeParseArguments )
set ( options )
set ( oneValueArgs NAME LABEL WORKING_DIRECTORY )
set ( multiValueArgs ARGS )
cmake_parse_arguments ( LLAMA_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2023-08-21 23:07:43 +03:00
json-schema-to-grammar improvements (+ added to server) (#5978)
* json: fix arrays (disallow `[,1]`)
* json: support tuple types (`[number, string]`)
* json: support additionalProperties (`{[k: string]: [string,number][]}`)
* json: support required / optional properties
* json: add support for pattern
* json: resolve $ref (and support https schema urls)
* json: fix $ref resolution
* join: support union types (mostly for nullable types I think)
* json: support allOf + nested anyOf
* json: support any (`{}` or `{type: object}`)
* json: fix merge
* json: temp fix for escapes
* json: spaces in output and unrestricted output spaces
* json: add typings
* json:fix typo
* Create ts-type-to-grammar.sh
* json: fix _format_literal (json.dumps already escapes quotes)
* json: merge lit sequences and handle negatives
{"type": "string", "pattern": "^({\"question\": \"[^\"]+\", \"response\": \"[^\"]+\"}\\n)+$"}
* json: handle pattern repetitions
* Update json-schema-to-grammar.mjs
* Create regex-to-grammar.py
* json: extract repeated regexp patterns to subrule
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* json: handle schema from pydantic Optional fields
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update ts-type-to-grammar.sh
* Update ts-type-to-grammar.sh
* json: simplify nullable fields handling
* json: accept duplicate identical rules
* json: revert space to 1 at most
* json: reuse regexp pattern subrules
* json: handle uuid string format
* json: fix literal escapes
* json: add --allow-fetch
* json: simplify range escapes
* json: support negative ranges in patterns
* Delete commit.txt
* json: custom regex parser, adds dot support & JS-portable
* json: rm trailing spaces
* Update json-schema-to-grammar.mjs
* json: updated server & chat `( cd examples/server && ./deps.sh )`
* json: port fixes from mjs to python
* Update ts-type-to-grammar.sh
* json: support prefixItems alongside array items
* json: add date format + fix uuid
* json: add date, time, date-time formats
* json: preserve order of props from TS defs
* json: port schema converter to C++, wire in ./server
* json: nits
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* json: fix mjs implementation + align outputs
* Update json-schema-to-grammar.mjs.hpp
* json: test C++, JS & Python versions
* json: nits + regen deps
* json: cleanup test
* json: revert from c++17 to 11
* json: nit fixes
* json: dirty include for test
* json: fix zig build
* json: pass static command to std::system in tests (fixed temp files)
* json: fix top-level $refs
* json: don't use c++20 designated initializers
* nit
* json: basic support for reserved names `{number:{number:{root:number}}}`
* Revamp test cmake to allow args (WORKING_DIRECTORY needed for JSON test)
* json: re-ran server deps.sh
* json: simplify test
* json: support mix of additional props & required/optional
* json: add tests for some expected failures
* json: fix type=const in c++, add failure expectations for non-str const&enum
* json: test (& simplify output of) empty schema
* json: check parsing in test + fix value & string refs
* json: add server tests for OAI JSON response_format
* json: test/fix top-level anyOf
* json: improve grammar parsing failures
* json: test/fix additional props corner cases
* json: fix string patterns (was missing quotes)
* json: ws nit
* json: fix json handling in server when there's no response_format
* json: catch schema conversion errors in server
* json: don't complain about unknown format type in server if unset
* json: cleaner build of test
* json: create examples/json-schema-pydantic-example.py
* json: fix date pattern
* json: move json.hpp & json-schema-to-grammar.{cpp,h} to common
* json: indent 4 spaces
* json: fix naming of top-level c++ function (+ drop unused one)
* json: avoid using namespace std
* json: fix zig build
* Update server.feature
* json: iostream -> fprintf
* json: space before & refs for consistency
* json: nits
2024-03-21 11:50:43 +00:00
if ( NOT DEFINED LLAMA_TEST_LABEL )
set ( LLAMA_TEST_LABEL "main" )
endif ( )
if ( NOT DEFINED LLAMA_TEST_WORKING_DIRECTORY )
set ( LLAMA_TEST_WORKING_DIRECTORY . )
endif ( )
if ( DEFINED LLAMA_TEST_NAME )
set ( TEST_TARGET ${ LLAMA_TEST_NAME } )
else ( )
get_filename_component ( TEST_TARGET ${ source } NAME_WE )
endif ( )
2023-08-21 23:07:43 +03:00
2024-01-26 07:18:00 -05:00
add_executable ( ${ TEST_TARGET } ${ source } get-model.cpp )
2023-08-21 23:07:43 +03:00
install ( TARGETS ${ TEST_TARGET } RUNTIME )
2024-04-15 18:35:21 +01:00
target_link_libraries ( ${ TEST_TARGET } PRIVATE common )
2025-04-24 16:00:10 +03:00
json-schema-to-grammar improvements (+ added to server) (#5978)
* json: fix arrays (disallow `[,1]`)
* json: support tuple types (`[number, string]`)
* json: support additionalProperties (`{[k: string]: [string,number][]}`)
* json: support required / optional properties
* json: add support for pattern
* json: resolve $ref (and support https schema urls)
* json: fix $ref resolution
* join: support union types (mostly for nullable types I think)
* json: support allOf + nested anyOf
* json: support any (`{}` or `{type: object}`)
* json: fix merge
* json: temp fix for escapes
* json: spaces in output and unrestricted output spaces
* json: add typings
* json:fix typo
* Create ts-type-to-grammar.sh
* json: fix _format_literal (json.dumps already escapes quotes)
* json: merge lit sequences and handle negatives
{"type": "string", "pattern": "^({\"question\": \"[^\"]+\", \"response\": \"[^\"]+\"}\\n)+$"}
* json: handle pattern repetitions
* Update json-schema-to-grammar.mjs
* Create regex-to-grammar.py
* json: extract repeated regexp patterns to subrule
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* json: handle schema from pydantic Optional fields
* Update json-schema-to-grammar.py
* Update json-schema-to-grammar.py
* Update ts-type-to-grammar.sh
* Update ts-type-to-grammar.sh
* json: simplify nullable fields handling
* json: accept duplicate identical rules
* json: revert space to 1 at most
* json: reuse regexp pattern subrules
* json: handle uuid string format
* json: fix literal escapes
* json: add --allow-fetch
* json: simplify range escapes
* json: support negative ranges in patterns
* Delete commit.txt
* json: custom regex parser, adds dot support & JS-portable
* json: rm trailing spaces
* Update json-schema-to-grammar.mjs
* json: updated server & chat `( cd examples/server && ./deps.sh )`
* json: port fixes from mjs to python
* Update ts-type-to-grammar.sh
* json: support prefixItems alongside array items
* json: add date format + fix uuid
* json: add date, time, date-time formats
* json: preserve order of props from TS defs
* json: port schema converter to C++, wire in ./server
* json: nits
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* Update json-schema-to-grammar.cpp
* json: fix mjs implementation + align outputs
* Update json-schema-to-grammar.mjs.hpp
* json: test C++, JS & Python versions
* json: nits + regen deps
* json: cleanup test
* json: revert from c++17 to 11
* json: nit fixes
* json: dirty include for test
* json: fix zig build
* json: pass static command to std::system in tests (fixed temp files)
* json: fix top-level $refs
* json: don't use c++20 designated initializers
* nit
* json: basic support for reserved names `{number:{number:{root:number}}}`
* Revamp test cmake to allow args (WORKING_DIRECTORY needed for JSON test)
* json: re-ran server deps.sh
* json: simplify test
* json: support mix of additional props & required/optional
* json: add tests for some expected failures
* json: fix type=const in c++, add failure expectations for non-str const&enum
* json: test (& simplify output of) empty schema
* json: check parsing in test + fix value & string refs
* json: add server tests for OAI JSON response_format
* json: test/fix top-level anyOf
* json: improve grammar parsing failures
* json: test/fix additional props corner cases
* json: fix string patterns (was missing quotes)
* json: ws nit
* json: fix json handling in server when there's no response_format
* json: catch schema conversion errors in server
* json: don't complain about unknown format type in server if unset
* json: cleaner build of test
* json: create examples/json-schema-pydantic-example.py
* json: fix date pattern
* json: move json.hpp & json-schema-to-grammar.{cpp,h} to common
* json: indent 4 spaces
* json: fix naming of top-level c++ function (+ drop unused one)
* json: avoid using namespace std
* json: fix zig build
* Update server.feature
* json: iostream -> fprintf
* json: space before & refs for consistency
* json: nits
2024-03-21 11:50:43 +00:00
add_test (
N A M E $ { T E S T _ T A R G E T }
W O R K I N G _ D I R E C T O R Y $ { L L A M A _ T E S T _ W O R K I N G _ D I R E C T O R Y }
C O M M A N D $ < T A R G E T _ F I L E : $ { T E S T _ T A R G E T } >
$ { L L A M A _ T E S T _ A R G S } )
set_property ( TEST ${ TEST_TARGET } PROPERTY LABELS ${ LLAMA_TEST_LABEL } )
2023-03-22 17:29:06 +00:00
endfunction ( )
2024-04-29 16:58:41 +03:00
# build test-tokenizer-0 target once and add many tests
2025-04-24 16:00:10 +03:00
llama_build ( test-tokenizer-0.cpp )
2024-04-29 16:58:41 +03:00
2025-06-11 19:04:23 +02:00
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-bert-bge ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-bert-bge.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-command-r ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-command-r.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-deepseek-coder ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-deepseek-coder.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-deepseek-llm ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-deepseek-llm.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-falcon ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-falcon.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-gpt-2 ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-gpt-2.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-llama-bpe ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-llama-bpe.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-llama-spm ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-llama-spm.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-mpt ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-mpt.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-phi-3 ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-phi-3.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-qwen2 ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-qwen2.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-refact ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-refact.gguf )
llama_test ( test-tokenizer-0 NAME test-tokenizer-0-starcoder ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-starcoder.gguf )
2024-04-29 16:58:41 +03:00
2025-06-11 17:16:32 +02:00
if ( NOT WIN32 )
llama_test_cmd (
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / t e s t - t o k e n i z e r s - r e p o . s h
N A M E t e s t - t o k e n i z e r s - g g m l - v o c a b s
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ R U N T I M E _ O U T P U T _ D I R E C T O R Y }
2025-06-11 19:04:23 +02:00
A R G S h t t p s : / / h u g g i n g f a c e . c o / g g m l - o r g / v o c a b s $ { P R O J E C T _ S O U R C E _ D I R } / m o d e l s / g g m l - v o c a b s
2025-06-11 17:16:32 +02:00
)
endif ( )
2025-05-30 12:24:37 +02:00
2025-02-01 23:55:32 -08:00
if ( LLAMA_LLGUIDANCE )
2025-06-11 19:04:23 +02:00
llama_build_and_test ( test-grammar-llguidance.cpp ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-llama-bpe.gguf )
2025-02-01 23:55:32 -08:00
endif ( )
2024-12-12 19:02:49 +01:00
2025-06-09 11:03:09 -07:00
if ( NOT WIN32 OR NOT BUILD_SHARED_LIBS )
# these tests are disabled on Windows because they use internal functions not exported with LLAMA_API (when building with shared libraries)
2025-04-24 16:00:10 +03:00
llama_build_and_test ( test-sampling.cpp )
llama_build_and_test ( test-grammar-parser.cpp )
llama_build_and_test ( test-grammar-integration.cpp )
llama_build_and_test ( test-llama-grammar.cpp )
llama_build_and_test ( test-chat.cpp )
2024-12-12 19:02:49 +01:00
# TODO: disabled on loongarch64 because the ggml-ci node lacks Python 3.8
if ( NOT ${ CMAKE_SYSTEM_PROCESSOR } MATCHES "loongarch64" )
2025-06-11 19:04:23 +02:00
llama_build_and_test ( test-json-schema-to-grammar.cpp WORKING_DIRECTORY ${ PROJECT_SOURCE_DIR } )
target_include_directories ( test-json-schema-to-grammar PRIVATE ${ PROJECT_SOURCE_DIR } /tools/server )
2024-12-12 19:02:49 +01:00
endif ( )
2025-05-04 14:20:49 +02:00
if ( NOT GGML_BACKEND_DL )
llama_build ( test-quantize-stats.cpp )
endif ( )
2025-04-24 16:00:10 +03:00
llama_build ( test-gbnf-validator.cpp )
2024-12-12 19:02:49 +01:00
# build test-tokenizer-1-bpe target once and add many tests
2025-04-24 16:00:10 +03:00
llama_build ( test-tokenizer-1-bpe.cpp )
2024-12-12 19:02:49 +01:00
# TODO: disabled due to slowness
2025-06-11 19:04:23 +02:00
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-aquila ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-aquila.gguf)
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-falcon ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-falcon.gguf)
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-2 ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-2.gguf)
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-neox ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-neox.gguf)
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-llama-bpe ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-bpe.gguf --ignore-merges)
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-mpt ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-mpt.gguf)
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-refact ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-refact.gguf)
#llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-starcoder ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-starcoder.gguf)
2024-12-12 19:02:49 +01:00
# build test-tokenizer-1-spm target once and add many tests
2025-04-24 16:00:10 +03:00
llama_build ( test-tokenizer-1-spm.cpp )
2024-12-12 19:02:49 +01:00
2025-06-11 19:04:23 +02:00
llama_test ( test-tokenizer-1-spm NAME test-tokenizer-1-llama-spm ARGS ${ PROJECT_SOURCE_DIR } /models/ggml-vocab-llama-spm.gguf )
#llama_test(test-tokenizer-1-spm NAME test-tokenizer-1-baichuan ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-baichuan.gguf)
2024-12-12 19:02:49 +01:00
2025-04-24 16:00:10 +03:00
# llama_build_and_test(test-double-float.cpp) # SLOW
2024-12-12 19:02:49 +01:00
endif ( )
2025-05-25 01:48:08 +01:00
llama_build_and_test ( test-chat-parser.cpp )
2025-04-24 16:00:10 +03:00
llama_build_and_test ( test-chat-template.cpp )
2025-05-25 01:48:08 +01:00
llama_build_and_test ( test-json-partial.cpp )
llama_build_and_test ( test-log.cpp )
2025-05-14 19:50:57 +01:00
llama_build_and_test ( test-regex-partial.cpp )
2024-04-29 16:58:41 +03:00
2025-06-16 08:11:43 -07:00
llama_build_and_test ( test-thread-safety.cpp ARGS -hf ggml-org/models -hff tinyllamas/stories15M-q4_0.gguf -ngl 99 -p "The meaning of life is" -n 128 -c 256 -ub 32 -np 4 )
2025-04-07 13:35:19 +02:00
# this fails on windows (github hosted runner) due to curl DLL not found (exit code 0xc0000135)
if ( NOT WIN32 )
2025-04-24 16:00:10 +03:00
llama_build_and_test ( test-arg-parser.cpp )
2025-04-07 13:35:19 +02:00
endif ( )
2025-04-24 16:00:10 +03:00
# llama_build_and_test(test-opt.cpp) # SLOW
llama_build_and_test ( test-gguf.cpp )
llama_build_and_test ( test-backend-ops.cpp )
2024-04-29 16:58:41 +03:00
2025-04-24 16:00:10 +03:00
llama_build_and_test ( test-model-load-cancel.cpp LABEL "model" )
llama_build_and_test ( test-autorelease.cpp LABEL "model" )
2024-04-29 16:58:41 +03:00
2024-11-25 15:13:39 +01:00
if ( NOT GGML_BACKEND_DL )
# these tests use the backends directly and cannot be built with dynamic loading
2025-04-24 16:00:10 +03:00
llama_build_and_test ( test-barrier.cpp )
llama_build_and_test ( test-quantize-fns.cpp )
llama_build_and_test ( test-quantize-perf.cpp )
llama_build_and_test ( test-rope.cpp )
2024-11-25 15:13:39 +01:00
endif ( )
2025-05-04 23:43:42 +02:00
# libmtmd
set ( LLAMA_TEST_NAME test-mtmd-c-api )
llama_build_and_test ( test-mtmd-c-api.c )
target_link_libraries ( ${ LLAMA_TEST_NAME } PRIVATE mtmd )
2024-01-26 07:18:00 -05:00
2023-08-30 02:20:26 -04:00
# dummy executable - not installed
get_filename_component ( TEST_TARGET test-c.c NAME_WE )
add_executable ( ${ TEST_TARGET } test-c.c )
target_link_libraries ( ${ TEST_TARGET } PRIVATE llama )