Skip to content

Commit 90760ba

Browse files
author
Krystian Moskal
committed
refactor file handling to use dictionary for multiple files
1 parent 4a91cea commit 90760ba

8 files changed

Lines changed: 34 additions & 21 deletions

File tree

Examples/Examples/Agents/AgentWithBecomeExample.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using MaIN.Core.Hub;
22
using MaIN.Core.Hub.Utils;
3-
using MaIN.Domain.Entities;
43
using MaIN.Domain.Entities.Agents.AgentSource;
5-
using MaIN.Domain.Models;
64

75
namespace Examples.Agents;
86

@@ -15,8 +13,10 @@ public async Task Start()
1513
.WithInitialPrompt("Extract 5 best books that you can find in your memory")
1614
.WithSource(new AgentFileSourceDetails()
1715
{
18-
Path = "./Files/Books.json",
19-
Name = "Books.json"
16+
Files = new Dictionary<string, string>
17+
{
18+
{ "Books.json", "./Files/Books.json" }
19+
},
2020
}, AgentSourceType.File)
2121
.WithBehaviour("SalesGod",
2222
"""

src/MaIN.Domain/Entities/Agents/AgentSource/AgentFileSourceDetails.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ namespace MaIN.Domain.Entities.Agents.AgentSource;
22

33
public class AgentFileSourceDetails : AgentSourceDetailsBase, IAgentSource
44
{
5-
public required string Path { get; init; }
6-
public required string Name { get; init; }
5+
public required Dictionary<string, string> Files { get; init; } = new();
76
public bool PreProcess { get; init; } = false;
87
}

src/MaIN.Services/Services/Abstract/IDataSourceProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ namespace MaIN.Services.Services.Abstract;
22

33
public interface IDataSourceProvider
44
{
5-
Task<string> FetchFileData(object? sourceDetails);
5+
Task<string> FetchFileData(Dictionary<string, string> source);
66
string FetchTextData(object? sourceDetails);
77
Task<string> FetchApiData(object? details, string? filter, IHttpClientFactory httpClientFactory, Dictionary<string, string> properties);
88
Task<string> FetchSqlData(object? sourceDetails, string? filter, Dictionary<string, string> properties);

src/MaIN.Services/Services/DataSourceProvider.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,27 @@ public class DataSourceProvider : IDataSourceProvider
1313
{
1414
private static readonly JsonSerializerOptions JsonSerializerOptions = new() { PropertyNameCaseInsensitive = true };
1515

16-
public async Task<string> FetchFileData(object? sourceDetails)
16+
public async Task<string> FetchFileData(Dictionary<string, string> source)
1717
{
18-
var fileDetails = JsonSerializer.Deserialize<AgentFileSourceDetails>(
19-
sourceDetails?.ToString() ?? "{}")!;
20-
21-
return await File.ReadAllTextAsync(fileDetails.Path);
18+
var allContent = new StringBuilder();
19+
20+
foreach (var (fileName, filePath) in source)
21+
{
22+
try
23+
{
24+
var content = await File.ReadAllTextAsync(filePath);
25+
allContent.AppendLine($"=== {fileName} ===");
26+
allContent.AppendLine(content);
27+
allContent.AppendLine();
28+
}
29+
catch (Exception)
30+
{
31+
allContent.AppendLine($"=== Error reading {fileName} ===");
32+
allContent.AppendLine();
33+
}
34+
}
35+
36+
return allContent.ToString();
2237
}
2338

2439
public string FetchTextData(object? sourceDetails)

src/MaIN.Services/Services/LLMService/ChatMemoryOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ namespace MaIN.Services.Services.LLMService;
33
public class ChatMemoryOptions
44
{
55
public Dictionary<string, string>? TextData { get; set; }
6-
public Dictionary<string, string>? FileData { get; set; }
6+
public Dictionary<string, string>? FilesData { get; set; }
77
public Dictionary<string, FileStream>? StreamData { get; set; }
88
public List<string>? WebUrls { get; set; }
99
public List<string>? Memory { get; set; }

src/MaIN.Services/Services/LLMService/Memory/MemoryService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public async Task ImportDataToMemory(
1414
await PreprocessAvailableDocuments(options, cancellationToken);
1515
}
1616
await ImportTextData(memory, options.TextData, cancellationToken);
17-
await ImportFileData(memory, options.FileData, cancellationToken);
17+
await ImportFilesData(memory, options.FilesData, cancellationToken);
1818
await ImportStreamData(memory, options.StreamData, cancellationToken);
1919
await ImportWebUrls(memory, options.WebUrls, cancellationToken);
2020
await ImportMemoryItems(memory, options.Memory, cancellationToken);
@@ -39,7 +39,7 @@ private async Task ImportTextData(IKernelMemory memory, Dictionary<string, strin
3939
}
4040
}
4141

42-
private async Task ImportFileData(IKernelMemory memory, Dictionary<string, string>? fileData,
42+
private async Task ImportFilesData(IKernelMemory memory, Dictionary<string, string>? fileData,
4343
CancellationToken cancellationToken)
4444
{
4545
if (fileData?.Any() != true)
@@ -92,10 +92,10 @@ await memory.ImportTextAsync(
9292

9393
private static async Task PreprocessAvailableDocuments(ChatMemoryOptions options, CancellationToken cancellationToken)
9494
{
95-
foreach (var file in options.FileData!)
95+
foreach (var file in options.FilesData!)
9696
{
9797
options.TextData!.Add(file.Key ,DocumentProcessor.ProcessDocument(file.Value));
98-
options.FileData = [];
98+
options.FilesData = [];
9999
}
100100

101101
foreach (var stream in options.StreamData!)

src/MaIN.Services/Services/LLMService/Utils/ChatHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public static ChatMemoryOptions ExtractMemoryOptions(Message message)
7474
return new ChatMemoryOptions
7575
{
7676
TextData = textData,
77-
FileData = fileData,
77+
FilesData = fileData,
7878
StreamData = streamData,
7979
PreProcess = preProcess
8080
};

src/MaIN.Services/Services/Steps/Commands/FetchCommandHandler.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using MaIN.Services.Services.Models.Commands;
55
using System.Text.Json;
66
using MaIN.Domain.Configuration;
7-
using MaIN.Services.Mappers;
87
using MaIN.Services.Services.LLMService;
98
using MaIN.Services.Services.LLMService.Factory;
109
using MaIN.Services.Utils;
@@ -91,15 +90,15 @@ private async Task<Message> HandleFileSource(FetchCommand command, Dictionary<st
9190
memoryChat!,
9291
new ChatMemoryOptions
9392
{
94-
FileData = new Dictionary<string, string> { { fileData!.Name, fileData.Path } },
93+
FilesData = fileData!.Files,
9594
PreProcess = fileData.PreProcess
9695
}
9796
);
9897

9998
return result!.Message;
10099
}
101100

102-
var data = await dataSourceService.FetchFileData(command.Context.Source.Details);
101+
var data = await dataSourceService.FetchFileData(fileData!.Files);
103102
return CreateMessage(data, properties);
104103
}
105104

0 commit comments

Comments
 (0)