mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-26 05:08:50 +01:00
fix: title generation queue management for assistants
- Introduced a queueListeners mechanism to notify changes in the title generation queue, improving responsiveness for non-resumable streams. - Updated the useTitleGeneration hook to track queue changes with a queueVersion state, ensuring accurate updates when jobs complete. - Refactored the queueTitleGeneration function to trigger listeners upon adding new conversation IDs, enhancing the overall title generation flow.
This commit is contained in:
parent
4b598808be
commit
460f60665f
1 changed files with 16 additions and 4 deletions
|
|
@ -38,15 +38,19 @@ export interface ActiveJobsResponse {
|
|||
activeJobIds: string[];
|
||||
}
|
||||
|
||||
// Module-level queue for title generation (survives re-renders)
|
||||
// Stores conversationIds that need title generation once their job completes
|
||||
/** Module-level queue for title generation (survives re-renders).
|
||||
* Stores conversationIds that need title generation once their job completes */
|
||||
const titleQueue = new Set<string>();
|
||||
const processedTitles = new Set<string>();
|
||||
|
||||
/** Listeners to notify when queue changes (for non-resumable streams like assistants) */
|
||||
const queueListeners = new Set<() => void>();
|
||||
|
||||
/** Queue a conversation for title generation (call when starting new conversation) */
|
||||
export function queueTitleGeneration(conversationId: string) {
|
||||
if (!processedTitles.has(conversationId)) {
|
||||
titleQueue.add(conversationId);
|
||||
queueListeners.forEach((listener) => listener());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -57,6 +61,7 @@ export function queueTitleGeneration(conversationId: string) {
|
|||
*/
|
||||
export function useTitleGeneration(enabled = true) {
|
||||
const queryClient = useQueryClient();
|
||||
const [queueVersion, setQueueVersion] = useState(0);
|
||||
const [readyToFetch, setReadyToFetch] = useState<string[]>([]);
|
||||
|
||||
const { data: activeJobsData } = useActiveJobs(enabled);
|
||||
|
|
@ -65,7 +70,14 @@ export function useTitleGeneration(enabled = true) {
|
|||
[activeJobsData?.activeJobIds],
|
||||
);
|
||||
|
||||
// Check queue for completed jobs and fetch titles immediately
|
||||
useEffect(() => {
|
||||
const listener = () => setQueueVersion((v) => v + 1);
|
||||
queueListeners.add(listener);
|
||||
return () => {
|
||||
queueListeners.delete(listener);
|
||||
};
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const activeSet = new Set(activeJobIds);
|
||||
const completedJobs: string[] = [];
|
||||
|
|
@ -79,7 +91,7 @@ export function useTitleGeneration(enabled = true) {
|
|||
if (completedJobs.length > 0) {
|
||||
setReadyToFetch((prev) => [...new Set([...prev, ...completedJobs])]);
|
||||
}
|
||||
}, [activeJobIds]);
|
||||
}, [activeJobIds, queueVersion]);
|
||||
|
||||
// Fetch titles for ready conversations
|
||||
const titleQueries = useQueries({
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue