diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentModelSelection/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentModelSelection/index.jsx index 085f4ef93a60ba3337cbdc619a9d341cc38adf9e..c6ec0ca22bfe679020e3cb450af457ba17e29bbc 100644 --- a/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentModelSelection/index.jsx +++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentModelSelection/index.jsx @@ -2,6 +2,20 @@ import useGetProviderModels, { DISABLED_PROVIDERS, } from "@/hooks/useGetProvidersModels"; +// These models do NOT support function calling +function supportedModel(provider, model = "") { + if (provider !== "openai") return true; + if (model.startsWith("gpt-3.5-turbo")) return true; + switch (model) { + case "gpt-4": + case "gpt-4-turbo-preview": + case "gpt-4-32k": + return true; + default: + return false; + } +} + export default function AgentModelSelection({ provider, workspace, @@ -60,6 +74,7 @@ export default function AgentModelSelection({ {defaultModels.length > 0 && ( <optgroup label="General models"> {defaultModels.map((model) => { + if (!supportedModel(provider, model)) return null; return ( <option key={model} @@ -75,6 +90,8 @@ export default function AgentModelSelection({ {Array.isArray(customModels) && customModels.length > 0 && ( <optgroup label="Custom models"> {customModels.map((model) => { + if (!supportedModel(provider, model.id)) return null; + return ( <option key={model.id} @@ -93,15 +110,18 @@ export default function AgentModelSelection({ <> {Object.entries(customModels).map(([organization, models]) => ( <optgroup key={organization} label={organization}> - {models.map((model) => ( - <option - key={model.id} - value={model.id} - selected={workspace?.agentModel === model.id} - > - {model.name} - </option> - ))} + {models.map((model) => { + if (!supportedModel(provider, model.id)) return null; + return ( + <option + key={model.id} + value={model.id} + selected={workspace?.agentModel === model.id} + > + {model.name} + </option> + ); + })} </optgroup> ))} </> diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx index 562c40fc1d95642caccaf93ada028171a406b374..c5ba61f273af8d720e3e589c3deed23c6d7a9cc3 100644 --- a/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx +++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx @@ -112,92 +112,92 @@ export default function WorkspaceAgentConfiguration({ workspace }) { </form> </div> ); +} - function LoadingSkeleton() { - return ( - <div id="workspace-agent-settings-container"> - <div className="w-1/2 flex flex-col gap-y-6"> - <Skeleton.default - height={100} - width="100%" - count={2} - baseColor="#292524" - highlightColor="#4c4948" - enableAnimation={true} - containerClassName="flex flex-col gap-y-1" - /> - <div className="bg-white/10 h-[1px] w-full" /> - <Skeleton.default - height={100} - width="100%" - count={2} - baseColor="#292524" - highlightColor="#4c4948" - enableAnimation={true} - containerClassName="flex flex-col gap-y-1 mt-4" - /> - </div> +function LoadingSkeleton() { + return ( + <div id="workspace-agent-settings-container"> + <div className="w-1/2 flex flex-col gap-y-6"> + <Skeleton.default + height={100} + width="100%" + count={2} + baseColor="#292524" + highlightColor="#4c4948" + enableAnimation={true} + containerClassName="flex flex-col gap-y-1" + /> + <div className="bg-white/10 h-[1px] w-full" /> + <Skeleton.default + height={100} + width="100%" + count={2} + baseColor="#292524" + highlightColor="#4c4948" + enableAnimation={true} + containerClassName="flex flex-col gap-y-1 mt-4" + /> </div> - ); - } + </div> + ); +} - function AvailableAgentSkills({ skills, settings, toggleAgentSkill }) { - return ( - <div> - <div className="flex flex-col mb-8"> - <div className="flex w-full justify-between items-center"> - <label htmlFor="name" className="text-white text-md font-semibold"> - Default agent skills - </label> - </div> - <p className="text-white text-opacity-60 text-xs font-medium py-1.5"> - Improve the natural abilities of the default agent with these - pre-built skills. This set up applies to all workspaces. - </p> +function AvailableAgentSkills({ skills, settings, toggleAgentSkill }) { + return ( + <div> + <div className="flex flex-col mb-8"> + <div className="flex w-full justify-between items-center"> + <label htmlFor="name" className="text-white text-md font-semibold"> + Default agent skills + </label> </div> - <input - name="system::default_agent_skills" - type="hidden" - value={skills.join(",")} + <p className="text-white text-opacity-60 text-xs font-medium py-1.5"> + Improve the natural abilities of the default agent with these + pre-built skills. This set up applies to all workspaces. + </p> + </div> + <input + name="system::default_agent_skills" + type="hidden" + value={skills.join(",")} + /> + <div className="flex flex-col gap-y-3"> + <GenericSkill + title="RAG & long-term memory" + description='Allow the agent to leverage your local documents to answer a query or ask the agent to "remember" pieces of content for long-term memory retrieval.' + settings={settings} + enabled={true} + disabled={true} + /> + <GenericSkill + title="View and summarize documents" + description="Allow the agent to list and summarize the content of workspace files currently embedded." + settings={settings} + enabled={true} + disabled={true} + /> + <GenericSkill + title="Scrape websites" + description="Allow the agent to visit and scrape the content of websites." + settings={settings} + enabled={true} + disabled={true} + /> + <GenericSkill + title="Generate & save files to browser" + description="Enable the default agent to generate and write to files that save and can be downloaded in your browser." + skill="save-file-to-browser" + settings={settings} + toggleSkill={toggleAgentSkill} + enabled={skills.includes("save-file-to-browser")} + /> + <AgentWebSearchSelection + skill="web-browsing" + settings={settings} + toggleSkill={toggleAgentSkill} + enabled={skills.includes("web-browsing")} /> - <div className="flex flex-col gap-y-3"> - <GenericSkill - title="RAG & long-term memory" - description='Allow the agent to leverage your local documents to answer a query or ask the agent to "remember" pieces of content for long-term memory retrieval.' - settings={settings} - enabled={true} - disabled={true} - /> - <GenericSkill - title="View and summarize documents" - description="Allow the agent to list and summarize the content of workspace files currently embedded." - settings={settings} - enabled={true} - disabled={true} - /> - <GenericSkill - title="Scrape websites" - description="Allow the agent to visit and scrape the content of websites." - settings={settings} - enabled={true} - disabled={true} - /> - <GenericSkill - title="Generate & save files to browser" - description="Enable the default agent to generate and write to files that save and can be downloaded in your browser." - skill="save-file-to-browser" - settings={settings} - toggleSkill={toggleAgentSkill} - enabled={skills.includes("save-file-to-browser")} - /> - <AgentWebSearchSelection - skill="web-browsing" - settings={settings} - toggleSkill={toggleAgentSkill} - enabled={skills.includes("web-browsing")} - /> - </div> </div> - ); - } + </div> + ); } diff --git a/server/package.json b/server/package.json index a4a847509215bc06eb4b44225856b9ba6fedc7fc..d4587eb208a5b68301d0ed035ca956550177a0c5 100644 --- a/server/package.json +++ b/server/package.json @@ -53,7 +53,7 @@ "node-html-markdown": "^1.3.0", "node-llama-cpp": "^2.8.0", "openai": "^3.2.1", - "openai:latest": "npm:openai@latest", + "openai-latest": "npm:openai@latest", "pinecone-client": "^1.1.0", "pluralize": "^8.0.0", "posthog-node": "^3.1.1", @@ -84,4 +84,4 @@ "nodemon": "^2.0.22", "prettier": "^3.0.3" } -} +} \ No newline at end of file diff --git a/server/utils/agents/aibitat/providers/openai.js b/server/utils/agents/aibitat/providers/openai.js index 4458afe8ff97fbc2f0a1bb974670b858dd07b23c..e06dd31d1ac52bdf707a311ebf0bb2502094d07e 100644 --- a/server/utils/agents/aibitat/providers/openai.js +++ b/server/utils/agents/aibitat/providers/openai.js @@ -1,4 +1,4 @@ -const OpenAI = require("openai:latest"); +const OpenAI = require("openai-latest"); const Provider = require("./ai-provider.js"); const { RetryError } = require("../error.js"); diff --git a/server/yarn.lock b/server/yarn.lock index 51dda19f79439161361c2a5a1b10e76df3231369..466ac156033c2181318c65b6c3b710371e4aafd9 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -4495,10 +4495,10 @@ onnxruntime-web@1.14.0: onnxruntime-common "~1.14.0" platform "^1.3.6" -"openai:latest@npm:openai@latest": - version "4.32.1" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.32.1.tgz#9e375fdbc727330c5ea5d287beb325db3e6f9ad7" - integrity sha512-3e9QyCY47tgOkxBe2CSVKlXOE2lLkMa24Y0s3LYZR40yYjiBU9dtVze+C3mu1TwWDGiRX52STpQAEJZvRNuIrA== +"openai-latest@npm:openai@latest": + version "4.38.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.38.0.tgz#d97accc7c368670a40c2f668650b624cb941dc8b" + integrity sha512-q1w04cRm+7CgUAGDXqt+OMa89zXBffHrEK0FcVDRhD+zL1S1aAatu4iYO5sIxR2QFEP//i8CM3QaxGVTNajxuw== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4"