mirror of
				https://github.com/MindWorkAI/AI-Studio.git
				synced 2025-11-03 18:20:20 +00:00 
			
		
		
		
	Refactored the conversion from retrieval contexts to Markdown
This commit is contained in:
		
							parent
							
								
									e41b5ffbc8
								
							
						
					
					
						commit
						50c1b45735
					
				@ -38,63 +38,8 @@ public sealed class AugmentationOne : IAugmentationProcess
 | 
				
			|||||||
        sb.AppendLine("The following useful information will help you in processing the user prompt:");
 | 
					        sb.AppendLine("The following useful information will help you in processing the user prompt:");
 | 
				
			||||||
        sb.AppendLine();
 | 
					        sb.AppendLine();
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        var index = 0;
 | 
					        // Let's convert all retrieval contexts to Markdown:
 | 
				
			||||||
        foreach(var retrievalContext in retrievalContexts)
 | 
					        await retrievalContexts.AsMarkdown(sb, token);
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            index++;
 | 
					 | 
				
			||||||
            sb.AppendLine($"# Retrieval context {index} of {numTotalRetrievalContexts}");
 | 
					 | 
				
			||||||
            sb.AppendLine($"Data source name: {retrievalContext.DataSourceName}");
 | 
					 | 
				
			||||||
            sb.AppendLine($"Content category: {retrievalContext.Category}");
 | 
					 | 
				
			||||||
            sb.AppendLine($"Content type: {retrievalContext.Type}");
 | 
					 | 
				
			||||||
            sb.AppendLine($"Content path: {retrievalContext.Path}");
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            if(retrievalContext.Links.Count > 0)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                sb.AppendLine("Additional links:");
 | 
					 | 
				
			||||||
                foreach(var link in retrievalContext.Links)
 | 
					 | 
				
			||||||
                    sb.AppendLine($"- {link}");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            switch(retrievalContext)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                case RetrievalTextContext textContext:
 | 
					 | 
				
			||||||
                    sb.AppendLine();
 | 
					 | 
				
			||||||
                    sb.AppendLine("Matched text content:");
 | 
					 | 
				
			||||||
                    sb.AppendLine("````");
 | 
					 | 
				
			||||||
                    sb.AppendLine(textContext.MatchedText);
 | 
					 | 
				
			||||||
                    sb.AppendLine("````");
 | 
					 | 
				
			||||||
                    
 | 
					 | 
				
			||||||
                    if(textContext.SurroundingContent.Count > 0)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        sb.AppendLine();
 | 
					 | 
				
			||||||
                        sb.AppendLine("Surrounding text content:");
 | 
					 | 
				
			||||||
                        foreach(var surrounding in textContext.SurroundingContent)
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            sb.AppendLine();
 | 
					 | 
				
			||||||
                            sb.AppendLine("````");
 | 
					 | 
				
			||||||
                            sb.AppendLine(surrounding);
 | 
					 | 
				
			||||||
                            sb.AppendLine("````");
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    
 | 
					 | 
				
			||||||
                    
 | 
					 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                case RetrievalImageContext imageContext:
 | 
					 | 
				
			||||||
                    sb.AppendLine();
 | 
					 | 
				
			||||||
                    sb.AppendLine("Matched image content as base64-encoded data:");
 | 
					 | 
				
			||||||
                    sb.AppendLine("````");
 | 
					 | 
				
			||||||
                    sb.AppendLine(await imageContext.AsBase64(token));
 | 
					 | 
				
			||||||
                    sb.AppendLine("````");
 | 
					 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                default:
 | 
					 | 
				
			||||||
                    logger.LogWarning($"The retrieval content type '{retrievalContext.Type}' of data source '{retrievalContext.DataSourceName}' at location '{retrievalContext.Path}' is not supported yet.");
 | 
					 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            sb.AppendLine();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        //
 | 
					        //
 | 
				
			||||||
        // Append the entire augmentation to the chat thread,
 | 
					        // Append the entire augmentation to the chat thread,
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using AIStudio.Chat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace AIStudio.Tools.RAG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public static class IRetrievalContextExtensions
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    private static readonly ILogger<IRetrievalContext> LOGGER = Program.SERVICE_PROVIDER.GetService<ILogger<IRetrievalContext>>()!;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public static async Task<string> AsMarkdown(this IReadOnlyList<IRetrievalContext> retrievalContexts, StringBuilder? sb = null, CancellationToken token = default)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        sb ??= new StringBuilder();
 | 
				
			||||||
 | 
					        var index = 0;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        foreach(var retrievalContext in retrievalContexts)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            index++;
 | 
				
			||||||
 | 
					            await retrievalContext.AsMarkdown(sb, index, retrievalContexts.Count, token);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return sb.ToString();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public static async Task<string> AsMarkdown(this IRetrievalContext retrievalContext, StringBuilder? sb = null, int index = -1, int numTotalRetrievalContexts = -1, CancellationToken token = default)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        sb ??= new StringBuilder();
 | 
				
			||||||
 | 
					        switch (index)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            case > 0 when numTotalRetrievalContexts is -1:
 | 
				
			||||||
 | 
					                sb.AppendLine($"# Retrieval context {index}");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            case > 0 when numTotalRetrievalContexts > 0:
 | 
				
			||||||
 | 
					                sb.AppendLine($"# Retrieval context {index} of {numTotalRetrievalContexts}");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            default:
 | 
				
			||||||
 | 
					                sb.AppendLine("# Retrieval context");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        sb.AppendLine($"Data source name: {retrievalContext.DataSourceName}");
 | 
				
			||||||
 | 
					        sb.AppendLine($"Content category: {retrievalContext.Category}");
 | 
				
			||||||
 | 
					        sb.AppendLine($"Content type: {retrievalContext.Type}");
 | 
				
			||||||
 | 
					        sb.AppendLine($"Content path: {retrievalContext.Path}");
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        if(retrievalContext.Links.Count > 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            sb.AppendLine("Additional links:");
 | 
				
			||||||
 | 
					            foreach(var link in retrievalContext.Links)
 | 
				
			||||||
 | 
					                sb.AppendLine($"- {link}");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        switch(retrievalContext)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            case RetrievalTextContext textContext:
 | 
				
			||||||
 | 
					                sb.AppendLine();
 | 
				
			||||||
 | 
					                sb.AppendLine("Matched text content:");
 | 
				
			||||||
 | 
					                sb.AppendLine("````");
 | 
				
			||||||
 | 
					                sb.AppendLine(textContext.MatchedText);
 | 
				
			||||||
 | 
					                sb.AppendLine("````");
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                if(textContext.SurroundingContent.Count > 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    sb.AppendLine();
 | 
				
			||||||
 | 
					                    sb.AppendLine("Surrounding text content:");
 | 
				
			||||||
 | 
					                    foreach(var surrounding in textContext.SurroundingContent)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        sb.AppendLine();
 | 
				
			||||||
 | 
					                        sb.AppendLine("````");
 | 
				
			||||||
 | 
					                        sb.AppendLine(surrounding);
 | 
				
			||||||
 | 
					                        sb.AppendLine("````");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            case RetrievalImageContext imageContext:
 | 
				
			||||||
 | 
					                sb.AppendLine();
 | 
				
			||||||
 | 
					                sb.AppendLine("Matched image content as base64-encoded data:");
 | 
				
			||||||
 | 
					                sb.AppendLine("````");
 | 
				
			||||||
 | 
					                sb.AppendLine(await imageContext.AsBase64(token));
 | 
				
			||||||
 | 
					                sb.AppendLine("````");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            default:
 | 
				
			||||||
 | 
					                LOGGER.LogWarning($"The retrieval content type '{retrievalContext.Type}' of data source '{retrievalContext.DataSourceName}' at location '{retrievalContext.Path}' is not supported yet.");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        sb.AppendLine();
 | 
				
			||||||
 | 
					        return sb.ToString();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user