| import type { TMessage } from 'librechat-data-provider'; |
| import { EModelEndpoint, isAssistantsEndpoint } from 'librechat-data-provider'; |
|
|
| type TUseGenerations = { |
| endpoint?: string; |
| message: TMessage; |
| isSubmitting: boolean; |
| isEditing?: boolean; |
| latestMessage: TMessage | null; |
| }; |
|
|
| export default function useGenerationsByLatest({ |
| endpoint, |
| message, |
| isSubmitting, |
| isEditing = false, |
| latestMessage, |
| }: TUseGenerations) { |
| const { error, messageId, searchResult, finish_reason, isCreatedByUser } = message ?? {}; |
| const isEditableEndpoint = !![ |
| EModelEndpoint.openAI, |
| EModelEndpoint.custom, |
| EModelEndpoint.google, |
| EModelEndpoint.anthropic, |
| EModelEndpoint.gptPlugins, |
| EModelEndpoint.azureOpenAI, |
| ].find((e) => e === endpoint); |
|
|
| const continueSupported = |
| latestMessage?.messageId === messageId && |
| finish_reason && |
| finish_reason !== 'stop' && |
| !isEditing && |
| !searchResult && |
| isEditableEndpoint; |
|
|
| const branchingSupported = |
| |
| !![ |
| EModelEndpoint.azureOpenAI, |
| EModelEndpoint.openAI, |
| EModelEndpoint.custom, |
| EModelEndpoint.chatGPTBrowser, |
| EModelEndpoint.google, |
| EModelEndpoint.bingAI, |
| EModelEndpoint.gptPlugins, |
| EModelEndpoint.anthropic, |
| ].find((e) => e === endpoint); |
|
|
| const regenerateEnabled = |
| !isCreatedByUser && !searchResult && !isEditing && !isSubmitting && branchingSupported; |
|
|
| const hideEditButton = |
| isSubmitting || |
| error || |
| searchResult || |
| !branchingSupported || |
| (!isEditableEndpoint && !isCreatedByUser); |
|
|
| const forkingSupported = !isAssistantsEndpoint(endpoint) && !searchResult; |
|
|
| return { |
| forkingSupported, |
| continueSupported, |
| regenerateEnabled, |
| isEditableEndpoint, |
| hideEditButton, |
| }; |
| } |
|
|