Skip to content

718 create a single reactor to search both engines and apps#794

Merged
ryanweiler92 merged 6 commits intodevfrom
718-create-a-single-reactor-to-search-both-engines-and-apps
May 19, 2025
Merged

718 create a single reactor to search both engines and apps#794
ryanweiler92 merged 6 commits intodevfrom
718-create-a-single-reactor-to-search-both-engines-and-apps

Conversation

@shubhammahure
Copy link
Copy Markdown
Contributor

@shubhammahure shubhammahure commented May 9, 2025

MyEngineProjectReactor

Description

The MyEngineProjectReactor is a unified reactor that consolidates the logic for fetching data from both Engines and Projects. It determines the source of data based on the type parameter and executes a search accordingly.
Support for new metadata fields TYPE and SUB_TYPE has been added to the description section. These fields help filter and classify engines and projects more accurately during the search.

Conditional Fetching

If type is provided in the parameters, it performs a search for Engines.

If type is not provided, it fall to else part for searching with Projects.

How to Test(via app terminal)

For Engine

MyEngineProject( metaKeys = ["tag","domain","data classification","data restrictions","description"] , metaFilters = [ {} ] , filterWord=[""], type=['ENGINE'], sub_type=['MODEL'], offset=[0], limit=[15]) ;

For Project(App)

MyEngineProject(metaKeys = ["tag","domain","data classification","embedder","data restrictions","description"], metaFilters=[{}], filterWord=[""], type=['APP'], sub_type=[{}], onlyPortals=[true]);

A screenshot has been added for better clarity.

image

@shubhammahure shubhammahure linked an issue May 9, 2025 that may be closed by this pull request
7 tasks
@github-actions
Copy link
Copy Markdown

github-actions bot commented May 9, 2025

@CodiumAI-Agent /describe

@QodoAI-Agent
Copy link
Copy Markdown

Title

718 create a single reactor to search both engines and apps


User description

MyEngineProjectReactor

Description

The MyEngineProjectReactor is a unified reactor that consolidates the logic for fetching data from both Engines and Projects. It determines the source of data based on the type parameter and executes a search accordingly.

Conditional Fetching

If engineType is provided in the parameters, it performs a search for Engines.

If engineType is not provided, it fall to else part for searching with Projects.

How to Test(via app terminal)

For Engine

MyEngineProject( metaKeys = ["tag","domain","data classification","data restrictions","description"] , metaFilters = [ {} ] , filterWord=[""], userT = [true], engineTypes=['MODEL'], offset=[0], limit=[15]) ;

For Project(App)

MyEngineProject(metaKeys = ["tag","domain","data classification","data restrictions","description"], metaFilters=[{}], filterWord=[""], onlyPortals=[true]);

A screenshot has been added for better clarity.

image (3)


PR Type

Enhancement


Description

Add unified engine/project search reactor
Implement conditional fetching based on engineType
Enrich results with metadata and user tracking
Provide helper methods for filter extraction


Changes walkthrough 📝

Relevant files
Enhancement
MyEngineProjectReactor.java
Unified engine and project search reactor                               

src/prerna/reactor/MyEngineProjectReactor.java

  • Added new reactor for unified engine/project search
  • Implemented conditional logic based on engineType presence
  • Enriched results with metadata and user tracking
  • Added helper methods extracting filter parameters
  • +319/-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

    github-actions bot commented May 9, 2025

    @CodiumAI-Agent /review

    @github-actions
    Copy link
    Copy Markdown

    github-actions bot commented May 9, 2025

    @CodiumAI-Agent /improve

    @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

    Null Safety

    Filter and metadata helper methods return null instead of empty collections, which can lead to NullPointerExceptions downstream when these are dereferenced.

    private List<String> getEngineIdFilters() {
    	GenRowStruct grs = this.store.getNoun(ReactorKeysEnum.ENGINE.getKey());
    	if(grs != null && !grs.isEmpty()) {
    		return grs.getAllStrValues();
    	}
    
    	return null;
    }
    Code Duplication

    The loops for fetching and merging metadata in both the engine and project branches are nearly identical; consider extracting them into a shared helper to reduce duplication and simplify maintenance.

    if(!noMeta) {
    	IRawSelectWrapper wrapper = null;
    	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;
    			}
    
    			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);
    			}
    		}
    	}
    Missing Feature

    The includeUserT flag is only applied for engines; the project branch does not fetch user tracking or vote data, leading to inconsistent behavior between the two flows.

    if(!projectInfo.isEmpty() && (!noMeta || includeUserT)) {
    	Map<String, Integer> index = new HashMap<>(projectInfo.size());
    	int size = projectInfo.size();
    	// now we want to add most executed insights
    	for(int i = 0; i < size; i++) {
    		Map<String, Object> project = projectInfo.get(i);
    		String projectId = project.get("project_id").toString();
    		// keep list of project ids to get the index
    		index.put(projectId, Integer.valueOf(i));
    	}
    
    	if(!noMeta) {
    		IRawSelectWrapper wrapper = null;
    		try {
    			wrapper = SecurityProjectUtils.getProjectMetadataWrapper(index.keySet(), getMetaKeys(), true);
    			while(wrapper.hasNext()) {
    				Object[] data = wrapper.next().getValues();
    				String projectId = (String) data[0];
    
    				String metaKey = (String) data[1];
    				String metaValue = (String) data[2];
    				if(metaValue == null) {
    					continue;
    				}
    
    				int indexToFind = index.get(projectId);
    				Map<String, Object> res = projectInfo.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);
    				}
    			}
    		}
    	}
    }
    return new NounMetadata(projectInfo, PixelDataType.CUSTOM_DATA_STRUCTURE, PixelOperationType.PROJECT_INFO);

    @QodoAI-Agent
    Copy link
    Copy Markdown

    QodoAI-Agent commented May 9, 2025

    PR Code Suggestions ✨

    Latest suggestions up to 053ee8c

    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Return empty list instead of null

    Returning null from collection getters can cause NullPointerExceptions in downstream
    code; return an empty list instead.

    src/prerna/reactor/MyEngineProjectReactor.java [227-234]

     private List<String> getEngineIdFilters() {
         GenRowStruct grs = this.store.getNoun(ReactorKeysEnum.ENGINE.getKey());
    -    if(grs != null && !grs.isEmpty()) {
    +    if (grs != null && !grs.isEmpty()) {
             return grs.getAllStrValues();
         }
    -    
    -    return null;
    +    return Collections.emptyList();
     }
    Suggestion importance[1-10]: 6

    __

    Why: Returning null from getEngineIdFilters can lead to NPEs downstream; returning Collections.emptyList() is a safe, minimal-impact improvement.

    Low
    Check map lookup result before use

    Guard against missing keys in the index map to avoid NullPointerExceptions when get
    returns null; skip entries that don't exist in the map.

    src/prerna/reactor/MyEngineProjectReactor.java [78-86]

     String databaseId = (String) data[0];
    -int indexToFind = index.get(databaseId);
    +Integer indexToFind = index.get(databaseId);
    +if (indexToFind == null) {
    +    continue;
    +}
    Suggestion importance[1-10]: 6

    __

    Why: Guarding the index.get(databaseId) call avoids potential NPEs if a key is missing, adding a simple, defensive check.

    Low
    General
    Use try-with-resources for wrapper

    Use a try-with-resources block for IRawSelectWrapper to simplify resource management
    and ensure close() is called automatically.

    src/prerna/reactor/MyEngineProjectReactor.java [73-113]

    -IRawSelectWrapper wrapper = null;
    -try {
    -    wrapper = SecurityEngineUtils.getEngineMetadataWrapper(index.keySet(), getMetaKeys(), true);
    -    while(wrapper.hasNext()) {
    +try (IRawSelectWrapper wrapper =
    +         SecurityEngineUtils.getEngineMetadataWrapper(index.keySet(), getMetaKeys(), true)) {
    +    while (wrapper.hasNext()) {
             ...
         }
     } 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: Converting the manual try/finally close pattern to a try-with-resources block simplifies code and ensures wrapper.close() is always called.

    Low

    Previous suggestions

    Suggestions up to commit 053ee8c
    CategorySuggestion                                                                                                                                    Impact
    General
    Add user tracking for projects

    You currently only handle metadata for projects but skip user tracking. Add a block
    similar to the engine branch under includeUserT to fetch and populate upvotes and
    hasUpvoted flags for projects when tracking is enabled.

    src/prerna/reactor/MyEngineProjectReactor.java [158-216]

     List<Map<String, Object>> projectInfo = SecurityProjectUtils.getUserProjectList(
             this.insight.getUser(), projectIdFilters, 
             favoritesOnly, portalsOnly, engineProjectMetadataFilter, 
             permissionFilters, searchTerm, limit, offset);
     
     if(!projectInfo.isEmpty() && (!noMeta || includeUserT)) {
         Map<String, Integer> index = new HashMap<>(projectInfo.size());
    -    // metadata block...
    +    // build index...
         if(!noMeta) {
    +        // existing metadata logic...
    +    }
    +    if(includeUserT && Utility.isUserTrackingEnabled()) {
             IRawSelectWrapper wrapper = null;
             try {
    -            wrapper = SecurityProjectUtils.getProjectMetadataWrapper(
    -                index.keySet(), getMetaKeys(), true);
    -            // populate metadata...
    +            wrapper = UserCatalogVoteUtils.getAllVotesWrapper(index.keySet());
    +            while(wrapper.hasNext()) {
    +                Object[] data = wrapper.next().getValues();
    +                String projectId = (String) data[0];
    +                int upvotes = ((Number) data[1]).intValue();
    +                projectInfo.get(index.get(projectId)).put("upvotes", upvotes);
    +            }
             } finally {
                 if(wrapper != null) { wrapper.close(); }
    +        }
    +        Map<String, Boolean> voted = UserCatalogVoteUtils.userProjectVotes(
    +            User.getUserIdAndType(this.insight.getUser()), index.keySet());
    +        for (String pid : index.keySet()) {
    +            projectInfo.get(index.get(pid)).put("hasUpvoted", 
    +                voted.getOrDefault(pid, false));
             }
         }
     }
     return new NounMetadata(projectInfo, PixelDataType.CUSTOM_DATA_STRUCTURE, PixelOperationType.PROJECT_INFO);
    Suggestion importance[1-10]: 8

    __

    Why: The project branch omits the user tracking logic present in the engine branch, so adding upvotes and hasUpvoted maintains feature parity and correct functionality.

    Medium
    Possible issue
    Return empty list instead of null

    Avoid returning null from filter helpers to prevent NullPointerExceptions when
    downstream code calls methods like keySet() or iterates over the results. Return an
    empty list instead of null so callers can safely iterate without additional null
    checks.

    src/prerna/reactor/MyEngineProjectReactor.java [227-234]

     private List<String> getEngineIdFilters() {
         GenRowStruct grs = this.store.getNoun(ReactorKeysEnum.ENGINE.getKey());
    -    if(grs != null && !grs.isEmpty()) {
    +    if (grs != null && !grs.isEmpty()) {
             return grs.getAllStrValues();
         }
    -    
    -    return null;
    +    return Collections.emptyList();
     }
    Suggestion importance[1-10]: 6

    __

    Why: Using Collections.emptyList() prevents potential NPEs when callers iterate the filter results and is a safe default.

    Low
    Default metadata map to empty

    If getMetaMap() returns null, passing it to utility methods may cause NPEs. Default
    the metadata map to an empty HashMap when null so downstream calls can operate
    without additional checks.

    src/prerna/reactor/MyEngineProjectReactor.java [52]

     Map<String, Object> engineProjectMetadataFilter = getMetaMap();
    +if (engineProjectMetadataFilter == null) {
    +    engineProjectMetadataFilter = new HashMap<>();
    +}
    Suggestion importance[1-10]: 5

    __

    Why: Guarding against null for engineProjectMetadataFilter helps avoid downstream NPEs with minimal impact.

    Low

    @ppatel9703
    Copy link
    Copy Markdown
    Contributor

    @kunal0137 @ryanweiler92 This works as described. However have a few questions

    1. Do we want this to combine the search into one reactor
    2. Having different inputs be valid as part of the ask concerns me
    3. Do we want user tracking to be passed in as a boolean? Seems like we should just base that off if its enabled in the rdf map

    @shubhammahure might have you refactor a few portions of the file based on feedback from above and other small changes

    @ppatel9703
    Copy link
    Copy Markdown
    Contributor

    @shubhammahure can you update the description to work for the changes you pushed up

    @punithkv4334
    Copy link
    Copy Markdown
    Contributor

    @kunal0137 @ryanweiler92 This works as described. However have a few questions

    1. Do we want this to combine the search into one reactor
    2. Having different inputs be valid as part of the ask concerns me
    3. Do we want user tracking to be passed in as a boolean? Seems like we should just base that off if its enabled in the rdf map

    @shubhammahure might have you refactor a few portions of the file based on feedback from above and other small changes

    Hi @ppatel9703 ,
    I've updated the PR with the changes based on the above feedback.

    @ryanweiler92 ryanweiler92 merged commit 0923711 into dev May 19, 2025
    3 checks passed
    @ryanweiler92 ryanweiler92 deleted the 718-create-a-single-reactor-to-search-both-engines-and-apps branch May 19, 2025 18:20
    @github-actions
    Copy link
    Copy Markdown

    @CodiumAI-Agent /update_changelog

    @QodoAI-Agent
    Copy link
    Copy Markdown

    Changelog updates: 🔄

    2025-05-19 *

    Added

    • Unified reactor to search both engines and apps
    • Support for TYPE and SUB_TYPE metadata filtering

    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.

    [BE] [APPS] Create a single reactor to search both engines and apps

    5 participants