diff --git a/src/components/thread/index.tsx b/src/components/thread/index.tsx index 2a286ba..07743c3 100644 --- a/src/components/thread/index.tsx +++ b/src/components/thread/index.tsx @@ -5,7 +5,7 @@ import { useStreamContext } from "@/providers/Stream"; import { useState, FormEvent } from "react"; import { Input } from "../ui/input"; import { Button } from "../ui/button"; -import { Message } from "@langchain/langgraph-sdk"; +import { Checkpoint, Message } from "@langchain/langgraph-sdk"; import { AssistantMessage, AssistantMessageLoading } from "./messages/ai"; import { HumanMessage } from "./messages/human"; import { @@ -72,31 +72,37 @@ export function Thread() { content: input, }; + const toolMessages = ensureToolCallsHaveResponses(stream.messages); stream.submit( - { - messages: [ - ...ensureToolCallsHaveResponses(stream.messages), - newHumanMessage, - ], - }, - { - streamMode: ["values"], - }, + { messages: [...toolMessages, newHumanMessage] }, + { streamMode: ["values"] } ); setInput(""); }; + const handleRegenerate = ( + parentCheckpoint: Checkpoint | null | undefined + ) => { + // Do this so the loading state is correct + prevMessageLength.current = prevMessageLength.current - 1; + setFirstTokenReceived(false); + stream.submit(undefined, { + checkpoint: parentCheckpoint, + streamMode: ["values"], + }); + }; + const chatStarted = isLoading || messages.length > 0; const renderMessages = messages.filter( - (m) => !m.id?.startsWith(DO_NOT_RENDER_ID_PREFIX), + (m) => !m.id?.startsWith(DO_NOT_RENDER_ID_PREFIX) ); return (
@@ -115,23 +121,24 @@ export function Thread() {
{renderMessages.map((message, index) => message.type === "human" ? ( ) : ( - ), + ) )} {isLoading && !firstTokenReceived && }
@@ -140,7 +147,7 @@ export function Thread() {
+
diff --git a/src/components/thread/messages/human.tsx b/src/components/thread/messages/human.tsx index e20f405..3e9393b 100644 --- a/src/components/thread/messages/human.tsx +++ b/src/components/thread/messages/human.tsx @@ -49,17 +49,8 @@ export function HumanMessage({ const handleSubmitEdit = () => { setIsEditing(false); thread.submit( - { - messages: [ - { - ...message, - content: value, - }, - ], - }, - { - checkpoint: parentCheckpoint, - }, + { messages: [{ type: "human", content: value }] }, + { checkpoint: parentCheckpoint }, ); };