Skip to content

.Net: Update ITextSearch to align with search abstractions in M.E.VD - Phase 1 #11519

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
8 changes: 4 additions & 4 deletions dotnet/samples/Concepts/RAG/Bing_RagWithTextSearch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public async Task RagWithBingTextSearchAsync()
var textSearch = new BingTextSearch(new(TestConfiguration.Bing.ApiKey));

// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithSearch("SearchPlugin");
var searchPlugin = textSearch.CreateWithSearch(5, "SearchPlugin");
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
Expand All @@ -56,7 +56,7 @@ public async Task RagWithBingTextSearchIncludingCitationsAsync()
var textSearch = new BingTextSearch(new(TestConfiguration.Bing.ApiKey));

// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithGetTextSearchResults("SearchPlugin");
var searchPlugin = textSearch.CreateWithGetTextSearchResults(5, "SearchPlugin");
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
Expand Down Expand Up @@ -103,7 +103,7 @@ public async Task RagWithBingTextSearchIncludingTimeStampedCitationsAsync()
var textSearch = new BingTextSearch(new(TestConfiguration.Bing.ApiKey));

// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithGetSearchResults("SearchPlugin");
var searchPlugin = textSearch.CreateWithGetSearchResults(5, "SearchPlugin");
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
Expand Down Expand Up @@ -155,7 +155,7 @@ public async Task RagWithBingTextSearchUsingDevBlogsSiteAsync()
var searchOptions = new TextSearchOptions() { Filter = filter };
var searchPlugin = KernelPluginFactory.CreateFromFunctions(
"SearchPlugin", "Search Microsoft Developer Blogs site only",
[textSearch.CreateGetTextSearchResults(searchOptions: searchOptions)]);
[textSearch.CreateGetTextSearchResults(5, searchOptions: searchOptions)]);
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public async Task FunctionCallingWithBingTextSearchAsync()
var textSearch = new BingTextSearch(new(TestConfiguration.Bing.ApiKey));

// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithSearch("SearchPlugin");
var searchPlugin = textSearch.CreateWithSearch(top: 5, pluginName: "SearchPlugin");
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
Expand All @@ -57,7 +57,7 @@ public async Task FunctionCallingWithBingTextSearchIncludingCitationsAsync()
var textSearch = new BingTextSearch(new(TestConfiguration.Bing.ApiKey));

// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithGetTextSearchResults("SearchPlugin");
var searchPlugin = textSearch.CreateWithGetTextSearchResults(top: 5, pluginName: "SearchPlugin");
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
Expand Down Expand Up @@ -89,7 +89,7 @@ public async Task FunctionCallingWithBingTextSearchUsingDevBlogsSiteAsync()
var searchOptions = new TextSearchOptions() { Filter = filter };
var searchPlugin = KernelPluginFactory.CreateFromFunctions(
"SearchPlugin", "Search Microsoft Developer Blogs site only",
[textSearch.CreateGetTextSearchResults(searchOptions: searchOptions)]);
[textSearch.CreateGetTextSearchResults(top: 5, searchOptions: searchOptions)]);
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
Expand Down Expand Up @@ -138,9 +138,9 @@ private static KernelFunction CreateSearchBySite(BingTextSearch textSearch, Text
new KernelParameterMetadata("skip") { Description = "Number of results to skip", IsRequired = false, DefaultValue = 0 },
new KernelParameterMetadata("site") { Description = "Only return results from this domain", IsRequired = false },
],
ReturnParameter = new() { ParameterType = typeof(KernelSearchResults<string>) },
ReturnParameter = new() { ParameterType = typeof(List<string>) },
};

return textSearch.CreateSearch(options);
return textSearch.CreateSearch(top: 5, options);
}
}
22 changes: 11 additions & 11 deletions dotnet/samples/Concepts/Search/Bing_TextSearch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@ public async Task UsingBingTextSearchAsync()
var query = "What is the Semantic Kernel?";

// Search and return results as a string items
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 4, Skip = 0 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 4, new() { Skip = 0 });
Console.WriteLine("--- String Results ---\n");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
WriteHorizontalRule();
}

// Search and return results as TextSearchResult items
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, new() { Top = 4, Skip = 4 });
IAsyncEnumerable<TextSearchResult> textResults = textSearch.GetTextSearchResultsAsync(query, 4, new() { Skip = 4 });
Console.WriteLine("\n--- Text Search Results ---\n");
await foreach (TextSearchResult result in textResults.Results)
await foreach (TextSearchResult result in textResults)
{
Console.WriteLine($"Name: {result.Name}");
Console.WriteLine($"Value: {result.Value}");
Expand All @@ -47,9 +47,9 @@ public async Task UsingBingTextSearchAsync()
}

// Search and return s results as BingWebPage items
KernelSearchResults<object> fullResults = await textSearch.GetSearchResultsAsync(query, new() { Top = 4, Skip = 8 });
IAsyncEnumerable<object> fullResults = textSearch.GetSearchResultsAsync(query, 4, new() { Skip = 8 });
Console.WriteLine("\n--- Bing Web Page Results ---\n");
await foreach (BingWebPage result in fullResults.Results)
await foreach (BingWebPage result in fullResults)
{
Console.WriteLine($"Name: {result.Name}");
Console.WriteLine($"Snippet: {result.Snippet}");
Expand Down Expand Up @@ -80,9 +80,9 @@ public async Task UsingBingTextSearchWithACustomMapperAsync()
var query = "What is the Semantic Kernel?";

// Search with TextSearchResult textResult type
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 2, Skip = 0 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 2, new() { Skip = 0 });
Console.WriteLine("--- Serialized JSON Results ---");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
WriteHorizontalRule();
Expand All @@ -109,10 +109,10 @@ public async Task UsingBingTextSearchWithASiteFilterAsync()
var query = "What is the Semantic Kernel?";

// Search with TextSearchResult textResult type
TextSearchOptions searchOptions = new() { Top = 4, Skip = 0, Filter = new TextSearchFilter().Equality("site", "devblogs.microsoft.com") };
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, searchOptions);
TextSearchOptions searchOptions = new() { Skip = 0, Filter = new TextSearchFilter().Equality("site", "devblogs.microsoft.com") };
IAsyncEnumerable<TextSearchResult> textResults = textSearch.GetTextSearchResultsAsync(query, 4, searchOptions);
Console.WriteLine("--- Microsoft Developer Blogs Results ---");
await foreach (TextSearchResult result in textResults.Results)
await foreach (TextSearchResult result in textResults)
{
Console.WriteLine(result.Link);
WriteHorizontalRule();
Expand Down
22 changes: 11 additions & 11 deletions dotnet/samples/Concepts/Search/Google_TextSearch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,18 @@ public async Task UsingGoogleTextSearchAsync()
var query = "What is the Semantic Kernel?";

// Search and return results as string items
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 4, Skip = 0 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 4, new() { Skip = 0 });
Console.WriteLine("——— String Results ———\n");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
Console.WriteLine(new string('—', HorizontalRuleLength));
}

// Search and return results as TextSearchResult items
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, new() { Top = 4, Skip = 4 });
IAsyncEnumerable<TextSearchResult> textResults = textSearch.GetTextSearchResultsAsync(query, 4, new() { Skip = 4 });
Console.WriteLine("\n——— Text Search Results ———\n");
await foreach (TextSearchResult result in textResults.Results)
await foreach (TextSearchResult result in textResults)
{
Console.WriteLine($"Name: {result.Name}");
Console.WriteLine($"Value: {result.Value}");
Expand All @@ -46,9 +46,9 @@ public async Task UsingGoogleTextSearchAsync()
}

// Search and return results as Google.Apis.CustomSearchAPI.v1.Data.Result items
KernelSearchResults<object> fullResults = await textSearch.GetSearchResultsAsync(query, new() { Top = 4, Skip = 8 });
IAsyncEnumerable<object> fullResults = textSearch.GetSearchResultsAsync(query, 4, new() { Skip = 8 });
Console.WriteLine("\n——— Google Web Page Results ———\n");
await foreach (Google.Apis.CustomSearchAPI.v1.Data.Result result in fullResults.Results)
await foreach (Google.Apis.CustomSearchAPI.v1.Data.Result result in fullResults)
{
Console.WriteLine($"Title: {result.Title}");
Console.WriteLine($"Snippet: {result.Snippet}");
Expand All @@ -74,9 +74,9 @@ public async Task UsingGoogleTextSearchWithACustomMapperAsync()
var query = "What is the Semantic Kernel?";

// Search with TextSearchResult textResult type
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 2, Skip = 0 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 2, new() { Skip = 0 });
Console.WriteLine("--- Serialized JSON Results ---");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
Console.WriteLine(new string('-', HorizontalRuleLength));
Expand All @@ -97,10 +97,10 @@ public async Task UsingGoogleTextSearchWithASiteSearchFilterAsync()
var query = "What is the Semantic Kernel?";

// Search with TextSearchResult textResult type
TextSearchOptions searchOptions = new() { Top = 4, Skip = 0, Filter = new TextSearchFilter().Equality("siteSearch", "devblogs.microsoft.com") };
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, searchOptions);
TextSearchOptions searchOptions = new() { Skip = 0, Filter = new TextSearchFilter().Equality("siteSearch", "devblogs.microsoft.com") };
IAsyncEnumerable<TextSearchResult> textResults = textSearch.GetTextSearchResultsAsync(query, 4, searchOptions);
Console.WriteLine("--- Microsoft Developer Blogs Results ---");
await foreach (TextSearchResult result in textResults.Results)
await foreach (TextSearchResult result in textResults)
{
Console.WriteLine(result.Link);
Console.WriteLine(new string('-', HorizontalRuleLength));
Expand Down
30 changes: 15 additions & 15 deletions dotnet/samples/Concepts/Search/Tavily_TextSearch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@ public async Task UsingTavilyTextSearch()
var query = "What is the Semantic Kernel?";

// Search and return results as a string items
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 4 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 4);
Console.WriteLine("--- String Results ---\n");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
WriteHorizontalRule();
}

// Search and return results as TextSearchResult items
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, new() { Top = 4 });
IAsyncEnumerable<TextSearchResult> textResults = textSearch.GetTextSearchResultsAsync(query, 4);
Console.WriteLine("\n--- Text Search Results ---\n");
await foreach (TextSearchResult result in textResults.Results)
await foreach (TextSearchResult result in textResults)
{
Console.WriteLine($"Name: {result.Name}");
Console.WriteLine($"Value: {result.Value}");
Expand All @@ -47,9 +47,9 @@ public async Task UsingTavilyTextSearch()
}

// Search and return s results as TavilySearchResult items
KernelSearchResults<object> fullResults = await textSearch.GetSearchResultsAsync(query, new() { Top = 4 });
IAsyncEnumerable<object> fullResults = textSearch.GetSearchResultsAsync(query, 4);
Console.WriteLine("\n--- Tavily Web Page Results ---\n");
await foreach (TavilySearchResult result in fullResults.Results)
await foreach (TavilySearchResult result in fullResults)
{
Console.WriteLine($"Name: {result.Title}");
Console.WriteLine($"Content: {result.Content}");
Expand All @@ -76,9 +76,9 @@ public async Task UsingTavilyTextSearchToGetAnAnswer()
var query = "What is the Semantic Kernel?";

// Search and return results as a string items
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 1 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 1);
Console.WriteLine("--- String Results ---\n");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
WriteHorizontalRule();
Expand Down Expand Up @@ -110,9 +110,9 @@ public async Task UsingTavilyTextSearchAndIncludeEverything()
var query = "What is the Semantic Kernel?";

// Search and return s results as TavilySearchResult items
KernelSearchResults<object> fullResults = await textSearch.GetSearchResultsAsync(query, new() { Top = 4, Skip = 0 });
IAsyncEnumerable<object> fullResults = textSearch.GetSearchResultsAsync(query, 4, new() { Skip = 0 });
Console.WriteLine("\n--- Tavily Web Page Results ---\n");
await foreach (TavilySearchResult result in fullResults.Results)
await foreach (TavilySearchResult result in fullResults)
{
Console.WriteLine($"Name: {result.Title}");
Console.WriteLine($"Content: {result.Content}");
Expand Down Expand Up @@ -143,9 +143,9 @@ public async Task UsingTavilyTextSearchWithACustomMapperAsync()
var query = "What is the Semantic Kernel?";

// Search with TextSearchResult textResult type
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 2 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 2);
Console.WriteLine("--- Serialized JSON Results ---");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
WriteHorizontalRule();
Expand All @@ -172,10 +172,10 @@ public async Task UsingTavilyTextSearchWithAnIncludeDomainFilterAsync()
var query = "What is the Semantic Kernel?";

// Search with TextSearchResult textResult type
TextSearchOptions searchOptions = new() { Top = 4, Filter = new TextSearchFilter().Equality("include_domain", "devblogs.microsoft.com") };
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, searchOptions);
TextSearchOptions searchOptions = new() { Filter = new TextSearchFilter().Equality("include_domain", "devblogs.microsoft.com") };
IAsyncEnumerable<TextSearchResult> textResults = textSearch.GetTextSearchResultsAsync(query, 4, searchOptions);
Console.WriteLine("--- Microsoft Developer Blogs Results ---");
await foreach (TextSearchResult result in textResults.Results)
await foreach (TextSearchResult result in textResults)
{
Console.WriteLine(result.Link);
WriteHorizontalRule();
Expand Down
12 changes: 6 additions & 6 deletions dotnet/samples/Concepts/Search/VectorStore_TextSearch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,18 +65,18 @@ private async Task ExecuteSearchesAsync(VectorStoreTextSearch<DataModel> textSea
var query = "What is the Semantic Kernel?";

// Search and return results as a string items
KernelSearchResults<string> stringResults = await textSearch.SearchAsync(query, new() { Top = 2, Skip = 0 });
IAsyncEnumerable<string> stringResults = textSearch.SearchAsync(query, 2, new() { Skip = 0 });
Console.WriteLine("--- String Results ---\n");
await foreach (string result in stringResults.Results)
await foreach (string result in stringResults)
{
Console.WriteLine(result);
WriteHorizontalRule();
}

// Search and return results as TextSearchResult items
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, new() { Top = 2, Skip = 0 });
IAsyncEnumerable<TextSearchResult> textResults = textSearch.GetTextSearchResultsAsync(query, 2, new() { Skip = 0 });
Console.WriteLine("\n--- Text Search Results ---\n");
await foreach (TextSearchResult result in textResults.Results)
await foreach (TextSearchResult result in textResults)
{
Console.WriteLine($"Name: {result.Name}");
Console.WriteLine($"Value: {result.Value}");
Expand All @@ -85,9 +85,9 @@ private async Task ExecuteSearchesAsync(VectorStoreTextSearch<DataModel> textSea
}

// Search and returns results as DataModel items
KernelSearchResults<object> fullResults = await textSearch.GetSearchResultsAsync(query, new() { Top = 2, Skip = 0 });
IAsyncEnumerable<object> fullResults = textSearch.GetSearchResultsAsync(query, 2, new() { Skip = 0 });
Console.WriteLine("\n--- DataModel Results ---\n");
await foreach (DataModel result in fullResults.Results)
await foreach (DataModel result in fullResults)
{
Console.WriteLine($"Key: {result.Key}");
Console.WriteLine($"Text: {result.Text}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ static void AddAgentWithRag<TKey>(WebApplicationBuilder builder, PromptTemplateC

// Add a search plugin to the kernel which we will use in the agent template
// to do a vector search for related information to the user query.
kernel.Plugins.Add(vectorStoreTextSearch.CreateWithGetTextSearchResults("SearchPlugin"));
kernel.Plugins.Add(vectorStoreTextSearch.CreateWithGetTextSearchResults(top: 5, "SearchPlugin"));

return new ChatCompletionAgent(templateConfig, new HandlebarsPromptTemplateFactory())
{
Expand Down
Loading
Loading