Skip to content

Adding sort options to the myengines reactor#479

Merged
ryanweiler92 merged 7 commits intodevfrom
473-task-adding-sort-options-to-the-myengines-reactor
May 7, 2025
Merged

Adding sort options to the myengines reactor#479
ryanweiler92 merged 7 commits intodevfrom
473-task-adding-sort-options-to-the-myengines-reactor

Conversation

@rithvik-doshi
Copy link
Copy Markdown
Contributor

@rithvik-doshi rithvik-doshi commented Feb 25, 2025

Test: MyEngines ( sort = [ { "DATECREATED" : "ASC", "ENGINENAME": "DESC" } ] , engineTypes = [ "MODEL" ] ) ;

Supported sort fields: DATECREATED, ENGINENAME. Requires a FE hookup before merge

@rithvik-doshi rithvik-doshi linked an issue Feb 25, 2025 that may be closed by this pull request
@github-actions
Copy link
Copy Markdown

@CodiumAI-Agent /describe

@QodoAI-Agent
Copy link
Copy Markdown

Title

Adding sort options to the myengines reactor


PR Type

Enhancement


Description

  • Added sorting functionality to getUserEngineList with validation.

  • Enhanced MyEnginesReactor to support dynamic sorting options.

  • Introduced TypeReference class for generic type handling.

  • Refactored utility methods for cleaner and reusable code.


Changes walkthrough 📝

Relevant files
Enhancement
SecurityEngineUtils.java
Add sorting functionality to `getUserEngineList`                 

src/prerna/auth/utils/SecurityEngineUtils.java

  • Added sortFields parameter to getUserEngineList.
  • Implemented sorting logic with validation for supported fields.
  • Default sorting applied when no sort fields are provided.
  • Throws exception for invalid sort parameters.
  • +17/-4   
    MyEnginesReactor.java
    Enhance `MyEnginesReactor` with sorting and refactoring   

    src/prerna/reactor/security/MyEnginesReactor.java

  • Added support for dynamic sorting via sortFields.
  • Refactored methods to improve code reuse and readability.
  • Integrated new sorting logic into the reactor's execution flow.
  • Added utility methods for generic map and list handling.
  • +105/-73
    TypeReference.java
    Add `TypeReference` class for generic type handling           

    src/prerna/security/TypeReference.java

  • Introduced TypeReference class for handling generic types.
  • Provides a mechanism to retrieve type information at runtime.
  • +21/-0   

    Need help?
  • Type /help how to ... in the comments thread for any questions about PR-Agent usage.
  • Check out the documentation for more information.
  • @github-actions
    Copy link
    Copy Markdown

    @CodiumAI-Agent /review

    @QodoAI-Agent
    Copy link
    Copy Markdown

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
    🧪 No relevant tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Possible Issue

    The sortFields validation logic in the getUserEngineList method might throw an exception if unsupported sort keys are passed. Ensure this behavior is intended and properly handled in the calling code.

    if (sortFields == null || sortFields.isEmpty()) {
    	// Default Sorting
    	qs1.addOrderBy(new QueryColumnOrderBySelector("low_database_name"));	
    } else {
    	Set<String> sortKeys = sortFields.keySet();
    	Set<String> validSorts = new HashSet<>(Arrays.asList("ENGINENAME", "DATECREATED"));
    	if (!validSorts.containsAll(sortKeys)) {
    		throw new SemossPixelException("Invalid Sort Parameters passed: Only \"ENGINENAME\" and \"DATECREATED\" are supported");
    	}
    	for (String s: sortKeys) {
    		qs1.addOrderBy("ENGINE__" + s, sortFields.getOrDefault(s, "ASC"));
    	}
    Code Duplication

    The logic for handling IRawSelectWrapper instances is duplicated in multiple places. Consider refactoring to improve maintainability and reduce redundancy.

    		wrapper = SecurityEngineUtils.getEngineMetadataWrapper(index.keySet(), getMetaKeys(), true);
    		while (wrapper.hasNext()) {
    			Object[] data = wrapper.next().getValues();
    			String databaseId = (String) data[0];
    
    			String metaKey = (String) data[1];
    			String metaValue = (String) data[2];
    			if (metaValue == null) {
    				continue;
    			}
    
    			int indexToFind = index.get(databaseId);
    			Map<String, Object> res = engineInfo.get(indexToFind);
    			// whatever it is, if it is single send a single value, if it is multi send as
    			// array
    			if (res.containsKey(metaKey)) {
    				Object obj = res.get(metaKey);
    				if (obj instanceof List) {
    					((List) obj).add(metaValue);
    				} else {
    					List<Object> newList = new ArrayList<>();
    					newList.add(obj);
    					newList.add(metaValue);
    					res.put(metaKey, newList);
    				}
    			} else {
    				res.put(metaKey, metaValue);
    			}
    		}
    	} catch (Exception e) {
    		classLogger.error(Constants.STACKTRACE, e);
    	} finally {
    		if (wrapper != null) {
    			try {
    				wrapper.close();
    			} catch (IOException e) {
    				classLogger.error(Constants.STACKTRACE, e);
    			}
    		}
    	}
    }
    if (includeUserT && Utility.isUserTrackingEnabled()) {
    	IRawSelectWrapper wrapper = null;
    	try {
    		wrapper = UserCatalogVoteUtils.getAllVotesWrapper(index.keySet());
    		while (wrapper.hasNext()) {
    			Object[] data = wrapper.next().getValues();
    			String databaseId = (String) data[0];
    			int upvotes = ((Number) data[1]).intValue();
    
    			int indexToFind = index.get(databaseId);
    			Map<String, Object> res = engineInfo.get(indexToFind);
    			res.put("upvotes", upvotes);
    		}
    	} catch (Exception e) {
    		classLogger.error(Constants.STACKTRACE, e);
    	} finally {
    		if (wrapper != null) {
    			try {
    				wrapper.close();
    			} catch (IOException e) {
    				classLogger.error(Constants.STACKTRACE, e);
    			}
    		}
    	}
    
    	Map<String, Boolean> voted = UserCatalogVoteUtils
    			.userEngineVotes(User.getUserIdAndType(this.insight.getUser()), index.keySet());
    	for (String ks : index.keySet()) {
    Default Sorting Behavior

    The default sorting behavior in getSortFields is not clearly documented. Ensure that the default behavior aligns with user expectations and is consistent across the application.

    private Map<String, String> getSortFields() {
    	// key: sortField, value: direction
    	return getGenericMap(ReactorKeysEnum.SORT.getKey(), new TypeReference<Map<String, String>>() {
    	});

    @github-actions
    Copy link
    Copy Markdown

    @CodiumAI-Agent /improve

    @QodoAI-Agent
    Copy link
    Copy Markdown

    QodoAI-Agent commented Feb 25, 2025

    PR Code Suggestions ✨

    Latest suggestions up to e3a8e4a

    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Validate sort order directions

    Validate the sort order values to allow only "ASC" or "DESC" before applying them.

    src/prerna/auth/utils/SecurityEngineUtils.java [2401-2403]

     for (String s: sortKeys) {
    -    qs1.addOrderBy("ENGINE__" + s, sortFields.getOrDefault(s, "ASC"));
    +    String sortOrder = sortFields.getOrDefault(s, "ASC");
    +    if (!"ASC".equalsIgnoreCase(sortOrder) && !"DESC".equalsIgnoreCase(sortOrder)) {
    +        throw new SemossPixelException("Invalid sort order: " + sortOrder + ". Only 'ASC' and 'DESC' are allowed.");
    +    }
    +    qs1.addOrderBy("ENGINE__" + s, sortOrder);
     }
    Suggestion importance[1-10]: 7

    __

    Why: The suggestion improves robustness by ensuring the sort order is either "ASC" or "DESC", preventing invalid inputs; it adds a useful check although the existing code already validates sort keys.

    Medium

    Previous suggestions

    Suggestions up to commit d66b269
    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Validate data type in getGenericMap

    Ensure that the getGenericMap method handles cases where the mapInputs list contains
    unexpected or invalid data types, which could lead to runtime exceptions.

    src/prerna/reactor/security/MyEnginesReactor.java [194-196]

     List<NounMetadata> mapInputs = this.curRow.getNounsOfType(PixelDataType.MAP);
     if (mapInputs != null && !mapInputs.isEmpty()) {
    -    return (Map<K, V>) mapInputs.get(0).getValue();
    +    Object value = mapInputs.get(0).getValue();
    +    if (!(value instanceof Map)) {
    +        throw new IllegalArgumentException("Expected a Map type but found: " + value.getClass().getName());
    +    }
    +    return (Map<K, V>) value;
     }
    Suggestion importance[1-10]: 9

    __

    Why: Validating the data type in getGenericMap prevents runtime exceptions by ensuring the expected type is present. This is a critical improvement for maintaining type safety and avoiding unexpected behavior.

    High
    Add null validation for sort parameters

    Validate the sortFields map to ensure it does not contain null keys or values before
    processing, as this could lead to unexpected behavior or runtime exceptions.

    src/prerna/auth/utils/SecurityEngineUtils.java [2376-2387]

     if (sortFields == null || sortFields.isEmpty()) {
         // Default Sorting
         qs1.addOrderBy(new QueryColumnOrderBySelector("low_database_name"));    
     } else {
    +    if (sortFields.containsKey(null) || sortFields.containsValue(null)) {
    +        throw new SemossPixelException("Sort parameters cannot contain null keys or values");
    +    }
         Set<String> sortKeys = sortFields.keySet();
         Set<String> validSorts = new HashSet<>(Arrays.asList("ENGINENAME", "DATECREATED"));
         if (!validSorts.containsAll(sortKeys)) {
             throw new SemossPixelException("Invalid Sort Parameters passed: Only \"ENGINENAME\" and \"DATECREATED\" are supported");
         }
         for (String s: sortKeys) {
             qs1.addOrderBy("ENGINE__" + s, sortFields.getOrDefault(s, "ASC"));
         }
     }
    Suggestion importance[1-10]: 8

    __

    Why: Adding null validation for sort parameters ensures robustness by preventing potential runtime exceptions caused by null keys or values in the sortFields map. This is a significant improvement in terms of error handling and code reliability.

    Medium
    Add null check for engineInfo

    Add a null check for the engineInfo list before iterating over it to avoid potential
    NullPointerException.

    src/prerna/reactor/security/MyEnginesReactor.java [85-89]

    -if (!engineInfo.isEmpty() && (!noMeta || includeUserT)) {
    +if (engineInfo != null && !engineInfo.isEmpty() && (!noMeta || includeUserT)) {
         Map<String, Integer> index = new HashMap<>(engineInfo.size());
         int size = engineInfo.size();
         for (int i = 0; i < size; i++) {
             Map<String, Object> engine = engineInfo.get(i);
    Suggestion importance[1-10]: 7

    __

    Why: Adding a null check for engineInfo enhances the code's robustness by preventing potential NullPointerException. This is a valuable improvement for handling edge cases gracefully.

    Medium
    General
    Prevent resource leaks in wrapper.close

    Ensure that the wrapper.close() method is called in a finally block even if an
    exception occurs during the while (wrapper.hasNext()) loop to prevent resource
    leaks.

    src/prerna/reactor/security/MyEnginesReactor.java [98-136]

     try {
         wrapper = SecurityEngineUtils.getEngineMetadataWrapper(index.keySet(), getMetaKeys(), true);
    -    while (wrapper.hasNext()) {
    -        Object[] data = wrapper.next().getValues();
    -        String databaseId = (String) data[0];
    -        String metaKey = (String) data[1];
    -        String metaValue = (String) data[2];
    -        if (metaValue == null) {
    -            continue;
    +    try {
    +        while (wrapper.hasNext()) {
    +            Object[] data = wrapper.next().getValues();
    +            String databaseId = (String) data[0];
    +            String metaKey = (String) data[1];
    +            String metaValue = (String) data[2];
    +            if (metaValue == null) {
    +                continue;
    +            }
    +            int indexToFind = index.get(databaseId);
    +            Map<String, Object> res = engineInfo.get(indexToFind);
    +            if (res.containsKey(metaKey)) {
    +                Object obj = res.get(metaKey);
    +                if (obj instanceof List) {
    +                    ((List) obj).add(metaValue);
    +                } else {
    +                    List<Object> newList = new ArrayList<>();
    +                    newList.add(obj);
    +                    res.put(metaKey, newList);
    +                }
    +            } else {
    +                res.put(metaKey, metaValue);
    +            }
             }
    -        int indexToFind = index.get(databaseId);
    -        Map<String, Object> res = engineInfo.get(indexToFind);
    -        if (res.containsKey(metaKey)) {
    -            Object obj = res.get(metaKey);
    -            if (obj instanceof List) {
    -                ((List) obj).add(metaValue);
    -            } else {
    -                List<Object> newList = new ArrayList<>();
    -                newList.add(obj);
    -                res.put(metaKey, newList);
    -            }
    -        } else {
    -            res.put(metaKey, metaValue);
    +    } finally {
    +        if (wrapper != null) {
    +            wrapper.close();
             }
         }
     } catch (Exception e) {
         classLogger.error(Constants.STACKTRACE, e);
    -} finally {
    -    if (wrapper != null) {
    -        try {
    -            wrapper.close();
    -        } catch (IOException e) {
    -            classLogger.error(Constants.STACKTRACE, e);
    -        }
    -    }
     }
    Suggestion importance[1-10]: 6

    __

    Why: Ensuring that wrapper.close() is always called, even if an exception occurs during the loop, helps prevent resource leaks. While the existing code already handles this in a finally block, the suggestion introduces a nested try-finally for added clarity and safety.

    Low

    @rithvik-doshi rithvik-doshi self-assigned this Feb 26, 2025
    @memisrose
    Copy link
    Copy Markdown

    FE PR:
    SEMOSS/semoss-ui#679

    @ryanweiler92 ryanweiler92 requested review from ryanweiler92 and removed request for ppatel9703 and themaherkhalil May 7, 2025 15:00
    @ryanweiler92 ryanweiler92 merged commit 79f9f71 into dev May 7, 2025
    3 checks passed
    @ryanweiler92 ryanweiler92 deleted the 473-task-adding-sort-options-to-the-myengines-reactor branch May 7, 2025 20:12
    @github-actions
    Copy link
    Copy Markdown

    github-actions bot commented May 7, 2025

    @CodiumAI-Agent /update_changelog

    @QodoAI-Agent
    Copy link
    Copy Markdown

    Changelog updates: 🔄

    [2025-05-07][*][https://github.com//pull/479]

    Added

    • support for custom sort options (DATECREATED, ENGINENAME) in MyEnginesReactor
    • overload in SecurityEngineUtils to accept and validate sort parameters with default ordering
    • new TypeReference helper for generic map deserialization

    to commit the new content to the CHANGELOG.md file, please type:
    '/update_changelog --pr_update_changelog.push_changelog_changes=true'

    manamittal added a commit that referenced this pull request May 20, 2025
    * fix(python): handle eval when it is a single line execution but there is string input with space (#756)
    
    * Update Dockerfile.tomcat (#757)
    
    * fix: tomcat builder setting env var
    
    * fix: updating tomcat to 9.0.104
    
    * Update Dockerfile.ubuntu22.04
    
    * Update Dockerfile.ubuntu22.04
    
    * Update Dockerfile.ubuntu22.04
    
    * feat: creating KubernetesModelScaler class (#763)
    
    * Update Dockerfile.ubuntu22.04
    
    * feat: adding ability to attach a file to a vector db source (#736)
    
    * Added AttachSourceToVectorDbReactor for uploading pdf file to an existing csv file and modified VectorFileDownloadReactor
    
    * fix: proper return for the download and matching the reactor name
    
    * fix: error for downloading single file vs multiple; error for copyToDirectory instead of copyFile
    
    * chore: renaming so reactor matches VectorFileDownload
    
    ---------
    
    Co-authored-by: Maher Khalil <themaherkhalil@gmail.com>
    
    * Update Dockerfile.ubuntu22.04
    
    * Update ubuntu2204.yml
    
    * Update ubuntu2204.yml
    
    * Update ubuntu2204_cuda.yml
    
    * Update Dockerfile.nvidia.cuda.12.5.1.ubuntu22.04
    
    * Update ubuntu2204_cuda.yml
    
    * Update ubuntu2204.yml
    
    * feat: exposing tools calling through models (#764)
    
    * 587 unit test for prernadsutil (#654)
    
    * test(unit): unit tests for the prerna.util.ds package
    
    * test(unit): unit tests for the prerna.util.ds.flatfile package
    
    * test(unit): removed reflections, added paraquet tests
    
    * test(unit): unit tests for the prerna.util.ds package
    
    * test(unit): unit tests for the prerna.util.ds.flatfile package
    
    * test(unit): removed reflections, added paraquet tests
    
    * Update ubuntu2204.yml
    
    * Update ubuntu2204.yml
    
    * Update ubuntu2204.yml
    
    * fix: update pipeline docker buildx version
    
    * fix: ignore buildx
    
    * fix: adjusting pipeline for cuda
    
    * feat: switching dynamic sas to default false (#766)
    
    * fix: changes to account for version 2.0.0 of pyjarowinkler (#769)
    
    * chore: using 'Py' instead of 'py' to be consistent (#770)
    
    * feat: full ast parsing of code to return evaluation of the last expression (#771)
    
    * Python Deterministic Token Trimming for Message Truncation (#765)
    
    * feat: deterministic-token-trimming
    
    * feat: modifying logic such that system prompt is second to last message for truncation
    
    ---------
    
    Co-authored-by: Maher Khalil <themaherkhalil@gmail.com>
    
    * fix: added date added column to enginepermission table (#768)
    
    * fix: add docker-in-docker container to run on sef-hosted runner (#773)
    
    Co-authored-by: Raul Esquivel <resmas.work@gmail.com>
    
    * fix: properly passing in the parameters from kwargs/smss into model limits calculation (#774)
    
    * fix: removing legacy param from arguments (#777)
    
    * fix: Fix docker cache build issue (#778)
    
    * adding no cache
    
    * adding no cache
    
    * feat: Adding Semantic Text Splitting & Token Text Splitting (#720)
    
    * [696] - build - Add chonky semantic text splitting - Added the function for chonky semantic text splitting and integrated with existing flow.
    
    * [696] - build - Add chonky semantic text splitting - Updated the code
    
    * [696] - build - Add chonky semantic text splitting - Updated the code comments
    
    * feat: adding reactor support through java
    
    * feat: updating pyproject.toml with chonky package
    
    * feat: check for default chunking method in smss
    
    * [696] - feat - Add chonku semantic text splitting - Resolved the conflicts
    
    * [696] - feat - Add chonky semantic text splitting - Organized the code.
    
    * feat: adding chunking by tokens and setting as default
    
    * updating comments on chunking strategies
    
    ---------
    
    Co-authored-by: Weiler, Ryan <ryanweiler92@gmail.com>
    Co-authored-by: kunal0137 <kunal0137@gmail.com>
    
    * feat: allowing for tools message in full prompt (#780)
    
    * UPDATE ::: Add docker in docker Dockerfiler (#784)
    
    * add docker in docker Dockerfile
    
    * Update Dockerfile.dind
    
    Remove python and tomcat arguments from Dockerfile
    
    * fix: remove-paddle-ocr (#786)
    
    * [#595] test(unit): adds unit test for prerna.engine.impl.model.kserve
    
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * feat: Tag semoss image (#789)
    
    * adding changes for non-release docker build
    
    * adding non-release build logic to cuda-semoss builder
    
    * updating push branches
    
    * fix: branch names on docker builds
    
    * fix: branch names on docker builds cuda
    
    * fix: adding push condition - change to pyproject toml file; adding event input vars to env vars (#790)
    
    * fix: python builder toml file change (#792)
    
    * fix: Catch errors when calling pixels from Python (#787)
    
    Co-authored-by: Weiler, Ryan <ryanweiler92@gmail.com>
    
    * Creating db links between engines and default apps (#693)
    
    * create db links between engine and default app
    
    * Rename column APPID to TOOL_APP
    
    * feat: add database_tool_app to getUserEngineList
    
    ---------
    
    Co-authored-by: Weiler, Ryan <ryanweiler92@gmail.com>
    
    * Adding sort options to the myengines reactor (#479)
    
    * added sort feature to MyEnginesReactor and genericized reactor imports
    
    * formatting
    
    * overloading method
    
    * validate sortList
    
    ---------
    
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * feat: cleaning up unused imports in MyEngine reactor (#793)
    
    * feat: Create Enum projectTemplate and update CreateAppFromTemplateReactor to accept existing appID for cloning applications (#621)
    
    Co-authored-by: kunal0137 <kunal0137@gmail.com>
    
    * Update GetEngineUsageReactor.java (#417)
    
    Co-authored-by: Maher Khalil <themaherkhalil@gmail.com>
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * Issue 596: Adds Unit Tests for prerna/engine/impl/model/responses and workers (#727)
    
    * [#596] test(unit): adds unit tests
    
    * fix: implements ai-agents suggestions
    
    ---------
    
    Co-authored-by: Jeff Vitunac <jvitunac@gmail.com>
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * 609 implement native blob storage for azure gcp and aws (#674)
    
    * Initial commit : implementation for azure blob storage
    
    * added dependency for azure in pom.xml
    
    * update logic to fetch the metadata from list details
    
    * changed functionality from listing containers to listing files within a selected container
    
    * initial commit for google cloud storage implementation
    
    * added field contant in enum class and removed unused method
    
    * add methods to parse comma-separated local and cloud paths
    
    * add methods to parse comma-separated local and cloud paths
    
    * implementation for aws s3 bucket
    
    * normalize container prefix path
    
    * merged all: implementation for azure, aws and gcp
    
    * refactor(storage): replace manual path normalization with normalizePath from Utility class
    
    ---------
    
    Co-authored-by: pvijayaraghavareddy <pvijayaraghavareddy@WORKSPA-6QV71G7.us.deloitte.com>
    Co-authored-by: Parth <parthpatel3@deloitte.com>
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * Get Node Pool Information for Remote Models (#806)
    
    * 590 unit test for prernaengineimpl (#808)
    
    * test(unit): update to filesystems hijacking for testing files
    
    * test: start of unit tests for abstract database engine
    
    * test(unit): added unit test for prerna.engine.impl
    
    * test(unit): finsihed tests for prerna.engine.impl
    
    * test(unit): adding back unused assignment
    
    ---------
    
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * Creating WordCountTokenizer Class (#802)
    
    * feat: creating word count tokenizer class && falling back to word count tokenizer if tiktok fails
    
    * feat: updating comment
    
    * feat: setting default chunking method as recursive (#810)
    
    * Unit tests fixes and Unit test Class file location updates (#812)
    
    * test(unit): moved tests to correct packages
    
    * test(unit): fixed a couple of unit tests
    
    * VectorDatabaseQueryReactor: output divider value for word doc chunks always 1 (#804)
    
    * Code implementation for #733
    
    * feat: Added code to resolve Divider page issue
    
    * Console output replaced by LOGGERs as per review comments
    
    * feat: replaced Console with Loggers
    
    ---------
    
    Co-authored-by: Varaham <katchabi50@gmail.com>
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * GetCurrentUserReactor (#818)
    
    Adding GetCurrentUserReactor to return user info including if user is an admin.
    
    * Python User Class (#819)
    
    * fix: trimming properties read from smss; fix: logging commands before executing (#821)
    
    * Updating getNodePoolsInfo() to parse and return zk info and models active actual (#822)
    
    * feat: update get node pool information for zk info and models active actual
    
    * feat: get remote model configs
    
    * Add unit tests for package prerna\engine\impl\vector (#728)
    
    * Create ChromaVectorDatabaseEngineUnitTests.java
    
    * completed tests for ChromaVectorDatabaseEngine class
    
    * [#604] test(unit): Created ChromaVectorDatabaseEngine unit tests
    
    * [604] tests(unit) : Completed test cases for ChromaVectorDatabaseEngine; update File operations to nio operations in ChromaVectorDatabaseEngine.java
    
    * [#604] tests(unit): added unit tests for all vector database engines and util classes in the prerna\engine\impl\vector package
    
    * [604] test(unit): replaced creating file paths with string literals with java.nio Paths.resolve/Paths.get methods
    
    ---------
    
    Co-authored-by: Maher Khalil <themaherkhalil@gmail.com>
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * feat: adding to the return of getenginemetadata (#813)
    
    * feat: adding to the return of getenginemetadata
    
    * fix: removing throws
    
    ---------
    
    Co-authored-by: Arash Afghahi <48933336+AAfghahi@users.noreply.github.com>
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    
    * 718 create a single reactor to search both engines and apps (#794)
    
    * feat(engineProject): Initial commit
    
    * chore: 718 create a single reactor to search both engines and apps
    
    * chore: 718 create a single reactor to search both engines and apps
    
    ---------
    
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    Co-authored-by: Vijayaraghavareddy <pvijayaraghavareddy@deloitte.com>
    
    * feat: update openai wrapper to handle multiple images (#832)
    
    * feat: adding user room map (#840)
    
    * feat: hiding side menu bar for non admins (#833)
    
    * Side menu changes
    
    * Review Comments fixed
    
    * Flag is renamed in  Constants.java
    
    * Review Comment fixed in Utility.java
    
    * fix: cleaning up defaults and comments
    
    ---------
    
    Co-authored-by: kunal0137 <kunal0137@gmail.com>
    
    ---------
    
    Co-authored-by: Maher Khalil <themaherkhalil@gmail.com>
    Co-authored-by: kunal0137 <kunal0137@gmail.com>
    Co-authored-by: Ryan Weiler <ryanweiler92@gmail.com>
    Co-authored-by: ManjariYadav2310 <manjayadav@deloitte.com>
    Co-authored-by: dpartika <dpartika@deloitte.com>
    Co-authored-by: Raul Esquivel <resmas.work@gmail.com>
    Co-authored-by: Pasupathi Muniyappan <pasupathi.muniyappan@kanini.com>
    Co-authored-by: resmas-tx <131498457+resmas-tx@users.noreply.github.com>
    Co-authored-by: AndrewRodddd <62724891+AndrewRodddd@users.noreply.github.com>
    Co-authored-by: radkalyan <107957324+radkalyan@users.noreply.github.com>
    Co-authored-by: samarthKharote <samarth.kharote@kanini.com>
    Co-authored-by: Shubham Mahure <shubham.mahure@kanini.com>
    Co-authored-by: rithvik-doshi <81876806+rithvik-doshi@users.noreply.github.com>
    Co-authored-by: Mogillapalli Manoj kumar <86736340+Khumar23@users.noreply.github.com>
    Co-authored-by: Jeff Vitunac <jvitunac@gmail.com>
    Co-authored-by: pvijayaraghavareddy <pvijayaraghavareddy@WORKSPA-6QV71G7.us.deloitte.com>
    Co-authored-by: Parth <parthpatel3@deloitte.com>
    Co-authored-by: KT Space <119169984+Varaham@users.noreply.github.com>
    Co-authored-by: Varaham <katchabi50@gmail.com>
    Co-authored-by: ericgonzal8 <ericgonzalez8@deloitte.com>
    Co-authored-by: Arash Afghahi <48933336+AAfghahi@users.noreply.github.com>
    Co-authored-by: Vijayaraghavareddy <pvijayaraghavareddy@deloitte.com>
    Co-authored-by: ammb-123 <ammb@deloitte.com>
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Labels

    None yet

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    [TASK] Adding sort options to the MyEngines reactor

    4 participants