Files
tkmind_go/ui/desktop/src/utils/toolCallChaining.ts
T
Douwe Osinga f8faf9620a Native images (#6619)
Co-authored-by: Douwe Osinga <douwe@squareup.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-22 18:53:57 -05:00

63 lines
1.7 KiB
TypeScript

import { getToolRequests, getTextAndImageContent, getToolResponses } from '../types/message';
import { Message } from '../api';
export function identifyConsecutiveToolCalls(messages: Message[]): number[][] {
const chains: number[][] = [];
let currentChain: number[] = [];
for (let i = 0; i < messages.length; i++) {
const message = messages[i];
const toolRequests = getToolRequests(message);
const toolResponses = getToolResponses(message);
const { textContent } = getTextAndImageContent(message);
const hasText = textContent.trim().length > 0;
if (toolResponses.length > 0 && toolRequests.length === 0) {
continue;
}
if (toolRequests.length > 0) {
if (hasText) {
if (currentChain.length > 0) {
if (currentChain.length > 1) {
chains.push([...currentChain]);
}
}
currentChain = [i];
} else {
currentChain.push(i);
}
} else if (hasText) {
if (currentChain.length > 1) {
chains.push([...currentChain]);
}
currentChain = [];
} else {
if (currentChain.length > 1) {
chains.push([...currentChain]);
}
currentChain = [];
}
}
if (currentChain.length > 1) {
chains.push(currentChain);
}
return chains;
}
export function shouldHideTimestamp(messageIndex: number, chains: number[][]): boolean {
for (const chain of chains) {
if (chain.includes(messageIndex)) {
// Hide timestamp for all but the last message in the chain
return chain[chain.length - 1] !== messageIndex;
}
}
return false;
}
export function isInChain(messageIndex: number, chains: number[][]): boolean {
return chains.some((chain) => chain.includes(messageIndex));
}