You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

use-chat-logic.ts 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { MessageType } from '@/constants/chat';
  2. import { Message } from '@/interfaces/database/chat';
  3. import { IMessage } from '@/pages/chat/interface';
  4. import { get } from 'lodash';
  5. import { useCallback, useMemo } from 'react';
  6. import { BeginQuery } from '../interface';
  7. import { buildBeginQueryWithObject } from '../utils';
  8. type IAwaitCompentData = {
  9. derivedMessages: IMessage[];
  10. sendFormMessage: (params: {
  11. inputs: Record<string, BeginQuery>;
  12. id: string;
  13. }) => void;
  14. canvasId: string;
  15. };
  16. const useAwaitCompentData = (props: IAwaitCompentData) => {
  17. const { derivedMessages, sendFormMessage, canvasId } = props;
  18. const getInputs = useCallback((message: Message) => {
  19. return get(message, 'data.inputs', {}) as Record<string, BeginQuery>;
  20. }, []);
  21. const buildInputList = useCallback(
  22. (message: Message) => {
  23. return Object.entries(getInputs(message)).map(([key, val]) => {
  24. return {
  25. ...val,
  26. key,
  27. };
  28. });
  29. },
  30. [getInputs],
  31. );
  32. const handleOk = useCallback(
  33. (message: Message) => (values: BeginQuery[]) => {
  34. const inputs = getInputs(message);
  35. const nextInputs = buildBeginQueryWithObject(inputs, values);
  36. sendFormMessage({
  37. inputs: nextInputs,
  38. id: canvasId,
  39. });
  40. },
  41. [getInputs, sendFormMessage, canvasId],
  42. );
  43. const isWaitting = useMemo(() => {
  44. const temp = derivedMessages?.some((message, i) => {
  45. const flag =
  46. message.role === MessageType.Assistant &&
  47. derivedMessages.length - 1 === i &&
  48. message.data;
  49. return flag;
  50. });
  51. return temp;
  52. }, [derivedMessages]);
  53. return { getInputs, buildInputList, handleOk, isWaitting };
  54. };
  55. export { useAwaitCompentData };