diff --git a/dotnet/src/Plugins/Plugins.UnitTests/Web/Tavily/TavilyTextSearchTests.cs b/dotnet/src/Plugins/Plugins.UnitTests/Web/Tavily/TavilyTextSearchTests.cs index be5c78d41d0f..d144516c8694 100644 --- a/dotnet/src/Plugins/Plugins.UnitTests/Web/Tavily/TavilyTextSearchTests.cs +++ b/dotnet/src/Plugins/Plugins.UnitTests/Web/Tavily/TavilyTextSearchTests.cs @@ -496,6 +496,29 @@ public async Task StringContainsStillWorksWithLINQFiltersAsync() Assert.Contains("\"max_results\":5", requestBodyJson); } + [Theory] + [InlineData(5, 2, 5)] // Top > Skip + [InlineData(2, 2, 2)] // Top == Skip + [InlineData(1, 5, 1)] // Top < Skip + public async Task SkipIsNotSubtractedFromMaxResultsAsync(int top, int skip, int expectedMaxResults) + { + // Arrange + this._messageHandlerStub.AddJsonResponse(File.ReadAllText(SiteFilterDevBlogsResponseJson)); + ITextSearch textSearch = new TavilyTextSearch(apiKey: "ApiKey", options: new() { HttpClient = this._httpClient }); + + // Act - Tavily has no offset parameter, so max_results must equal Top regardless of Skip. + var searchOptions = new TextSearchOptions + { + Top = top, + Skip = skip + }; + await textSearch.SearchAsync("What is the Semantic Kernel?", searchOptions); + + // Assert + var requestBodyJson = Encoding.UTF8.GetString(this._messageHandlerStub.RequestContents[0]!); + Assert.Contains($"\"max_results\":{expectedMaxResults}", requestBodyJson); + } + #endregion #region private diff --git a/dotnet/src/Plugins/Plugins.Web/Tavily/TavilyTextSearch.cs b/dotnet/src/Plugins/Plugins.Web/Tavily/TavilyTextSearch.cs index 41fd5cd35df1..b74ff31fb257 100644 --- a/dotnet/src/Plugins/Plugins.Web/Tavily/TavilyTextSearch.cs +++ b/dotnet/src/Plugins/Plugins.Web/Tavily/TavilyTextSearch.cs @@ -676,7 +676,7 @@ private TavilySearchRequest BuildRequestContent(string query, int top, int skip, string? topic = null; string? timeRange = null; int? days = null; - int? maxResults = top - skip; + int? maxResults = top; IList? includeDomains = null; IList? excludeDomains = null;