From 43edad015c6f1db5c3b8c44f15fc8742772fd35c Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Fri, 18 Jul 2025 17:30:30 -0700 Subject: [PATCH 1/9] add moonshot ai LLM & agent provider --- .../LLMSelection/MoonshotAiOptions/index.jsx | 117 +++++++ frontend/src/media/llmprovider/moonshotai.png | Bin 0 -> 54058 bytes .../GeneralSettings/LLMPreference/index.jsx | 10 + .../AgentConfig/AgentLLMSelection/index.jsx | 1 + server/endpoints/utils.js | 3 + server/models/systemSettings.js | 5 + server/utils/AiProviders/moonshotAi/index.js | 295 ++++++++++++++++++ server/utils/agents/aibitat/index.js | 2 + .../agents/aibitat/providers/ai-provider.js | 9 +- .../utils/agents/aibitat/providers/index.js | 2 + .../agents/aibitat/providers/moonshotAi.js | 27 ++ server/utils/agents/index.js | 6 + server/utils/helpers/customModels.js | 28 ++ server/utils/helpers/index.js | 8 + server/utils/helpers/updateENV.js | 11 + 15 files changed, 523 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/LLMSelection/MoonshotAiOptions/index.jsx create mode 100644 frontend/src/media/llmprovider/moonshotai.png create mode 100644 server/utils/AiProviders/moonshotAi/index.js create mode 100644 server/utils/agents/aibitat/providers/moonshotAi.js diff --git a/frontend/src/components/LLMSelection/MoonshotAiOptions/index.jsx b/frontend/src/components/LLMSelection/MoonshotAiOptions/index.jsx new file mode 100644 index 00000000000..4546fef0302 --- /dev/null +++ b/frontend/src/components/LLMSelection/MoonshotAiOptions/index.jsx @@ -0,0 +1,117 @@ +import { useState, useEffect } from "react"; +import System from "@/models/system"; + +export default function MoonshotAiOptions({ settings }) { + const [inputValue, setInputValue] = useState(settings?.MoonshotAiApiKey); + const [moonshotAiKey, setMoonshotAiKey] = useState( + settings?.MoonshotAiApiKey + ); + + return ( +
+
+ + setInputValue(e.target.value)} + onBlur={() => setMoonshotAiKey(inputValue)} + /> +
+ {!settings?.credentialsOnly && ( + + )} +
+ ); +} + +function MoonshotAiModelSelection({ apiKey, settings }) { + const [models, setModels] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + async function findCustomModels() { + setLoading(true); + const { models: availableModels } = await System.customModels( + "moonshotai", + typeof apiKey === "boolean" ? null : apiKey + ); + + if (availableModels?.length > 0) { + setModels(availableModels); + } + + setLoading(false); + } + findCustomModels(); + }, [apiKey]); + + if (!apiKey) { + return ( +
+ + +
+ ); + } + + if (loading) { + return ( +
+ + +
+ ); + } + + return ( +
+ + +
+ ); +} diff --git a/frontend/src/media/llmprovider/moonshotai.png b/frontend/src/media/llmprovider/moonshotai.png new file mode 100644 index 0000000000000000000000000000000000000000..5e7bc86770f08b9c8cff2a1efa40dd06f419d82d GIT binary patch literal 54058 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 literal 0 HcmV?d00001 diff --git a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx index f9aceec189f..9ef12944c2b 100644 --- a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx +++ b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx @@ -32,6 +32,7 @@ import XAILogo from "@/media/llmprovider/xai.png"; import NvidiaNimLogo from "@/media/llmprovider/nvidia-nim.png"; import PPIOLogo from "@/media/llmprovider/ppio.png"; import DellProAiStudioLogo from "@/media/llmprovider/dpais.png"; +import MoonshotAiLogo from "@/media/llmprovider/moonshotai.png"; import PreLoader from "@/components/Preloader"; import OpenAiOptions from "@/components/LLMSelection/OpenAiOptions"; @@ -61,6 +62,7 @@ import XAILLMOptions from "@/components/LLMSelection/XAiLLMOptions"; import NvidiaNimOptions from "@/components/LLMSelection/NvidiaNimOptions"; import PPIOLLMOptions from "@/components/LLMSelection/PPIOLLMOptions"; import DellProAiStudioOptions from "@/components/LLMSelection/DPAISOptions"; +import MoonshotAiOptions from "@/components/LLMSelection/MoonshotAiOptions"; import LLMItem from "@/components/LLMSelection/LLMItem"; import { CaretUpDown, MagnifyingGlass, X } from "@phosphor-icons/react"; @@ -293,6 +295,14 @@ export const AVAILABLE_LLM_PROVIDERS = [ description: "A unified API of AI services from leading providers", requiredConfig: ["ApipieLLMApiKey", "ApipieLLMModelPref"], }, + { + name: "Moonshot AI", + value: "moonshotai", + logo: MoonshotAiLogo, + options: (settings) => , + description: "Run Moonshot AI's powerful LLMs.", + requiredConfig: ["MoonshotAiApiKey"], + }, { name: "Generic OpenAI", value: "generic-openai", diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx index 6baae1ddee5..31b7327ba63 100644 --- a/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx +++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx @@ -31,6 +31,7 @@ const ENABLED_PROVIDERS = [ "xai", "nvidia-nim", "gemini", + "moonshotai", // TODO: More agent support. // "cohere", // Has tool calling and will need to build explicit support // "huggingface" // Can be done but already has issues with no-chat templated. Needs to be tested. diff --git a/server/endpoints/utils.js b/server/endpoints/utils.js index cf4183251b8..425d44f95e8 100644 --- a/server/endpoints/utils.js +++ b/server/endpoints/utils.js @@ -142,6 +142,9 @@ function getModelTag() { case "gemini": model = process.env.GEMINI_LLM_MODEL_PREF; break; + case "moonshotai": + model = process.env.MOONSHOT_AI_MODEL_PREF; + break; default: model = "--"; break; diff --git a/server/models/systemSettings.js b/server/models/systemSettings.js index 8de54f6c9ca..df2eca13485 100644 --- a/server/models/systemSettings.js +++ b/server/models/systemSettings.js @@ -544,6 +544,11 @@ const SystemSettings = { LiteLLMBasePath: process.env.LITE_LLM_BASE_PATH, LiteLLMApiKey: !!process.env.LITE_LLM_API_KEY, + // Moonshot AI Keys + MoonshotAiApiKey: !!process.env.MOONSHOT_AI_API_KEY, + MoonshotAiModelPref: + process.env.MOONSHOT_AI_MODEL_PREF || "moonshot-v1-32k", + // Generic OpenAI Keys GenericOpenAiBasePath: process.env.GENERIC_OPEN_AI_BASE_PATH, GenericOpenAiModelPref: process.env.GENERIC_OPEN_AI_MODEL_PREF, diff --git a/server/utils/AiProviders/moonshotAi/index.js b/server/utils/AiProviders/moonshotAi/index.js new file mode 100644 index 00000000000..2a34525840c --- /dev/null +++ b/server/utils/AiProviders/moonshotAi/index.js @@ -0,0 +1,295 @@ +const { NativeEmbedder } = require("../../EmbeddingEngines/native"); +const { + LLMPerformanceMonitor, +} = require("../../helpers/chat/LLMPerformanceMonitor"); +const { + handleDefaultStreamResponseV2, + formatChatHistory, +} = require("../../helpers/chat/responses"); +const fs = require("fs"); +const path = require("path"); +const { safeJsonParse } = require("../../http"); + +const cacheFolder = path.resolve( + process.env.STORAGE_DIR + ? path.resolve(process.env.STORAGE_DIR, "models", "moonshotai") + : path.resolve(__dirname, `../../../storage/models/moonshotai`) +); + +class MoonshotAiLLM { + constructor(embedder = null, modelPreference = null) { + if (!process.env.MOONSHOT_AI_API_KEY) + throw new Error("No Moonshot AI API key was set."); + const { OpenAI: OpenAIApi } = require("openai"); + + this.openai = new OpenAIApi({ + baseURL: "https://api.moonshot.ai/v1", + apiKey: process.env.MOONSHOT_AI_API_KEY, + }); + this.model = + modelPreference || + process.env.MOONSHOT_AI_MODEL_PREF || + "moonshot-v1-32k"; + this.limits = { + history: this.promptWindowLimit() * 0.15, + system: this.promptWindowLimit() * 0.15, + user: this.promptWindowLimit() * 0.7, + }; + + this.embedder = embedder ?? new NativeEmbedder(); + this.defaultTemp = 0.7; + + if (!fs.existsSync(cacheFolder)) + fs.mkdirSync(cacheFolder, { recursive: true }); + this.cacheModelPath = path.resolve(cacheFolder, "models.json"); + this.cacheAtPath = path.resolve(cacheFolder, ".cached_at"); + + this.log( + `Initialized ${this.model} with context window ${this.promptWindowLimit()}` + ); + } + + log(message) { + console.log(`[Moonshot AI] ${message}`); + } + + // This checks if the .cached_at file has a timestamp that is more than 1Week (in millis) + // from the current date. If it is, then we will refetch the API so that all the models are up + // to date. + #cacheIsStale() { + const MAX_STALE = 6.048e8; // 1 Week in MS + if (!fs.existsSync(this.cacheAtPath)) return true; + const now = Number(new Date()); + const timestampMs = Number(fs.readFileSync(this.cacheAtPath)); + return now - timestampMs > MAX_STALE; + } + + // This function fetches the models from the Moonshot AI API and caches them locally. + async #syncModels() { + if (fs.existsSync(this.cacheModelPath) && !this.#cacheIsStale()) + return false; + + this.log( + "Model cache is not present or stale. Fetching from Moonshot AI API." + ); + await fetchMoonshotAiModels(); + return; + } + + models() { + if (!fs.existsSync(this.cacheModelPath)) return {}; + return safeJsonParse( + fs.readFileSync(this.cacheModelPath, { encoding: "utf-8" }), + {} + ); + } + + streamingEnabled() { + return true; + } + + async isValidChatCompletionModel(model) { + await this.#syncModels(); + const availableModels = this.models(); + return Object.prototype.hasOwnProperty.call(availableModels, model); + } + + promptWindowLimit() { + const availableModels = this.models(); + const modelInfo = availableModels[this.model]; + if (!modelInfo) { + if (this.model.includes("128k")) return 128000; + if (this.model.includes("32k")) return 32000; + if (this.model.includes("8k")) return 8000; + if (this.model.includes("kimi")) return 128000; + return 8000; + } + return modelInfo.maxLength; + } + + constructPrompt({ + systemPrompt = "", + contextTexts = [], + chatHistory = [], + userPrompt = "", + attachments = [], + }) { + const messages = []; + + if (systemPrompt) { + messages.push({ + role: "system", + content: systemPrompt, + }); + } + + if (contextTexts?.length > 0) { + messages.push({ + role: "system", + content: `Context:\n${contextTexts.join("\n")}`, + }); + } + + messages.push(...formatChatHistory(chatHistory)); + + if (userPrompt) { + messages.push({ + role: "user", + content: userPrompt, + }); + } + + return messages; + } + + async compressMessages(promptArgs = {}, rawHistory = []) { + const { messageArrayCompressor } = require("../../helpers/chat"); + const messageArray = this.constructPrompt(promptArgs); + return await messageArrayCompressor(this, messageArray, rawHistory); + } + + async getChatCompletion(messages = null, { temperature = 0.7 }) { + if (!(await this.isValidChatCompletionModel(this.model))) + throw new Error( + `Moonshot AI chat: ${this.model} is not valid for chat completion!` + ); + + const result = await LLMPerformanceMonitor.measureAsyncFunction( + this.openai.chat.completions + .create({ + model: this.model, + messages, + temperature, + }) + .catch((e) => { + throw new Error(e.message); + }) + ); + + if ( + !Object.prototype.hasOwnProperty.call(result.output, "choices") || + result.output.choices.length === 0 + ) + return null; + + return { + textResponse: result.output.choices[0].message.content, + metrics: { + prompt_tokens: result.output.usage.prompt_tokens || 0, + completion_tokens: result.output.usage.completion_tokens || 0, + total_tokens: result.output.usage.total_tokens || 0, + outputTps: result.output.usage.completion_tokens / result.duration, + duration: result.duration, + }, + }; + } + + async streamGetChatCompletion(messages = null, { temperature = 0.7 }) { + if (!(await this.isValidChatCompletionModel(this.model))) + throw new Error( + `Moonshot AI chat: ${this.model} is not valid for chat completion!` + ); + + const measuredStreamRequest = await LLMPerformanceMonitor.measureStream( + this.openai.chat.completions.create({ + model: this.model, + stream: true, + messages, + temperature, + }), + messages + ); + + return measuredStreamRequest; + } + + handleStream(response, stream, responseProps) { + return handleDefaultStreamResponseV2(response, stream, responseProps); + } + + // Simple wrapper for dynamic embedder & normalize interface for all LLM implementations + async embedTextInput(textInput) { + return await this.embedder.embedTextInput(textInput); + } + async embedChunks(textChunks = []) { + return await this.embedder.embedChunks(textChunks); + } + + async sendChat(chatHistory, prompt, workspace = null) { + try { + const messages = formatChatHistory(chatHistory, prompt, { + systemPrompt: workspace?.openAiSystemPrompt, + }); + + const stream = await this.openai.chat.completions.create({ + model: this.model, + messages, + temperature: this.defaultTemp, + stream: true, + }); + + return await handleDefaultStreamResponseV2(stream); + } catch (error) { + throw new Error( + `[Moonshot AI] ${error?.error?.message || error?.message || error}` + ); + } + } +} + +async function fetchMoonshotAiModels(providedApiKey = null) { + const apiKey = providedApiKey || process.env.MOONSHOT_AI_API_KEY || null; + if (!apiKey) return {}; + + const { OpenAI: OpenAIApi } = require("openai"); + const openai = new OpenAIApi({ + baseURL: "https://api.moonshot.ai/v1", + apiKey, + }); + + return await openai.models + .list() + .then((response) => { + const models = {}; + response.data.forEach((model) => { + models[model.id] = { + id: model.id, + name: model.id, + organization: model.owned_by, + maxLength: (() => { + if (model.id.includes("128k")) return 128000; + if (model.id.includes("32k")) return 32000; + if (model.id.includes("8k")) return 8000; + if (model.id.includes("kimi")) return 128000; + return 8000; + })(), + }; + }); + + // Cache all response information + if (!fs.existsSync(cacheFolder)) + fs.mkdirSync(cacheFolder, { recursive: true }); + fs.writeFileSync( + path.resolve(cacheFolder, "models.json"), + JSON.stringify(models), + { + encoding: "utf-8", + } + ); + fs.writeFileSync( + path.resolve(cacheFolder, ".cached_at"), + String(Number(new Date())), + { + encoding: "utf-8", + } + ); + + return models; + }) + .catch((e) => { + console.error(e); + return {}; + }); +} + +module.exports = { MoonshotAiLLM, fetchMoonshotAiModels }; diff --git a/server/utils/agents/aibitat/index.js b/server/utils/agents/aibitat/index.js index 6e069defd3a..d6b22d3a9af 100644 --- a/server/utils/agents/aibitat/index.js +++ b/server/utils/agents/aibitat/index.js @@ -812,6 +812,8 @@ ${this.getHistory({ to: route.to }) return new Providers.FireworksAIProvider({ model: config.model }); case "nvidia-nim": return new Providers.NvidiaNimProvider({ model: config.model }); + case "moonshotai": + return new Providers.MoonshotAiProvider({ model: config.model }); case "deepseek": return new Providers.DeepSeekProvider({ model: config.model }); case "litellm": diff --git a/server/utils/agents/aibitat/providers/ai-provider.js b/server/utils/agents/aibitat/providers/ai-provider.js index 5085fdcf5e1..07867e4c6e4 100644 --- a/server/utils/agents/aibitat/providers/ai-provider.js +++ b/server/utils/agents/aibitat/providers/ai-provider.js @@ -184,7 +184,14 @@ class Provider { apiKey: process.env.GEMINI_API_KEY ?? null, ...config, }); - + case "moonshotai": + return new ChatOpenAI({ + configuration: { + baseURL: "https://api.moonshot.ai/v1", + }, + apiKey: process.env.MOONSHOT_AI_API_KEY ?? null, + ...config, + }); // OSS Model Runners // case "anythingllm_ollama": // return new ChatOllama({ diff --git a/server/utils/agents/aibitat/providers/index.js b/server/utils/agents/aibitat/providers/index.js index d8c174862e4..859ad9de9d5 100644 --- a/server/utils/agents/aibitat/providers/index.js +++ b/server/utils/agents/aibitat/providers/index.js @@ -23,6 +23,7 @@ const NvidiaNimProvider = require("./nvidiaNim.js"); const PPIOProvider = require("./ppio.js"); const GeminiProvider = require("./gemini.js"); const DellProAiStudioProvider = require("./dellProAiStudio.js"); +const MoonshotAiProvider = require("./moonshotAi.js"); module.exports = { OpenAIProvider, @@ -50,4 +51,5 @@ module.exports = { PPIOProvider, GeminiProvider, DellProAiStudioProvider, + MoonshotAiProvider, }; diff --git a/server/utils/agents/aibitat/providers/moonshotAi.js b/server/utils/agents/aibitat/providers/moonshotAi.js new file mode 100644 index 00000000000..f350e994d8a --- /dev/null +++ b/server/utils/agents/aibitat/providers/moonshotAi.js @@ -0,0 +1,27 @@ +const OpenAI = require("openai"); +const Provider = require("./ai-provider.js"); +const InheritMultiple = require("./helpers/classes.js"); +const UnTooled = require("./helpers/untooled.js"); + +/** + * The agent provider for the Moonshot AI provider. + */ +class MoonshotAiProvider extends InheritMultiple([Provider, UnTooled]) { + model; + + constructor(config = {}) { + const { model = "moonshot-v1-32k" } = config; + super(); + const client = new OpenAI({ + baseURL: "https://api.moonshot.ai/v1", + apiKey: process.env.MOONSHOT_AI_API_KEY, + maxRetries: 3, + }); + + this._client = client; + this.model = model; + this.verbose = true; + } +} + +module.exports = MoonshotAiProvider; diff --git a/server/utils/agents/index.js b/server/utils/agents/index.js index 915e5a59bed..4527ee783b4 100644 --- a/server/utils/agents/index.js +++ b/server/utils/agents/index.js @@ -199,6 +199,10 @@ class AgentHandler { "Dell Pro AI Studio model must be set to use agents." ); break; + case "moonshotai": + if (!process.env.MOONSHOT_AI_MODEL_PREF) + throw new Error("Moonshot AI model must be set to use agents."); + break; default: throw new Error( @@ -254,6 +258,8 @@ class AgentHandler { return process.env.DEEPSEEK_MODEL_PREF ?? "deepseek-chat"; case "litellm": return process.env.LITE_LLM_MODEL_PREF ?? null; + case "moonshotai": + return process.env.MOONSHOT_AI_MODEL_PREF ?? "moonshot-v1-32k"; case "apipie": return process.env.APIPIE_LLM_MODEL_PREF ?? null; case "xai": diff --git a/server/utils/helpers/customModels.js b/server/utils/helpers/customModels.js index cff97ff888f..de855f0b34d 100644 --- a/server/utils/helpers/customModels.js +++ b/server/utils/helpers/customModels.js @@ -33,6 +33,7 @@ const SUPPORT_CUSTOM_MODELS = [ "gemini", "ppio", "dpais", + "moonshotai", ]; async function getCustomModels(provider = "", apiKey = null, basePath = null) { @@ -84,6 +85,8 @@ async function getCustomModels(provider = "", apiKey = null, basePath = null) { return await getPPIOModels(apiKey); case "dpais": return await getDellProAiStudioModels(basePath); + case "moonshotai": + return await getMoonshotAiModels(apiKey); default: return { models: [], error: "Invalid provider for custom models" }; } @@ -675,6 +678,31 @@ async function getDellProAiStudioModels(basePath = null) { } } +async function getMoonshotAiModels(_apiKey = null) { + const apiKey = + _apiKey === true + ? process.env.MOONSHOT_AI_API_KEY + : _apiKey || process.env.MOONSHOT_AI_API_KEY || null; + + const { OpenAI: OpenAIApi } = require("openai"); + const openai = new OpenAIApi({ + baseURL: "https://api.moonshot.ai/v1", + apiKey, + }); + const models = await openai.models + .list() + .then((results) => results.data) + .catch((e) => { + console.error(`MoonshotAi:listModels`, e.message); + return []; + }); + + // Api Key was successful so lets save it for future uses + if (models.length > 0) process.env.MOONSHOT_AI_API_KEY = apiKey; + return { models, error: null }; +} + module.exports = { getCustomModels, + SUPPORT_CUSTOM_MODELS, }; diff --git a/server/utils/helpers/index.js b/server/utils/helpers/index.js index 2017c618fac..9e101a2be3c 100644 --- a/server/utils/helpers/index.js +++ b/server/utils/helpers/index.js @@ -203,6 +203,9 @@ function getLLMProvider({ provider = null, model = null } = {}) { case "ppio": const { PPIOLLM } = require("../AiProviders/ppio"); return new PPIOLLM(embedder, model); + case "moonshotai": + const { MoonshotAiLLM } = require("../AiProviders/moonshotAi"); + return new MoonshotAiLLM(embedder, model); case "dpais": const { DellProAiStudioLLM } = require("../AiProviders/dellProAiStudio"); return new DellProAiStudioLLM(embedder, model); @@ -353,6 +356,9 @@ function getLLMProviderClass({ provider = null } = {}) { case "dpais": const { DellProAiStudioLLM } = require("../AiProviders/dellProAiStudio"); return DellProAiStudioLLM; + case "moonshotai": + const { MoonshotAiLLM } = require("../AiProviders/moonshotAi"); + return MoonshotAiLLM; default: return null; } @@ -419,6 +425,8 @@ function getBaseLLMProviderModel({ provider = null } = {}) { return process.env.PPIO_API_KEY; case "dpais": return process.env.DPAIS_LLM_MODEL_PREF; + case "moonshotai": + return process.env.MOONSHOT_AI_MODEL_PREF; default: return null; } diff --git a/server/utils/helpers/updateENV.js b/server/utils/helpers/updateENV.js index 87670830d9c..ce28e73a1dd 100644 --- a/server/utils/helpers/updateENV.js +++ b/server/utils/helpers/updateENV.js @@ -676,6 +676,16 @@ const KEY_MAPPING = { envKey: "PPIO_MODEL_PREF", checks: [isNotEmpty], }, + + // Moonshot AI Options + MoonshotAiApiKey: { + envKey: "MOONSHOT_AI_API_KEY", + checks: [isNotEmpty], + }, + MoonshotAiModelPref: { + envKey: "MOONSHOT_AI_MODEL_PREF", + checks: [isNotEmpty], + }, }; function isNotEmpty(input = "") { @@ -784,6 +794,7 @@ function supportedLLM(input = "") { "nvidia-nim", "ppio", "dpais", + "moonshotai", ].includes(input); return validSelection ? null : `${input} is not a valid LLM provider.`; } From cd286bbd8bf14bf581de2b45ae172368d7ba4ea7 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 11:43:45 -0700 Subject: [PATCH 2/9] fix moonshot agent calling --- server/storage/models/.gitignore | 1 + .../agents/aibitat/providers/moonshotAi.js | 82 ++++++++++++++++++- 2 files changed, 80 insertions(+), 3 deletions(-) diff --git a/server/storage/models/.gitignore b/server/storage/models/.gitignore index 5e83df7bcc4..47124166e3c 100644 --- a/server/storage/models/.gitignore +++ b/server/storage/models/.gitignore @@ -9,4 +9,5 @@ gemini togetherAi tesseract ppio +moonshotai context-windows/* \ No newline at end of file diff --git a/server/utils/agents/aibitat/providers/moonshotAi.js b/server/utils/agents/aibitat/providers/moonshotAi.js index f350e994d8a..b6bb3bebd03 100644 --- a/server/utils/agents/aibitat/providers/moonshotAi.js +++ b/server/utils/agents/aibitat/providers/moonshotAi.js @@ -3,9 +3,6 @@ const Provider = require("./ai-provider.js"); const InheritMultiple = require("./helpers/classes.js"); const UnTooled = require("./helpers/untooled.js"); -/** - * The agent provider for the Moonshot AI provider. - */ class MoonshotAiProvider extends InheritMultiple([Provider, UnTooled]) { model; @@ -22,6 +19,85 @@ class MoonshotAiProvider extends InheritMultiple([Provider, UnTooled]) { this.model = model; this.verbose = true; } + + /** + * Create a completion based on the received messages. + * + * @param messages A list of messages to send to the API. + * @param functions + * @returns The completion. + */ + get client() { + return this._client; + } + + async #handleFunctionCallChat({ messages = [] }) { + return await this.client.chat.completions + .create({ + model: this.model, + temperature: 0, + messages, + }) + .then((result) => { + if (!result.hasOwnProperty("choices")) + throw new Error("Moonshot chat: No results!"); + if (result.choices.length === 0) + throw new Error("Moonshot chat: No results length!"); + return result.choices[0].message.content; + }) + .catch((_) => { + return null; + }); + } + + async complete(messages, functions = []) { + try { + let completion; + if (functions.length > 0) { + const { toolCall, text } = await this.functionCall( + messages, + functions, + this.#handleFunctionCallChat.bind(this) + ); + + if (toolCall !== null) { + this.providerLog(`Valid tool call found - running ${toolCall.name}.`); + this.deduplicator.trackRun(toolCall.name, toolCall.arguments); + return { + result: null, + functionCall: { + name: toolCall.name, + arguments: toolCall.arguments, + }, + cost: 0, + }; + } + completion = { content: text }; + } + + if (!completion?.content) { + this.providerLog( + "Will assume chat completion without tool call inputs." + ); + const response = await this.client.chat.completions.create({ + model: this.model, + messages: this.cleanMsgs(messages), + }); + completion = response.choices[0].message; + } + + // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent + // from calling the exact same function over and over in a loop within a single chat exchange + // _but_ we should enable it to call previously used tools in a new chat interaction. + this.deduplicator.reset("runs"); + return { + result: completion.content, + cost: 0, + }; + } catch (error) { + throw error; + } + } } module.exports = MoonshotAiProvider; From beb41c0f8886cd663c5b9a99d9da88e8e3a4c569 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 12:15:59 -0700 Subject: [PATCH 3/9] handle attachments/fix moonshot llm provider --- server/utils/AiProviders/moonshotAi/index.js | 91 ++++++++++---------- 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/server/utils/AiProviders/moonshotAi/index.js b/server/utils/AiProviders/moonshotAi/index.js index 2a34525840c..74bf93e85af 100644 --- a/server/utils/AiProviders/moonshotAi/index.js +++ b/server/utils/AiProviders/moonshotAi/index.js @@ -53,6 +53,40 @@ class MoonshotAiLLM { console.log(`[Moonshot AI] ${message}`); } + #appendContext(contextTexts = []) { + if (!contextTexts || !contextTexts.length) return ""; + return ( + "\nContext:\n" + + contextTexts + .map((text, i) => { + return `[CONTEXT ${i}]:\n${text}\n[END CONTEXT ${i}]\n\n`; + }) + .join("") + ); + } + + /** + * Generates appropriate content array for a message + attachments. + * @param {{userPrompt:string, attachments: import("../../helpers").Attachment[]}} + * @returns {string|object[]} + */ + #generateContent({ userPrompt, attachments = [] }) { + if (!attachments.length) { + return userPrompt; + } + + const content = [{ type: "text", text: userPrompt }]; + for (let attachment of attachments) { + content.push({ + type: "image_url", + image_url: { + url: attachment.contentString, + }, + }); + } + return content.flat(); + } + // This checks if the .cached_at file has a timestamp that is more than 1Week (in millis) // from the current date. If it is, then we will refetch the API so that all the models are up // to date. @@ -114,32 +148,18 @@ class MoonshotAiLLM { userPrompt = "", attachments = [], }) { - const messages = []; - - if (systemPrompt) { - messages.push({ - role: "system", - content: systemPrompt, - }); - } - - if (contextTexts?.length > 0) { - messages.push({ - role: "system", - content: `Context:\n${contextTexts.join("\n")}`, - }); - } - - messages.push(...formatChatHistory(chatHistory)); - - if (userPrompt) { - messages.push({ + const prompt = { + role: "system", + content: `${systemPrompt}${this.#appendContext(contextTexts)}`, + }; + return [ + prompt, + ...formatChatHistory(chatHistory, this.#generateContent), + { role: "user", - content: userPrompt, - }); - } - - return messages; + content: this.#generateContent({ userPrompt, attachments }), + }, + ]; } async compressMessages(promptArgs = {}, rawHistory = []) { @@ -214,27 +234,6 @@ class MoonshotAiLLM { async embedChunks(textChunks = []) { return await this.embedder.embedChunks(textChunks); } - - async sendChat(chatHistory, prompt, workspace = null) { - try { - const messages = formatChatHistory(chatHistory, prompt, { - systemPrompt: workspace?.openAiSystemPrompt, - }); - - const stream = await this.openai.chat.completions.create({ - model: this.model, - messages, - temperature: this.defaultTemp, - stream: true, - }); - - return await handleDefaultStreamResponseV2(stream); - } catch (error) { - throw new Error( - `[Moonshot AI] ${error?.error?.message || error?.message || error}` - ); - } - } } async function fetchMoonshotAiModels(providedApiKey = null) { From 9c07f053996f124d2e6bc2d1a0c8dbb21564ed97 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 12:23:17 -0700 Subject: [PATCH 4/9] update docs/example env --- README.md | 1 + docker/.env.example | 4 ++++ server/.env.example | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/README.md b/README.md index a8199403b28..65c529b1abe 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ AnythingLLM divides your documents into objects called `workspaces`. A Workspace - [xAI](https://x.ai/) - [Novita AI (chat models)](https://novita.ai/model-api/product/llm-api?utm_source=github_anything-llm&utm_medium=github_readme&utm_campaign=link) - [PPIO](https://ppinfra.com?utm_source=github_anything-llm) +- [Moonshot AI](https://www.moonshot.ai/) **Embedder models:** diff --git a/docker/.env.example b/docker/.env.example index d0b6dbeb115..6a5d8b33159 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -133,6 +133,10 @@ GID='1000' # PPIO_API_KEY='your-ppio-api-key-here' # PPIO_MODEL_PREF=deepseek/deepseek-v3/community +# LLM_PROVIDER='moonshotai' +# MOONSHOT_AI_API_KEY='your-moonshot-api-key-here' +# MOONSHOT_AI_MODEL_PREF='moonshot-v1-32k' + ########################################### ######## Embedding API SElECTION ########## ########################################### diff --git a/server/.env.example b/server/.env.example index 12fa5ec226a..65e9748104e 100644 --- a/server/.env.example +++ b/server/.env.example @@ -131,6 +131,10 @@ SIG_SALT='salt' # Please generate random string at least 32 chars long. # PPIO_API_KEY='your-ppio-api-key-here' # PPIO_MODEL_PREF='deepseek/deepseek-v3/community' +# LLM_PROVIDER='moonshotai' +# MOONSHOT_AI_API_KEY='your-moonshot-api-key-here' +# MOONSHOT_AI_MODEL_PREF='moonshot-v1-32k' + ########################################### ######## Embedding API SElECTION ########## ########################################### From 31390936a1ec5d28d4aebc207049bded8b74137d Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 15:09:05 -0700 Subject: [PATCH 5/9] add moonshot to onboarding privacy --- .../pages/OnboardingFlow/Steps/DataHandling/index.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx b/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx index bc48209da9c..7d4f48af5ec 100644 --- a/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx +++ b/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx @@ -38,6 +38,8 @@ import VoyageAiLogo from "@/media/embeddingprovider/voyageai.png"; import PPIOLogo from "@/media/llmprovider/ppio.png"; import PGVectorLogo from "@/media/vectordbs/pgvector.png"; import DPAISLogo from "@/media/llmprovider/dpais.png"; +import MoonshotAiLogo from "@/media/llmprovider/moonshotai.png"; + import React, { useState, useEffect } from "react"; import paths from "@/utils/paths"; import { useNavigate } from "react-router-dom"; @@ -242,6 +244,14 @@ export const LLM_SELECTION_PRIVACY = { ], logo: DPAISLogo, }, + moonshotai: { + name: "Moonshot AI", + description: [ + "Your chats will not be used for training", + "Your prompts and document text used in response creation are visible to Moonshot AI", + ], + logo: MoonshotAiLogo, + }, }; export const VECTOR_DB_PRIVACY = { From ab9c7f9517c8466f7abd9724e365e48a43617f7d Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 15:10:51 -0700 Subject: [PATCH 6/9] add moonshot to onboarding llm preference --- .../pages/OnboardingFlow/Steps/LLMPreference/index.jsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx b/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx index 02d97893a79..4ce2745d041 100644 --- a/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx +++ b/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx @@ -27,6 +27,7 @@ import NvidiaNimLogo from "@/media/llmprovider/nvidia-nim.png"; import CohereLogo from "@/media/llmprovider/cohere.png"; import PPIOLogo from "@/media/llmprovider/ppio.png"; import DellProAiStudioLogo from "@/media/llmprovider/dpais.png"; +import MoonshotAiLogo from "@/media/llmprovider/moonshotai.png"; import OpenAiOptions from "@/components/LLMSelection/OpenAiOptions"; import GenericOpenAiOptions from "@/components/LLMSelection/GenericOpenAiOptions"; @@ -55,6 +56,7 @@ import XAILLMOptions from "@/components/LLMSelection/XAiLLMOptions"; import NvidiaNimOptions from "@/components/LLMSelection/NvidiaNimOptions"; import PPIOLLMOptions from "@/components/LLMSelection/PPIOLLMOptions"; import DellProAiStudioOptions from "@/components/LLMSelection/DPAISOptions"; +import MoonshotAiOptions from "@/components/LLMSelection/MoonshotAiOptions"; import LLMItem from "@/components/LLMSelection/LLMItem"; import System from "@/models/system"; @@ -263,6 +265,13 @@ const LLMS = [ options: (settings) => , description: "Run xAI's powerful LLMs like Grok-2 and more.", }, + { + name: "Moonshot AI", + value: "moonshotai", + logo: MoonshotAiLogo, + options: (settings) => , + description: "Run Moonshot AI's powerful LLMs.", + }, ]; export default function LLMPreference({ From 9740d57e1b659279b733a4be8ff9db7cfff8ce08 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 16:37:45 -0700 Subject: [PATCH 7/9] update privacy for moonshot ai --- frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx | 2 +- server/storage/models/.gitignore | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx b/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx index 7d4f48af5ec..67be19cece1 100644 --- a/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx +++ b/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx @@ -247,7 +247,7 @@ export const LLM_SELECTION_PRIVACY = { moonshotai: { name: "Moonshot AI", description: [ - "Your chats will not be used for training", + "Your chats may be used by Moonshot AI for training and model refinement", "Your prompts and document text used in response creation are visible to Moonshot AI", ], logo: MoonshotAiLogo, diff --git a/server/storage/models/.gitignore b/server/storage/models/.gitignore index 47124166e3c..5e83df7bcc4 100644 --- a/server/storage/models/.gitignore +++ b/server/storage/models/.gitignore @@ -9,5 +9,4 @@ gemini togetherAi tesseract ppio -moonshotai context-windows/* \ No newline at end of file From 5ccc2f80b7054327c5bc25c81ed467e706b8f5e5 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 18:00:49 -0700 Subject: [PATCH 8/9] update logo higher res --- frontend/src/media/llmprovider/moonshotai.png | Bin 54058 -> 52334 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/src/media/llmprovider/moonshotai.png b/frontend/src/media/llmprovider/moonshotai.png index 5e7bc86770f08b9c8cff2a1efa40dd06f419d82d..71f408054152b2c56d7d1f703d430da6266933ed 100644 GIT binary patch literal 52334 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 From 6550efc23cc562a956ccf2f5daccf88083807124 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 21 Jul 2025 18:30:41 -0700 Subject: [PATCH 9/9] remove caching and use modelmap --- server/utils/AiProviders/modelMap/index.js | 1 + server/utils/AiProviders/moonshotAi/index.js | 135 +------------------ 2 files changed, 6 insertions(+), 130 deletions(-) diff --git a/server/utils/AiProviders/modelMap/index.js b/server/utils/AiProviders/modelMap/index.js index 4f5740be216..8ff713eeb62 100644 --- a/server/utils/AiProviders/modelMap/index.js +++ b/server/utils/AiProviders/modelMap/index.js @@ -18,6 +18,7 @@ class ContextWindowFinder { groq: "groq", xai: "xai", deepseek: "deepseek", + moonshot: "moonshot", }; static expiryMs = 1000 * 60 * 60 * 24 * 3; // 3 days static remoteUrl = diff --git a/server/utils/AiProviders/moonshotAi/index.js b/server/utils/AiProviders/moonshotAi/index.js index 74bf93e85af..c4bc7b65bbd 100644 --- a/server/utils/AiProviders/moonshotAi/index.js +++ b/server/utils/AiProviders/moonshotAi/index.js @@ -6,15 +6,7 @@ const { handleDefaultStreamResponseV2, formatChatHistory, } = require("../../helpers/chat/responses"); -const fs = require("fs"); -const path = require("path"); -const { safeJsonParse } = require("../../http"); - -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "moonshotai") - : path.resolve(__dirname, `../../../storage/models/moonshotai`) -); +const { MODEL_MAP } = require("../modelMap"); class MoonshotAiLLM { constructor(embedder = null, modelPreference = null) { @@ -38,19 +30,13 @@ class MoonshotAiLLM { this.embedder = embedder ?? new NativeEmbedder(); this.defaultTemp = 0.7; - - if (!fs.existsSync(cacheFolder)) - fs.mkdirSync(cacheFolder, { recursive: true }); - this.cacheModelPath = path.resolve(cacheFolder, "models.json"); - this.cacheAtPath = path.resolve(cacheFolder, ".cached_at"); - this.log( `Initialized ${this.model} with context window ${this.promptWindowLimit()}` ); } - log(message) { - console.log(`[Moonshot AI] ${message}`); + log(text, ...args) { + console.log(`\x1b[36m[${this.constructor.name}]\x1b[0m ${text}`, ...args); } #appendContext(contextTexts = []) { @@ -87,58 +73,12 @@ class MoonshotAiLLM { return content.flat(); } - // This checks if the .cached_at file has a timestamp that is more than 1Week (in millis) - // from the current date. If it is, then we will refetch the API so that all the models are up - // to date. - #cacheIsStale() { - const MAX_STALE = 6.048e8; // 1 Week in MS - if (!fs.existsSync(this.cacheAtPath)) return true; - const now = Number(new Date()); - const timestampMs = Number(fs.readFileSync(this.cacheAtPath)); - return now - timestampMs > MAX_STALE; - } - - // This function fetches the models from the Moonshot AI API and caches them locally. - async #syncModels() { - if (fs.existsSync(this.cacheModelPath) && !this.#cacheIsStale()) - return false; - - this.log( - "Model cache is not present or stale. Fetching from Moonshot AI API." - ); - await fetchMoonshotAiModels(); - return; - } - - models() { - if (!fs.existsSync(this.cacheModelPath)) return {}; - return safeJsonParse( - fs.readFileSync(this.cacheModelPath, { encoding: "utf-8" }), - {} - ); - } - streamingEnabled() { return true; } - async isValidChatCompletionModel(model) { - await this.#syncModels(); - const availableModels = this.models(); - return Object.prototype.hasOwnProperty.call(availableModels, model); - } - promptWindowLimit() { - const availableModels = this.models(); - const modelInfo = availableModels[this.model]; - if (!modelInfo) { - if (this.model.includes("128k")) return 128000; - if (this.model.includes("32k")) return 32000; - if (this.model.includes("8k")) return 8000; - if (this.model.includes("kimi")) return 128000; - return 8000; - } - return modelInfo.maxLength; + return MODEL_MAP.get("moonshot", this.model) ?? 8_192; } constructPrompt({ @@ -169,11 +109,6 @@ class MoonshotAiLLM { } async getChatCompletion(messages = null, { temperature = 0.7 }) { - if (!(await this.isValidChatCompletionModel(this.model))) - throw new Error( - `Moonshot AI chat: ${this.model} is not valid for chat completion!` - ); - const result = await LLMPerformanceMonitor.measureAsyncFunction( this.openai.chat.completions .create({ @@ -205,11 +140,6 @@ class MoonshotAiLLM { } async streamGetChatCompletion(messages = null, { temperature = 0.7 }) { - if (!(await this.isValidChatCompletionModel(this.model))) - throw new Error( - `Moonshot AI chat: ${this.model} is not valid for chat completion!` - ); - const measuredStreamRequest = await LLMPerformanceMonitor.measureStream( this.openai.chat.completions.create({ model: this.model, @@ -236,59 +166,4 @@ class MoonshotAiLLM { } } -async function fetchMoonshotAiModels(providedApiKey = null) { - const apiKey = providedApiKey || process.env.MOONSHOT_AI_API_KEY || null; - if (!apiKey) return {}; - - const { OpenAI: OpenAIApi } = require("openai"); - const openai = new OpenAIApi({ - baseURL: "https://api.moonshot.ai/v1", - apiKey, - }); - - return await openai.models - .list() - .then((response) => { - const models = {}; - response.data.forEach((model) => { - models[model.id] = { - id: model.id, - name: model.id, - organization: model.owned_by, - maxLength: (() => { - if (model.id.includes("128k")) return 128000; - if (model.id.includes("32k")) return 32000; - if (model.id.includes("8k")) return 8000; - if (model.id.includes("kimi")) return 128000; - return 8000; - })(), - }; - }); - - // Cache all response information - if (!fs.existsSync(cacheFolder)) - fs.mkdirSync(cacheFolder, { recursive: true }); - fs.writeFileSync( - path.resolve(cacheFolder, "models.json"), - JSON.stringify(models), - { - encoding: "utf-8", - } - ); - fs.writeFileSync( - path.resolve(cacheFolder, ".cached_at"), - String(Number(new Date())), - { - encoding: "utf-8", - } - ); - - return models; - }) - .catch((e) => { - console.error(e); - return {}; - }); -} - -module.exports = { MoonshotAiLLM, fetchMoonshotAiModels }; +module.exports = { MoonshotAiLLM };