mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-25 12:48:53 +01:00
* feat: add filterFilesByEndpointConfig to filter disabled file processing by provider * chore: explicit define of endpointFileConfig for better debugging * refactor: move `normalizeEndpointName` to data-provider as used app-wide * chore: remove overrideEndpoint from useFileHandling * refactor: improve endpoint file config selection * refactor: update filterFilesByEndpointConfig to accept structured parameters and improve endpoint file config handling * refactor: replace defaultFileConfig with getEndpointFileConfig for improved file configuration handling across components * test: add comprehensive unit tests for getEndpointFileConfig to validate endpoint configuration handling * refactor: streamline agent endpoint assignment and improve file filtering logic * feat: add error handling for disabled file uploads in endpoint configuration * refactor: update encodeAndFormat functions to accept structured parameters for provider and endpoint * refactor: streamline requestFiles handling in initializeAgent function * fix: getEndpointFileConfig partial config merging scenarios * refactor: enhance mergeWithDefault function to support document-supported providers with comprehensive MIME types * refactor: user-configured default file config in getEndpointFileConfig * fix: prevent file handling when endpoint is disabled and file is dragged to chat * refactor: move `getEndpointField` to `data-provider` and update usage across components and hooks * fix: prioritize endpointType based on agent.endpoint in file filtering logic * fix: prioritize agent.endpoint in file filtering logic and remove unnecessary endpointType defaulting
47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import React, { createContext, useContext, useMemo } from 'react';
|
|
import { getEndpointField } from 'librechat-data-provider';
|
|
import type { EModelEndpoint } from 'librechat-data-provider';
|
|
import { useGetEndpointsQuery } from '~/data-provider';
|
|
import { useChatContext } from './ChatContext';
|
|
|
|
interface DragDropContextValue {
|
|
conversationId: string | null | undefined;
|
|
agentId: string | null | undefined;
|
|
endpoint: string | null | undefined;
|
|
endpointType?: EModelEndpoint | undefined;
|
|
}
|
|
|
|
const DragDropContext = createContext<DragDropContextValue | undefined>(undefined);
|
|
|
|
export function DragDropProvider({ children }: { children: React.ReactNode }) {
|
|
const { conversation } = useChatContext();
|
|
const { data: endpointsConfig } = useGetEndpointsQuery();
|
|
|
|
const endpointType = useMemo(() => {
|
|
return (
|
|
getEndpointField(endpointsConfig, conversation?.endpoint, 'type') ||
|
|
(conversation?.endpoint as EModelEndpoint | undefined)
|
|
);
|
|
}, [conversation?.endpoint, endpointsConfig]);
|
|
|
|
/** Context value only created when conversation fields change */
|
|
const contextValue = useMemo<DragDropContextValue>(
|
|
() => ({
|
|
conversationId: conversation?.conversationId,
|
|
agentId: conversation?.agent_id,
|
|
endpoint: conversation?.endpoint,
|
|
endpointType: endpointType,
|
|
}),
|
|
[conversation?.conversationId, conversation?.agent_id, conversation?.endpoint, endpointType],
|
|
);
|
|
|
|
return <DragDropContext.Provider value={contextValue}>{children}</DragDropContext.Provider>;
|
|
}
|
|
|
|
export function useDragDropContext() {
|
|
const context = useContext(DragDropContext);
|
|
if (!context) {
|
|
throw new Error('useDragDropContext must be used within DragDropProvider');
|
|
}
|
|
return context;
|
|
}
|