mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-13 12:55:19 +00:00
43 lines
No EOL
1.4 KiB
TypeScript
43 lines
No EOL
1.4 KiB
TypeScript
'use client';
|
|
|
|
import { useMemo } from "react";
|
|
import { SBChatMessage } from "./types";
|
|
|
|
// Pairs user messages with the assistant's response.
|
|
export const useMessagePairs = (messages: SBChatMessage[]): [SBChatMessage, SBChatMessage | undefined][] => {
|
|
return useMemo(() => {
|
|
const result: [SBChatMessage, SBChatMessage | undefined][] = [];
|
|
let pendingUserMessage: SBChatMessage | null = null;
|
|
|
|
for (const message of messages) {
|
|
if (message.role === 'user') {
|
|
// case: we have a orphaned user message.
|
|
// Pair it with undefined.
|
|
if (pendingUserMessage) {
|
|
result.push([pendingUserMessage, undefined]);
|
|
}
|
|
|
|
pendingUserMessage = message;
|
|
} else if (message.role === 'assistant') {
|
|
|
|
// case: we have a user <> assistant message pair.
|
|
// Pair them.
|
|
if (pendingUserMessage) {
|
|
result.push([pendingUserMessage, message]);
|
|
pendingUserMessage = null;
|
|
}
|
|
|
|
// case: we have a orphaned assistant message.
|
|
// Ignore the orphaned assistant message.
|
|
}
|
|
}
|
|
|
|
// case: the last message is a user message.
|
|
// Pair it with undefined.
|
|
if (pendingUserMessage) {
|
|
result.push([pendingUserMessage, undefined]);
|
|
}
|
|
|
|
return result;
|
|
}, [messages]);
|
|
}; |