[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[API] Add ML LXM Service API(internal) for large model interactons - #646

Open
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal
Open

[API] Add ML LXM Service API(internal) for large model interactons#646
songgot wants to merge 1 commit into
nnstreamer:mainfrom
songgot:dev_internal

Conversation

@songgot

Copy link
Copy Markdown
Contributor

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)

Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/include/ml-lxm-service-internal.h Outdated
Comment threadc/src/ml-lxm-service.c Outdated
Comment threadc/src/ml-lxm-service.c Outdated
@songgot
songgotforce-pushed the dev_internal branch 5 times, most recently from 0dd8e4b to 324bf4aCompareAugust 29, 2025 03:21
Comment threadc/include/ml-lxm-service-internal.h Outdated
@songgot
songgotforce-pushed the dev_internal branch 3 times, most recently from 86a8dd5 to 9a94a33CompareSeptember 1, 2025 01:55
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>

@hj210hj210 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

@hj210hj210Oct 20, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-botmyungjoo-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

  1. [Medium] NULL deref + stubc/src/ml-lxm-service.c:42-47: ml_lxm_check_availability writes *status without a NULL check (ml_lxm_check_availability (NULL) crashes) and always returns ML_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 NYI in the header.
  2. [Medium] Unsynchronized free/read of instructionsml-lxm-service.c:209-222 (set_instructions: g_free + g_strdup) vs :250-254 (respond reads and appends). Calling set_instructions from another thread (e.g. from the event callback) while respond runs is a use-after-free. Add a GMutex to ml_lxm_session_internal (init in create, clear in destroy) and hold it in both places, as ml_service_s does.
  3. [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 / respond negative cases build and run unconditionally under enable-ml-service, with only the token-generating path gated on llama / model availability.
  4. [Low] Header docsc/include/ml-lxm-service-internal.h:257 references ml_lxm_session_set_event_cb(), which does not exist (the callback is passed to ml_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 in ml-api-service.h.
  5. [Low] Prompt buffer has no terminatorml-lxm-service.c:268-270 sends full_input->len bytes. 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 bare ML_ERROR_INVALID_PARAMETER. Send len + 1 (or document the contract with the filter) and wrap the failure with _ml_error_report_return_continue.
  6. [Low] Style diverges from ml-api-service*.c — no check_feature_state (ML_FEATURE_SERVICE) at entry; bare return ML_ERROR_INVALID_PARAMETER; instead of _ml_error_report_return (...) with descriptive messages; g_malloc0 never returns NULL so the if (!s) / if (!p) branches (~76-79, ~140-141) are dead — use g_new0 (type, 1) as @jaeyun-jung suggested.
  7. [Low] ml_lxm_prompt_append_instruction is a byte-identical alias of append_text (:196-200), so "a" + instruction "b" yields "ab" with no separator or role marker. Give it real semantics or drop it for now. Also config_path is stored (:22, :81) but never read, and if (full_input) at :283 is always true.
  8. [Low] Build/packagingjava/android/nnstreamer/src/main/jni/Android-nnstreamer.mk:77-81 is not updated (LXM silently absent on Android); the header is neither in the c/include/meson.build install list nor in %files -n capi-machine-learning-tizen-internal-devel in the spec. If "in-tree only for now" is intended, please say so in the PR description.
  9. [Low]ml-lxm-service-internal.h:157#include <stdlib.h> is unused; commit title typo "interactons".

No back-door or suspicious behavior found.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@songgot@jaeyun-jung@hj210@myungjoo-bot