Skip to content

Commit 47c7f53

Browse files
committed
cleanup and use EnsureDownloaded in the example
1 parent cbd2297 commit 47c7f53

File tree

4 files changed

+39
-42
lines changed

4 files changed

+39
-42
lines changed

Examples/Examples/Chat/ChatExample.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public async Task Start()
1212
// Using strongly-typed model
1313
await AIHub.Chat()
1414
.WithModel<Gemma2_2b>()
15+
.EnsureModelDownloaded()
1516
.WithMessage("Where do hedgehogs goes at night?")
1617
.CompleteAsync(interactive: true);
1718
}

src/MaIN.Core/Hub/Contexts/AgentContext.cs

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
using MaIN.Core.Hub.Contexts.Interfaces.AgentContext;
2+
using MaIN.Core.Hub.Utils;
23
using MaIN.Domain.Configuration;
34
using MaIN.Domain.Entities;
45
using MaIN.Domain.Entities.Agents;
56
using MaIN.Domain.Entities.Agents.AgentSource;
6-
using MaIN.Domain.Models;
7-
using MaIN.Domain.Models.Abstract;
8-
using MaIN.Services.Services.Abstract;
9-
using MaIN.Services.Services.Models;
10-
using MaIN.Core.Hub.Utils;
117
using MaIN.Domain.Entities.Agents.Knowledge;
128
using MaIN.Domain.Entities.Tools;
139
using MaIN.Domain.Exceptions.Agents;
14-
using MaIN.Domain.Exceptions.Models;
10+
using MaIN.Domain.Models;
11+
using MaIN.Domain.Models.Abstract;
1512
using MaIN.Services.Constants;
13+
using MaIN.Services.Services.Abstract;
14+
using MaIN.Services.Services.Models;
1615

1716
namespace MaIN.Core.Hub.Contexts;
1817

@@ -63,8 +62,8 @@ internal AgentContext(IAgentService agentService, Agent existingAgent)
6362
public async Task<Agent?> GetAgentById(string id) => await _agentService.GetAgentById(id);
6463
public async Task Delete() => await _agentService.DeleteAgent(_agent.Id);
6564
public async Task<bool> Exists() => await _agentService.AgentExists(_agent.Id);
66-
67-
65+
66+
6867
public IAgentConfigurationBuilder WithModel(string model)
6968
{
7069
_agent.Model = model;
@@ -85,18 +84,18 @@ public async Task<IAgentContextExecutor> FromExisting(string agentId)
8584
{
8685
throw new AgentNotFoundException(agentId);
8786
}
88-
87+
8988
var context = new AgentContext(_agentService, existingAgent);
9089
context.LoadExistingKnowledgeIfExists();
9190
return context;
9291
}
93-
92+
9493
public IAgentConfigurationBuilder WithInitialPrompt(string prompt)
9594
{
9695
_agent.Context.Instruction = prompt;
9796
return this;
9897
}
99-
98+
10099
public IAgentConfigurationBuilder WithId(string id)
101100
{
102101
_agent.Id = id;
@@ -130,7 +129,7 @@ public IAgentConfigurationBuilder WithSource(IAgentSource source, AgentSourceTyp
130129
};
131130
return this;
132131
}
133-
132+
134133
public IAgentConfigurationBuilder WithName(string name)
135134
{
136135
_agent.Name = name;
@@ -152,7 +151,7 @@ public IAgentConfigurationBuilder WithMcpConfig(Mcp mcpConfig)
152151
_agent.Context.McpConfig = mcpConfig;
153152
return this;
154153
}
155-
154+
156155
public IAgentConfigurationBuilder WithInferenceParams(InferenceParams inferenceParams)
157156
{
158157
_inferenceParams = inferenceParams;
@@ -183,7 +182,7 @@ public IAgentConfigurationBuilder WithKnowledge(KnowledgeBuilder knowledge)
183182
_knowledge = knowledge.ForAgent(_agent).Build();
184183
return this;
185184
}
186-
185+
187186
public IAgentConfigurationBuilder WithKnowledge(Knowledge knowledge)
188187
{
189188
_knowledge = knowledge;
@@ -198,7 +197,7 @@ public IAgentConfigurationBuilder WithInMemoryKnowledge(Func<KnowledgeBuilder, K
198197
_knowledge = knowledgeConfig(builder).Build();
199198
return this;
200199
}
201-
200+
202201
public IAgentConfigurationBuilder WithBehaviour(string name, string instruction)
203202
{
204203
_agent.Behaviours ??= new Dictionary<string, string>();
@@ -233,7 +232,7 @@ public IAgentConfigurationBuilder WithTools(ToolsConfiguration toolsConfiguratio
233232
_agent.ToolsConfiguration = toolsConfiguration;
234233
return this;
235234
}
236-
235+
237236
internal void LoadExistingKnowledgeIfExists()
238237
{
239238
_knowledge ??= new Knowledge(_agent);
@@ -247,7 +246,7 @@ internal void LoadExistingKnowledgeIfExists()
247246
Console.WriteLine("Knowledge cannot be loaded - new one will be created");
248247
}
249248
}
250-
249+
251250
public async Task<ChatResult> ProcessAsync(Chat chat, bool translate = false)
252251
{
253252
if (_knowledge == null)
@@ -265,7 +264,7 @@ public async Task<ChatResult> ProcessAsync(Chat chat, bool translate = false)
265264
CreatedAt = DateTime.Now
266265
};
267266
}
268-
267+
269268
public async Task<ChatResult> ProcessAsync(
270269
string message,
271270
bool translate = false,
@@ -294,8 +293,8 @@ public async Task<ChatResult> ProcessAsync(
294293
CreatedAt = DateTime.Now
295294
};
296295
}
297-
298-
public async Task<ChatResult> ProcessAsync(Message message,
296+
297+
public async Task<ChatResult> ProcessAsync(Message message,
299298
bool translate = false,
300299
Func<LLMTokenValue, Task>? tokenCallback = null,
301300
Func<ToolInvocation, Task>? toolCallback = null)
@@ -306,7 +305,7 @@ public async Task<ChatResult> ProcessAsync(Message message,
306305
}
307306
var chat = await _agentService.GetChatByAgent(_agent.Id);
308307
chat.Messages.Add(message);
309-
var result = await _agentService.Process(chat, _agent.Id, _knowledge, translate, tokenCallback, toolCallback);;
308+
var result = await _agentService.Process(chat, _agent.Id, _knowledge, translate, tokenCallback, toolCallback);
310309
var messageResult = result.Messages.LastOrDefault()!;
311310
return new ChatResult()
312311
{
@@ -316,7 +315,7 @@ public async Task<ChatResult> ProcessAsync(Message message,
316315
CreatedAt = DateTime.Now
317316
};
318317
}
319-
318+
320319
public async Task<ChatResult> ProcessAsync(
321320
IEnumerable<Message> messages,
322321
bool translate = false,
@@ -335,7 +334,7 @@ public async Task<ChatResult> ProcessAsync(
335334
chat.Messages.Add(systemMsg);
336335
}
337336
chat.Messages.AddRange(messages);
338-
var result = await _agentService.Process(chat, _agent.Id, _knowledge, translate, tokenCallback, toolCallback);;
337+
var result = await _agentService.Process(chat, _agent.Id, _knowledge, translate, tokenCallback, toolCallback);
339338
var messageResult = result.Messages.LastOrDefault()!;
340339
return new ChatResult()
341340
{
@@ -353,7 +352,7 @@ public static async Task<AgentContext> FromExisting(IAgentService agentService,
353352
{
354353
throw new AgentNotFoundException(agentId);
355354
}
356-
355+
357356
var context = new AgentContext(agentService, existingAgent);
358357
context.LoadExistingKnowledgeIfExists();
359358
return context;
@@ -363,8 +362,8 @@ public static async Task<AgentContext> FromExisting(IAgentService agentService,
363362
public static class AgentExtensions
364363
{
365364
public static async Task<ChatResult> ProcessAsync(
366-
this Task<AgentContext> agentTask,
367-
string message,
365+
this Task<AgentContext> agentTask,
366+
string message,
368367
bool translate = false)
369368
{
370369
var agent = await agentTask;

src/MaIN.Core/Hub/Contexts/ChatContext.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using MaIN.Core.Hub.Contexts.Interfaces.ChatContext;
2-
using MaIN.Core.Hub.Contexts.Interfaces.ModelContext;
32
using MaIN.Domain.Configuration;
43
using MaIN.Domain.Entities;
54
using MaIN.Domain.Entities.Tools;
@@ -11,7 +10,6 @@
1110
using MaIN.Services.Constants;
1211
using MaIN.Services.Services.Abstract;
1312
using MaIN.Services.Services.Models;
14-
using MaIN.Core.Hub;
1513
using FileInfo = MaIN.Domain.Entities.FileInfo;
1614

1715
namespace MaIN.Core.Hub.Contexts;
@@ -203,7 +201,7 @@ public IChatConfigurationBuilder DisableCache()
203201
_chat.Properties.AddProperty(ServiceConstants.Properties.DisableCacheProperty);
204202
return this;
205203
}
206-
204+
207205
public async Task<ChatResult> CompleteAsync(
208206
bool translate = false, // Move to WithTranslate
209207
bool interactive = false, // Move to WithInteractive
@@ -224,11 +222,11 @@ public async Task<ChatResult> CompleteAsync(
224222
}
225223

226224
_chat.Messages.Last().Files = _files;
227-
if(_preProcess)
225+
if (_preProcess)
228226
{
229227
_chat.Messages.Last().Properties.AddProperty(ServiceConstants.Properties.PreProcessProperty);
230228
}
231-
229+
232230
if (!await ChatExists(_chat.Id))
233231
{
234232
await _chatService.Create(_chat);
@@ -241,8 +239,8 @@ public async Task<ChatResult> CompleteAsync(
241239
public async Task<IChatConfigurationBuilder> FromExisting(string chatId)
242240
{
243241
var existing = await _chatService.GetById(chatId);
244-
return existing == null
245-
? throw new ChatNotFoundException(chatId)
242+
return existing == null
243+
? throw new ChatNotFoundException(chatId)
246244
: new ChatContext(_chatService, existing);
247245
}
248246

@@ -258,9 +256,9 @@ private async Task<bool> ChatExists(string id)
258256
return false;
259257
}
260258
}
261-
259+
262260
public string GetChatId() => _chat.Id;
263-
261+
264262
public async Task<Chat> GetCurrentChat()
265263
{
266264
if (_chat.Id == null)
@@ -282,7 +280,7 @@ public async Task DeleteChat()
282280

283281
await _chatService.Delete(_chat.Id);
284282
}
285-
283+
286284
public List<MessageShort> GetChatHistory()
287285
{
288286
return [.. _chat.Messages.Select(x => new MessageShort()

src/MaIN.Core/Hub/Contexts/ModelContext.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System.Collections.Concurrent;
2-
using System.Diagnostics;
31
using AsyncKeyedLock;
42
using MaIN.Core.Hub.Contexts.Interfaces.ModelContext;
53
using MaIN.Domain.Configuration;
@@ -9,6 +7,7 @@
97
using MaIN.Domain.Models.Concrete;
108
using MaIN.Services.Constants;
119
using MaIN.Services.Services.LLMService.Utils;
10+
using System.Diagnostics;
1211

1312
namespace MaIN.Core.Hub.Contexts;
1413

@@ -50,7 +49,7 @@ public bool IsDownloaded(string modelId)
5049
{
5150
return false; // Cloud models don't have local files
5251
}
53-
52+
5453
return localModel.IsDownloaded(_defaultModelsPath);
5554
}
5655

@@ -94,7 +93,7 @@ public async Task<IModelContext> DownloadAsync(string modelId, CancellationToken
9493
}
9594

9695
var model = ModelRegistry.GetById(modelId);
97-
96+
9897
if (model is not LocalModel localModel)
9998
{
10099
throw new InvalidModelTypeException(nameof(LocalModel));
@@ -136,7 +135,7 @@ private async Task DownloadModelAsync(LocalModel localModel, CancellationToken c
136135
{
137136
throw new DownloadUrlNullOrEmptyException();
138137
}
139-
138+
140139
Console.WriteLine($"Starting download of {localModel.FileName}...");
141140

142141
try
@@ -205,7 +204,7 @@ private HttpClient CreateConfiguredHttpClient()
205204
private string GetModelFilePath(LocalModel localModel) =>
206205
localModel.GetFullPath(_defaultModelsPath);
207206

208-
private static bool ShouldUpdateProgress(Stopwatch progressStopwatch) =>
207+
private static bool ShouldUpdateProgress(Stopwatch progressStopwatch) =>
209208
progressStopwatch.ElapsedMilliseconds >= ProgressUpdateIntervalMilliseconds;
210209

211210
private static void ShowProgress(long totalBytesRead, long? totalBytes, Stopwatch totalStopwatch)

0 commit comments

Comments
 (0)