From 48dcb22b25612191aba79209fa3d5f08f2454f98 Mon Sep 17 00:00:00 2001 From: Sean Hatfield <seanhatfield5@gmail.com> Date: Sat, 25 Jan 2025 03:06:59 +0800 Subject: [PATCH] Dynamic fetching of TogetherAI models (#3017) * implement dynamic fetching of togetherai models * implement caching for togetherai models * update gitignore for togetherai model caching * Remove models.json from git tracking * Remove .cached_at from git tracking * lint * revert unneeded change --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> --- .../LLMSelection/TogetherAiOptions/index.jsx | 43 +- server/storage/models/.gitignore | 3 +- server/utils/AiProviders/togetherAi/index.js | 101 ++- server/utils/AiProviders/togetherAi/models.js | 622 ------------------ .../AiProviders/togetherAi/scripts/.gitignore | 1 - .../togetherAi/scripts/chat_models.txt | 108 --- .../AiProviders/togetherAi/scripts/parse.mjs | 43 -- server/utils/helpers/customModels.js | 30 +- 8 files changed, 133 insertions(+), 818 deletions(-) delete mode 100644 server/utils/AiProviders/togetherAi/models.js delete mode 100644 server/utils/AiProviders/togetherAi/scripts/.gitignore delete mode 100644 server/utils/AiProviders/togetherAi/scripts/chat_models.txt delete mode 100644 server/utils/AiProviders/togetherAi/scripts/parse.mjs diff --git a/frontend/src/components/LLMSelection/TogetherAiOptions/index.jsx b/frontend/src/components/LLMSelection/TogetherAiOptions/index.jsx index 256b4c145..c9a910856 100644 --- a/frontend/src/components/LLMSelection/TogetherAiOptions/index.jsx +++ b/frontend/src/components/LLMSelection/TogetherAiOptions/index.jsx @@ -2,6 +2,9 @@ import System from "@/models/system"; import { useState, useEffect } from "react"; export default function TogetherAiOptions({ settings }) { + const [inputValue, setInputValue] = useState(settings?.TogetherAiApiKey); + const [apiKey, setApiKey] = useState(settings?.TogetherAiApiKey); + return ( <div className="flex gap-[36px] mt-1.5"> <div className="flex flex-col w-60"> @@ -17,37 +20,49 @@ export default function TogetherAiOptions({ settings }) { required={true} autoComplete="off" spellCheck={false} + onChange={(e) => setInputValue(e.target.value)} + onBlur={() => setApiKey(inputValue)} /> </div> {!settings?.credentialsOnly && ( - <TogetherAiModelSelection settings={settings} /> + <TogetherAiModelSelection settings={settings} apiKey={apiKey} /> )} </div> ); } -function TogetherAiModelSelection({ settings }) { + +function TogetherAiModelSelection({ settings, apiKey }) { const [groupedModels, setGroupedModels] = useState({}); const [loading, setLoading] = useState(true); useEffect(() => { async function findCustomModels() { setLoading(true); - const { models } = await System.customModels("togetherai"); - - if (models?.length > 0) { - const modelsByOrganization = models.reduce((acc, model) => { - acc[model.organization] = acc[model.organization] || []; - acc[model.organization].push(model); - return acc; - }, {}); - - setGroupedModels(modelsByOrganization); + try { + const key = apiKey === "*".repeat(20) ? null : apiKey; + const { models } = await System.customModels("togetherai", key); + if (models?.length > 0) { + const modelsByOrganization = models.reduce((acc, model) => { + if (model.type !== "chat") return acc; // Only show chat models in dropdown + const org = model.organization || "Unknown"; + acc[org] = acc[org] || []; + acc[org].push({ + id: model.id, + name: model.name || model.id, + organization: org, + maxLength: model.maxLength, + }); + return acc; + }, {}); + setGroupedModels(modelsByOrganization); + } + } catch (error) { + console.error("Error fetching Together AI models:", error); } - setLoading(false); } findCustomModels(); - }, []); + }, [apiKey]); if (loading || Object.keys(groupedModels).length === 0) { return ( diff --git a/server/storage/models/.gitignore b/server/storage/models/.gitignore index 71c5e891a..0481af71a 100644 --- a/server/storage/models/.gitignore +++ b/server/storage/models/.gitignore @@ -5,4 +5,5 @@ openrouter apipie novita mixedbread-ai* -gemini \ No newline at end of file +gemini +togetherAi \ No newline at end of file diff --git a/server/utils/AiProviders/togetherAi/index.js b/server/utils/AiProviders/togetherAi/index.js index 7213bdd08..00ad4e647 100644 --- a/server/utils/AiProviders/togetherAi/index.js +++ b/server/utils/AiProviders/togetherAi/index.js @@ -5,10 +5,76 @@ const { const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); +const fs = require("fs"); +const path = require("path"); +const { safeJsonParse } = require("../../http"); -function togetherAiModels() { - const { MODELS } = require("./models.js"); - return MODELS || {}; +const cacheFolder = path.resolve( + process.env.STORAGE_DIR + ? path.resolve(process.env.STORAGE_DIR, "models", "togetherAi") + : path.resolve(__dirname, `../../../storage/models/togetherAi`) +); + +async function togetherAiModels(apiKey = null) { + const cacheModelPath = path.resolve(cacheFolder, "models.json"); + const cacheAtPath = path.resolve(cacheFolder, ".cached_at"); + + // If cache exists and is less than 1 week old, use it + if (fs.existsSync(cacheModelPath) && fs.existsSync(cacheAtPath)) { + const now = Number(new Date()); + const timestampMs = Number(fs.readFileSync(cacheAtPath)); + if (now - timestampMs <= 6.048e8) { + // 1 Week in MS + return safeJsonParse( + fs.readFileSync(cacheModelPath, { encoding: "utf-8" }), + [] + ); + } + } + + try { + const { OpenAI: OpenAIApi } = require("openai"); + const openai = new OpenAIApi({ + baseURL: "https://api.together.xyz/v1", + apiKey: apiKey || process.env.TOGETHER_AI_API_KEY || null, + }); + + const response = await openai.models.list(); + + // Filter and transform models into the expected format + // Only include chat models + const validModels = response.body + .filter((model) => ["chat"].includes(model.type)) + .map((model) => ({ + id: model.id, + name: model.display_name || model.id, + organization: model.organization || "Unknown", + type: model.type, + maxLength: model.context_length || 4096, + })); + + // Cache the results + if (!fs.existsSync(cacheFolder)) + fs.mkdirSync(cacheFolder, { recursive: true }); + fs.writeFileSync(cacheModelPath, JSON.stringify(validModels), { + encoding: "utf-8", + }); + fs.writeFileSync(cacheAtPath, String(Number(new Date())), { + encoding: "utf-8", + }); + + return validModels; + } catch (error) { + console.error("Error fetching Together AI models:", error); + // If cache exists but is stale, still use it as fallback + if (fs.existsSync(cacheModelPath)) { + return safeJsonParse( + fs.readFileSync(cacheModelPath, { encoding: "utf-8" }), + [] + ); + } + return []; + } } class TogetherAiLLM { @@ -60,29 +126,34 @@ class TogetherAiLLM { return content.flat(); } - allModelInformation() { - return togetherAiModels(); + async allModelInformation() { + const models = await togetherAiModels(); + return models.reduce((acc, model) => { + acc[model.id] = model; + return acc; + }, {}); } streamingEnabled() { return "streamGetChatCompletion" in this; } - static promptWindowLimit(modelName) { - const availableModels = togetherAiModels(); - return availableModels[modelName]?.maxLength || 4096; + static async promptWindowLimit(modelName) { + const models = await togetherAiModels(); + const model = models.find((m) => m.id === modelName); + return model?.maxLength || 4096; } - // Ensure the user set a value for the token limit - // and if undefined - assume 4096 window. - promptWindowLimit() { - const availableModels = this.allModelInformation(); - return availableModels[this.model]?.maxLength || 4096; + async promptWindowLimit() { + const models = await togetherAiModels(); + const model = models.find((m) => m.id === this.model); + return model?.maxLength || 4096; } async isValidChatCompletionModel(model = "") { - const availableModels = this.allModelInformation(); - return availableModels.hasOwnProperty(model); + const models = await togetherAiModels(); + const foundModel = models.find((m) => m.id === model); + return foundModel && foundModel.type === "chat"; } constructPrompt({ diff --git a/server/utils/AiProviders/togetherAi/models.js b/server/utils/AiProviders/togetherAi/models.js deleted file mode 100644 index a6f536fb3..000000000 --- a/server/utils/AiProviders/togetherAi/models.js +++ /dev/null @@ -1,622 +0,0 @@ -const MODELS = { - "zero-one-ai/Yi-34B-Chat": { - id: "zero-one-ai/Yi-34B-Chat", - organization: "01.AI", - name: "01-ai Yi Chat (34B)", - maxLength: 4096, - }, - "allenai/OLMo-7B-Instruct": { - id: "allenai/OLMo-7B-Instruct", - organization: "AllenAI", - name: "OLMo Instruct (7B)", - maxLength: 2048, - }, - "Austism/chronos-hermes-13b": { - id: "Austism/chronos-hermes-13b", - organization: "Austism", - name: "Chronos Hermes (13B)", - maxLength: 2048, - }, - "carson/ml318br": { - id: "carson/ml318br", - organization: "carson", - name: "carson ml318br", - maxLength: 8192, - }, - "cognitivecomputations/dolphin-2.5-mixtral-8x7b": { - id: "cognitivecomputations/dolphin-2.5-mixtral-8x7b", - organization: "cognitivecomputations", - name: "Dolphin 2.5 Mixtral 8x7b", - maxLength: 32768, - }, - "databricks/dbrx-instruct": { - id: "databricks/dbrx-instruct", - organization: "Databricks", - name: "DBRX Instruct", - maxLength: 32768, - }, - "deepseek-ai/deepseek-llm-67b-chat": { - id: "deepseek-ai/deepseek-llm-67b-chat", - organization: "DeepSeek", - name: "DeepSeek LLM Chat (67B)", - maxLength: 4096, - }, - "deepseek-ai/deepseek-coder-33b-instruct": { - id: "deepseek-ai/deepseek-coder-33b-instruct", - organization: "DeepSeek", - name: "Deepseek Coder Instruct (33B)", - maxLength: 16384, - }, - "garage-bAInd/Platypus2-70B-instruct": { - id: "garage-bAInd/Platypus2-70B-instruct", - organization: "garage-bAInd", - name: "Platypus2 Instruct (70B)", - maxLength: 4096, - }, - "google/gemma-2-9b-it": { - id: "google/gemma-2-9b-it", - organization: "google", - name: "Gemma-2 Instruct (9B)", - maxLength: 8192, - }, - "google/gemma-2b-it": { - id: "google/gemma-2b-it", - organization: "Google", - name: "Gemma Instruct (2B)", - maxLength: 8192, - }, - "google/gemma-2-27b-it": { - id: "google/gemma-2-27b-it", - organization: "Google", - name: "Gemma-2 Instruct (27B)", - maxLength: 8192, - }, - "google/gemma-7b-it": { - id: "google/gemma-7b-it", - organization: "Google", - name: "Gemma Instruct (7B)", - maxLength: 8192, - }, - "gradientai/Llama-3-70B-Instruct-Gradient-1048k": { - id: "gradientai/Llama-3-70B-Instruct-Gradient-1048k", - organization: "gradientai", - name: "Llama-3 70B Instruct Gradient 1048K", - maxLength: 1048576, - }, - "Gryphe/MythoMax-L2-13b": { - id: "Gryphe/MythoMax-L2-13b", - organization: "Gryphe", - name: "MythoMax-L2 (13B)", - maxLength: 4096, - }, - "Gryphe/MythoMax-L2-13b-Lite": { - id: "Gryphe/MythoMax-L2-13b-Lite", - organization: "Gryphe", - name: "Gryphe MythoMax L2 Lite (13B)", - maxLength: 4096, - }, - "llava-hf/llava-v1.6-mistral-7b-hf": { - id: "llava-hf/llava-v1.6-mistral-7b-hf", - organization: "Haotian Liu", - name: "LLaVa-Next (Mistral-7B)", - maxLength: 4096, - }, - "HuggingFaceH4/zephyr-7b-beta": { - id: "HuggingFaceH4/zephyr-7b-beta", - organization: "HuggingFace", - name: "Zephyr-7B-ß", - maxLength: 32768, - }, - "togethercomputer/Koala-7B": { - id: "togethercomputer/Koala-7B", - organization: "LM Sys", - name: "Koala (7B)", - maxLength: 2048, - }, - "lmsys/vicuna-7b-v1.3": { - id: "lmsys/vicuna-7b-v1.3", - organization: "LM Sys", - name: "Vicuna v1.3 (7B)", - maxLength: 2048, - }, - "lmsys/vicuna-13b-v1.5-16k": { - id: "lmsys/vicuna-13b-v1.5-16k", - organization: "LM Sys", - name: "Vicuna v1.5 16K (13B)", - maxLength: 16384, - }, - "lmsys/vicuna-13b-v1.5": { - id: "lmsys/vicuna-13b-v1.5", - organization: "LM Sys", - name: "Vicuna v1.5 (13B)", - maxLength: 4096, - }, - "lmsys/vicuna-13b-v1.3": { - id: "lmsys/vicuna-13b-v1.3", - organization: "LM Sys", - name: "Vicuna v1.3 (13B)", - maxLength: 2048, - }, - "togethercomputer/Koala-13B": { - id: "togethercomputer/Koala-13B", - organization: "LM Sys", - name: "Koala (13B)", - maxLength: 2048, - }, - "lmsys/vicuna-7b-v1.5": { - id: "lmsys/vicuna-7b-v1.5", - organization: "LM Sys", - name: "Vicuna v1.5 (7B)", - maxLength: 4096, - }, - "codellama/CodeLlama-34b-Instruct-hf": { - id: "codellama/CodeLlama-34b-Instruct-hf", - organization: "Meta", - name: "Code Llama Instruct (34B)", - maxLength: 16384, - }, - "togethercomputer/Llama-3-8b-chat-hf-int4": { - id: "togethercomputer/Llama-3-8b-chat-hf-int4", - organization: "Meta", - name: "Llama3 8B Chat HF INT4", - maxLength: 8192, - }, - "meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo": { - id: "meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo", - organization: "Meta", - name: "Llama 3.2 90B Vision Instruct Turbo", - maxLength: 131072, - }, - "meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo": { - id: "meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo", - organization: "Meta", - name: "Llama 3.2 11B Vision Instruct Turbo", - maxLength: 131072, - }, - "meta-llama/Llama-3.2-3B-Instruct-Turbo": { - id: "meta-llama/Llama-3.2-3B-Instruct-Turbo", - organization: "Meta", - name: "Meta Llama 3.2 3B Instruct Turbo", - maxLength: 131072, - }, - "togethercomputer/Llama-3-8b-chat-hf-int8": { - id: "togethercomputer/Llama-3-8b-chat-hf-int8", - organization: "Meta", - name: "Togethercomputer Llama3 8B Instruct Int8", - maxLength: 8192, - }, - "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo": { - id: "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo", - organization: "Meta", - name: "Meta Llama 3.1 70B Instruct Turbo", - maxLength: 32768, - }, - "meta-llama/Llama-2-13b-chat-hf": { - id: "meta-llama/Llama-2-13b-chat-hf", - organization: "Meta", - name: "LLaMA-2 Chat (13B)", - maxLength: 4096, - }, - "meta-llama/Meta-Llama-3-70B-Instruct-Lite": { - id: "meta-llama/Meta-Llama-3-70B-Instruct-Lite", - organization: "Meta", - name: "Meta Llama 3 70B Instruct Lite", - maxLength: 8192, - }, - "meta-llama/Llama-3-8b-chat-hf": { - id: "meta-llama/Llama-3-8b-chat-hf", - organization: "Meta", - name: "Meta Llama 3 8B Instruct Reference", - maxLength: 8192, - }, - "meta-llama/Llama-3-70b-chat-hf": { - id: "meta-llama/Llama-3-70b-chat-hf", - organization: "Meta", - name: "Meta Llama 3 70B Instruct Reference", - maxLength: 8192, - }, - "meta-llama/Meta-Llama-3-8B-Instruct-Turbo": { - id: "meta-llama/Meta-Llama-3-8B-Instruct-Turbo", - organization: "Meta", - name: "Meta Llama 3 8B Instruct Turbo", - maxLength: 8192, - }, - "meta-llama/Meta-Llama-3-8B-Instruct-Lite": { - id: "meta-llama/Meta-Llama-3-8B-Instruct-Lite", - organization: "Meta", - name: "Meta Llama 3 8B Instruct Lite", - maxLength: 8192, - }, - "meta-llama/Meta-Llama-3.1-405B-Instruct-Lite-Pro": { - id: "meta-llama/Meta-Llama-3.1-405B-Instruct-Lite-Pro", - organization: "Meta", - name: "Meta Llama 3.1 405B Instruct Turbo", - maxLength: 4096, - }, - "meta-llama/Llama-2-7b-chat-hf": { - id: "meta-llama/Llama-2-7b-chat-hf", - organization: "Meta", - name: "LLaMA-2 Chat (7B)", - maxLength: 4096, - }, - "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo": { - id: "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", - organization: "Meta", - name: "Meta Llama 3.1 405B Instruct Turbo", - maxLength: 130815, - }, - "meta-llama/Llama-Vision-Free": { - id: "meta-llama/Llama-Vision-Free", - organization: "Meta", - name: "(Free) Llama 3.2 11B Vision Instruct Turbo", - maxLength: 131072, - }, - "meta-llama/Meta-Llama-3-70B-Instruct-Turbo": { - id: "meta-llama/Meta-Llama-3-70B-Instruct-Turbo", - organization: "Meta", - name: "Meta Llama 3 70B Instruct Turbo", - maxLength: 8192, - }, - "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo": { - id: "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo", - organization: "Meta", - name: "Meta Llama 3.1 8B Instruct Turbo", - maxLength: 32768, - }, - "togethercomputer/CodeLlama-7b-Instruct": { - id: "togethercomputer/CodeLlama-7b-Instruct", - organization: "Meta", - name: "Code Llama Instruct (7B)", - maxLength: 16384, - }, - "togethercomputer/CodeLlama-34b-Instruct": { - id: "togethercomputer/CodeLlama-34b-Instruct", - organization: "Meta", - name: "Code Llama Instruct (34B)", - maxLength: 16384, - }, - "codellama/CodeLlama-13b-Instruct-hf": { - id: "codellama/CodeLlama-13b-Instruct-hf", - organization: "Meta", - name: "Code Llama Instruct (13B)", - maxLength: 16384, - }, - "togethercomputer/CodeLlama-13b-Instruct": { - id: "togethercomputer/CodeLlama-13b-Instruct", - organization: "Meta", - name: "Code Llama Instruct (13B)", - maxLength: 16384, - }, - "togethercomputer/llama-2-13b-chat": { - id: "togethercomputer/llama-2-13b-chat", - organization: "Meta", - name: "LLaMA-2 Chat (13B)", - maxLength: 4096, - }, - "togethercomputer/llama-2-7b-chat": { - id: "togethercomputer/llama-2-7b-chat", - organization: "Meta", - name: "LLaMA-2 Chat (7B)", - maxLength: 4096, - }, - "meta-llama/Meta-Llama-3-8B-Instruct": { - id: "meta-llama/Meta-Llama-3-8B-Instruct", - organization: "Meta", - name: "Meta Llama 3 8B Instruct", - maxLength: 8192, - }, - "meta-llama/Meta-Llama-3-70B-Instruct": { - id: "meta-llama/Meta-Llama-3-70B-Instruct", - organization: "Meta", - name: "Meta Llama 3 70B Instruct", - maxLength: 8192, - }, - "codellama/CodeLlama-70b-Instruct-hf": { - id: "codellama/CodeLlama-70b-Instruct-hf", - organization: "Meta", - name: "Code Llama Instruct (70B)", - maxLength: 4096, - }, - "togethercomputer/llama-2-70b-chat": { - id: "togethercomputer/llama-2-70b-chat", - organization: "Meta", - name: "LLaMA-2 Chat (70B)", - maxLength: 4096, - }, - "codellama/CodeLlama-7b-Instruct-hf": { - id: "codellama/CodeLlama-7b-Instruct-hf", - organization: "Meta", - name: "Code Llama Instruct (7B)", - maxLength: 16384, - }, - "meta-llama/Llama-2-70b-chat-hf": { - id: "meta-llama/Llama-2-70b-chat-hf", - organization: "Meta", - name: "LLaMA-2 Chat (70B)", - maxLength: 4096, - }, - "meta-llama/Meta-Llama-3.1-8B-Instruct-Reference": { - id: "meta-llama/Meta-Llama-3.1-8B-Instruct-Reference", - organization: "Meta", - name: "Meta Llama 3.1 8B Instruct", - maxLength: 16384, - }, - "albert/meta-llama-3-1-70b-instruct-turbo": { - id: "albert/meta-llama-3-1-70b-instruct-turbo", - organization: "Meta", - name: "Meta Llama 3.1 70B Instruct Turbo", - maxLength: 131072, - }, - "meta-llama/Meta-Llama-3.1-70B-Instruct-Reference": { - id: "meta-llama/Meta-Llama-3.1-70B-Instruct-Reference", - organization: "Meta", - name: "Meta Llama 3.1 70B Instruct", - maxLength: 8192, - }, - "microsoft/WizardLM-2-8x22B": { - id: "microsoft/WizardLM-2-8x22B", - organization: "microsoft", - name: "WizardLM-2 (8x22B)", - maxLength: 65536, - }, - "mistralai/Mistral-7B-Instruct-v0.1": { - id: "mistralai/Mistral-7B-Instruct-v0.1", - organization: "mistralai", - name: "Mistral (7B) Instruct", - maxLength: 4096, - }, - "mistralai/Mistral-7B-Instruct-v0.2": { - id: "mistralai/Mistral-7B-Instruct-v0.2", - organization: "mistralai", - name: "Mistral (7B) Instruct v0.2", - maxLength: 32768, - }, - "mistralai/Mistral-7B-Instruct-v0.3": { - id: "mistralai/Mistral-7B-Instruct-v0.3", - organization: "mistralai", - name: "Mistral (7B) Instruct v0.3", - maxLength: 32768, - }, - "mistralai/Mixtral-8x7B-Instruct-v0.1": { - id: "mistralai/Mixtral-8x7B-Instruct-v0.1", - organization: "mistralai", - name: "Mixtral-8x7B Instruct v0.1", - maxLength: 32768, - }, - "mistralai/Mixtral-8x22B-Instruct-v0.1": { - id: "mistralai/Mixtral-8x22B-Instruct-v0.1", - organization: "mistralai", - name: "Mixtral-8x22B Instruct v0.1", - maxLength: 65536, - }, - "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO": { - id: "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO", - organization: "NousResearch", - name: "Nous Hermes 2 - Mixtral 8x7B-DPO", - maxLength: 32768, - }, - "NousResearch/Nous-Hermes-Llama2-70b": { - id: "NousResearch/Nous-Hermes-Llama2-70b", - organization: "NousResearch", - name: "Nous Hermes LLaMA-2 (70B)", - maxLength: 4096, - }, - "NousResearch/Nous-Hermes-2-Mixtral-8x7B-SFT": { - id: "NousResearch/Nous-Hermes-2-Mixtral-8x7B-SFT", - organization: "NousResearch", - name: "Nous Hermes 2 - Mixtral 8x7B-SFT", - maxLength: 32768, - }, - "NousResearch/Nous-Hermes-Llama2-13b": { - id: "NousResearch/Nous-Hermes-Llama2-13b", - organization: "NousResearch", - name: "Nous Hermes Llama-2 (13B)", - maxLength: 4096, - }, - "NousResearch/Nous-Hermes-2-Mistral-7B-DPO": { - id: "NousResearch/Nous-Hermes-2-Mistral-7B-DPO", - organization: "NousResearch", - name: "Nous Hermes 2 - Mistral DPO (7B)", - maxLength: 32768, - }, - "NousResearch/Nous-Hermes-llama-2-7b": { - id: "NousResearch/Nous-Hermes-llama-2-7b", - organization: "NousResearch", - name: "Nous Hermes LLaMA-2 (7B)", - maxLength: 4096, - }, - "NousResearch/Nous-Capybara-7B-V1p9": { - id: "NousResearch/Nous-Capybara-7B-V1p9", - organization: "NousResearch", - name: "Nous Capybara v1.9 (7B)", - maxLength: 8192, - }, - "NousResearch/Hermes-2-Theta-Llama-3-70B": { - id: "NousResearch/Hermes-2-Theta-Llama-3-70B", - organization: "NousResearch", - name: "Hermes 2 Theta Llama-3 70B", - maxLength: 8192, - }, - "openchat/openchat-3.5-1210": { - id: "openchat/openchat-3.5-1210", - organization: "OpenChat", - name: "OpenChat 3.5", - maxLength: 8192, - }, - "Open-Orca/Mistral-7B-OpenOrca": { - id: "Open-Orca/Mistral-7B-OpenOrca", - organization: "OpenOrca", - name: "OpenOrca Mistral (7B) 8K", - maxLength: 8192, - }, - "Qwen/Qwen2-72B-Instruct": { - id: "Qwen/Qwen2-72B-Instruct", - organization: "Qwen", - name: "Qwen 2 Instruct (72B)", - maxLength: 32768, - }, - "Qwen/Qwen2.5-72B-Instruct-Turbo": { - id: "Qwen/Qwen2.5-72B-Instruct-Turbo", - organization: "Qwen", - name: "Qwen2.5 72B Instruct Turbo", - maxLength: 32768, - }, - "Qwen/Qwen2.5-7B-Instruct-Turbo": { - id: "Qwen/Qwen2.5-7B-Instruct-Turbo", - organization: "Qwen", - name: "Qwen2.5 7B Instruct Turbo", - maxLength: 32768, - }, - "Qwen/Qwen1.5-110B-Chat": { - id: "Qwen/Qwen1.5-110B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (110B)", - maxLength: 32768, - }, - "Qwen/Qwen1.5-72B-Chat": { - id: "Qwen/Qwen1.5-72B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (72B)", - maxLength: 32768, - }, - "Qwen/Qwen2-1.5B-Instruct": { - id: "Qwen/Qwen2-1.5B-Instruct", - organization: "Qwen", - name: "Qwen 2 Instruct (1.5B)", - maxLength: 32768, - }, - "Qwen/Qwen2-7B-Instruct": { - id: "Qwen/Qwen2-7B-Instruct", - organization: "Qwen", - name: "Qwen 2 Instruct (7B)", - maxLength: 32768, - }, - "Qwen/Qwen1.5-14B-Chat": { - id: "Qwen/Qwen1.5-14B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (14B)", - maxLength: 32768, - }, - "Qwen/Qwen1.5-1.8B-Chat": { - id: "Qwen/Qwen1.5-1.8B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (1.8B)", - maxLength: 32768, - }, - "Qwen/Qwen1.5-32B-Chat": { - id: "Qwen/Qwen1.5-32B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (32B)", - maxLength: 32768, - }, - "Qwen/Qwen1.5-7B-Chat": { - id: "Qwen/Qwen1.5-7B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (7B)", - maxLength: 32768, - }, - "Qwen/Qwen1.5-0.5B-Chat": { - id: "Qwen/Qwen1.5-0.5B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (0.5B)", - maxLength: 32768, - }, - "Qwen/Qwen1.5-4B-Chat": { - id: "Qwen/Qwen1.5-4B-Chat", - organization: "Qwen", - name: "Qwen 1.5 Chat (4B)", - maxLength: 32768, - }, - "snorkelai/Snorkel-Mistral-PairRM-DPO": { - id: "snorkelai/Snorkel-Mistral-PairRM-DPO", - organization: "Snorkel AI", - name: "Snorkel Mistral PairRM DPO (7B)", - maxLength: 32768, - }, - "Snowflake/snowflake-arctic-instruct": { - id: "Snowflake/snowflake-arctic-instruct", - organization: "Snowflake", - name: "Snowflake Arctic Instruct", - maxLength: 4096, - }, - "togethercomputer/alpaca-7b": { - id: "togethercomputer/alpaca-7b", - organization: "Stanford", - name: "Alpaca (7B)", - maxLength: 2048, - }, - "teknium/OpenHermes-2-Mistral-7B": { - id: "teknium/OpenHermes-2-Mistral-7B", - organization: "teknium", - name: "OpenHermes-2-Mistral (7B)", - maxLength: 8192, - }, - "teknium/OpenHermes-2p5-Mistral-7B": { - id: "teknium/OpenHermes-2p5-Mistral-7B", - organization: "teknium", - name: "OpenHermes-2.5-Mistral (7B)", - maxLength: 8192, - }, - "test/test11": { - id: "test/test11", - organization: "test", - name: "Test 11", - maxLength: 4096, - }, - "togethercomputer/guanaco-65b": { - id: "togethercomputer/guanaco-65b", - organization: "Tim Dettmers", - name: "Guanaco (65B)", - maxLength: 2048, - }, - "togethercomputer/guanaco-13b": { - id: "togethercomputer/guanaco-13b", - organization: "Tim Dettmers", - name: "Guanaco (13B)", - maxLength: 2048, - }, - "togethercomputer/guanaco-33b": { - id: "togethercomputer/guanaco-33b", - organization: "Tim Dettmers", - name: "Guanaco (33B)", - maxLength: 2048, - }, - "togethercomputer/guanaco-7b": { - id: "togethercomputer/guanaco-7b", - organization: "Tim Dettmers", - name: "Guanaco (7B)", - maxLength: 2048, - }, - "Undi95/ReMM-SLERP-L2-13B": { - id: "Undi95/ReMM-SLERP-L2-13B", - organization: "Undi95", - name: "ReMM SLERP L2 (13B)", - maxLength: 4096, - }, - "Undi95/Toppy-M-7B": { - id: "Undi95/Toppy-M-7B", - organization: "Undi95", - name: "Toppy M (7B)", - maxLength: 4096, - }, - "upstage/SOLAR-10.7B-Instruct-v1.0": { - id: "upstage/SOLAR-10.7B-Instruct-v1.0", - organization: "upstage", - name: "Upstage SOLAR Instruct v1 (11B)", - maxLength: 4096, - }, - "togethercomputer/SOLAR-10.7B-Instruct-v1.0-int4": { - id: "togethercomputer/SOLAR-10.7B-Instruct-v1.0-int4", - organization: "upstage", - name: "Upstage SOLAR Instruct v1 (11B)-Int4", - maxLength: 4096, - }, - "WizardLM/WizardLM-13B-V1.2": { - id: "WizardLM/WizardLM-13B-V1.2", - organization: "WizardLM", - name: "WizardLM v1.2 (13B)", - maxLength: 4096, - }, -}; - -module.exports.MODELS = MODELS; diff --git a/server/utils/AiProviders/togetherAi/scripts/.gitignore b/server/utils/AiProviders/togetherAi/scripts/.gitignore deleted file mode 100644 index 94a2dd146..000000000 --- a/server/utils/AiProviders/togetherAi/scripts/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.json \ No newline at end of file diff --git a/server/utils/AiProviders/togetherAi/scripts/chat_models.txt b/server/utils/AiProviders/togetherAi/scripts/chat_models.txt deleted file mode 100644 index f071d1eb8..000000000 --- a/server/utils/AiProviders/togetherAi/scripts/chat_models.txt +++ /dev/null @@ -1,108 +0,0 @@ -| Organization | Model Name | API Model String | Context length | Quantization | -| :-------------------- | :--------------------------------------- | :----------------------------------------------- | :------------- | :----------- | -| 01.AI | 01-ai Yi Chat (34B) | zero-one-ai/Yi-34B-Chat | 4096 | FP16 | -| AllenAI | OLMo Instruct (7B) | allenai/OLMo-7B-Instruct | 2048 | FP16 | -| Austism | Chronos Hermes (13B) | Austism/chronos-hermes-13b | 2048 | FP16 | -| carson | carson ml318br | carson/ml318br | 8192 | FP16 | -| cognitivecomputations | Dolphin 2.5 Mixtral 8x7b | cognitivecomputations/dolphin-2.5-mixtral-8x7b | 32768 | FP16 | -| Databricks | DBRX Instruct | databricks/dbrx-instruct | 32768 | FP16 | -| DeepSeek | DeepSeek LLM Chat (67B) | deepseek-ai/deepseek-llm-67b-chat | 4096 | FP16 | -| DeepSeek | Deepseek Coder Instruct (33B) | deepseek-ai/deepseek-coder-33b-instruct | 16384 | FP16 | -| garage-bAInd | Platypus2 Instruct (70B) | garage-bAInd/Platypus2-70B-instruct | 4096 | FP16 | -| google | Gemma-2 Instruct (9B) | google/gemma-2-9b-it | 8192 | FP16 | -| Google | Gemma Instruct (2B) | google/gemma-2b-it | 8192 | FP16 | -| Google | Gemma-2 Instruct (27B) | google/gemma-2-27b-it | 8192 | FP16 | -| Google | Gemma Instruct (7B) | google/gemma-7b-it | 8192 | FP16 | -| gradientai | Llama-3 70B Instruct Gradient 1048K | gradientai/Llama-3-70B-Instruct-Gradient-1048k | 1048576 | FP16 | -| Gryphe | MythoMax-L2 (13B) | Gryphe/MythoMax-L2-13b | 4096 | FP16 | -| Gryphe | Gryphe MythoMax L2 Lite (13B) | Gryphe/MythoMax-L2-13b-Lite | 4096 | FP16 | -| Haotian Liu | LLaVa-Next (Mistral-7B) | llava-hf/llava-v1.6-mistral-7b-hf | 4096 | FP16 | -| HuggingFace | Zephyr-7B-ß | HuggingFaceH4/zephyr-7b-beta | 32768 | FP16 | -| LM Sys | Koala (7B) | togethercomputer/Koala-7B | 2048 | FP16 | -| LM Sys | Vicuna v1.3 (7B) | lmsys/vicuna-7b-v1.3 | 2048 | FP16 | -| LM Sys | Vicuna v1.5 16K (13B) | lmsys/vicuna-13b-v1.5-16k | 16384 | FP16 | -| LM Sys | Vicuna v1.5 (13B) | lmsys/vicuna-13b-v1.5 | 4096 | FP16 | -| LM Sys | Vicuna v1.3 (13B) | lmsys/vicuna-13b-v1.3 | 2048 | FP16 | -| LM Sys | Koala (13B) | togethercomputer/Koala-13B | 2048 | FP16 | -| LM Sys | Vicuna v1.5 (7B) | lmsys/vicuna-7b-v1.5 | 4096 | FP16 | -| Meta | Code Llama Instruct (34B) | codellama/CodeLlama-34b-Instruct-hf | 16384 | FP16 | -| Meta | Llama3 8B Chat HF INT4 | togethercomputer/Llama-3-8b-chat-hf-int4 | 8192 | FP16 | -| Meta | Meta Llama 3.2 90B Vision Instruct Turbo | meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo | 131072 | FP16 | -| Meta | Meta Llama 3.2 11B Vision Instruct Turbo | meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo | 131072 | FP16 | -| Meta | Meta Llama 3.2 3B Instruct Turbo | meta-llama/Llama-3.2-3B-Instruct-Turbo | 131072 | FP16 | -| Meta | Togethercomputer Llama3 8B Instruct Int8 | togethercomputer/Llama-3-8b-chat-hf-int8 | 8192 | FP16 | -| Meta | Meta Llama 3.1 70B Instruct Turbo | meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo | 32768 | FP8 | -| Meta | LLaMA-2 Chat (13B) | meta-llama/Llama-2-13b-chat-hf | 4096 | FP16 | -| Meta | Meta Llama 3 70B Instruct Lite | meta-llama/Meta-Llama-3-70B-Instruct-Lite | 8192 | INT4 | -| Meta | Meta Llama 3 8B Instruct Reference | meta-llama/Llama-3-8b-chat-hf | 8192 | FP16 | -| Meta | Meta Llama 3 70B Instruct Reference | meta-llama/Llama-3-70b-chat-hf | 8192 | FP16 | -| Meta | Meta Llama 3 8B Instruct Turbo | meta-llama/Meta-Llama-3-8B-Instruct-Turbo | 8192 | FP8 | -| Meta | Meta Llama 3 8B Instruct Lite | meta-llama/Meta-Llama-3-8B-Instruct-Lite | 8192 | INT4 | -| Meta | Meta Llama 3.1 405B Instruct Turbo | meta-llama/Meta-Llama-3.1-405B-Instruct-Lite-Pro | 4096 | FP16 | -| Meta | LLaMA-2 Chat (7B) | meta-llama/Llama-2-7b-chat-hf | 4096 | FP16 | -| Meta | Meta Llama 3.1 405B Instruct Turbo | meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo | 130815 | FP8 | -| Meta | Meta Llama Vision Free | meta-llama/Llama-Vision-Free | 131072 | FP16 | -| Meta | Meta Llama 3 70B Instruct Turbo | meta-llama/Meta-Llama-3-70B-Instruct-Turbo | 8192 | FP8 | -| Meta | Meta Llama 3.1 8B Instruct Turbo | meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo | 32768 | FP8 | -| Meta | Code Llama Instruct (7B) | togethercomputer/CodeLlama-7b-Instruct | 16384 | FP16 | -| Meta | Code Llama Instruct (34B) | togethercomputer/CodeLlama-34b-Instruct | 16384 | FP16 | -| Meta | Code Llama Instruct (13B) | codellama/CodeLlama-13b-Instruct-hf | 16384 | FP16 | -| Meta | Code Llama Instruct (13B) | togethercomputer/CodeLlama-13b-Instruct | 16384 | FP16 | -| Meta | LLaMA-2 Chat (13B) | togethercomputer/llama-2-13b-chat | 4096 | FP16 | -| Meta | LLaMA-2 Chat (7B) | togethercomputer/llama-2-7b-chat | 4096 | FP16 | -| Meta | Meta Llama 3 8B Instruct | meta-llama/Meta-Llama-3-8B-Instruct | 8192 | FP16 | -| Meta | Meta Llama 3 70B Instruct | meta-llama/Meta-Llama-3-70B-Instruct | 8192 | FP16 | -| Meta | Code Llama Instruct (70B) | codellama/CodeLlama-70b-Instruct-hf | 4096 | FP16 | -| Meta | LLaMA-2 Chat (70B) | togethercomputer/llama-2-70b-chat | 4096 | FP16 | -| Meta | Code Llama Instruct (7B) | codellama/CodeLlama-7b-Instruct-hf | 16384 | FP16 | -| Meta | LLaMA-2 Chat (70B) | meta-llama/Llama-2-70b-chat-hf | 4096 | FP16 | -| Meta | Meta Llama 3.1 8B Instruct | meta-llama/Meta-Llama-3.1-8B-Instruct-Reference | 16384 | FP16 | -| Meta | Meta Llama 3.1 70B Instruct Turbo | albert/meta-llama-3-1-70b-instruct-turbo | 131072 | FP16 | -| Meta | Meta Llama 3.1 70B Instruct | meta-llama/Meta-Llama-3.1-70B-Instruct-Reference | 8192 | FP16 | -| Meta | (Free) Llama 3.2 11B Vision Instruct Turbo | meta-llama/Llama-Vision-Free | 131072 | FP16 | -| Meta | Llama 3.2 11B Vision Instruct Turbo | meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo | 131072 | FP16 | -| Meta | Llama 3.2 90B Vision Instruct Turbo | meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo | 131072 | FP16 | -| microsoft | WizardLM-2 (8x22B) | microsoft/WizardLM-2-8x22B | 65536 | FP16 | -| mistralai | Mistral (7B) Instruct | mistralai/Mistral-7B-Instruct-v0.1 | 4096 | FP16 | -| mistralai | Mistral (7B) Instruct v0.2 | mistralai/Mistral-7B-Instruct-v0.2 | 32768 | FP16 | -| mistralai | Mistral (7B) Instruct v0.3 | mistralai/Mistral-7B-Instruct-v0.3 | 32768 | FP16 | -| mistralai | Mixtral-8x7B Instruct v0.1 | mistralai/Mixtral-8x7B-Instruct-v0.1 | 32768 | FP16 | -| mistralai | Mixtral-8x22B Instruct v0.1 | mistralai/Mixtral-8x22B-Instruct-v0.1 | 65536 | FP16 | -| NousResearch | Nous Hermes 2 - Mixtral 8x7B-DPO | NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO | 32768 | FP16 | -| NousResearch | Nous Hermes LLaMA-2 (70B) | NousResearch/Nous-Hermes-Llama2-70b | 4096 | FP16 | -| NousResearch | Nous Hermes 2 - Mixtral 8x7B-SFT | NousResearch/Nous-Hermes-2-Mixtral-8x7B-SFT | 32768 | FP16 | -| NousResearch | Nous Hermes Llama-2 (13B) | NousResearch/Nous-Hermes-Llama2-13b | 4096 | FP16 | -| NousResearch | Nous Hermes 2 - Mistral DPO (7B) | NousResearch/Nous-Hermes-2-Mistral-7B-DPO | 32768 | FP16 | -| NousResearch | Nous Hermes LLaMA-2 (7B) | NousResearch/Nous-Hermes-llama-2-7b | 4096 | FP16 | -| NousResearch | Nous Capybara v1.9 (7B) | NousResearch/Nous-Capybara-7B-V1p9 | 8192 | FP16 | -| NousResearch | Hermes 2 Theta Llama-3 70B | NousResearch/Hermes-2-Theta-Llama-3-70B | 8192 | FP16 | -| OpenChat | OpenChat 3.5 | openchat/openchat-3.5-1210 | 8192 | FP16 | -| OpenOrca | OpenOrca Mistral (7B) 8K | Open-Orca/Mistral-7B-OpenOrca | 8192 | FP16 | -| Qwen | Qwen 2 Instruct (72B) | Qwen/Qwen2-72B-Instruct | 32768 | FP16 | -| Qwen | Qwen2.5 72B Instruct Turbo | Qwen/Qwen2.5-72B-Instruct-Turbo | 32768 | FP8 | -| Qwen | Qwen2.5 7B Instruct Turbo | Qwen/Qwen2.5-7B-Instruct-Turbo | 32768 | FP8 | -| Qwen | Qwen 1.5 Chat (110B) | Qwen/Qwen1.5-110B-Chat | 32768 | FP16 | -| Qwen | Qwen 1.5 Chat (72B) | Qwen/Qwen1.5-72B-Chat | 32768 | FP16 | -| Qwen | Qwen 2 Instruct (1.5B) | Qwen/Qwen2-1.5B-Instruct | 32768 | FP16 | -| Qwen | Qwen 2 Instruct (7B) | Qwen/Qwen2-7B-Instruct | 32768 | FP16 | -| Qwen | Qwen 1.5 Chat (14B) | Qwen/Qwen1.5-14B-Chat | 32768 | FP16 | -| Qwen | Qwen 1.5 Chat (1.8B) | Qwen/Qwen1.5-1.8B-Chat | 32768 | FP16 | -| Qwen | Qwen 1.5 Chat (32B) | Qwen/Qwen1.5-32B-Chat | 32768 | FP16 | -| Qwen | Qwen 1.5 Chat (7B) | Qwen/Qwen1.5-7B-Chat | 32768 | FP16 | -| Qwen | Qwen 1.5 Chat (0.5B) | Qwen/Qwen1.5-0.5B-Chat | 32768 | FP16 | -| Qwen | Qwen 1.5 Chat (4B) | Qwen/Qwen1.5-4B-Chat | 32768 | FP16 | -| Snorkel AI | Snorkel Mistral PairRM DPO (7B) | snorkelai/Snorkel-Mistral-PairRM-DPO | 32768 | FP16 | -| Snowflake | Snowflake Arctic Instruct | Snowflake/snowflake-arctic-instruct | 4096 | FP16 | -| Stanford | Alpaca (7B) | togethercomputer/alpaca-7b | 2048 | FP16 | -| teknium | OpenHermes-2-Mistral (7B) | teknium/OpenHermes-2-Mistral-7B | 8192 | FP16 | -| teknium | OpenHermes-2.5-Mistral (7B) | teknium/OpenHermes-2p5-Mistral-7B | 8192 | FP16 | -| test | Test 11 | test/test11 | 4096 | FP16 | -| Tim Dettmers | Guanaco (65B) | togethercomputer/guanaco-65b | 2048 | FP16 | -| Tim Dettmers | Guanaco (13B) | togethercomputer/guanaco-13b | 2048 | FP16 | -| Tim Dettmers | Guanaco (33B) | togethercomputer/guanaco-33b | 2048 | FP16 | -| Tim Dettmers | Guanaco (7B) | togethercomputer/guanaco-7b | 2048 | FP16 | -| Undi95 | ReMM SLERP L2 (13B) | Undi95/ReMM-SLERP-L2-13B | 4096 | FP16 | -| Undi95 | Toppy M (7B) | Undi95/Toppy-M-7B | 4096 | FP16 | -| upstage | Upstage SOLAR Instruct v1 (11B) | upstage/SOLAR-10.7B-Instruct-v1.0 | 4096 | FP16 | -| upstage | Upstage SOLAR Instruct v1 (11B)-Int4 | togethercomputer/SOLAR-10.7B-Instruct-v1.0-int4 | 4096 | FP16 | -| WizardLM | WizardLM v1.2 (13B) | WizardLM/WizardLM-13B-V1.2 | 4096 | FP16 | \ No newline at end of file diff --git a/server/utils/AiProviders/togetherAi/scripts/parse.mjs b/server/utils/AiProviders/togetherAi/scripts/parse.mjs deleted file mode 100644 index 3769d8c63..000000000 --- a/server/utils/AiProviders/togetherAi/scripts/parse.mjs +++ /dev/null @@ -1,43 +0,0 @@ -// Together AI does not provide a simple REST API to get models, -// so we have a table which we copy from their documentation -// https://docs.together.ai/edit/inference-models that we can -// then parse and get all models from in a format that makes sense -// Why this does not exist is so bizarre, but whatever. - -// To run, cd into this directory and run `node parse.mjs` -// copy outputs into the export in ../models.js - -// Update the date below if you run this again because TogetherAI added new models. -// Last Collected: Nov 20, 2024 -// Since last collection Together's docs are broken. I just copied the HTML table -// and had claude3 convert to markdown and it works well enough. - -import fs from "fs"; - -function parseChatModels() { - const fixed = {}; - const tableString = fs.readFileSync("chat_models.txt", { encoding: "utf-8" }); - const rows = tableString.split("\n").slice(2); - - rows.forEach((row) => { - const [provider, name, id, maxLength] = row.split("|").slice(1, -1); - const data = { - provider: provider.trim(), - name: name.trim(), - id: id.trim(), - maxLength: Number(maxLength.trim()), - }; - - fixed[data.id] = { - id: data.id, - organization: data.provider, - name: data.name, - maxLength: data.maxLength, - }; - }); - - fs.writeFileSync("chat_models.json", JSON.stringify(fixed, null, 2), "utf-8"); - return fixed; -} - -parseChatModels(); diff --git a/server/utils/helpers/customModels.js b/server/utils/helpers/customModels.js index 7adb27626..f6fa8435c 100644 --- a/server/utils/helpers/customModels.js +++ b/server/utils/helpers/customModels.js @@ -44,7 +44,7 @@ async function getCustomModels(provider = "", apiKey = null, basePath = null) { case "ollama": return await ollamaAIModels(basePath); case "togetherai": - return await getTogetherAiModels(); + return await getTogetherAiModels(apiKey); case "fireworksai": return await getFireworksAiModels(apiKey); case "mistral": @@ -327,19 +327,21 @@ async function ollamaAIModels(basePath = null) { return { models, error: null }; } -async function getTogetherAiModels() { - const knownModels = togetherAiModels(); - if (!Object.keys(knownModels).length === 0) - return { models: [], error: null }; - - const models = Object.values(knownModels).map((model) => { - return { - id: model.id, - organization: model.organization, - name: model.name, - }; - }); - return { models, error: null }; +async function getTogetherAiModels(apiKey = null) { + const _apiKey = + apiKey === true + ? process.env.TOGETHER_AI_API_KEY + : apiKey || process.env.TOGETHER_AI_API_KEY || null; + try { + const { togetherAiModels } = require("../AiProviders/togetherAi"); + const models = await togetherAiModels(_apiKey); + if (models.length > 0 && !!_apiKey) + process.env.TOGETHER_AI_API_KEY = _apiKey; + return { models, error: null }; + } catch (error) { + console.error("Error in getTogetherAiModels:", error); + return { models: [], error: "Failed to fetch Together AI models" }; + } } async function getFireworksAiModels() { -- GitLab