这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@shatfield4
Copy link
Collaborator

resolves #529

  • Updates to the search UI for onboarding flow and general settings
  • Implements sorting for selected items in search UI

@shatfield4 shatfield4 linked an issue Jan 5, 2024 that may be closed by this pull request
@review-agent-prime
Copy link

frontend/src/pages/OnboardingFlow/Steps/EmbeddingPreference/index.jsx

Consider using useMemo to memoize the result of the filtering operation. This will prevent unnecessary re-computations when the dependencies haven't changed, thus improving the performance of the code.
Create Issue
See the diff
Checkout the fix

    const filteredEmbedders = useMemo(() => {
      const selectedEmbedderItem = EMBEDDERS.find(
        (embedder) => embedder.value === selectedEmbedder
      );
      let filtered = EMBEDDERS.filter((embedder) =>
        embedder.name.toLowerCase().includes(searchQuery.toLowerCase())
      );
      if (selectedEmbedderItem) {
        filtered = [
          selectedEmbedderItem,
          ...filtered.filter((embedder) => embedder.value !== selectedEmbedder),
        ];
      }
      return filtered;
    }, [searchQuery, selectedEmbedder]);
git fetch origin && git checkout -b ReviewBot/Impro-alaqkkx origin/ReviewBot/Impro-alaqkkx

frontend/src/pages/OnboardingFlow/Steps/VectorDatabaseConnection/index.jsx

Consider using useMemo to memoize the result of the filtering operation. This will prevent unnecessary re-computations when the dependencies haven't changed, thus improving the performance of the code.
Create Issue
See the diff
Checkout the fix

    const filteredVDBs = useMemo(() => {
      const selectedVDBItem = VECTOR_DBS.find((vdb) => vdb.value === selectedVDB);
      let filtered = VECTOR_DBS.filter((vdb) =>
        vdb.name.toLowerCase().includes(searchQuery.toLowerCase())
      );
      if (selectedVDBItem) {
        filtered = [
          selectedVDBItem,
          ...filtered.filter((vdb) => vdb.value !== selectedVDB),
        ];
      }
      return filtered;
    }, [searchQuery, selectedVDB]);
git fetch origin && git checkout -b ReviewBot/Impro-cqcd7pn origin/ReviewBot/Impro-cqcd7pn

frontend/src/pages/GeneralSettings/EmbeddingPreference/index.jsx

Consider using a memoized version of the filteredEmbedders array. This can improve performance by avoiding unnecessary re-renders.
Create Issue
See the diff
Checkout the fix

    // Instead of this:
    const [filteredEmbedders, setFilteredEmbedders] = useState([]);
    // You could do this:
    const filteredEmbedders = useMemo(() => {
      const selectedEmbedderItem = EMBEDDERS.find(
        (embedder) => embedder.value === selectedEmbedder
      );
      let filtered = EMBEDDERS.filter((embedder) =>
        embedder.name.toLowerCase().includes(searchQuery.toLowerCase())
      );
      if (selectedEmbedderItem) {
        filtered = [
          selectedEmbedderItem,
          ...filtered.filter((embedder) => embedder.value !== selectedEmbedder),
        ];
      }
      return filtered;
    }, [searchQuery, selectedEmbedder]);
git fetch origin && git checkout -b ReviewBot/The-c-gmz50rj origin/ReviewBot/The-c-gmz50rj

frontend/src/pages/GeneralSettings/LLMPreference/index.jsx

The useEffect hook that filters the LLMs is triggered every time the searchQuery or selectedLLM changes. This could lead to unnecessary re-renders and performance issues if the list of LLMs is large. Consider using a memoized version of the filteredLLMs to avoid unnecessary computations.
Create Issue
See the diff
Checkout the fix

    const filteredLLMs = useMemo(() => {
      const selectedLLMItem = LLMS.find((llm) => llm.value === selectedLLM);
      let filtered = LLMS.filter((llm) =>
        llm.name.toLowerCase().includes(searchQuery.toLowerCase())
      );
      // If LLM selected, move it to the top
      if (selectedLLMItem) {
        filtered = [
          selectedLLMItem,
          ...filtered.filter((llm) => llm.value !== selectedLLM),
        ];
      }
      return filtered;
    }, [searchQuery, selectedLLM]);
git fetch origin && git checkout -b ReviewBot/The-c-izrft48 origin/ReviewBot/The-c-izrft48

The handleSubmit function is declared inside the component which means it will be recreated every time the component re-renders. This could lead to unnecessary re-renders and performance issues. Consider using the useCallback hook to memoize the function.
Create Issue
See the diff
Checkout the fix

    const handleSubmit = useCallback(async (e) => {
      e.preventDefault();
      const form = e.target;
      const data = {};
      const formData = new FormData(form);
      data.LLMProvider = selectedLLM;
      for (var [key, value] of formData.entries()) data[key] = value;
      const { error } = await System.updateSystem(data);
      setSaving(true);
      if (error) {
        showToast(`Failed to save LLM settings: ${error}`, "error");
      } else {
        showToast("LLM preferences saved successfully.", "success");
      }
      setSaving(false);
      setHasChanges(!!error);
    }, [selectedLLM]);
git fetch origin && git checkout -b ReviewBot/The-c-33hdc5u origin/ReviewBot/The-c-33hdc5u

frontend/src/pages/GeneralSettings/VectorDatabase/index.jsx

Consider using a memoized version of the filteredVDBs to avoid unnecessary re-renders. This can be achieved by using the useMemo hook from React. This will ensure that the filteredVDBs are only recalculated when searchQuery or selectedVDB changes.
Create Issue
See the diff
Checkout the fix

    const filteredVDBs = useMemo(() => {
      const selectedVDBItem = VECTOR_DBS.find((vdb) => vdb.value === selectedVDB);
      let filtered = VECTOR_DBS.filter((vdb) =>
        vdb.name.toLowerCase().includes(searchQuery.toLowerCase())
      );
      if (selectedVDBItem) {
        filtered = [
          selectedVDBItem,
          ...filtered.filter((vdb) => vdb.value !== selectedVDB),
        ];
      }
      return filtered;
    }, [searchQuery, selectedVDB]);
git fetch origin && git checkout -b ReviewBot/The-c-1yne6yp origin/ReviewBot/The-c-1yne6yp

…' of github.com:Mintplex-Labs/anything-llm into 529-ui-update-llm-embedder-and-vectordb-selection-pages
@timothycarambat timothycarambat merged commit d95d1a9 into master Jan 5, 2024
@timothycarambat timothycarambat deleted the 529-ui-update-llm-embedder-and-vectordb-selection-pages branch January 5, 2024 02:21
cabwds pushed a commit to cabwds/anything-llm that referenced this pull request Jul 3, 2025
…s#533)

* move llm, embedder, vectordb items to components folder

* add backdrop blur to search in llm, embedder, vectordb preferences

* implement searchable llm preference in settings

* implement searchable embedder in settings

* remove unused useState from embedder preferences

* implement searchable vector database in settings

* fix save changes button not appearing on change for llm, embedder, and vectordb settings pages

* sort selected items in all settings and put selected item at top of list

* no auto-top for selection

---------

Co-authored-by: timothycarambat <rambat1010@gmail.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.

[UI] Update LLM, Embedder, and VectorDB selection pages

3 participants