mirror of
				https://github.com/MindWorkAI/AI-Studio.git
				synced 2025-11-04 02:40:20 +00:00 
			
		
		
		
	Refactored the agent base in preparation for multithreading support
This commit is contained in:
		
							parent
							
								
									bc4c4d1ecf
								
							
						
					
					
						commit
						9232e27f71
					
				@ -32,8 +32,6 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    protected ILogger<AgentBase> Logger { get; init; } = logger;
 | 
					    protected ILogger<AgentBase> Logger { get; init; } = logger;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    protected IContent? lastUserPrompt;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Represents the type or category of this agent.
 | 
					    /// Represents the type or category of this agent.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
@ -80,10 +78,10 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
 | 
				
			|||||||
        Blocks = [],
 | 
					        Blocks = [],
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected DateTimeOffset AddUserRequest(ChatThread thread, string request)
 | 
					    protected UserRequest AddUserRequest(ChatThread thread, string request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var time = DateTimeOffset.Now;
 | 
					        var time = DateTimeOffset.Now;
 | 
				
			||||||
        this.lastUserPrompt = new ContentText
 | 
					        var lastUserPrompt = new ContentText
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Text = request,
 | 
					            Text = request,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
@ -93,13 +91,17 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
 | 
				
			|||||||
            Time = time,
 | 
					            Time = time,
 | 
				
			||||||
            ContentType = ContentType.TEXT,
 | 
					            ContentType = ContentType.TEXT,
 | 
				
			||||||
            Role = ChatRole.USER,
 | 
					            Role = ChatRole.USER,
 | 
				
			||||||
            Content = this.lastUserPrompt,
 | 
					            Content = lastUserPrompt,
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return time;
 | 
					        return new()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Time = time,
 | 
				
			||||||
 | 
					            UserPrompt = lastUserPrompt,
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    protected async Task AddAIResponseAsync(ChatThread thread, DateTimeOffset time)
 | 
					    protected async Task AddAIResponseAsync(ChatThread thread, IContent lastUserPrompt, DateTimeOffset time)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if(this.ProviderSettings is null)
 | 
					        if(this.ProviderSettings is null)
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@ -125,6 +127,6 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
 | 
				
			|||||||
        // Use the selected provider to get the AI response.
 | 
					        // Use the selected provider to get the AI response.
 | 
				
			||||||
        // By awaiting this line, we wait for the entire
 | 
					        // By awaiting this line, we wait for the entire
 | 
				
			||||||
        // content to be streamed.
 | 
					        // content to be streamed.
 | 
				
			||||||
        await aiText.CreateFromProviderAsync(providerSettings.CreateProvider(this.Logger), providerSettings.Model, this.lastUserPrompt, thread);
 | 
					        await aiText.CreateFromProviderAsync(providerSettings.CreateProvider(this.Logger), providerSettings.Model, lastUserPrompt, thread);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -111,8 +111,8 @@ public sealed class AgentDataSourceSelection (ILogger<AgentDataSourceSelection>
 | 
				
			|||||||
            return EMPTY_BLOCK;
 | 
					            return EMPTY_BLOCK;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        var thread = this.CreateChatThread(this.SystemPrompt(availableDataSources));
 | 
					        var thread = this.CreateChatThread(this.SystemPrompt(availableDataSources));
 | 
				
			||||||
        var time = this.AddUserRequest(thread, text.Text);
 | 
					        var userRequest = this.AddUserRequest(thread, text.Text);
 | 
				
			||||||
        await this.AddAIResponseAsync(thread, time);
 | 
					        await this.AddAIResponseAsync(thread, userRequest.UserPrompt, userRequest.Time);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        var answer = thread.Blocks[^1];
 | 
					        var answer = thread.Blocks[^1];
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
				
			|||||||
@ -96,8 +96,8 @@ public sealed class AgentRetrievalContextValidation (ILogger<AgentRetrievalConte
 | 
				
			|||||||
            return EMPTY_BLOCK;
 | 
					            return EMPTY_BLOCK;
 | 
				
			||||||
          
 | 
					          
 | 
				
			||||||
        var thread = this.CreateChatThread(this.SystemPrompt(retrievalContext));
 | 
					        var thread = this.CreateChatThread(this.SystemPrompt(retrievalContext));
 | 
				
			||||||
        var time = this.AddUserRequest(thread, text.Text);
 | 
					        var userRequest = this.AddUserRequest(thread, text.Text);
 | 
				
			||||||
        await this.AddAIResponseAsync(thread, time);
 | 
					        await this.AddAIResponseAsync(thread, userRequest.UserPrompt, userRequest.Time);
 | 
				
			||||||
          
 | 
					          
 | 
				
			||||||
        return thread.Blocks[^1];
 | 
					        return thread.Blocks[^1];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -65,8 +65,8 @@ public sealed class AgentTextContentCleaner(ILogger<AgentBase> logger, SettingsM
 | 
				
			|||||||
            return EMPTY_BLOCK;
 | 
					            return EMPTY_BLOCK;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        var thread = this.CreateChatThread(this.SystemPrompt(sourceURL));
 | 
					        var thread = this.CreateChatThread(this.SystemPrompt(sourceURL));
 | 
				
			||||||
        var time = this.AddUserRequest(thread, text.Text);
 | 
					        var userRequest = this.AddUserRequest(thread, text.Text);
 | 
				
			||||||
        await this.AddAIResponseAsync(thread, time);
 | 
					        await this.AddAIResponseAsync(thread, userRequest.UserPrompt, userRequest.Time);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        var answer = thread.Blocks[^1];
 | 
					        var answer = thread.Blocks[^1];
 | 
				
			||||||
        this.answers.Add(answer);
 | 
					        this.answers.Add(answer);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										19
									
								
								app/MindWork AI Studio/Agents/UserRequest.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								app/MindWork AI Studio/Agents/UserRequest.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					using AIStudio.Chat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace AIStudio.Agents;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// The created user request.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public sealed class UserRequest
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// The time when the request was created.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public required DateTimeOffset Time { get; init; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// The user prompt.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public required IContent UserPrompt { get; init; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user