@@ -14,18 +14,25 @@ namespace AutoGen.Core;
14
14
/// </summary>
15
15
public class MiddlewareAgent : IMiddlewareAgent
16
16
{
17
- private readonly IAgent _agent ;
17
+ private IAgent _agent ;
18
18
private readonly List < IMiddleware > middlewares = new ( ) ;
19
19
20
20
/// <summary>
21
21
/// Create a new instance of <see cref="MiddlewareAgent"/>
22
22
/// </summary>
23
23
/// <param name="innerAgent">the inner agent where middleware will be added.</param>
24
24
/// <param name="name">the name of the agent if provided. Otherwise, the name of <paramref name="innerAgent"/> will be used.</param>
25
- public MiddlewareAgent ( IAgent innerAgent , string ? name = null )
25
+ public MiddlewareAgent ( IAgent innerAgent , string ? name = null , IEnumerable < IMiddleware > ? middlewares = null )
26
26
{
27
27
this . Name = name ?? innerAgent . Name ;
28
28
this . _agent = innerAgent ;
29
+ if ( middlewares != null && middlewares . Any ( ) )
30
+ {
31
+ foreach ( var middleware in middlewares )
32
+ {
33
+ this . Use ( middleware ) ;
34
+ }
35
+ }
29
36
}
30
37
31
38
/// <summary>
@@ -55,13 +62,7 @@ public Task<IMessage> GenerateReplyAsync(
55
62
GenerateReplyOptions ? options = null ,
56
63
CancellationToken cancellationToken = default )
57
64
{
58
- IAgent agent = this . _agent ;
59
- foreach ( var middleware in this . middlewares )
60
- {
61
- agent = new DelegateAgent ( middleware , agent ) ;
62
- }
63
-
64
- return agent . GenerateReplyAsync ( messages , options , cancellationToken ) ;
65
+ return _agent . GenerateReplyAsync ( messages , options , cancellationToken ) ;
65
66
}
66
67
67
68
/// <summary>
@@ -71,15 +72,18 @@ public Task<IMessage> GenerateReplyAsync(
71
72
/// </summary>
72
73
public void Use ( Func < IEnumerable < IMessage > , GenerateReplyOptions ? , IAgent , CancellationToken , Task < IMessage > > func , string ? middlewareName = null )
73
74
{
74
- this . middlewares . Add ( new DelegateMiddleware ( middlewareName , async ( context , agent , cancellationToken ) =>
75
+ var middleware = new DelegateMiddleware ( middlewareName , async ( context , agent , cancellationToken ) =>
75
76
{
76
77
return await func ( context . Messages , context . Options , agent , cancellationToken ) ;
77
- } ) ) ;
78
+ } ) ;
79
+
80
+ this . Use ( middleware ) ;
78
81
}
79
82
80
83
public void Use ( IMiddleware middleware )
81
84
{
82
85
this . middlewares . Add ( middleware ) ;
86
+ _agent = new DelegateAgent ( middleware , _agent ) ;
83
87
}
84
88
85
89
public override string ToString ( )
0 commit comments