replaced strings with i18n fallbacks and finalized sse handling

This commit is contained in:
krut_ni 2025-06-24 20:08:27 +02:00
parent 32b43bbd04
commit 2c646aa2f0
6 changed files with 36 additions and 10 deletions

View File

@ -1648,6 +1648,18 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T918741365"] = "You can
-- Provider -- Provider
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provider" UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provider"
-- Images are not supported yet
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T298062956"] = "Images are not supported yet"
-- Use file content as input
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T3499386973"] = "Use file content as input"
-- Select file to read its content
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T354817589"] = "Select file to read its content"
-- Executables are not allowed
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T4167762413"] = "Executables are not allowed"
-- Use PDF content as input -- Use PDF content as input
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READPDFCONTENT::T2849276709"] = "Use PDF content as input" UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READPDFCONTENT::T2849276709"] = "Use PDF content as input"

View File

@ -1,4 +1,4 @@
@inherits MSGComponentBase @inherits MSGComponentBase
<MudButton StartIcon="@Icons.Material.Filled.Description" OnClick="async () => await this.SelectFile()" Variant="Variant.Filled" Class="mb-3"> <MudButton StartIcon="@Icons.Material.Filled.Description" OnClick="async () => await this.SelectFile()" Variant="Variant.Filled" Class="mb-3">
Use PDF content as input" @T("Use file content as input")
</MudButton> </MudButton>

View File

@ -18,7 +18,7 @@ public partial class ReadFileContent : MSGComponentBase
private async Task SelectFile() private async Task SelectFile()
{ {
var selectedFile = await this.RustService.SelectFile("Select Text file"); var selectedFile = await this.RustService.SelectFile(T("Select file to read its content"));
if (selectedFile.UserCancelled) if (selectedFile.UserCancelled)
return; return;
@ -29,13 +29,13 @@ public partial class ReadFileContent : MSGComponentBase
if (Array.Exists(FileTypeFilter.Executables.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) if (Array.Exists(FileTypeFilter.Executables.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase)))
{ {
await MessageBus.INSTANCE.SendError(new(@Icons.Material.Filled.AppBlocking, "Executables are not allowed")); await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.AppBlocking, T("Executables are not allowed")));
return; return;
} }
if (Array.Exists(FileTypeFilter.AllImages.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) if (Array.Exists(FileTypeFilter.AllImages.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase)))
{ {
await MessageBus.INSTANCE.SendWarning(new(@Icons.Material.Filled.ImageNotSupported, "Images are not supported yet")); await MessageBus.INSTANCE.SendWarning(new(Icons.Material.Filled.ImageNotSupported, T("Images are not supported yet")));
return; return;
} }

View File

@ -1650,6 +1650,12 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T918741365"] = "You can
-- Provider -- Provider
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provider" UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provider"
-- Use PDF content as input
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T2849276709"] = "Use PDF content as input"
-- Executables are not allowed
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T4167762413"] = "Executables are not allowed"
-- Use PDF content as input -- Use PDF content as input
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READPDFCONTENT::T2849276709"] = "Use PDF content as input" UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READPDFCONTENT::T2849276709"] = "Use PDF content as input"
@ -5481,6 +5487,9 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T304
-- AI-based data source selection with AI retrieval context validation -- AI-based data source selection with AI retrieval context validation
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3775725978"] = "AI-based data source selection with AI retrieval context validation" UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3775725978"] = "AI-based data source selection with AI retrieval context validation"
-- Executable Files
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2217313358"] = "Executable Files"
-- PDF Files -- PDF Files
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T3108466742"] = "PDF Files" UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T3108466742"] = "PDF Files"

View File

@ -53,7 +53,7 @@ public sealed partial class RustService
eventCount++; eventCount++;
} }
} }
catch (JsonException) { resultBuilder.AppendLine(); } catch (JsonException) { resultBuilder.Append(string.Empty); }
} }
var result = resultBuilder.ToString(); var result = resultBuilder.ToString();

View File

@ -7,6 +7,7 @@ namespace AIStudio.Tools;
public static class SseHandler 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;
public static async Task<string> ProcessEventAsync(SseEvent? sseEvent, bool extractImages = true) public static async Task<string> ProcessEventAsync(SseEvent? sseEvent, bool extractImages = true)
{ {
@ -25,14 +26,14 @@ public static class SseHandler
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}"); result.AppendLine($"# Page {pageNumber}\n{sseEvent.Content}");
break; 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;
if (rowNumber == 1) { result.AppendLine($"\n{sheetName}:"); } if (rowNumber == 1) { result.AppendLine($"\n# {sheetName}"); }
result.AppendLine($"{sseEvent.Content}"); result.AppendLine($"{sseEvent.Content}");
break; break;
@ -48,13 +49,17 @@ public static class SseHandler
case PresentationMetadata presentationMetadata: case PresentationMetadata presentationMetadata:
var slideNumber = presentationMetadata.Presentation?.SlideNumber ?? 0; var slideNumber = presentationMetadata.Presentation?.SlideNumber ?? 0;
var image = presentationMetadata.Presentation?.Image ?? null; var image = presentationMetadata.Presentation?.Image ?? null;
result.AppendLine($"{sseEvent.Content}");
if (slideNumber != CURRENT_SLIDE_NUMBER) { result.AppendLine($"# Slide {slideNumber}"); }
result.Append($"{sseEvent.Content}");
if (image != null) if (image != null)
{ {
var isEnd = ProcessImageSegment(image); var isEnd = ProcessImageSegment(image);
if (isEnd && extractImages) { result.AppendLine(BuildImage(image.Id!)); } if (isEnd && extractImages) { result.AppendLine(BuildImage(image.Id!)); }
} }
CURRENT_SLIDE_NUMBER = slideNumber;
break; break;
default: default:
@ -64,11 +69,11 @@ public static class SseHandler
} }
else if (!string.IsNullOrEmpty(sseEvent.Content)) else if (!string.IsNullOrEmpty(sseEvent.Content))
{ {
result.AppendLine(sseEvent.Content); result.Append(sseEvent.Content);
} }
else if (string.IsNullOrEmpty(sseEvent.Content)) else if (string.IsNullOrEmpty(sseEvent.Content))
{ {
result.AppendLine(); result.Append(string.Empty);
} }
await Task.CompletedTask; await Task.CompletedTask;