mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-07-28 06:02:56 +00:00
Simplified & optimized ProcessEvent method
This commit is contained in:
parent
01f2176910
commit
27852e1165
@ -36,7 +36,7 @@ public sealed partial class RustService
|
|||||||
var sseEvent = JsonSerializer.Deserialize<SseEvent>(jsonContent);
|
var sseEvent = JsonSerializer.Deserialize<SseEvent>(jsonContent);
|
||||||
if (sseEvent is not null)
|
if (sseEvent is not null)
|
||||||
{
|
{
|
||||||
var content = await SseHandler.ProcessEventAsync(sseEvent, false);
|
var content = SseHandler.ProcessEvent(sseEvent, false);
|
||||||
resultBuilder.Append(content);
|
resultBuilder.Append(content);
|
||||||
chunkCount++;
|
chunkCount++;
|
||||||
}
|
}
|
||||||
|
@ -8,71 +8,63 @@ public static class SseHandler
|
|||||||
private static readonly ConcurrentDictionary<string, List<PptxImageData>> PPTX_IMAGES = new();
|
private static readonly ConcurrentDictionary<string, List<PptxImageData>> PPTX_IMAGES = new();
|
||||||
private static int CURRENT_SLIDE_NUMBER;
|
private static int CURRENT_SLIDE_NUMBER;
|
||||||
|
|
||||||
public static async Task<string> ProcessEventAsync(SseEvent? sseEvent, bool extractImages = true)
|
public static string ProcessEvent(SseEvent? sseEvent, bool extractImages = true)
|
||||||
{
|
{
|
||||||
var result = new StringBuilder();
|
switch (sseEvent)
|
||||||
|
|
||||||
if (sseEvent == null) { return result.ToString(); }
|
|
||||||
|
|
||||||
if (sseEvent is { Content: not null, Metadata: not null })
|
|
||||||
{
|
{
|
||||||
switch (sseEvent.Metadata)
|
case { Content: not null, Metadata: not null }:
|
||||||
{
|
switch (sseEvent.Metadata)
|
||||||
case TextMetadata:
|
{
|
||||||
result.AppendLine($"{sseEvent.Content}");
|
case TextMetadata:
|
||||||
break;
|
return $"{sseEvent.Content}";
|
||||||
|
|
||||||
case PdfMetadata pdfMetadata:
|
case PdfMetadata pdfMetadata:
|
||||||
var pageNumber = pdfMetadata.Pdf?.PageNumber ?? 0;
|
var pageNumber = pdfMetadata.Pdf?.PageNumber ?? 0;
|
||||||
result.AppendLine($"# Page {pageNumber}\n{sseEvent.Content}");
|
return $"# Page {pageNumber}\n{sseEvent.Content}";
|
||||||
break;
|
|
||||||
|
|
||||||
case SpreadsheetMetadata spreadsheetMetadata:
|
case SpreadsheetMetadata spreadsheetMetadata:
|
||||||
var sheetName = spreadsheetMetadata.Spreadsheet?.SheetName;
|
var sheetName = spreadsheetMetadata.Spreadsheet?.SheetName;
|
||||||
var rowNumber = spreadsheetMetadata.Spreadsheet?.RowNumber;
|
var rowNumber = spreadsheetMetadata.Spreadsheet?.RowNumber;
|
||||||
|
var spreadSheetResult = new StringBuilder();
|
||||||
|
if (rowNumber == 1)
|
||||||
|
spreadSheetResult.AppendLine($"\n# {sheetName}");
|
||||||
|
|
||||||
if (rowNumber == 1) { result.AppendLine($"\n# {sheetName}"); }
|
spreadSheetResult.AppendLine($"{sseEvent.Content}");
|
||||||
|
return spreadSheetResult.ToString();
|
||||||
|
|
||||||
result.AppendLine($"{sseEvent.Content}");
|
case DocumentMetadata:
|
||||||
break;
|
case ImageMetadata:
|
||||||
|
return $"{sseEvent.Content}";
|
||||||
|
|
||||||
case DocumentMetadata:
|
case PresentationMetadata presentationMetadata:
|
||||||
case ImageMetadata:
|
var slideNumber = presentationMetadata.Presentation?.SlideNumber ?? 0;
|
||||||
result.AppendLine($"{sseEvent.Content}");
|
var image = presentationMetadata.Presentation?.Image ?? null;
|
||||||
break;
|
var presentationResult = new StringBuilder();
|
||||||
|
if (slideNumber != CURRENT_SLIDE_NUMBER)
|
||||||
|
presentationResult.AppendLine($"# Slide {slideNumber}");
|
||||||
|
|
||||||
case PresentationMetadata presentationMetadata:
|
presentationResult.Append($"{sseEvent.Content}");
|
||||||
var slideNumber = presentationMetadata.Presentation?.SlideNumber ?? 0;
|
|
||||||
var image = presentationMetadata.Presentation?.Image ?? null;
|
|
||||||
|
|
||||||
if (slideNumber != CURRENT_SLIDE_NUMBER) { result.AppendLine($"# Slide {slideNumber}"); }
|
if (image is not null)
|
||||||
result.Append($"{sseEvent.Content}");
|
{
|
||||||
|
var isEnd = ProcessImageSegment(image);
|
||||||
|
if (isEnd && extractImages)
|
||||||
|
presentationResult.AppendLine(BuildImage(image.Id!));
|
||||||
|
}
|
||||||
|
|
||||||
if (image != null)
|
CURRENT_SLIDE_NUMBER = slideNumber;
|
||||||
{
|
return presentationResult.ToString();
|
||||||
var isEnd = ProcessImageSegment(image);
|
|
||||||
if (isEnd && extractImages) { result.AppendLine(BuildImage(image.Id!)); }
|
|
||||||
}
|
|
||||||
|
|
||||||
CURRENT_SLIDE_NUMBER = slideNumber;
|
default:
|
||||||
break;
|
return sseEvent.Content;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
case { Content: not null, Metadata: null }:
|
||||||
result.AppendLine(sseEvent.Content);
|
return sseEvent.Content;
|
||||||
break;
|
|
||||||
}
|
default:
|
||||||
|
return string.Empty;
|
||||||
}
|
}
|
||||||
else if (!string.IsNullOrEmpty(sseEvent.Content))
|
|
||||||
{
|
|
||||||
result.Append(sseEvent.Content);
|
|
||||||
}
|
|
||||||
else if (string.IsNullOrEmpty(sseEvent.Content))
|
|
||||||
{
|
|
||||||
result.Append(string.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
await Task.CompletedTask;
|
|
||||||
return result.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool ProcessImageSegment(PptxImageData pptxImageData)
|
private static bool ProcessImageSegment(PptxImageData pptxImageData)
|
||||||
@ -85,7 +77,7 @@ public static class SseHandler
|
|||||||
var content = pptxImageData.Content ?? string.Empty;
|
var content = pptxImageData.Content ?? string.Empty;
|
||||||
var isEnd = pptxImageData.IsEnd;
|
var isEnd = pptxImageData.IsEnd;
|
||||||
|
|
||||||
var imageSegment = new PptxImageData()
|
var imageSegment = new PptxImageData
|
||||||
{
|
{
|
||||||
Id = id,
|
Id = id,
|
||||||
Content = content,
|
Content = content,
|
||||||
|
Loading…
Reference in New Issue
Block a user