diff --git a/src/ort_genai.h b/src/ort_genai.h index 949dff9d96..3424287f1d 100644 --- a/src/ort_genai.h +++ b/src/ort_genai.h @@ -108,13 +108,13 @@ struct OgaString { }; struct OgaStringArray { - std::unique_ptr Create() { + static std::unique_ptr Create() { OgaStringArray* p; OgaCheckResult(OgaCreateStringArray(&p)); return std::unique_ptr(p); } - std::unique_ptr Create(const char** strings, size_t count) { + static std::unique_ptr Create(const char* const* strings, size_t count) { OgaStringArray* p; OgaCheckResult(OgaCreateStringArrayFromStrings(strings, count, &p)); return std::unique_ptr(p); @@ -603,20 +603,16 @@ struct OgaTensor : OgaAbstract { struct OgaImages : OgaAbstract { static std::unique_ptr Load(const std::vector& image_paths) { OgaImages* p; - OgaStringArray* strs; - OgaCheckResult(OgaCreateStringArrayFromStrings(image_paths.data(), image_paths.size(), &strs)); - OgaCheckResult(OgaLoadImages(strs, &p)); - OgaDestroyStringArray(strs); + auto strs = OgaStringArray::Create(image_paths.data(), image_paths.size()); + OgaCheckResult(OgaLoadImages(strs.get(), &p)); return std::unique_ptr(p); } #if OGA_USE_SPAN static std::unique_ptr Load(std::span image_paths) { OgaImages* p; - OgaStringArray* strs; - OgaCheckResult(OgaCreateStringArrayFromStrings(image_paths.data(), image_paths.size(), &strs)); - OgaCheckResult(OgaLoadImages(strs, &p)); - OgaDestroyStringArray(strs); + auto strs = OgaStringArray::Create(image_paths.data(), image_paths.size()); + OgaCheckResult(OgaLoadImages(strs.get(), &p)); return std::unique_ptr(p); } #endif @@ -633,20 +629,16 @@ struct OgaImages : OgaAbstract { struct OgaAudios : OgaAbstract { static std::unique_ptr Load(const std::vector& audio_paths) { OgaAudios* p; - OgaStringArray* strs; - OgaCheckResult(OgaCreateStringArrayFromStrings(audio_paths.data(), audio_paths.size(), &strs)); - OgaCheckResult(OgaLoadAudios(strs, &p)); - OgaDestroyStringArray(strs); + auto strs = OgaStringArray::Create(audio_paths.data(), audio_paths.size()); + OgaCheckResult(OgaLoadAudios(strs.get(), &p)); return std::unique_ptr(p); } #if OGA_USE_SPAN static std::unique_ptr Load(std::span audio_paths) { OgaAudios* p; - OgaStringArray* strs; - OgaCheckResult(OgaCreateStringArrayFromStrings(audio_paths.data(), audio_paths.size(), &strs)); - OgaCheckResult(OgaLoadAudios(strs, &p)); - OgaDestroyStringArray(strs); + auto strs = OgaStringArray::Create(audio_paths.data(), audio_paths.size()); + OgaCheckResult(OgaLoadAudios(strs.get(), &p)); return std::unique_ptr(p); } #endif @@ -711,9 +703,8 @@ struct OgaMultiModalProcessor : OgaAbstract { std::unique_ptr ProcessImages(const std::vector& prompts, const OgaImages* images = nullptr) const { OgaNamedTensors* p; - OgaStringArray* strs; - OgaCheckResult(OgaCreateStringArrayFromStrings(prompts.data(), prompts.size(), &strs)); - OgaCheckResult(OgaProcessorProcessImagesAndPrompts(this, strs, images, &p)); + auto strs = OgaStringArray::Create(prompts.data(), prompts.size()); + OgaCheckResult(OgaProcessorProcessImagesAndPrompts(this, strs.get(), images, &p)); return std::unique_ptr(p); } @@ -725,9 +716,8 @@ struct OgaMultiModalProcessor : OgaAbstract { std::unique_ptr ProcessAudios(const std::vector& prompts, const OgaAudios* audios = nullptr) const { OgaNamedTensors* p; - OgaStringArray* strs; - OgaCheckResult(OgaCreateStringArrayFromStrings(prompts.data(), prompts.size(), &strs)); - OgaCheckResult(OgaProcessorProcessAudiosAndPrompts(this, strs, audios, &p)); + auto strs = OgaStringArray::Create(prompts.data(), prompts.size()); + OgaCheckResult(OgaProcessorProcessAudiosAndPrompts(this, strs.get(), audios, &p)); return std::unique_ptr(p); } @@ -739,9 +729,8 @@ struct OgaMultiModalProcessor : OgaAbstract { std::unique_ptr ProcessImagesAndAudios(const std::vector& prompts, const OgaImages* images = nullptr, const OgaAudios* audios = nullptr) const { OgaNamedTensors* p; - OgaStringArray* strs; - OgaCheckResult(OgaCreateStringArrayFromStrings(prompts.data(), prompts.size(), &strs)); - OgaCheckResult(OgaProcessorProcessImagesAndAudiosAndPrompts(this, strs, images, audios, &p)); + auto strs = OgaStringArray::Create(prompts.data(), prompts.size()); + OgaCheckResult(OgaProcessorProcessImagesAndAudiosAndPrompts(this, strs.get(), images, audios, &p)); return std::unique_ptr(p); }