(parts: SBChatMessagePart[])
| 304 | |
| 305 | // Groups message parts into groups based on step-start delimiters. |
| 306 | export const groupMessageIntoSteps = (parts: SBChatMessagePart[]) => { |
| 307 | if (!parts || parts.length === 0) { |
| 308 | return []; |
| 309 | } |
| 310 | |
| 311 | const steps: SBChatMessagePart[][] = []; |
| 312 | let currentStep: SBChatMessagePart[] = []; |
| 313 | |
| 314 | for (let i = 0; i < parts.length; i++) { |
| 315 | const part = parts[i]; |
| 316 | |
| 317 | if (part.type === 'step-start') { |
| 318 | if (currentStep.length > 0) { |
| 319 | steps.push([...currentStep]); |
| 320 | } |
| 321 | currentStep = [part]; |
| 322 | } else { |
| 323 | currentStep.push(part); |
| 324 | } |
| 325 | } |
| 326 | |
| 327 | if (currentStep.length > 0) { |
| 328 | steps.push(currentStep); |
| 329 | } |
| 330 | |
| 331 | return steps; |
| 332 | } |
| 333 | |
| 334 | export const getLastStepParts = (parts: SBChatMessagePart[]): SBChatMessagePart[] => { |
| 335 | return groupMessageIntoSteps(parts).at(-1) ?? parts; |
no outgoing calls
no test coverage detected