|
32 | 32 | #define STB_IMAGE_IMPLEMENTATION |
33 | 33 | #include "stb/stb_image.h" |
34 | 34 |
|
35 | | -#define LOG_INF(...) fprintf(stdout, __VA_ARGS__) |
36 | | -#define LOG_ERR(...) fprintf(stderr, __VA_ARGS__) |
| 35 | +// |
| 36 | +// internal logging functions |
| 37 | +// |
| 38 | + |
| 39 | +struct mtmd_helper_logger { |
| 40 | + ggml_log_callback default_callback = [](ggml_log_level level, const char * text, void * user_data) { |
| 41 | + (void) level; |
| 42 | + (void) user_data; |
| 43 | + fputs(text, stderr); |
| 44 | + fflush(stderr); |
| 45 | + }; |
| 46 | + |
| 47 | + ggml_log_callback log_callback = default_callback; |
| 48 | + void * log_callback_user_data; |
| 49 | + |
| 50 | + void log_v(enum ggml_log_level level, const char * format, va_list args) { |
| 51 | + if (format == NULL) { |
| 52 | + return; |
| 53 | + } |
| 54 | + va_list args_copy; |
| 55 | + va_copy(args_copy, args); |
| 56 | + char buffer[128]; |
| 57 | + int len = vsnprintf(buffer, 128, format, args); |
| 58 | + if (len < 128) { |
| 59 | + log_callback(level, buffer, log_callback_user_data); |
| 60 | + } else { |
| 61 | + char * buffer2 = (char *) calloc(len + 1, sizeof(char)); |
| 62 | + vsnprintf(buffer2, len + 1, format, args_copy); |
| 63 | + buffer2[len] = 0; |
| 64 | + log_callback(level, buffer2, log_callback_user_data); |
| 65 | + free(buffer2); |
| 66 | + } |
| 67 | + va_end(args_copy); |
| 68 | + } |
| 69 | + |
| 70 | + void log(enum ggml_log_level level, const char * format, ...) { |
| 71 | + va_list args; |
| 72 | + va_start(args, format); |
| 73 | + log_v(level, format, args); |
| 74 | + va_end(args); |
| 75 | + } |
| 76 | +} g_logger; |
| 77 | + |
| 78 | +#define LOG_INF(...) g_logger.log(GGML_LOG_LEVEL_INFO, __VA_ARGS__) |
| 79 | +#define LOG_WRN(...) g_logger.log(GGML_LOG_LEVEL_WARN, __VA_ARGS__) |
| 80 | +#define LOG_ERR(...) g_logger.log(GGML_LOG_LEVEL_ERROR, __VA_ARGS__) |
| 81 | + |
| 82 | +void mtmd_helper_log_set(ggml_log_callback log_callback, void * user_data) { |
| 83 | + if (log_callback == nullptr) { |
| 84 | + log_callback = g_logger.default_callback; |
| 85 | + } |
| 86 | + g_logger.log_callback = log_callback; |
| 87 | + g_logger.log_callback_user_data = user_data; |
| 88 | + mtmd_log_set(log_callback, user_data); |
| 89 | +} |
| 90 | + |
| 91 | +// |
| 92 | +// helper functions |
| 93 | +// |
37 | 94 |
|
38 | 95 | size_t mtmd_helper_get_n_tokens(const mtmd_input_chunks * chunks) { |
39 | 96 | size_t n_tokens = 0; |
@@ -325,7 +382,7 @@ int32_t mtmd_helper_eval_chunks(mtmd_context * ctx, |
325 | 382 | llama_pos * new_n_past) { |
326 | 383 | size_t n_chunks = mtmd_input_chunks_size(chunks); |
327 | 384 | if (n_chunks == 0) { |
328 | | - LOG_ERR("no chunks to eval\n"); |
| 385 | + LOG_WRN("no chunks to eval\n"); |
329 | 386 | return 0; |
330 | 387 | } |
331 | 388 |
|
|
0 commit comments