diff --git a/src/bots/atlascloud/AtlasCloudAPIBot.js b/src/bots/atlascloud/AtlasCloudAPIBot.js new file mode 100644 index 0000000000..7ca57e8eb3 --- /dev/null +++ b/src/bots/atlascloud/AtlasCloudAPIBot.js @@ -0,0 +1,41 @@ +import LangChainBot from "@/bots/LangChainBot"; +import store from "@/store"; +import { ChatOpenAI } from "@langchain/openai"; + +export default class AtlasCloudAPIBot extends LangChainBot { + static _brandId = "atlasCloudApi"; + static _className = "AtlasCloudAPIBot"; + static _logoFilename = "default-logo.svg"; + + constructor() { + super(); + } + + async _checkAvailability() { + let available = false; + + if (store.state.atlasCloudApi.apiKey) { + this.setupModel(); + available = true; + } + return available; + } + + _setupModel() { + const chatModel = new ChatOpenAI({ + configuration: { + baseURL: "https://api.atlascloud.ai/v1", + }, + openAIApiKey: store.state.atlasCloudApi.apiKey, + modelName: this.constructor._model ? this.constructor._model : "", + temperature: store.state.atlasCloudApi.temperature, + maxTokens: store.state.atlasCloudApi.maxTokens, + streaming: true, + }); + return chatModel; + } + + getPastRounds() { + return store.state.atlasCloudApi.pastRounds ?? 5; + } +} diff --git a/src/bots/atlascloud/AtlasCloudDeepSeekV4ProBot.js b/src/bots/atlascloud/AtlasCloudDeepSeekV4ProBot.js new file mode 100644 index 0000000000..b81f4276a3 --- /dev/null +++ b/src/bots/atlascloud/AtlasCloudDeepSeekV4ProBot.js @@ -0,0 +1,10 @@ +import AtlasCloudAPIBot from "./AtlasCloudAPIBot"; + +export default class AtlasCloudDeepSeekV4ProBot extends AtlasCloudAPIBot { + static _className = "AtlasCloudDeepSeekV4ProBot"; + static _model = "deepseek-ai/deepseek-v4-pro"; + + constructor() { + super(); + } +} diff --git a/src/bots/atlascloud/AtlasCloudQwen35FlashBot.js b/src/bots/atlascloud/AtlasCloudQwen35FlashBot.js new file mode 100644 index 0000000000..1e2a12ac6f --- /dev/null +++ b/src/bots/atlascloud/AtlasCloudQwen35FlashBot.js @@ -0,0 +1,10 @@ +import AtlasCloudAPIBot from "./AtlasCloudAPIBot"; + +export default class AtlasCloudQwen35FlashBot extends AtlasCloudAPIBot { + static _className = "AtlasCloudQwen35FlashBot"; + static _model = "qwen/qwen3.5-flash"; + + constructor() { + super(); + } +} diff --git a/src/bots/index.js b/src/bots/index.js index 3f989ff94c..a6420add1e 100644 --- a/src/bots/index.js +++ b/src/bots/index.js @@ -66,6 +66,8 @@ import ClaudeAPIHaikuBot from "./anthropic/ClaudeAPIHaikuBot"; import Grok2APIBot from "./xai/Grok2APIBot"; import Grok3APIBot from "./xai/Grok3APIBot"; import Grok3MiniAPIBot from "./xai/Grok3MiniAPIBot"; +import AtlasCloudQwen35FlashBot from "./atlascloud/AtlasCloudQwen35FlashBot"; +import AtlasCloudDeepSeekV4ProBot from "./atlascloud/AtlasCloudDeepSeekV4ProBot"; const all = [ Qihoo360AIBrainBot.getInstance(), @@ -134,6 +136,8 @@ const all = [ Grok2APIBot.getInstance(), Grok3APIBot.getInstance(), Grok3MiniAPIBot.getInstance(), + AtlasCloudQwen35FlashBot.getInstance(), + AtlasCloudDeepSeekV4ProBot.getInstance(), ]; const disabled = ["HuggingChatBot"]; @@ -230,6 +234,8 @@ export const botTags = { bots.getBotByClassName("Grok2APIBot"), bots.getBotByClassName("Grok3APIBot"), bots.getBotByClassName("Grok3MiniAPIBot"), + bots.getBotByClassName("AtlasCloudQwen35FlashBot"), + bots.getBotByClassName("AtlasCloudDeepSeekV4ProBot"), ], madeInChina: [ bots.getBotByClassName("Qihoo360AIBrainBot"), diff --git a/src/components/BotSettings/AtlasCloudAPIBotSettings.vue b/src/components/BotSettings/AtlasCloudAPIBotSettings.vue new file mode 100644 index 0000000000..2fbadf4690 --- /dev/null +++ b/src/components/BotSettings/AtlasCloudAPIBotSettings.vue @@ -0,0 +1,75 @@ + + + + diff --git a/src/components/SettingsModal.vue b/src/components/SettingsModal.vue index b639dd4315..6b7c2d7a7e 100644 --- a/src/components/SettingsModal.vue +++ b/src/components/SettingsModal.vue @@ -128,6 +128,7 @@ import { resolveTheme, applyTheme, Mode } from "../theme"; import ClaudeAPIBotSettings from "./BotSettings/ClaudeAPIBotSettings.vue"; import GroqAPIBotSettings from "./BotSettings/GroqAPIBotSettings.vue"; import xAIAPIBotSettings from "./BotSettings/xAIAPIBotSettings.vue"; +import AtlasCloudAPIBotSettings from "./BotSettings/AtlasCloudAPIBotSettings.vue"; const { ipcRenderer } = window.require("electron"); const { t: $t, locale } = useI18n(); @@ -142,6 +143,7 @@ const tab = ref(null); const botSettings = [ { brand: "360AiBrain", component: Qihoo360AIBrainBotSettings }, { brand: "azureOpenaiApi", component: AzureOpenAIAPIBotSettings }, + { brand: "atlasCloudApi", component: AtlasCloudAPIBotSettings }, { brand: "bard", component: BardBotSettings }, { brand: "bingChat", component: BingChatBotSettings }, { brand: "characterAI", component: CharacterAIBotSettings }, diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index a2a895cfa3..3d1ca2a963 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -314,6 +314,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index b2483a03e6..14656d9f04 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -317,6 +317,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 2238dac17b..33914696b5 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -314,6 +314,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index e3327bb793..49facd35c1 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -314,6 +314,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index ad0f563897..d2c1dc4051 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -316,6 +316,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index dedb86e53d..7180be8c81 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -314,6 +314,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index a92bf0a5aa..561009a75c 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -317,6 +317,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 0f1e4adb0e..41731d2451 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -314,6 +314,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json index a68bbca440..4d30d606df 100644 --- a/src/i18n/locales/vi.json +++ b/src/i18n/locales/vi.json @@ -293,6 +293,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index e7f3ddf1bf..cba3486a2b 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -314,6 +314,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/i18n/locales/zhtw.json b/src/i18n/locales/zhtw.json index d727742046..c644087521 100644 --- a/src/i18n/locales/zhtw.json +++ b/src/i18n/locales/zhtw.json @@ -314,6 +314,11 @@ "gemma-7b-it": "Gemma 7b", "gemma2-9b-it": "Gemma2 9b" }, + "atlasCloudApi": { + "name": "Atlas Cloud API", + "qwenqwen35-flash": "Qwen3.5 Flash", + "deepseek-aideepseek-v4-pro": "DeepSeek V4 Pro" + }, "xaiApi": { "name": "xAI API", "grok-2-latest": "Grok-2", diff --git a/src/store/chats.js b/src/store/chats.js index 9ab4fe8276..d14b165544 100644 --- a/src/store/chats.js +++ b/src/store/chats.js @@ -27,6 +27,8 @@ class Chats { { classname: "Grok3MiniAPIBot", selected: false }, { classname: "Llama4ScoutGroqAPIBot", selected: false }, { classname: "Llama4MaverickGroqAPIBot", selected: false }, + { classname: "AtlasCloudQwen35FlashBot", selected: false }, + { classname: "AtlasCloudDeepSeekV4ProBot", selected: false }, { classname: "OpenAIAPI41Bot", selected: false }, { classname: "OpenAIAPI41MiniBot", selected: false }, { classname: "OpenAIAPI41NanoBot", selected: false }, diff --git a/src/store/index.js b/src/store/index.js index c48e1b5b1f..643521bda0 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -126,6 +126,12 @@ export default createStore({ apiKey: "", pastRounds: 5, }, + atlasCloudApi: { + apiKey: "", + temperature: 0.7, + maxTokens: 1024, + pastRounds: 5, + }, currentChatIndex: 0, updateCounter: 0, theme: undefined, @@ -277,6 +283,9 @@ export default createStore({ setXaiApi(state, values) { state.xaiApi = { ...state.xaiApi, ...values }; }, + setAtlasCloudApi(state, values) { + state.atlasCloudApi = { ...state.atlasCloudApi, ...values }; + }, setLatestPromptIndex(state, promptIndex) { Chats.table.update(state.currentChatIndex, { latestPromptIndex: promptIndex,