[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
0dd8e4b to
324bf4a
Compare
86a8dd5 to
9a94a33
Compare
9a94a33 to
3306bc8
Compare
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) Signed-off-by: hyunil park <hyunil46.park@samsung.com>
3306bc8 to
f0c6e84
Compare
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,
typedef struct {
const char *config_path;
const char *instructions;
ml_service_event_cb callback;
void *user_data;
} ml_lxm_session_config_t;
int ml_lxm_session_create(const ml_lxm_session_config_t *config,
ml_lxm_session_h *session) {
if (!config || !session || !config->config_path || !config->callback)
return ML_ERROR_INVALID_PARAMETER;
return ml_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)