@copilotkit/react-core 0.25.0-function-calling-fixes.2 → 0.25.0-mme-cloud.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.turbo/turbo-build.log +216 -234
  2. package/CHANGELOG.md +6 -17
  3. package/dist/{chunk-3WKJ25L3.mjs → chunk-CGT3AVYT.mjs} +3 -3
  4. package/dist/chunk-CGT3AVYT.mjs.map +1 -0
  5. package/dist/{chunk-H3FQWB4B.mjs → chunk-DFCYHW6B.mjs} +29 -13
  6. package/dist/chunk-DFCYHW6B.mjs.map +1 -0
  7. package/dist/{chunk-FCEPEM4B.mjs → chunk-GUQTL3VG.mjs} +3 -3
  8. package/dist/{chunk-GVLCTSXW.mjs → chunk-ICZAFR7J.mjs} +11 -7
  9. package/dist/chunk-ICZAFR7J.mjs.map +1 -0
  10. package/dist/{chunk-QGRMN7L3.mjs → chunk-MBLTLCOG.mjs} +3 -3
  11. package/dist/{chunk-AEUR5JBT.mjs → chunk-MESZST5T.mjs} +8 -6
  12. package/dist/chunk-MESZST5T.mjs.map +1 -0
  13. package/dist/{chunk-KJQZ2VEU.mjs → chunk-Q6YXCGNM.mjs} +2 -2
  14. package/dist/{chunk-H6V2C2AN.mjs → chunk-R3D5GIQT.mjs} +2 -2
  15. package/dist/{chunk-75RLNHDB.mjs → chunk-WHODFSGA.mjs} +5 -5
  16. package/dist/chunk-WHODFSGA.mjs.map +1 -0
  17. package/dist/{chunk-KIKHLN4X.mjs → chunk-XUCMY57N.mjs} +3 -1
  18. package/dist/chunk-XUCMY57N.mjs.map +1 -0
  19. package/dist/{chunk-BGB5G33N.mjs → chunk-YMX4OOEL.mjs} +2 -2
  20. package/dist/components/copilot-provider/copilotkit-props.d.ts +13 -1
  21. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  22. package/dist/components/copilot-provider/copilotkit.d.ts +0 -17
  23. package/dist/components/copilot-provider/copilotkit.js +25 -17
  24. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  25. package/dist/components/copilot-provider/copilotkit.mjs +8 -435
  26. package/dist/components/copilot-provider/copilotkit.mjs.map +1 -1
  27. package/dist/components/copilot-provider/index.js +25 -17
  28. package/dist/components/copilot-provider/index.js.map +1 -1
  29. package/dist/components/copilot-provider/index.mjs +9 -435
  30. package/dist/components/copilot-provider/index.mjs.map +1 -1
  31. package/dist/components/index.js +25 -17
  32. package/dist/components/index.js.map +1 -1
  33. package/dist/components/index.mjs +10 -435
  34. package/dist/components/index.mjs.map +1 -1
  35. package/dist/context/copilot-context.d.ts +18 -2
  36. package/dist/context/copilot-context.js +2 -0
  37. package/dist/context/copilot-context.js.map +1 -1
  38. package/dist/context/copilot-context.mjs +5 -64
  39. package/dist/context/copilot-context.mjs.map +1 -1
  40. package/dist/context/index.js +2 -0
  41. package/dist/context/index.js.map +1 -1
  42. package/dist/context/index.mjs +6 -64
  43. package/dist/context/index.mjs.map +1 -1
  44. package/dist/hooks/index.js +17 -15
  45. package/dist/hooks/index.js.map +1 -1
  46. package/dist/hooks/index.mjs +23 -518
  47. package/dist/hooks/index.mjs.map +1 -1
  48. package/dist/hooks/use-chat.d.ts +8 -2
  49. package/dist/hooks/use-chat.js +6 -5
  50. package/dist/hooks/use-chat.js.map +1 -1
  51. package/dist/hooks/use-chat.mjs +4 -285
  52. package/dist/hooks/use-chat.mjs.map +1 -1
  53. package/dist/hooks/use-copilot-action.d.ts +1 -1
  54. package/dist/hooks/use-copilot-action.js +4 -9
  55. package/dist/hooks/use-copilot-action.js.map +1 -1
  56. package/dist/hooks/use-copilot-action.mjs +5 -107
  57. package/dist/hooks/use-copilot-action.mjs.map +1 -1
  58. package/dist/hooks/use-copilot-chat.js +15 -8
  59. package/dist/hooks/use-copilot-chat.js.map +1 -1
  60. package/dist/hooks/use-copilot-chat.mjs +12 -420
  61. package/dist/hooks/use-copilot-chat.mjs.map +1 -1
  62. package/dist/hooks/use-flat-category-store.mjs +4 -65
  63. package/dist/hooks/use-flat-category-store.mjs.map +1 -1
  64. package/dist/hooks/use-make-copilot-actionable.js +2 -0
  65. package/dist/hooks/use-make-copilot-actionable.js.map +1 -1
  66. package/dist/hooks/use-make-copilot-actionable.mjs +5 -88
  67. package/dist/hooks/use-make-copilot-actionable.mjs.map +1 -1
  68. package/dist/hooks/use-make-copilot-document-readable.js +2 -0
  69. package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
  70. package/dist/hooks/use-make-copilot-document-readable.mjs +5 -78
  71. package/dist/hooks/use-make-copilot-document-readable.mjs.map +1 -1
  72. package/dist/hooks/use-make-copilot-readable.js +2 -0
  73. package/dist/hooks/use-make-copilot-readable.js.map +1 -1
  74. package/dist/hooks/use-make-copilot-readable.mjs +5 -78
  75. package/dist/hooks/use-make-copilot-readable.mjs.map +1 -1
  76. package/dist/hooks/use-tree.mjs +4 -150
  77. package/dist/hooks/use-tree.mjs.map +1 -1
  78. package/dist/index.js +40 -32
  79. package/dist/index.js.map +1 -1
  80. package/dist/index.mjs +48 -1103
  81. package/dist/index.mjs.map +1 -1
  82. package/dist/lib/copilot-task.js +2 -2
  83. package/dist/lib/copilot-task.js.map +1 -1
  84. package/dist/lib/copilot-task.mjs +10 -192
  85. package/dist/lib/copilot-task.mjs.map +1 -1
  86. package/dist/lib/index.js +2 -2
  87. package/dist/lib/index.js.map +1 -1
  88. package/dist/lib/index.mjs +11 -192
  89. package/dist/lib/index.mjs.map +1 -1
  90. package/dist/openai-assistants/hooks/index.js +2 -0
  91. package/dist/openai-assistants/hooks/index.js.map +1 -1
  92. package/dist/openai-assistants/hooks/index.mjs +14 -228
  93. package/dist/openai-assistants/hooks/index.mjs.map +1 -1
  94. package/dist/openai-assistants/hooks/use-assistants.mjs +7 -45
  95. package/dist/openai-assistants/hooks/use-assistants.mjs.map +1 -1
  96. package/dist/openai-assistants/hooks/use-copilot-chat-v2.js +2 -0
  97. package/dist/openai-assistants/hooks/use-copilot-chat-v2.js.map +1 -1
  98. package/dist/openai-assistants/hooks/use-copilot-chat-v2.mjs +14 -228
  99. package/dist/openai-assistants/hooks/use-copilot-chat-v2.mjs.map +1 -1
  100. package/dist/openai-assistants/index.js +2 -0
  101. package/dist/openai-assistants/index.js.map +1 -1
  102. package/dist/openai-assistants/index.mjs +17 -228
  103. package/dist/openai-assistants/index.mjs.map +1 -1
  104. package/dist/openai-assistants/utils/index.mjs +5 -43
  105. package/dist/openai-assistants/utils/index.mjs.map +1 -1
  106. package/dist/openai-assistants/utils/process-message-stream.mjs +4 -43
  107. package/dist/openai-assistants/utils/process-message-stream.mjs.map +1 -1
  108. package/dist/types/index.mjs +1 -0
  109. package/dist/utils/fetch-chat-completion.js +2 -2
  110. package/dist/utils/fetch-chat-completion.js.map +1 -1
  111. package/dist/utils/fetch-chat-completion.mjs +5 -112
  112. package/dist/utils/fetch-chat-completion.mjs.map +1 -1
  113. package/package.json +4 -4
  114. package/src/components/copilot-provider/copilotkit-props.tsx +15 -1
  115. package/src/components/copilot-provider/copilotkit.tsx +31 -25
  116. package/src/context/copilot-context.tsx +23 -1
  117. package/src/hooks/use-chat.ts +16 -5
  118. package/src/hooks/use-copilot-action.ts +58 -10
  119. package/src/hooks/use-copilot-chat.ts +5 -1
  120. package/src/utils/fetch-chat-completion.ts +1 -0
  121. package/dist/chunk-3WKJ25L3.mjs.map +0 -1
  122. package/dist/chunk-75RLNHDB.mjs.map +0 -1
  123. package/dist/chunk-AEUR5JBT.mjs.map +0 -1
  124. package/dist/chunk-F2JIAPZQ.mjs +0 -14
  125. package/dist/chunk-F2JIAPZQ.mjs.map +0 -1
  126. package/dist/chunk-GVLCTSXW.mjs.map +0 -1
  127. package/dist/chunk-H3FQWB4B.mjs.map +0 -1
  128. package/dist/chunk-ISKBWE4O.mjs +0 -13
  129. package/dist/chunk-ISKBWE4O.mjs.map +0 -1
  130. package/dist/chunk-KIKHLN4X.mjs.map +0 -1
  131. package/dist/components/copilot-provider/standard-copilot-api-config.d.ts +0 -23
  132. package/dist/components/copilot-provider/standard-copilot-api-config.js +0 -38
  133. package/dist/components/copilot-provider/standard-copilot-api-config.js.map +0 -1
  134. package/dist/components/copilot-provider/standard-copilot-api-config.mjs +0 -13
  135. package/dist/components/copilot-provider/standard-copilot-api-config.mjs.map +0 -1
  136. package/dist/hooks/use-copilot-action-implementation.d.ts +0 -7
  137. package/dist/hooks/use-copilot-action-implementation.js +0 -140
  138. package/dist/hooks/use-copilot-action-implementation.js.map +0 -1
  139. package/dist/hooks/use-copilot-action-implementation.mjs +0 -106
  140. package/dist/hooks/use-copilot-action-implementation.mjs.map +0 -1
  141. package/src/components/copilot-provider/standard-copilot-api-config.tsx +0 -28
  142. package/src/hooks/use-copilot-action-implementation.ts +0 -60
  143. /package/dist/{chunk-FCEPEM4B.mjs.map → chunk-GUQTL3VG.mjs.map} +0 -0
  144. /package/dist/{chunk-QGRMN7L3.mjs.map → chunk-MBLTLCOG.mjs.map} +0 -0
  145. /package/dist/{chunk-KJQZ2VEU.mjs.map → chunk-Q6YXCGNM.mjs.map} +0 -0
  146. /package/dist/{chunk-H6V2C2AN.mjs.map → chunk-R3D5GIQT.mjs.map} +0 -0
  147. /package/dist/{chunk-BGB5G33N.mjs.map → chunk-YMX4OOEL.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/hooks/use-copilot-action-implementation.ts","../../src/context/copilot-context.tsx"],"sourcesContent":["import { useRef, useContext, useEffect } from \"react\";\nimport { FrontendAction } from \"../types/frontend-action\";\nimport { CopilotContext } from \"../context/copilot-context\";\nimport { nanoid } from \"nanoid\";\n\n// We implement useCopilotActionImplementation dependency handling so that\n// the developer has the option to not provide any dependencies.\n// In this case, we assume they want to update the handler on each rerender.\n// To avoid getting stuck in an infinite loop, we update the handler directly,\n// skipping React state updates.\n// This is ok in this case, because the handler is not part of any UI that\n// needs to be updated.\n// useCallback, useMemo or other memoization techniques are not suitable here,\n// because they will cause a infinite rerender loop.\nexport function useCopilotActionImplementation<T extends Array<any> = []>(\n action: FrontendAction<T>,\n dependencies?: any[],\n): void {\n const { setEntryPoint, removeEntryPoint, entryPoints, chatComponentsCache } =\n useContext(CopilotContext);\n const idRef = useRef<string>(nanoid());\n\n // If the developer doesn't provide dependencies, we assume they want to\n // update handler and render function when the action object changes.\n // This ensures that any captured variables in the handler are up to date.\n if (dependencies === undefined) {\n if (entryPoints[idRef.current]) {\n entryPoints[idRef.current].handler = action.handler;\n if (typeof action.render === \"function\") {\n if (chatComponentsCache.current !== null) {\n chatComponentsCache.current[action.name] = action.render;\n }\n }\n }\n }\n\n useEffect(() => {\n setEntryPoint(idRef.current, action);\n if (chatComponentsCache.current !== null && action.render !== undefined) {\n chatComponentsCache.current[action.name] = action.render;\n }\n return () => {\n // NOTE: For now, we don't remove the chatComponentsCache entry when the action is removed.\n // This is because we currently don't have access to the messages array in CopilotContext.\n removeEntryPoint(idRef.current);\n };\n }, [\n setEntryPoint,\n removeEntryPoint,\n action.description,\n action.name,\n // This should be faster than deep equality checking\n // In addition, all major JS engines guarantee the order of object keys\n JSON.stringify(action.parameters),\n // include render only if it's a string\n typeof action.render === \"string\" ? action.render : undefined,\n // dependencies set by the developer\n ...(dependencies || []),\n ]);\n}\n","import { FunctionCallHandler, ToolDefinition } from \"@copilotkit/shared\";\nimport { ActionRenderProps, FrontendAction } from \"../types/frontend-action\";\nimport React, { Ref } from \"react\";\nimport { TreeNodeId } from \"../hooks/use-tree\";\nimport { DocumentPointer } from \"../types\";\n\n/**\n * Interface for the configuration of the Copilot API.\n */\nexport interface CopilotApiConfig {\n /**\n * The endpoint for the chat API.\n */\n chatApiEndpoint: string;\n\n /**\n * The endpoint for the chat API v2.\n */\n chatApiEndpointV2: string;\n\n /**\n * additional headers to be sent with the request\n * @default {}\n * @example\n * ```\n * {\n * 'Authorization': 'Bearer your_token_here'\n * }\n * ```\n */\n headers: Record<string, string>;\n\n /**\n * Additional body params to be sent with the request\n * @default {}\n * @example\n * ```\n * {\n * 'message': 'Hello, world!'\n * }\n * ```\n */\n body: Record<string, any>;\n\n /**\n * Backend only props that will be combined to body params to be sent with the request\n * @default {}\n * @example\n * ```\n * {\n * 'user_id': 'user_id'\n * }\n * ```\n */\n backendOnlyProps?: Record<string, any>;\n}\n\nexport type InChatRenderFunction = (props: ActionRenderProps<any>) => string | JSX.Element;\n\nexport interface CopilotContextParams {\n // function-calling\n entryPoints: Record<string, FrontendAction<any>>;\n setEntryPoint: (id: string, entryPoint: FrontendAction<any>) => void;\n removeEntryPoint: (id: string) => void;\n chatComponentsCache: React.RefObject<Record<string, InChatRenderFunction | string>>;\n getChatCompletionFunctionDescriptions: (\n customEntryPoints?: Record<string, FrontendAction<any>>,\n ) => ToolDefinition[];\n getFunctionCallHandler: (\n customEntryPoints?: Record<string, FrontendAction<any>>,\n ) => FunctionCallHandler;\n\n // text context\n addContext: (context: string, parentId?: string, categories?: string[]) => TreeNodeId;\n removeContext: (id: TreeNodeId) => void;\n getContextString: (documents: DocumentPointer[], categories: string[]) => string;\n\n // document context\n addDocumentContext: (documentPointer: DocumentPointer, categories?: string[]) => TreeNodeId;\n removeDocumentContext: (documentId: string) => void;\n getDocumentsContext: (categories: string[]) => DocumentPointer[];\n\n // api endpoints\n copilotApiConfig: CopilotApiConfig;\n}\n\nconst emptyCopilotContext: CopilotContextParams = {\n entryPoints: {},\n setEntryPoint: () => {},\n removeEntryPoint: () => {},\n getChatCompletionFunctionDescriptions: () => returnAndThrowInDebug([]),\n getFunctionCallHandler: () => returnAndThrowInDebug(async () => {}),\n chatComponentsCache: { current: {} },\n getContextString: (documents: DocumentPointer[], categories: string[]) =>\n returnAndThrowInDebug(\"\"),\n addContext: () => \"\",\n removeContext: () => {},\n\n getDocumentsContext: (categories: string[]) => returnAndThrowInDebug([]),\n addDocumentContext: () => returnAndThrowInDebug(\"\"),\n removeDocumentContext: () => {},\n\n copilotApiConfig: new (class implements CopilotApiConfig {\n get chatApiEndpoint(): string {\n throw new Error(\"Remember to wrap your app in a `<CopilotKit> {...} </CopilotKit>` !!!\");\n }\n get chatApiEndpointV2(): string {\n throw new Error(\"Remember to wrap your app in a `<CopilotKit> {...} </CopilotKit>` !!!\");\n }\n get headers(): Record<string, string> {\n return {};\n }\n get body(): Record<string, any> {\n return {};\n }\n })(),\n};\n\nexport const CopilotContext = React.createContext<CopilotContextParams>(emptyCopilotContext);\n\nexport function useCopilotContext(): CopilotContextParams {\n return React.useContext(CopilotContext);\n}\n\nfunction returnAndThrowInDebug<T>(value: T): T {\n throw new Error(\"Remember to wrap your app in a `<CopilotKit> {...} </CopilotKit>` !!!\");\n return value;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,QAAQ,YAAY,iBAAiB;;;ACE9C,OAAO,WAAoB;AAoF3B,IAAM,sBAA4C;AAAA,EAChD,aAAa,CAAC;AAAA,EACd,eAAe,MAAM;AAAA,EAAC;AAAA,EACtB,kBAAkB,MAAM;AAAA,EAAC;AAAA,EACzB,uCAAuC,MAAM,sBAAsB,CAAC,CAAC;AAAA,EACrE,wBAAwB,MAAM,sBAAsB,MAAY;AAAA,EAAC,EAAC;AAAA,EAClE,qBAAqB,EAAE,SAAS,CAAC,EAAE;AAAA,EACnC,kBAAkB,CAAC,WAA8B,eAC/C,sBAAsB,EAAE;AAAA,EAC1B,YAAY,MAAM;AAAA,EAClB,eAAe,MAAM;AAAA,EAAC;AAAA,EAEtB,qBAAqB,CAAC,eAAyB,sBAAsB,CAAC,CAAC;AAAA,EACvE,oBAAoB,MAAM,sBAAsB,EAAE;AAAA,EAClD,uBAAuB,MAAM;AAAA,EAAC;AAAA,EAE9B,kBAAkB,IAAK,MAAkC;AAAA,IACvD,IAAI,kBAA0B;AAC5B,YAAM,IAAI,MAAM,uEAAuE;AAAA,IACzF;AAAA,IACA,IAAI,oBAA4B;AAC9B,YAAM,IAAI,MAAM,uEAAuE;AAAA,IACzF;AAAA,IACA,IAAI,UAAkC;AACpC,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,OAA4B;AAC9B,aAAO,CAAC;AAAA,IACV;AAAA,EACF,EAAG;AACL;AAEO,IAAM,iBAAiB,MAAM,cAAoC,mBAAmB;AAM3F,SAAS,sBAAyB,OAAa;AAC7C,QAAM,IAAI,MAAM,uEAAuE;AACvF,SAAO;AACT;;;AD5HA,SAAS,cAAc;AAWhB,SAAS,+BACd,QACA,cACM;AACN,QAAM,EAAE,eAAe,kBAAkB,aAAa,oBAAoB,IACxE,WAAW,cAAc;AAC3B,QAAM,QAAQ,OAAe,OAAO,CAAC;AAKrC,MAAI,iBAAiB,QAAW;AAC9B,QAAI,YAAY,MAAM,OAAO,GAAG;AAC9B,kBAAY,MAAM,OAAO,EAAE,UAAU,OAAO;AAC5C,UAAI,OAAO,OAAO,WAAW,YAAY;AACvC,YAAI,oBAAoB,YAAY,MAAM;AACxC,8BAAoB,QAAQ,OAAO,IAAI,IAAI,OAAO;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,YAAU,MAAM;AACd,kBAAc,MAAM,SAAS,MAAM;AACnC,QAAI,oBAAoB,YAAY,QAAQ,OAAO,WAAW,QAAW;AACvE,0BAAoB,QAAQ,OAAO,IAAI,IAAI,OAAO;AAAA,IACpD;AACA,WAAO,MAAM;AAGX,uBAAiB,MAAM,OAAO;AAAA,IAChC;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA;AAAA;AAAA,IAGP,KAAK,UAAU,OAAO,UAAU;AAAA;AAAA,IAEhC,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA;AAAA,IAEpD,GAAI,gBAAgB,CAAC;AAAA,EACvB,CAAC;AACH;","names":[]}
@@ -1,28 +0,0 @@
1
- import { CopilotApiConfig } from "../../context/copilot-context";
2
-
3
- /**
4
- * A standard implementation of the CopilotApiConfig interface.
5
- *
6
- * Pass in the base URL of the chat API, the headers to be sent with each request, and the body to be sent with each request.
7
- * The rest of the CopilotApiConfig interface is implemented by default.
8
- *
9
- */
10
-
11
- export class StandardCopilotApiConfig implements CopilotApiConfig {
12
- chatApiEndpoint: string;
13
- chatApiEndpointV2: string;
14
- headers: Record<string, string>;
15
- body: Record<string, any>;
16
-
17
- constructor(
18
- chatApiEndpoint: string,
19
- chatApiEndpointV2: string,
20
- headers: Record<string, string>,
21
- body: Record<string, any>,
22
- ) {
23
- this.chatApiEndpoint = chatApiEndpoint;
24
- this.chatApiEndpointV2 = chatApiEndpointV2;
25
- this.headers = headers;
26
- this.body = body;
27
- }
28
- }
@@ -1,60 +0,0 @@
1
- import { useRef, useContext, useEffect } from "react";
2
- import { FrontendAction } from "../types/frontend-action";
3
- import { CopilotContext } from "../context/copilot-context";
4
- import { nanoid } from "nanoid";
5
-
6
- // We implement useCopilotActionImplementation dependency handling so that
7
- // the developer has the option to not provide any dependencies.
8
- // In this case, we assume they want to update the handler on each rerender.
9
- // To avoid getting stuck in an infinite loop, we update the handler directly,
10
- // skipping React state updates.
11
- // This is ok in this case, because the handler is not part of any UI that
12
- // needs to be updated.
13
- // useCallback, useMemo or other memoization techniques are not suitable here,
14
- // because they will cause a infinite rerender loop.
15
- export function useCopilotActionImplementation<T extends Array<any> = []>(
16
- action: FrontendAction<T>,
17
- dependencies?: any[],
18
- ): void {
19
- const { setEntryPoint, removeEntryPoint, entryPoints, chatComponentsCache } =
20
- useContext(CopilotContext);
21
- const idRef = useRef<string>(nanoid());
22
-
23
- // If the developer doesn't provide dependencies, we assume they want to
24
- // update handler and render function when the action object changes.
25
- // This ensures that any captured variables in the handler are up to date.
26
- if (dependencies === undefined) {
27
- if (entryPoints[idRef.current]) {
28
- entryPoints[idRef.current].handler = action.handler;
29
- if (typeof action.render === "function") {
30
- if (chatComponentsCache.current !== null) {
31
- chatComponentsCache.current[action.name] = action.render;
32
- }
33
- }
34
- }
35
- }
36
-
37
- useEffect(() => {
38
- setEntryPoint(idRef.current, action);
39
- if (chatComponentsCache.current !== null && action.render !== undefined) {
40
- chatComponentsCache.current[action.name] = action.render;
41
- }
42
- return () => {
43
- // NOTE: For now, we don't remove the chatComponentsCache entry when the action is removed.
44
- // This is because we currently don't have access to the messages array in CopilotContext.
45
- removeEntryPoint(idRef.current);
46
- };
47
- }, [
48
- setEntryPoint,
49
- removeEntryPoint,
50
- action.description,
51
- action.name,
52
- // This should be faster than deep equality checking
53
- // In addition, all major JS engines guarantee the order of object keys
54
- JSON.stringify(action.parameters),
55
- // include render only if it's a string
56
- typeof action.render === "string" ? action.render : undefined,
57
- // dependencies set by the developer
58
- ...(dependencies || []),
59
- ]);
60
- }