| import { dataService, QueryKeys, Tools } from 'librechat-data-provider'; | |
| import { useMutation, useQueryClient } from '@tanstack/react-query'; | |
| import type { UseMutationResult } from '@tanstack/react-query'; | |
| import type * as t from 'librechat-data-provider'; | |
| export const useToolCallMutation = <T extends t.ToolId>( | |
| toolId: T, | |
| options?: t.ToolCallMutationOptions<T>, | |
| ): UseMutationResult<t.ToolCallResponse, Error, t.ToolParams<T>> => { | |
| const queryClient = useQueryClient(); | |
| return useMutation( | |
| (toolParams: t.ToolParams<T>) => { | |
| return dataService.callTool({ | |
| toolId, | |
| toolParams, | |
| }); | |
| }, | |
| { | |
| onMutate: (variables) => options?.onMutate?.(variables), | |
| onError: (error, variables, context) => options?.onError?.(error, variables, context), | |
| onSuccess: (response, variables, context) => { | |
| queryClient.setQueryData<t.ToolCallResults>( | |
| [QueryKeys.toolCalls, variables.conversationId], | |
| (prev) => [ | |
| ...(prev ?? []), | |
| { | |
| user: '', | |
| toolId: Tools.execute_code, | |
| partIndex: variables.partIndex, | |
| messageId: variables.messageId, | |
| blockIndex: variables.blockIndex, | |
| conversationId: variables.conversationId, | |
| result: response.result, | |
| attachments: response.attachments, | |
| }, | |
| ], | |
| ); | |
| return options?.onSuccess?.(response, variables, context); | |
| }, | |
| }, | |
| ); | |
| }; | |