mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2024-11-15 10:50:31 +01:00
[FIX] Fix manual input model pref for agents (#1848)
* patch llm providers that have manual inputs for model pref * refactor agent model fallback update UI to show disabled providers to stop questions about provider limitations * patch log on startup --------- Co-authored-by: timothycarambat <rambat1010@gmail.com>
This commit is contained in:
parent
79656718b2
commit
8f0af88332
@ -1,7 +1,9 @@
|
|||||||
import useGetProviderModels, {
|
import useGetProviderModels, {
|
||||||
DISABLED_PROVIDERS,
|
DISABLED_PROVIDERS,
|
||||||
} from "@/hooks/useGetProvidersModels";
|
} from "@/hooks/useGetProvidersModels";
|
||||||
|
import paths from "@/utils/paths";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { Link, useParams } from "react-router-dom";
|
||||||
|
|
||||||
// These models do NOT support function calling
|
// These models do NOT support function calling
|
||||||
function supportedModel(provider, model = "") {
|
function supportedModel(provider, model = "") {
|
||||||
@ -18,11 +20,32 @@ export default function AgentModelSelection({
|
|||||||
workspace,
|
workspace,
|
||||||
setHasChanges,
|
setHasChanges,
|
||||||
}) {
|
}) {
|
||||||
|
const { slug } = useParams();
|
||||||
const { defaultModels, customModels, loading } =
|
const { defaultModels, customModels, loading } =
|
||||||
useGetProviderModels(provider);
|
useGetProviderModels(provider);
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
if (DISABLED_PROVIDERS.includes(provider)) return null;
|
if (DISABLED_PROVIDERS.includes(provider)) {
|
||||||
|
return (
|
||||||
|
<div className="w-full h-10 justify-center items-center flex">
|
||||||
|
<p className="text-sm font-base text-white text-opacity-60 text-center">
|
||||||
|
Multi-model support is not supported for this provider yet.
|
||||||
|
<br />
|
||||||
|
Agent's will use{" "}
|
||||||
|
<Link
|
||||||
|
to={paths.workspace.settings.chatSettings(slug)}
|
||||||
|
className="underline"
|
||||||
|
>
|
||||||
|
the model set for the workspace
|
||||||
|
</Link>{" "}
|
||||||
|
or{" "}
|
||||||
|
<Link to={paths.settings.llmPreference()} className="underline">
|
||||||
|
the model set for the system.
|
||||||
|
</Link>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return (
|
return (
|
||||||
|
@ -2,6 +2,7 @@ import useGetProviderModels, {
|
|||||||
DISABLED_PROVIDERS,
|
DISABLED_PROVIDERS,
|
||||||
} from "@/hooks/useGetProvidersModels";
|
} from "@/hooks/useGetProvidersModels";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
export default function ChatModelSelection({
|
export default function ChatModelSelection({
|
||||||
provider,
|
provider,
|
||||||
workspace,
|
workspace,
|
@ -3,8 +3,10 @@ import AnythingLLMIcon from "@/media/logo/anything-llm-icon.png";
|
|||||||
import WorkspaceLLMItem from "./WorkspaceLLMItem";
|
import WorkspaceLLMItem from "./WorkspaceLLMItem";
|
||||||
import { AVAILABLE_LLM_PROVIDERS } from "@/pages/GeneralSettings/LLMPreference";
|
import { AVAILABLE_LLM_PROVIDERS } from "@/pages/GeneralSettings/LLMPreference";
|
||||||
import { CaretUpDown, MagnifyingGlass, X } from "@phosphor-icons/react";
|
import { CaretUpDown, MagnifyingGlass, X } from "@phosphor-icons/react";
|
||||||
import ChatModelSelection from "../ChatModelSelection";
|
import ChatModelSelection from "./ChatModelSelection";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import paths from "@/utils/paths";
|
||||||
|
|
||||||
// Some providers can only be associated with a single model.
|
// Some providers can only be associated with a single model.
|
||||||
// In that case there is no selection to be made so we can just move on.
|
// In that case there is no selection to be made so we can just move on.
|
||||||
@ -148,7 +150,22 @@ export default function WorkspaceLLMSelection({
|
|||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{!NO_MODEL_SELECTION.includes(selectedLLM) && (
|
{NO_MODEL_SELECTION.includes(selectedLLM) ? (
|
||||||
|
<>
|
||||||
|
{selectedLLM !== "default" && (
|
||||||
|
<div className="w-full h-10 justify-center items-center flex mt-4">
|
||||||
|
<p className="text-sm font-base text-white text-opacity-60 text-center">
|
||||||
|
Multi-model support is not supported for this provider yet.
|
||||||
|
<br />
|
||||||
|
This workspace will use{" "}
|
||||||
|
<Link to={paths.settings.llmPreference()} className="underline">
|
||||||
|
the model set for the system.
|
||||||
|
</Link>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
<div className="mt-4 flex flex-col gap-y-1">
|
<div className="mt-4 flex flex-col gap-y-1">
|
||||||
<ChatModelSelection
|
<ChatModelSelection
|
||||||
provider={selectedLLM}
|
provider={selectedLLM}
|
||||||
|
@ -10,6 +10,12 @@ const { USER_AGENT, WORKSPACE_AGENT } = require("./defaults");
|
|||||||
class AgentHandler {
|
class AgentHandler {
|
||||||
#invocationUUID;
|
#invocationUUID;
|
||||||
#funcsToLoad = [];
|
#funcsToLoad = [];
|
||||||
|
#noProviderModelDefault = {
|
||||||
|
azure: "OPEN_MODEL_PREF",
|
||||||
|
lmstudio: "LMSTUDIO_MODEL_PREF",
|
||||||
|
textgenwebui: null, // does not even use `model` in API req
|
||||||
|
"generic-openai": "GENERIC_OPEN_AI_MODEL_PREF",
|
||||||
|
};
|
||||||
invocation = null;
|
invocation = null;
|
||||||
aibitat = null;
|
aibitat = null;
|
||||||
channel = null;
|
channel = null;
|
||||||
@ -172,7 +178,7 @@ class AgentHandler {
|
|||||||
case "mistral":
|
case "mistral":
|
||||||
return "mistral-medium";
|
return "mistral-medium";
|
||||||
case "generic-openai":
|
case "generic-openai":
|
||||||
return "gpt-3.5-turbo";
|
return null;
|
||||||
case "perplexity":
|
case "perplexity":
|
||||||
return "sonar-small-online";
|
return "sonar-small-online";
|
||||||
case "textgenwebui":
|
case "textgenwebui":
|
||||||
@ -182,10 +188,30 @@ class AgentHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds or assumes the model preference value to use for API calls.
|
||||||
|
* If multi-model loading is supported, we use their agent model selection of the workspace
|
||||||
|
* If not supported, we attempt to fallback to the system provider value for the LLM preference
|
||||||
|
* and if that fails - we assume a reasonable base model to exist.
|
||||||
|
* @returns {string} the model preference value to use in API calls
|
||||||
|
*/
|
||||||
|
#fetchModel() {
|
||||||
|
if (!Object.keys(this.#noProviderModelDefault).includes(this.provider))
|
||||||
|
return this.invocation.workspace.agentModel || this.#providerDefault();
|
||||||
|
|
||||||
|
// Provider has no reliable default (cant load many models) - so we need to look at system
|
||||||
|
// for the model param.
|
||||||
|
const sysModelKey = this.#noProviderModelDefault[this.provider];
|
||||||
|
if (!!sysModelKey)
|
||||||
|
return process.env[sysModelKey] ?? this.#providerDefault();
|
||||||
|
|
||||||
|
// If all else fails - look at the provider default list
|
||||||
|
return this.#providerDefault();
|
||||||
|
}
|
||||||
|
|
||||||
#providerSetupAndCheck() {
|
#providerSetupAndCheck() {
|
||||||
this.provider = this.invocation.workspace.agentProvider || "openai";
|
this.provider = this.invocation.workspace.agentProvider || "openai";
|
||||||
this.model =
|
this.model = this.#fetchModel();
|
||||||
this.invocation.workspace.agentModel || this.#providerDefault();
|
|
||||||
this.log(`Start ${this.#invocationUUID}::${this.provider}:${this.model}`);
|
this.log(`Start ${this.#invocationUUID}::${this.provider}:${this.model}`);
|
||||||
this.#checkSetup();
|
this.#checkSetup();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user