| import { excludedKeys } from 'librechat-data-provider'; |
| import { useGetModelsQuery } from 'librechat-data-provider/react-query'; |
| import type { |
| TEndpointsConfig, |
| TModelsConfig, |
| TConversation, |
| TPreset, |
| } from 'librechat-data-provider'; |
| import { getDefaultEndpoint, buildDefaultConvo } from '~/utils'; |
| import { useGetEndpointsQuery } from '~/data-provider'; |
|
|
| type TDefaultConvo = { |
| conversation: Partial<TConversation>; |
| preset?: Partial<TPreset> | null; |
| cleanInput?: boolean; |
| cleanOutput?: boolean; |
| }; |
|
|
| const exceptions = new Set(['spec', 'iconURL']); |
|
|
| const useDefaultConvo = () => { |
| const { data: endpointsConfig = {} as TEndpointsConfig } = useGetEndpointsQuery(); |
| const { data: modelsConfig = {} as TModelsConfig } = useGetModelsQuery(); |
|
|
| const getDefaultConversation = ({ |
| conversation: _convo, |
| preset, |
| cleanInput, |
| cleanOutput, |
| }: TDefaultConvo) => { |
| const endpoint = getDefaultEndpoint({ |
| convoSetup: preset as TPreset, |
| endpointsConfig, |
| }); |
|
|
| const models = modelsConfig[endpoint ?? ''] || []; |
| const conversation = { ..._convo }; |
| if (cleanInput === true) { |
| for (const key in conversation) { |
| if (excludedKeys.has(key) && !exceptions.has(key)) { |
| continue; |
| } |
| if (conversation[key] == null) { |
| continue; |
| } |
| conversation[key] = undefined; |
| } |
| } |
|
|
| const defaultConvo = buildDefaultConvo({ |
| conversation: conversation as TConversation, |
| endpoint, |
| lastConversationSetup: preset as TConversation, |
| models, |
| }); |
|
|
| if (!cleanOutput) { |
| return defaultConvo; |
| } |
|
|
| for (const key in defaultConvo) { |
| if (excludedKeys.has(key) && !exceptions.has(key)) { |
| continue; |
| } |
| if (defaultConvo[key] == null) { |
| continue; |
| } |
| defaultConvo[key] = undefined; |
| } |
|
|
| return defaultConvo; |
| }; |
|
|
| return getDefaultConversation; |
| }; |
|
|
| export default useDefaultConvo; |
|
|