Skip to content

Commit 3357961

Browse files
committed
add test target
1 parent f8c27b9 commit 3357961

File tree

5 files changed

+107
-6
lines changed

5 files changed

+107
-6
lines changed

examples/llava/clip.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ CLIP_API int clip_uhd_num_image_embeds_col(struct clip_ctx * ctx_clip);
7878
CLIP_API void clip_add_load_image_size(struct clip_ctx * ctx_clip, struct clip_image_size * load_image_size);
7979
CLIP_API struct clip_image_size * clip_get_load_image_size(struct clip_ctx * ctx_clip);
8080

81-
CLIP_API struct clip_image_size * clip_image_size_init();
82-
CLIP_API struct clip_image_u8 * clip_image_u8_init ();
83-
CLIP_API struct clip_image_f32 * clip_image_f32_init();
84-
CLIP_API struct clip_image_f32_batch * clip_image_f32_batch_init(); // only used by libllava
81+
CLIP_API struct clip_image_size * clip_image_size_init(void);
82+
CLIP_API struct clip_image_u8 * clip_image_u8_init (void);
83+
CLIP_API struct clip_image_f32 * clip_image_f32_init(void);
84+
CLIP_API struct clip_image_f32_batch * clip_image_f32_batch_init(void); // only used by libllava
8585

8686
// nx, ny are the output image dimensions
8787
CLIP_API unsigned char * clip_image_u8_get_data(struct clip_image_u8 * img, uint32_t * nx, uint32_t * ny);

examples/llava/mtmd.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,3 +888,36 @@ llama_pos mtmd_image_tokens_get_n_pos(const mtmd_image_tokens * image_tokens) {
888888
}
889889
return image_tokens->n_tokens();
890890
}
891+
892+
// test function
893+
894+
mtmd_input_chunks * mtmd_test_create_input_chunks() {
895+
mtmd_input_chunks * chunks = mtmd_input_chunks_init();
896+
if (!chunks) {
897+
return nullptr;
898+
}
899+
900+
// create a text chunk
901+
std::vector<llama_token> tokens_text = { 1, 2, 3, 4, 5 };
902+
mtmd_input_chunk chunk_text{
903+
MTMD_INPUT_CHUNK_TYPE_TEXT,
904+
std::move(tokens_text),
905+
{},
906+
};
907+
chunks->entries.emplace_back(std::move(chunk_text));
908+
909+
// create an image chunk
910+
mtmd_image_tokens_ptr image_tokens(new mtmd_image_tokens);
911+
image_tokens->nx = 4;
912+
image_tokens->ny = 4;
913+
image_tokens->batch_f32.entries.resize(16);
914+
image_tokens->id = "image_1";
915+
mtmd_input_chunk chunk_image{
916+
MTMD_INPUT_CHUNK_TYPE_IMAGE,
917+
{},
918+
std::move(image_tokens),
919+
};
920+
chunks->entries.emplace_back(std::move(chunk_image));
921+
922+
return chunks;
923+
}

examples/llava/mtmd.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ struct mtmd_context_params {
7373
const char * image_marker;
7474
};
7575

76-
MTMD_API mtmd_context_params mtmd_context_params_default();
76+
MTMD_API struct mtmd_context_params mtmd_context_params_default(void);
7777

7878
// initialize the mtmd context
7979
// return nullptr on failure
@@ -111,7 +111,7 @@ MTMD_API void mtmd_bitmap_set_id (mtmd_bitmap * bitmap, const char * id
111111
//
112112
// this is simply a list of mtmd_input_chunk
113113
// the elements can only be populated via mtmd_tokenize()
114-
MTMD_API mtmd_input_chunks * mtmd_input_chunks_init();
114+
MTMD_API mtmd_input_chunks * mtmd_input_chunks_init(void);
115115
MTMD_API size_t mtmd_input_chunks_size(mtmd_input_chunks * chunks);
116116
MTMD_API mtmd_input_chunk * mtmd_input_chunks_get (mtmd_input_chunks * chunks, size_t idx);
117117
MTMD_API void mtmd_input_chunks_free(mtmd_input_chunks * chunks);
@@ -228,6 +228,9 @@ MTMD_API int32_t mtmd_helper_eval_chunk_single(mtmd_context * ctx,
228228

229229
/////////////////////////////////////////
230230

231+
// test function, to be used in test-mtmd-c-api.c
232+
MTMD_API mtmd_input_chunks * mtmd_test_create_input_chunks(void);
233+
231234
#ifdef __cplusplus
232235
} // extern "C"
233236
#endif

tests/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@ if (NOT GGML_BACKEND_DL)
162162
llama_build_and_test(test-rope.cpp)
163163
endif()
164164

165+
# libmtmd
166+
set(LLAMA_TEST_NAME test-mtmd-c-api)
167+
llama_build_and_test(test-mtmd-c-api.c)
168+
target_link_libraries(${LLAMA_TEST_NAME} PRIVATE mtmd)
165169

166170
# dummy executable - not installed
167171
get_filename_component(TEST_TARGET test-c.c NAME_WE)

tests/test-mtmd-c-api.c

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <stdio.h>
2+
#include <assert.h>
3+
4+
#define MTMD_TEST
5+
#include "mtmd.h"
6+
7+
int main(void) {
8+
printf("\n\nTesting libmtmd C API...\n");
9+
printf("--------\n\n");
10+
11+
struct mtmd_context_params params = mtmd_context_params_default();
12+
printf("Default image marker: %s\n", params.image_marker);
13+
14+
mtmd_input_chunks * chunks = mtmd_test_create_input_chunks();
15+
16+
if (!chunks) {
17+
fprintf(stderr, "Failed to create input chunks\n");
18+
return 1;
19+
}
20+
21+
size_t n_chunks = mtmd_input_chunks_size(chunks);
22+
printf("Number of chunks: %zu\n", n_chunks);
23+
assert(n_chunks > 0);
24+
25+
for (size_t i = 0; i < n_chunks; i++) {
26+
mtmd_input_chunk * chunk = mtmd_input_chunks_get(chunks, i);
27+
assert(chunk != NULL);
28+
enum mtmd_input_chunk_type type = mtmd_input_chunk_get_type(chunk);
29+
printf("Chunk %zu type: %d\n", i, type);
30+
31+
if (type == MTMD_INPUT_CHUNK_TYPE_TEXT) {
32+
size_t n_tokens;
33+
const llama_token * tokens = mtmd_input_chunk_get_tokens_text(chunk, &n_tokens);
34+
printf(" Text chunk with %zu tokens\n", n_tokens);
35+
assert(tokens != NULL);
36+
assert(n_tokens > 0);
37+
for (size_t j = 0; j < n_tokens; j++) {
38+
assert(tokens[j] >= 0);
39+
printf(" > Token %zu: %d\n", j, tokens[j]);
40+
}
41+
42+
} else if (type == MTMD_INPUT_CHUNK_TYPE_IMAGE) {
43+
const mtmd_image_tokens * image_tokens = mtmd_input_chunk_get_tokens_image(chunk);
44+
size_t n_tokens = mtmd_image_tokens_get_n_tokens(image_tokens);
45+
size_t nx = mtmd_image_tokens_get_nx(image_tokens);
46+
size_t ny = mtmd_image_tokens_get_ny(image_tokens);
47+
const char * id = mtmd_image_tokens_get_id(image_tokens);
48+
assert(n_tokens > 0);
49+
assert(nx > 0);
50+
assert(ny > 0);
51+
assert(id != NULL);
52+
printf(" Image chunk with %zu tokens\n", n_tokens);
53+
printf(" Image size: %zu x %zu\n", nx, ny);
54+
printf(" Image ID: %s\n", id);
55+
}
56+
}
57+
58+
printf("\n\nDONE: test libmtmd C API...\n");
59+
60+
return 0;
61+
}

0 commit comments

Comments
 (0)