Group tool calls in the result

927c2418e0159cd9c10c041bd0ec534189bd7369

Cohee <18619528+Cohee1207@users.noreply.github.com>

1 files changed, +16 -3Ignore whitespace
public/scripts/tool-calling.js+16 -3
@@ -158,7 +158,7 @@ class ToolDefinition {
158158 description: this.#description,
159159 parameters: this.#parameters,
160160 },
161161 toString: function () {
162162 return `<div><b>${this.function.name}</b></div><div><small>${this.function.description}</small></div><pre class="justifyLeft wordBreakAll"><code class="flex padding5">${JSON.stringify(this.function.parameters, null, 2)}</code></pre><hr>`;
163163 },
164164 };
@@ -581,6 +581,19 @@ export class ToolManager {
581581 }
582582
583583 /**
584+ * Groups tool names by count.
585+ * @param {string[]} toolNames Tool names
586+ * @returns {string} Grouped tool names
587+ */
588+ static #groupToolNames(toolNames) {
589+ const toolCounts = toolNames.reduce((acc, name) => {
590+ acc[name] = (acc[name] || 0) + 1;
591+ return acc;
592+ }, {});
593+ return Object.entries(toolCounts).map(([name, count]) => count > 1 ? `${name} (${count})` : name).join(', ');
594+ }
595+
596+ /**
584597 * Formats a message with tool invocations.
585598 * @param {ToolInvocation[]} invocations Tool invocations.
586599 * @returns {string} Formatted message with tool invocations.
@@ -597,8 +610,8 @@ export class ToolManager {
597610 i.result = tryParse(i.result);
598611 });
599612 codeElement.textContent = JSON.stringify(data, null, 2);
600613 const toolNames = data.map(i => i.displayName || i.name).join(', ');
601614 summaryElement.textContent = `Tool calls: ${this.#groupToolNames(toolNames)}`;
602615 preElement.append(codeElement);
603616 detailsElement.append(summaryElement, preElement);
604617 return detailsElement.outerHTML;