Genie 日志 API 提供了一种在 GenAI 模型执行期间捕获日志的机制。

可以通过传递“–log LEVEL”参数在 genie-t2t-run 和 genie-t2e-run 上启用日志记录。此参数根据指定的 LEVEL 收集日志,并将它们定向到特定于平台的区域:适用于 Android 的 logcat、适用于 Windows 的 ETW 和 stdout,以及适用于其他平台的 stdout。

接受的日志记录级别是 error、warn、info 和 verbose。API 捕获 Genie 级日志和后端 QNN 级日志。

此外,该 API 允许用户为日志提供回调,使他们能够选择收集日志的方式。如果未提供回调,则使用上述特定于平台的方法。

如果不使用日志记录 API,则不会输出日志。

用于本练习的日志 API 包括:

  1. GenieLog_create
    函数文档

Genie_Status_t GenieLog_create(const GenieLogConfig_Handle_t configHandle, const GenieLog_Callback_t callback, const GenieLog_Level_t logLevel, GenieLog_Handle_t *logHandle)

用于创建记录器对象句柄的函数

参数

  • configHandle – [in] 配置的句柄。这是未来记录器可配置性的占位符。目前,它必须为 NULL。
  • callback – [in] 生成新日志消息时调用的回调函数。可以是 NULL,表示将使用默认系统记录器。
  • logLevel – [in] 将生成的最大消息级别。
  • logHandle – [out] 创建的记录器句柄的句柄。

返回

  • GENIE_STATUS_SUCCESS:API 调用成功。
  • GENIE_STATUS_ERROR_INVALID_ARGUMENT:至少有一个参数无效。
  • GENIE_STATUS_ERROR_GENERAL:无法创建日志句柄。
  1. GenieDialogConfig_bindLogger

函数文档

Genie_Status_t GenieDialogConfig_bindLogger(const GenieDialogConfig_Handle_t configHandle, const GenieLog_Handle_t logHandle)

将日志句柄绑定到对话框配置的函数。日志句柄还将绑定到从此对话框配置句柄创建的任何对话框句柄。

参数

  • configHandle – [in] 有效配置的句柄。
  • logHandle – [in] 记录和输出日志的日志句柄。不能为 NULL。

返回
状态码:

  • GENIE_STATUS_SUCCESS:API 调用成功。
  • GENIE_STATUS_ERROR_INVALID_HANDLE:配置句柄或日志句柄无效。
  1. GenieLog_free

函数文档

Genie_Status_t GenieLog_free(GenieLog_Handle_t logHandle)

释放与日志句柄关联的内存的函数

参数

  • logHandle – [in] 日志句柄。不得为 NULL。
    返回
    状态码:
  • GENIE_STATUS_SUCCESS:API 调用成功。
  • GENIE_STATUS_ERROR_INVALID_HANDLE:日志句柄无效。
  • GENIE_STATUS_ERROR_GENERAL:无法释放日志句柄。

如何使用日志 API 的示例

// Example callback
void logStdoutCallback(const char* fmt,
                   GenieLog_Level_t level,
                   uint64_t timestamp,
                   va_list argp) {
    const char* levelStr = "";
    switch (level) {
        case GENIE_LOG_LEVEL_ERROR:
            levelStr = " ERROR ";
            break;
        case GENIE_LOG_LEVEL_WARN:
            levelStr = "WARNING";
            break;
        case GENIE_LOG_LEVEL_INFO:
            levelStr = "  INFO ";
            break;
        case GENIE_LOG_LEVEL_VERBOSE:
            levelStr = "VERBOSE";
            break;
    }
    fprintf(stdout, "[%-7s] ", levelStr);
    vfprintf(stdout, fmt, argp);
    fprintf(stdout, "\n");
}

// Create Log Handle
GenieLog_Handle_t logHandle = NULL;

// Using the API with nullptr (default callback)
// GenieLog_create(nullptr, GENIE_LOG_LEVEL_ERROR, &logHandle);

// Using the API with a user-defined callback
GenieLog_create(logStdoutCallback, GENIE_LOG_LEVEL_ERROR, &logHandle);

// Create Dialog Config
GenieDialogConfig_Handle_t dialogConfigHandle   = NULL;
GenieDialogConfig_createFromJson(dialogConfigStr, &dialogConfigHandle);

// Bind Log Handle to Dialog Config
GenieDialogConfig_bindLogger(dialogConfigHandle, logHandle);

// Create Dialog
GenieDialog_Handle_t dialogHandle = NULL;
GenieDialog_create(dialogConfigHandle, &dialogHandle);

// Run Dialog Query API
GenieDialog_query(dialogHandle, promptStr, GenieDialog_SentenceCode_t::GENIE_DIALOG_SENTENCE_COMPLETE, queryCallback);

// Retrieve logs using the designated platform-specific mechanisms or the user-defined callback.

// Free Log Handle
GenieLog_free(logHandle);

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐