From fd2c58286aaeb4ed51d6b963344a6d2584e25ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=B8=BA?= Date: Thu, 21 Nov 2024 20:10:27 +0800 Subject: [PATCH] remove reference interface from extern C in qwen2audio examples --- examples/qwen2-audio/qwen2-cli.cpp | 12 ++++++--- examples/qwen2-audio/qwen2.cpp | 40 ++++++++++++++++++++++-------- examples/qwen2-audio/qwen2.h | 29 +++++----------------- 3 files changed, 44 insertions(+), 37 deletions(-) diff --git a/examples/qwen2-audio/qwen2-cli.cpp b/examples/qwen2-audio/qwen2-cli.cpp index 9221780a9..1d139c5a5 100644 --- a/examples/qwen2-audio/qwen2-cli.cpp +++ b/examples/qwen2-audio/qwen2-cli.cpp @@ -1,9 +1,13 @@ #include "qwen2.h" +#include + +using std::cout; +using std::endl; int main(int argc, char **argv) { - omni_context_params ctx_params = omni_context_default_params(); + omni_context_params * ctx_params = omni_context_default_params(); if (!omni_context_params_parse(argc, argv, ctx_params)) { return 1; @@ -11,9 +15,11 @@ int main(int argc, char **argv) omni_context *ctx_omni = omni_init_context(ctx_params); - omni_process_full(ctx_omni, ctx_params); + auto* ret_str = omni_process_full(ctx_omni, ctx_params); + cout << "RET: " << ret_str << endl; + omni_free(ctx_omni); return 0; -} \ No newline at end of file +} diff --git a/examples/qwen2-audio/qwen2.cpp b/examples/qwen2-audio/qwen2.cpp index 8a08a7ac6..02d3c94d8 100644 --- a/examples/qwen2-audio/qwen2.cpp +++ b/examples/qwen2-audio/qwen2.cpp @@ -27,10 +27,26 @@ void* internal_chars = nullptr; static const char *AUDIO_TOKEN = "<|AUDIO|>"; +struct omni_context_params +{ + const char *model; + const char *mmproj; + const char *file; + const char *prompt; + int32_t n_gpu_layers; +}; + +struct omni_context +{ + struct whisper_context *ctx_whisper; + struct audio_projector *projector; + struct llama_context *ctx_llama; + struct llama_model *model; +}; + // // Whisper // - struct whisper_params { int32_t n_threads = std::min(4, (int32_t)std::thread::hardware_concurrency()); @@ -476,8 +492,9 @@ static void omni_print_usage(int, char **argv) LOG("\n note: a lower temperature value like 0.1 is recommended for better quality.\n"); } -bool omni_context_params_parse(int argc, char **argv, omni_context_params ¶ms) +bool omni_context_params_parse(int argc, char **argv, omni_context_params * in_params) { + auto& params = *in_params; for (int i = 1; i < argc; i++) { std::string arg = argv[i]; @@ -523,15 +540,15 @@ bool omni_context_params_parse(int argc, char **argv, omni_context_params ¶m return true; } -omni_context_params omni_context_default_params() +omni_context_params * omni_context_default_params() { - omni_context_params params; + static omni_context_params params; params.model = ""; params.mmproj = ""; params.file = ""; params.prompt = "this conversation talks about"; params.n_gpu_layers = -1; - return params; + return ¶ms; } struct omni_params @@ -540,8 +557,9 @@ struct omni_params whisper_params whisper; }; -bool omni_params_parse(int argc, char **argv, omni_params ¶ms) +bool omni_params_parse(int argc, char **argv, omni_params * in_params) { + auto& params = *in_params; if (!gpt_params_parse(argc, argv, params.gpt)) { return false; @@ -564,8 +582,9 @@ bool omni_params_parse(int argc, char **argv, omni_params ¶ms) return true; } -static omni_params get_omni_params_from_context_params(omni_context_params ¶ms) +static omni_params get_omni_params_from_context_params(omni_context_params * in_params) { + auto& params = *in_params; omni_params all_params; // Initialize gpt params @@ -639,10 +658,9 @@ static size_t find_audio_token(const std::string &prompt) return prompt.find(AUDIO_TOKEN); } -struct omni_context *omni_init_context(omni_context_params ¶ms) +struct omni_context *omni_init_context(omni_context_params * in_params) { - - omni_params all_params = get_omni_params_from_context_params(params); + omni_params all_params = get_omni_params_from_context_params(in_params); // llama LLAMA_LOG_INFO("------- llama --------\n"); @@ -877,7 +895,7 @@ const char* omni_process_prompt(struct omni_context *ctx_omni, ggml_tensor *audi return (const char*)(internal_chars); } -const char* omni_process_full(struct omni_context *ctx_omni, omni_context_params ¶ms) +const char* omni_process_full(struct omni_context *ctx_omni, omni_context_params * params) { omni_params all_params = get_omni_params_from_context_params(params); diff --git a/examples/qwen2-audio/qwen2.h b/examples/qwen2-audio/qwen2.h index dcadb4288..61538b837 100644 --- a/examples/qwen2-audio/qwen2.h +++ b/examples/qwen2-audio/qwen2.h @@ -29,34 +29,17 @@ extern "C" { #endif -struct omni_context_params -{ - const char *model; - const char *mmproj; - const char *file; - const char *prompt; - int32_t n_gpu_layers; -}; +OMNI_AUDIO_API bool omni_context_params_parse(int argc, char **argv, struct omni_context_params * params); -struct omni_context -{ - struct whisper_context *ctx_whisper; - struct audio_projector *projector; - struct llama_context *ctx_llama; - struct llama_model *model; -}; +OMNI_AUDIO_API struct omni_context_params * omni_context_default_params(); -OMNI_AUDIO_API bool omni_context_params_parse(int argc, char **argv, omni_context_params ¶ms); +OMNI_AUDIO_API struct omni_context * omni_init_context(struct omni_context_params * params); -OMNI_AUDIO_API omni_context_params omni_context_default_params(); - -OMNI_AUDIO_API struct omni_context *omni_init_context(omni_context_params ¶ms); - -OMNI_AUDIO_API void omni_free(struct omni_context *ctx_omni); +OMNI_AUDIO_API void omni_free(struct omni_context * ctx_omni); OMNI_AUDIO_API const char* omni_process_full( - struct omni_context *ctx_omni, - omni_context_params ¶ms + struct omni_context * ctx_omni, + struct omni_context_params * params ); #ifdef __cplusplus