import { EModelEndpoint, isAssistantsEndpoint } from 'librechat-data-provider'; type TUseGenerations = { error?: boolean; endpoint?: string; messageId?: string; isEditing?: boolean; isSubmitting: boolean; searchResult?: boolean; finish_reason?: string; latestMessageId?: string; isCreatedByUser?: boolean; }; export default function useGenerationsByLatest({ error = false, endpoint, messageId, isEditing = false, isSubmitting, searchResult = false, finish_reason = '', latestMessageId, isCreatedByUser = false, }: TUseGenerations) { const isEditableEndpoint = Boolean( [ EModelEndpoint.openAI, EModelEndpoint.custom, EModelEndpoint.google, EModelEndpoint.agents, EModelEndpoint.bedrock, EModelEndpoint.anthropic, EModelEndpoint.gptPlugins, EModelEndpoint.azureOpenAI, ].find((e) => e === endpoint), ); const continueSupported = latestMessageId === messageId && finish_reason && finish_reason !== 'stop' && !isEditing && !searchResult && isEditableEndpoint; const branchingSupported = Boolean( [ EModelEndpoint.azureOpenAI, EModelEndpoint.openAI, EModelEndpoint.custom, EModelEndpoint.agents, EModelEndpoint.bedrock, EModelEndpoint.chatGPTBrowser, EModelEndpoint.google, 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, }; }