From 3c40348fb4d1e9e9493d6728cefe837819a7a30c Mon Sep 17 00:00:00 2001 From: krut_ni Date: Mon, 30 Jun 2025 15:20:06 +0200 Subject: [PATCH] changed image and slide number context to use the guid to identify the right stream in case of parallel processing --- .../Tools/ContentStreamSseHandler.cs | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/app/MindWork AI Studio/Tools/ContentStreamSseHandler.cs b/app/MindWork AI Studio/Tools/ContentStreamSseHandler.cs index 6d23f5f3..a85b7802 100644 --- a/app/MindWork AI Studio/Tools/ContentStreamSseHandler.cs +++ b/app/MindWork AI Studio/Tools/ContentStreamSseHandler.cs @@ -6,7 +6,7 @@ namespace AIStudio.Tools; public static class ContentStreamSseHandler { private static readonly ConcurrentDictionary> PPTX_IMAGES = new(); - private static int CURRENT_SLIDE_NUMBER; + private static readonly ConcurrentDictionary CURRENT_SLIDE_NUMBERS = new(); public static string ProcessEvent(ContentStreamSseEvent? sseEvent, bool extractImages = true) { @@ -40,21 +40,26 @@ public static class ContentStreamSseHandler var slideNumber = presentationMetadata.Presentation?.SlideNumber ?? 0; var image = presentationMetadata.Presentation?.Image ?? null; var presentationResult = new StringBuilder(); - if (slideNumber != CURRENT_SLIDE_NUMBER) + var streamId = sseEvent.StreamId; + + CURRENT_SLIDE_NUMBERS.TryGetValue(streamId!, out var currentSlideNumber); + + if (slideNumber != currentSlideNumber) presentationResult.AppendLine($"# Slide {slideNumber}"); - + presentationResult.Append($"{sseEvent.Content}"); if (image is not null) { - var isEnd = ProcessImageSegment(image); + var imageId = $"{streamId}-{image.Id!}"; + var isEnd = ProcessImageSegment(imageId, image); if (isEnd && extractImages) - presentationResult.AppendLine(BuildImage(image.Id!)); + presentationResult.AppendLine(BuildImage(imageId)); } - - CURRENT_SLIDE_NUMBER = slideNumber; - return presentationResult.ToString(); + CURRENT_SLIDE_NUMBERS[streamId!] = slideNumber; + + return presentationResult.ToString(); default: return sseEvent.Content; } @@ -67,26 +72,25 @@ public static class ContentStreamSseHandler } } - private static bool ProcessImageSegment(ContentStreamPptxImageData contentStreamPptxImageData) + private static bool ProcessImageSegment(string imageId, ContentStreamPptxImageData contentStreamPptxImageData) { - if (string.IsNullOrWhiteSpace(contentStreamPptxImageData.Id)) + if (string.IsNullOrWhiteSpace(contentStreamPptxImageData.Id) || string.IsNullOrWhiteSpace(imageId)) return false; - var id = contentStreamPptxImageData.Id; var segment = contentStreamPptxImageData.Segment ?? 0; var content = contentStreamPptxImageData.Content ?? string.Empty; var isEnd = contentStreamPptxImageData.IsEnd; var imageSegment = new ContentStreamPptxImageData { - Id = id, + Id = imageId, Content = content, Segment = segment, IsEnd = isEnd, }; PPTX_IMAGES.AddOrUpdate( - id, + imageId, _ => [imageSegment], (_, existingList) => {