| 4764 | bool any = false; |
| 4765 | |
| 4766 | for (;;) { |
| 4767 | p = skip_ascii_ws(p); |
| 4768 | if (strncmp(p, param_start, strlen(param_start)) != 0) break; |
| 4769 | if (!dsml_parse_leaf_param_json(&p, param_start, param_end, &members)) { |
| 4770 | buf_free(&members); |
| 4771 | return false; |
| 4772 | } |
| 4773 | any = true; |
| 4774 | } |
| 4775 | |
| 4776 | if (!any) { |
| 4777 | buf_free(&members); |
| 4778 | return false; |
| 4779 | } |
| 4780 | buf_putc(out, '{'); |
| 4781 | buf_puts(out, members.ptr ? members.ptr : ""); |
| 4782 | buf_putc(out, '}'); |
| 4783 | buf_free(&members); |
| 4784 | *p_in = p; |
| 4785 | return true; |
| 4786 | } |
| 4787 | |
| 4788 | static void split_reasoning_content(const char *text, size_t n, char **content_out, char **reasoning_out) { |
| 4789 | char *s = xstrndup(text ? text : "", n); |
no test coverage detected