Uh oh!
There was an error while loading. Please reload this page.
[API] Add ML LXM Service API(internal) for large model interactons - #646
[API] Add ML LXM Service API(internal) for large model interactons#646songgot wants to merge 1 commit into
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
0dd8e4b to
324bf4aCompareUh oh!
There was an error while loading. Please reload this page.
86a8dd5 to
9a94a33CompareThis commit introduces the ML LXM Service API, a new C API designed to facilitate interactions with large-scale models such as Large Language Models (LLMs) Signed-off-by: hyunil park <hyunil46.park@samsung.com>
hj210
left a comment
There was a problem hiding this comment.
This API has a solid foundation and demonstrates clear design goals
and consistent implementation. It is particularly well-aligned with
its specific purpose of interacting with LLMs/LVMs.
With some small refactoring, it could become cleaner and more maintainable code.
| * @return ML_ERROR_NONE on success. | ||
| * @note The callback parameter is mandatory and will be set during session creation. | ||
| */ | ||
| int ml_lxm_session_create (const char *config_path, const char *instructions, ml_service_event_cb callback, void *user_data, ml_lxm_session_h * session); |
There was a problem hiding this comment.
This function has a long parameter list. It would be better to reduce the number of parameters by using a structure type if possible.
For example,
typedefstruct {
constchar*config_path;
constchar*instructions;
ml_service_event_cbcallback;
void*user_data;
} ml_lxm_session_config_t;
intml_lxm_session_create(constml_lxm_session_config_t*config, ml_lxm_session_h*session) {
if (!config|| !session|| !config->config_path|| !config->callback)
returnML_ERROR_INVALID_PARAMETER;
returnml_lxm_session_create(config->config_path, config->instructions,
config->callback, config->user_data, session);
}(This sample code is suggested by Cline)
myungjoo-bot
left a comment
There was a problem hiding this comment.
Automated review (transcribed from an AI review agent's report; please verify before acting).
Summary: The PR adds an internal "LXM" convenience layer over ml-service: a session (ml_service_new + ml_service_set_event_cb), a prompt (GString), and ml_lxm_session_respond which concatenates instructions + prompt into one tensor and calls ml_service_request. It merges cleanly against current main and CI is green. I read both new files against ml-api-service*.c / ml-api-common.c (destroying input_data right after ml_service_request is safe since the extension clones it), and checked packaging / Android build lists and the companion tests in #647.
- [Medium] NULL deref + stub —
c/src/ml-lxm-service.c:42-47:ml_lxm_check_availabilitywrites*statuswithout a NULL check (ml_lxm_check_availability (NULL)crashes) and always returnsML_LXM_AVAILABILITY_AVAILABLE, making the rest of the enum meaningless. Add the NULL check, and either implement a real check (e.g.check_feature_state (ML_FEATURE_SERVICE)->SERVICE_DISABLED) or mark it@todo NYIin the header. - [Medium] Unsynchronized free/read of
instructions—ml-lxm-service.c:209-222(set_instructions:g_free+g_strdup) vs:250-254(respondreads and appends). Callingset_instructionsfrom another thread (e.g. from the event callback) whilerespondruns is a use-after-free. Add aGMutextoml_lxm_session_internal(init in create, clear in destroy) and hold it in both places, asml_service_sdoes. - [Medium] No tests in this PR; #647's tests would not run in CI — #647 gates the test binary on
dependency('llama', required: false), which no CI workflow, spec, or debian rule provides, and the positive test skips without model files. Please land tests together with this code, and split them so NULL-parameter / missing-config / prompt create-append-destroy /set_instructions/respondnegative cases build and run unconditionally underenable-ml-service, with only the token-generating path gated on llama / model availability. - [Low] Header docs —
c/include/ml-lxm-service-internal.h:257referencesml_lxm_session_set_event_cb(), which does not exist (the callback is passed toml_lxm_session_create);@example sample_lxm_service.c(line 12) names a file not in the repo; the "complete example" (~60-151) is C++ (<iostream>,static_cast) inside a C header — please make it plain C; enum values (~169-173) lack per-value/**< */comments unlike every enum inml-api-service.h. - [Low] Prompt buffer has no terminator —
ml-lxm-service.c:268-270sendsfull_input->lenbytes. For flexible inputs the buffer is exactly that size; for static inputs a prompt that exactly fills the tensor has no NUL, and an oversized prompt fails with a bareML_ERROR_INVALID_PARAMETER. Sendlen + 1(or document the contract with the filter) and wrap the failure with_ml_error_report_return_continue. - [Low] Style diverges from
ml-api-service*.c— nocheck_feature_state (ML_FEATURE_SERVICE)at entry; barereturn ML_ERROR_INVALID_PARAMETER;instead of_ml_error_report_return (...)with descriptive messages;g_malloc0never returns NULL so theif (!s)/if (!p)branches (~76-79, ~140-141) are dead — useg_new0 (type, 1)as @jaeyun-jung suggested. - [Low]
ml_lxm_prompt_append_instructionis a byte-identical alias ofappend_text(:196-200), so"a"+ instruction"b"yields"ab"with no separator or role marker. Give it real semantics or drop it for now. Alsoconfig_pathis stored (:22,:81) but never read, andif (full_input)at:283is always true. - [Low] Build/packaging —
java/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81is not updated (LXM silently absent on Android); the header is neither in thec/include/meson.buildinstall list nor in%files -n capi-machine-learning-tizen-internal-develin the spec. If "in-tree only for now" is intended, please say so in the PR description. - [Low]
ml-lxm-service-internal.h:157#include <stdlib.h>is unused; commit title typo "interactons".
No back-door or suspicious behavior found.
This commit introduces the ML LXM Service API, a new C API designed to facilitate interactions with large-scale models such as Large Language Models (LLMs)