@@ -132,59 +173,52 @@ export default function GeneralEmbeddingPreference() {
Embedding Providers
-
-
-
-
-
-
-
-
- {embeddingChoice === "native" &&
}
- {embeddingChoice === "openai" && (
-
- )}
- {embeddingChoice === "azure" && (
-
- )}
- {embeddingChoice === "localai" && (
-
- )}
+
+
+
+
+
+ setSearchQuery(e.target.value)}
+ autoComplete="off"
+ onKeyDown={(e) => {
+ if (e.key === "Enter") e.preventDefault();
+ }}
+ />
+
+
+
+ {filteredEmbedders.map((embedder) => {
+ return (
+ updateChoice(embedder.value)}
+ />
+ );
+ })}
+
+
+
setHasChanges(true)}
+ className="mt-4 flex flex-col gap-y-1"
+ >
+ {selectedEmbedder &&
+ EMBEDDERS.find(
+ (embedder) => embedder.value === selectedEmbedder
+ )?.options}
+
>
diff --git a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
index 0cecaa4d1b..d72cf3c2b3 100644
--- a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
+++ b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
@@ -12,7 +12,6 @@ import OllamaLogo from "@/media/llmprovider/ollama.png";
import LMStudioLogo from "@/media/llmprovider/lmstudio.png";
import LocalAiLogo from "@/media/llmprovider/localai.png";
import PreLoader from "@/components/Preloader";
-import LLMProviderOption from "@/components/LLMSelection/LLMProviderOption";
import OpenAiOptions from "@/components/LLMSelection/OpenAiOptions";
import AzureAiOptions from "@/components/LLMSelection/AzureAiOptions";
import AnthropicAiOptions from "@/components/LLMSelection/AnthropicAiOptions";
@@ -21,21 +20,31 @@ import LocalAiOptions from "@/components/LLMSelection/LocalAiOptions";
import NativeLLMOptions from "@/components/LLMSelection/NativeLLMOptions";
import GeminiLLMOptions from "@/components/LLMSelection/GeminiLLMOptions";
import OllamaLLMOptions from "@/components/LLMSelection/OllamaLLMOptions";
+import LLMItem from "@/components/LLMSelection/LLMItem";
+import { MagnifyingGlass } from "@phosphor-icons/react";
export default function GeneralLLMPreference() {
const [saving, setSaving] = useState(false);
const [hasChanges, setHasChanges] = useState(false);
- const [llmChoice, setLLMChoice] = useState("openai");
const [settings, setSettings] = useState(null);
const [loading, setLoading] = useState(true);
+ const [searchQuery, setSearchQuery] = useState("");
+ const [filteredLLMs, setFilteredLLMs] = useState([]);
+ const [selectedLLM, setSelectedLLM] = useState(null);
+
+ const isHosted = window.location.hostname.includes("useanything.com");
+
const handleSubmit = async (e) => {
e.preventDefault();
- setSaving(true);
+ const form = e.target;
const data = {};
- const form = new FormData(e.target);
- for (var [key, value] of form.entries()) data[key] = value;
+ 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 {
@@ -46,7 +55,7 @@ export default function GeneralLLMPreference() {
};
const updateLLMChoice = (selection) => {
- setLLMChoice(selection);
+ setSelectedLLM(selection);
setHasChanges(true);
};
@@ -54,12 +63,80 @@ export default function GeneralLLMPreference() {
async function fetchKeys() {
const _settings = await System.keys();
setSettings(_settings);
- setLLMChoice(_settings?.LLMProvider);
+ setSelectedLLM(_settings?.LLMProvider);
setLoading(false);
}
fetchKeys();
}, []);
+ useEffect(() => {
+ const filtered = LLMS.filter((llm) =>
+ llm.name.toLowerCase().includes(searchQuery.toLowerCase())
+ );
+ setFilteredLLMs(filtered);
+ }, [searchQuery, selectedLLM]);
+
+ const LLMS = [
+ {
+ name: "OpenAI",
+ value: "openai",
+ logo: OpenAiLogo,
+ options:
,
+ description: "The standard option for most non-commercial use.",
+ },
+ {
+ name: "Azure OpenAI",
+ value: "azure",
+ logo: AzureOpenAiLogo,
+ options:
,
+ description: "The enterprise option of OpenAI hosted on Azure services.",
+ },
+ {
+ name: "Anthropic",
+ value: "anthropic",
+ logo: AnthropicLogo,
+ options:
,
+ description: "A friendly AI Assistant hosted by Anthropic.",
+ },
+ {
+ name: "Gemini",
+ value: "gemini",
+ logo: GeminiLogo,
+ options:
,
+ description: "Google's largest and most capable AI model",
+ },
+ {
+ name: "Ollama",
+ value: "ollama",
+ logo: OllamaLogo,
+ options:
,
+ description: "Run LLMs locally on your own machine.",
+ },
+ {
+ name: "LM Studio",
+ value: "lmstudio",
+ logo: LMStudioLogo,
+ options:
,
+ description:
+ "Discover, download, and run thousands of cutting edge LLMs in a few clicks.",
+ },
+ {
+ name: "Local AI",
+ value: "localai",
+ logo: LocalAiLogo,
+ options:
,
+ description: "Run LLMs locally on your own machine.",
+ },
+ {
+ name: "Native",
+ value: "native",
+ logo: AnythingLLMIcon,
+ options:
,
+ description:
+ "Use a downloaded custom Llama model for chatting on this AnythingLLM instance.",
+ },
+ ];
+
return (
{!isMobile &&
}
@@ -78,11 +155,7 @@ export default function GeneralLLMPreference() {
className="relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
>
{isMobile &&
}
-