Skip to content

Commit c03a999

Browse files
author
Piotr Stachaczynski
committed
feat: process pr comments
1 parent 1ca095f commit c03a999

File tree

6 files changed

+49
-61
lines changed

6 files changed

+49
-61
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using MaIN.Domain.Configuration;
33
using MaIN.Domain.Entities;
44
using MaIN.Services.Services;
5+
using MaIN.Services.Services.Abstract;
56
using MaIN.Services.Services.Models;
67

78
namespace MaIN.Core.Hub.Contexts;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using MaIN.Domain.Entities;
2+
using MaIN.Services.Services.Models;
3+
4+
namespace MaIN.Services.Services.Abstract;
5+
6+
public interface IMcpService
7+
{
8+
Task<McpResult> Prompt(Mcp config, string prompt);
9+
}

src/MaIN.Services/Services/McpService.cs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using LLama.Common;
22
using MaIN.Domain.Configuration;
33
using MaIN.Domain.Entities;
4+
using MaIN.Services.Services.Abstract;
45
using MaIN.Services.Services.Models;
56
using Microsoft.SemanticKernel;
67
using Microsoft.SemanticKernel.Connectors.Google;
@@ -11,11 +12,6 @@
1112

1213
namespace MaIN.Services.Services;
1314

14-
public interface IMcpService
15-
{
16-
Task<McpResult> Prompt(Mcp config, string prompt);
17-
}
18-
1915
public class McpService(MaINSettings settings) : IMcpService
2016
{
2117
public async Task<McpResult> Prompt(Mcp config, string prompt)
@@ -52,11 +48,6 @@ public async Task<McpResult> Prompt(Mcp config, string prompt)
5248

5349
private PromptExecutionSettings InitializeChatCompletions(IKernelBuilder kernelBuilder, BackendType backendType, string model)
5450
{
55-
if (backendType == BackendType.Self)
56-
{
57-
throw new NotSupportedException("Self backend (local models) does not support MCP integration.");
58-
}
59-
6051
switch (backendType)
6152
{
6253
case BackendType.OpenAi:
@@ -73,6 +64,8 @@ private PromptExecutionSettings InitializeChatCompletions(IKernelBuilder kernelB
7364
ModelId = model,
7465
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(options: new() { RetainArgumentTypes = true })
7566
};
67+
case BackendType.Self:
68+
throw new NotSupportedException("Self backend (local models) does not support MCP integration.");
7669
default:
7770
throw new ArgumentOutOfRangeException(nameof(backendType));
7871
}

src/MaIN.Services/Services/Steps/AnswerStepHandler.cs

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public async Task<StepResult> Handle(StepContext context)
1919

2020
var answerCommand = new AnswerCommand
2121
{
22-
Chat = EnsureUserMessageReadiness(context.Chat),
22+
Chat = StepHandlerExtensions.EnsureUserMessageReadiness(context.Chat),
2323
UseMemory = useMemory
2424
};
2525

@@ -45,27 +45,4 @@ public async Task<StepResult> Handle(StepContext context)
4545
var match = Regex.Match(content!, pattern);
4646
return match.Success ? match.Groups[1].Value : null;
4747
}
48-
49-
//This is useful for cases that we want to perform retry
50-
private Chat EnsureUserMessageReadiness(Chat chat)
51-
{
52-
if (chat.Messages.Count == 0)
53-
return chat;
54-
55-
var lastMessage = chat.Messages.LastOrDefault();
56-
if (lastMessage == null || lastMessage.Role== "User")
57-
return chat;
58-
59-
var lastUserMessage = chat.Messages.LastOrDefault(m => m.Role == "User");
60-
if (lastUserMessage == null)
61-
return chat; // No user messages
62-
63-
var newMessages = chat.Messages
64-
.Where(m => m != lastUserMessage)
65-
.ToList();
66-
newMessages.Add(lastUserMessage);
67-
68-
chat.Messages = newMessages;
69-
return chat;
70-
}
7148
}

src/MaIN.Services/Services/Steps/McpStepHandler.cs

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,21 @@ public async Task<StepResult> Handle(StepContext context)
2222
await context.NotifyProgress("true", context.Agent.Id, null, context.Agent.CurrentBehaviour);
2323
var mcpCommand = new McpCommand()
2424
{
25-
Chat = EnsureUserMessageReadiness(context.Chat),
25+
Chat = StepHandlerExtensions.EnsureUserMessageReadiness(context.Chat),
2626
McpConfig = context.McpConfig
2727
};
2828

2929
var mcpResponse = await commandDispatcher.DispatchAsync(mcpCommand);
30-
if (mcpResponse == null)
30+
if (mcpResponse == null)
31+
{
3132
throw new Exception("MCP command failed"); //TODO proper candidate for custom exception
32-
33+
}
34+
3335
var filterVal = GetFilter(mcpResponse.Content);
3436
if (!string.IsNullOrEmpty(filterVal))
37+
{
3538
context.Chat.Properties.TryAdd("data_filter", filterVal);
36-
39+
}
3740

3841
mcpResponse.Time = DateTime.Now;
3942
context.Chat.Messages.Add(mcpResponse);
@@ -47,27 +50,4 @@ public async Task<StepResult> Handle(StepContext context)
4750
var match = Regex.Match(content!, pattern);
4851
return match.Success ? match.Groups[1].Value : null;
4952
}
50-
51-
//This is useful for cases that we want to perform retry
52-
private Chat EnsureUserMessageReadiness(Chat chat)
53-
{
54-
if (chat.Messages.Count == 0)
55-
return chat;
56-
57-
var lastMessage = chat.Messages.LastOrDefault();
58-
if (lastMessage == null || lastMessage.Role== "User")
59-
return chat;
60-
61-
var lastUserMessage = chat.Messages.LastOrDefault(m => m.Role == "User");
62-
if (lastUserMessage == null)
63-
return chat; // No user messages
64-
65-
var newMessages = chat.Messages
66-
.Where(m => m != lastUserMessage)
67-
.ToList();
68-
newMessages.Add(lastUserMessage);
69-
70-
chat.Messages = newMessages;
71-
return chat;
72-
}
7353
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using MaIN.Domain.Entities;
2+
3+
namespace MaIN.Services.Services.Steps;
4+
5+
public class StepHandlerExtensions
6+
{
7+
public static Chat EnsureUserMessageReadiness(Chat chat)
8+
{
9+
if (chat.Messages.Count == 0)
10+
return chat;
11+
12+
var lastMessage = chat.Messages.LastOrDefault();
13+
if (lastMessage == null || lastMessage.Role== "User")
14+
return chat;
15+
16+
var lastUserMessage = chat.Messages.LastOrDefault(m => m.Role == "User");
17+
if (lastUserMessage == null)
18+
return chat; // No user messages
19+
20+
var newMessages = chat.Messages
21+
.Where(m => m != lastUserMessage)
22+
.ToList();
23+
newMessages.Add(lastUserMessage);
24+
25+
chat.Messages = newMessages;
26+
return chat;
27+
}
28+
}

0 commit comments

Comments
 (0)