char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Xuan-Son Nguyencommon: add LOG_JSON macro to log structured data (#28586)8e330954a

char/aliceai-t5-moe
6.0 KiB146 linesraw
1#pragma once
2
3#include "ggml.h" // for ggml_log_level
4
5#define LOG_CLR_TO_EOL  "\033[K\r"
6#define LOG_COL_DEFAULT "\033[0m"
7#define LOG_COL_BOLD    "\033[1m"
8#define LOG_COL_RED     "\033[31m"
9#define LOG_COL_GREEN   "\033[32m"
10#define LOG_COL_YELLOW  "\033[33m"
11#define LOG_COL_BLUE    "\033[34m"
12#define LOG_COL_MAGENTA "\033[35m"
13#define LOG_COL_CYAN    "\033[36m"
14#define LOG_COL_WHITE   "\033[37m"
15
16#ifndef __GNUC__
17#    define LOG_ATTRIBUTE_FORMAT(...)
18#elif defined(__MINGW32__) && !defined(__clang__)
19#    define LOG_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__)))
20#else
21#    define LOG_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__)))
22#endif
23
24#define LOG_LEVEL_DEBUG  5
25#define LOG_LEVEL_TRACE  4
26#define LOG_LEVEL_INFO   3
27#define LOG_LEVEL_WARN   2
28#define LOG_LEVEL_ERROR  1
29#define LOG_LEVEL_OUTPUT 0 // output data from tools
30
31#define LOG_DEFAULT_DEBUG LOG_LEVEL_DEBUG
32#define LOG_DEFAULT_LLAMA LOG_LEVEL_INFO
33
34enum log_colors {
35    LOG_COLORS_AUTO     = -1,
36    LOG_COLORS_DISABLED = 0,
37    LOG_COLORS_ENABLED  = 1,
38};
39
40// needed by the LOG_TMPL macro to avoid computing log arguments if the verbosity lower
41// set via common_log_set_verbosity()
42int  common_log_get_verbosity_thold(void);
43
44void common_log_set_verbosity_thold(int verbosity); // not thread-safe
45
46bool common_log_get_jsonl(void);
47
48void common_log_set_jsonl(bool jsonl); // not thread-safe
49
50int common_log_get_verbosity(enum ggml_log_level level);
51
52void common_log_default_callback(enum ggml_log_level level, const char * text, void * user_data);
53
54// the common_log uses an internal worker thread to print/write log messages
55// when the worker thread is paused, incoming log messages are discarded
56struct common_log;
57
58struct common_log * common_log_init();
59
60// Singleton, intentionally leaked to avoid Windows teardown hangs.
61// Call common_log_flush() before exit if you want to ensure all logs are flushed.
62struct common_log * common_log_main();
63
64void                common_log_pause (struct common_log * log); // pause  the worker thread, not thread-safe
65void                common_log_resume(struct common_log * log); // resume the worker thread, not thread-safe
66void                common_log_free  (struct common_log * log);
67
68LOG_ATTRIBUTE_FORMAT(3, 4)
69void common_log_add(struct common_log * log, enum ggml_log_level level, const char * fmt, ...);
70
71// defaults: file = NULL, colors = false, prefix = false, timestamps = false
72//
73// regular log output:
74//
75//   ggml_backend_metal_log_allocated_size: allocated buffer, size =  6695.84 MiB, ( 6695.91 / 21845.34)
76//   llm_load_tensors: ggml ctx size =    0.27 MiB
77//   llm_load_tensors: offloading 32 repeating layers to GPU
78//   llm_load_tensors: offloading non-repeating layers to GPU
79//
80// with prefix = true, timestamps = true, the log output will look like this:
81//
82//   0.00.035.060 D ggml_backend_metal_log_allocated_size: allocated buffer, size =  6695.84 MiB, ( 6695.91 / 21845.34)
83//   0.00.035.064 I llm_load_tensors: ggml ctx size =    0.27 MiB
84//   0.00.090.578 I llm_load_tensors: offloading 32 repeating layers to GPU
85//   0.00.090.579 I llm_load_tensors: offloading non-repeating layers to GPU
86//
87// D - debug   (stderr, V = LOG_DEFAULT_DEBUG)
88// I - info    (stdout, V = LOG_DEFAULT_INFO)
89// W - warning (stderr, V = LOG_DEFAULT_WARN)
90// E - error   (stderr, V = LOG_DEFAULT_ERROR)
91// O - output  (stdout, V = LOG_DEFAULT_OUTPUT)
92//
93
94void common_log_set_file      (struct common_log * log, const char * file); // not thread-safe
95void common_log_set_colors    (struct common_log * log, log_colors colors); // not thread-safe
96void common_log_set_prefix    (struct common_log * log, bool prefix);       // whether to output prefix to each log
97void common_log_set_timestamps(struct common_log * log, bool timestamps);   // whether to output timestamps in the prefix
98void common_log_flush         (struct common_log * log);                    // flush all pending log messages
99
100// helper macros for logging
101// use these to avoid computing log arguments if the verbosity of the log is higher than the threshold
102//
103// for example:
104//
105//   LOG_DBG("this is a debug message: %d\n", expensive_function());
106//
107// this will avoid calling expensive_function() if LOG_DEFAULT_DEBUG > common_log_verbosity_thold
108//
109
110#define LOG_TMPL(level, verbosity, ...) \
111    do { \
112        if ((verbosity) <= common_log_get_verbosity_thold()) { \
113            common_log_add(common_log_main(), (level), __VA_ARGS__); \
114        } \
115    } while (0)
116
117#define LOG(...)             LOG_TMPL(GGML_LOG_LEVEL_NONE, LOG_LEVEL_OUTPUT, __VA_ARGS__)
118#define LOGV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_NONE, verbosity,        __VA_ARGS__)
119
120#define LOG_DBG(...) LOG_TMPL(GGML_LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG,  __VA_ARGS__)
121#define LOG_TRC(...) LOG_TMPL(GGML_LOG_LEVEL_INFO,  LOG_LEVEL_TRACE,  __VA_ARGS__)
122#define LOG_INF(...) LOG_TMPL(GGML_LOG_LEVEL_INFO,  LOG_LEVEL_INFO,   __VA_ARGS__)
123#define LOG_WRN(...) LOG_TMPL(GGML_LOG_LEVEL_WARN,  LOG_LEVEL_WARN,   __VA_ARGS__)
124#define LOG_ERR(...) LOG_TMPL(GGML_LOG_LEVEL_ERROR, LOG_LEVEL_ERROR,  __VA_ARGS__)
125#define LOG_CNT(...) LOG_TMPL(GGML_LOG_LEVEL_CONT,  LOG_LEVEL_INFO,   __VA_ARGS__) // same as INFO
126
127#define LOG_DBGV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_DEBUG, verbosity, __VA_ARGS__)
128#define LOG_TRCV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_TRACE, verbosity, __VA_ARGS__)
129#define LOG_INFV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_INFO,  verbosity, __VA_ARGS__)
130#define LOG_WRNV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_WARN,  verbosity, __VA_ARGS__)
131#define LOG_ERRV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_ERROR, verbosity, __VA_ARGS__)
132#define LOG_CNTV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_CONT,  verbosity, __VA_ARGS__)
133
134class common_json; // defined in common/json.h
135
136// helper allows different types of json output
137// no-op if --log-jsonl is not set
138void common_log_add_json(struct common_log * log, const char * type, const common_json & data);
139
140// will only print if --log-jsonl is set
141#define LOG_JSON(type, data) \
142    do { \
143        if (common_log_get_jsonl()) { \
144            common_log_add_json(common_log_main(), type, data); \
145        } \
146    } while (0)