Awaiting Response
  Awaiting Response
Overview
After sending messages, a period of time passes before the assistant’s response begins to appear. During this interval, the Chat UI displays a status message. By default, the Chat UI always shows “Thinking…”, but you can set your own text and change it if the response time is prolonged.
Usage
Chat UI offers two ways to use it: the onUserMessageSent function parameter (see the Messaging section for more details) and the API Reference.
Usage inside onUserMessageSent:
const onUserMessageSent = React.useCallback(async (params: MessageStreamingParams) => {
  ...
  params.setStatus('New status');
  ...
}, []);Usage with API reference:
const apiRef = useChatApiRef();
const updateStatus = React.useCallback(() => {
  apiRef.current.thread.setProgressStatus('New status');
}, []);
  
return (
  <ChatPage
    apiRef={apiRef}
    ...
   />
);
}, []);Example
Collapse code
    Expand code
  const onUserMessageSent = React.useCallback(async (params: MessageStreamingParams) => {
  await awaitSeconds(2);
  params.setStatus('We\'ve been waiting for 2 seconds already.');
  await awaitSeconds(3);
  params.setStatus('And another 3 seconds.');
  await awaitSeconds(3);
  params.setStatus('We\'re almost finished.');
  await awaitSeconds(3);
  params.setStatus('Done');
  await awaitSeconds(1);
  params.setText('This was an example of waiting statuses for the assistant\'s response.');
  params.onFinish();
}, []);import * as React from "react";
import {
  ChatPage,
  Thread, MessageStreamingParams,
} from "@plteam/chat-ui";
import Box from "@mui/material/Box";
const awaitSeconds = (seconds: number) => new Promise(resolve => setTimeout(resolve, seconds * 1000));
const App: React.FC = () => {
  const [threads] = React.useState<Thread[]>([
    {
      id: "test-thread",
      title: "Welcome message",
      messages: [
        {
          role: "user",
          content: "Hello!",
        },
        {
          role: "assistant",
          content: "Hello there! How can I assist you today?",
        },
      ],
    },
  ]);
  const onUserMessageSent = React.useCallback(async (params: MessageStreamingParams) => {
    await awaitSeconds(2);
    params.setStatus('We\'ve been waiting for 2 seconds already.');
    await awaitSeconds(3);
    params.setStatus('And another 3 seconds.');
    await awaitSeconds(3);
    params.setStatus('We\'re almost finished.');
    await awaitSeconds(3);
    params.setStatus('Done');
    await awaitSeconds(1);
    params.setText('This was an example of waiting statuses for the assistant\'s response.');
    params.onFinish();
  }, []);
  return (
    <Box height={"100dvh"} width={"100dvw"}>
      <ChatPage
        thread={threads[0]}
        threads={threads}
        onUserMessageSent={onUserMessageSent}
        defaultTextFieldValue={'Test'}
      />
    </Box>
  );
}
export default App;