diff --git a/ai-assistant/package-lock.json b/ai-assistant/package-lock.json
index 5a4c8d10f0..492bbe00f4 100644
--- a/ai-assistant/package-lock.json
+++ b/ai-assistant/package-lock.json
@@ -10,6 +10,7 @@
"dependencies": {
"@langchain/anthropic": "^1.1.1",
"@langchain/core": "^1.0.6",
+ "@langchain/deepseek": "^1.0.8",
"@langchain/google-genai": "^1.0.3",
"@langchain/mistralai": "^1.0.0",
"@langchain/ollama": "^1.0.1",
@@ -2008,6 +2009,21 @@
"node": ">=20"
}
},
+ "node_modules/@langchain/deepseek": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/@langchain/deepseek/-/deepseek-1.0.8.tgz",
+ "integrity": "sha512-FE+j62PAKxsBRLrJafwzE8Ebi7UHXFrMgRGEn1Jnbb0oxp0DNYWPj73qWOMsHZGBCZnOSynCb6nWJ97U8bg8lg==",
+ "license": "MIT",
+ "dependencies": {
+ "@langchain/openai": "1.2.4"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "@langchain/core": "^1.0.0"
+ }
+ },
"node_modules/@langchain/google-genai": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@langchain/google-genai/-/google-genai-1.0.3.tgz",
@@ -2149,13 +2165,13 @@
}
},
"node_modules/@langchain/openai": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-1.1.2.tgz",
- "integrity": "sha512-o642toyaRfx7Cej10jK6eK561gkIGTCQrN42fqAU9OhmTBkUflmRNKhqbcHj/RU+NOJfFM//hgwNU2gHespEkw==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/@langchain/openai/-/openai-1.2.4.tgz",
+ "integrity": "sha512-3ThBOIXAJ6eXuqGGO41XDgr4rp/qpl/RpZmGcjv1S3+CRLS4UQBgXkZEab7mun85HfdsUWLs/v1+pDwbMFixcA==",
"license": "MIT",
"dependencies": {
"js-tiktoken": "^1.0.12",
- "openai": "^6.9.0",
+ "openai": "^6.16.0",
"zod": "^3.25.76 || ^4"
},
"engines": {
@@ -13758,9 +13774,9 @@
}
},
"node_modules/openai": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/openai/-/openai-6.9.1.tgz",
- "integrity": "sha512-vQ5Rlt0ZgB3/BNmTa7bIijYFhz3YBceAA3Z4JuoMSBftBF9YqFHIEhZakSs+O/Ad7EaoEimZvHxD5ylRjN11Lg==",
+ "version": "6.17.0",
+ "resolved": "https://registry.npmmirror.com/openai/-/openai-6.17.0.tgz",
+ "integrity": "sha512-NHRpPEUPzAvFOAFs9+9pC6+HCw/iWsYsKCMPXH5Kw7BpMxqd8g/A07/1o7Gx2TWtCnzevVRyKMRFqyiHyAlqcA==",
"license": "Apache-2.0",
"bin": {
"openai": "bin/cli"
diff --git a/ai-assistant/package.json b/ai-assistant/package.json
index 589df3e8b9..bea27a2de7 100644
--- a/ai-assistant/package.json
+++ b/ai-assistant/package.json
@@ -42,6 +42,7 @@
"@langchain/mistralai": "^1.0.0",
"@langchain/ollama": "^1.0.1",
"@langchain/openai": "^1.1.2",
+ "@langchain/deepseek": "^1.0.8",
"@monaco-editor/react": "^4.5.2",
"@types/prismjs": "^1.26.5",
"@types/react-syntax-highlighter": "^15.5.13",
diff --git a/ai-assistant/src/config/modelConfig.ts b/ai-assistant/src/config/modelConfig.ts
index 4bb755873c..4dd983bfc6 100644
--- a/ai-assistant/src/config/modelConfig.ts
+++ b/ai-assistant/src/config/modelConfig.ts
@@ -182,6 +182,29 @@ export const modelProviders: ModelProvider[] = [
},
],
},
+ {
+ id: 'deepseek',
+ name: 'DeepSeek',
+ icon: 'ai-providers:deepseek',
+ description: 'Integration with DeepSeek models',
+ fields: [
+ {
+ name: 'apiKey',
+ label: 'API Key',
+ type: 'text',
+ required: true,
+ placeholder: 'Your DeepSeek API key',
+ },
+ {
+ name: 'model',
+ label: 'Model',
+ type: 'select',
+ required: true,
+ options: ['deepseek-chat', 'deepseek-reasoner'],
+ default: 'deepseek-chat',
+ },
+ ],
+ },
{
id: 'local',
name: 'Local Models',
diff --git a/ai-assistant/src/langchain/LangChainManager.ts b/ai-assistant/src/langchain/LangChainManager.ts
index 101ebd9eac..558be79ad9 100644
--- a/ai-assistant/src/langchain/LangChainManager.ts
+++ b/ai-assistant/src/langchain/LangChainManager.ts
@@ -15,6 +15,7 @@ import { ChatGoogleGenerativeAI } from '@langchain/google-genai';
import { ChatMistralAI } from '@langchain/mistralai';
import { ChatOllama } from '@langchain/ollama';
import { AzureChatOpenAI, ChatOpenAI } from '@langchain/openai';
+import { ChatDeepSeek } from '@langchain/deepseek';
import sanitizeHtml from 'sanitize-html';
import AIManager, { Prompt } from '../ai/manager';
import { basePrompt } from '../ai/prompts';
@@ -170,6 +171,16 @@ export default class LangChainManager extends AIManager {
verbose: true,
});
}
+ case 'deepseek': {
+ if (!sanitizedConfig.apiKey) {
+ throw new Error('API key is required for DeepSeek');
+ }
+ return new ChatDeepSeek({
+ apiKey: sanitizedConfig.apiKey,
+ model: sanitizedConfig.model,
+ verbose: true,
+ });
+ }
case 'local': {
if (!sanitizedConfig.baseUrl) {
throw new Error('Base URL is required for local models');
diff --git a/ai-assistant/src/utils/icons.ts b/ai-assistant/src/utils/icons.ts
index b5013582a1..821c04f20e 100644
--- a/ai-assistant/src/utils/icons.ts
+++ b/ai-assistant/src/utils/icons.ts
@@ -23,6 +23,9 @@ const aiProviderIcons = {
google: {
body: '',
},
+ deepseek: {
+ body: '',
+ },
azure: {
body: '',
},