| 48 | * Fetches the message history for a given session. |
| 49 | */ |
| 50 | export function useSessionHistory(sessionId: string) { |
| 51 | return useQuery({ |
| 52 | queryKey: ["sessions", sessionId, "history"], |
| 53 | queryFn: () => |
| 54 | api.sessions[":id"].history |
| 55 | .$get({ param: { id: sessionId } }) |
| 56 | .then(async (res) => { |
| 57 | const { messages } = (await res.json()) as { messages: Message[] }; |
| 58 | const groupedMessages: Message[][] = []; |
| 59 | for (const message of messages) { |
| 60 | if (message.role === "user") { |
| 61 | groupedMessages.push([message]); |
| 62 | } else { |
| 63 | groupedMessages[groupedMessages.length - 1].push(message); |
| 64 | } |
| 65 | } |
| 66 | const groups: { |
| 67 | inbound: UserMessage; |
| 68 | steps: (AssistantMessage | ToolMessage)[]; |
| 69 | outbound?: AssistantMessage; |
| 70 | }[] = []; |
| 71 | for (const message of groupedMessages) { |
| 72 | const lastMessage = message[message.length - 1]; |
| 73 | groups.push({ |
| 74 | inbound: message[0] as UserMessage, |
| 75 | steps: message.slice(1) as (AssistantMessage | ToolMessage)[], |
| 76 | outbound: |
| 77 | lastMessage.role === "assistant" |
| 78 | ? (lastMessage as AssistantMessage | undefined) |
| 79 | : undefined, |
| 80 | }); |
| 81 | } |
| 82 | return { messages, groups }; |
| 83 | }), |
| 84 | enabled: !!sessionId, |
| 85 | }); |
| 86 | } |
| 87 | |
| 88 | /** |
| 89 | * Fetches all current tasks. |