@opensumi/ide-ai-native 3.8.1-next-1741071284.0 → 3.8.1-next-1741080291.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/ai-core.contribution.d.ts +5 -0
- package/lib/browser/ai-core.contribution.d.ts.map +1 -1
- package/lib/browser/ai-core.contribution.js +68 -15
- package/lib/browser/ai-core.contribution.js.map +1 -1
- package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-proxy.service.js +8 -2
- package/lib/browser/chat/chat-proxy.service.js.map +1 -1
- package/lib/browser/mcp/tools/components/Terminal.d.ts.map +1 -1
- package/lib/browser/mcp/tools/components/Terminal.js +10 -2
- package/lib/browser/mcp/tools/components/Terminal.js.map +1 -1
- package/lib/browser/preferences/schema.d.ts.map +1 -1
- package/lib/browser/preferences/schema.js +6 -1
- package/lib/browser/preferences/schema.js.map +1 -1
- package/lib/common/index.d.ts +1 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +2 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/model.d.ts +12 -0
- package/lib/common/model.d.ts.map +1 -0
- package/lib/common/model.js +83 -0
- package/lib/common/model.js.map +1 -0
- package/lib/node/anthropic/anthropic-language-model.d.ts +3 -1
- package/lib/node/anthropic/anthropic-language-model.d.ts.map +1 -1
- package/lib/node/anthropic/anthropic-language-model.js +6 -2
- package/lib/node/anthropic/anthropic-language-model.js.map +1 -1
- package/lib/node/base-language-model.d.ts +4 -1
- package/lib/node/base-language-model.d.ts.map +1 -1
- package/lib/node/base-language-model.js +6 -5
- package/lib/node/base-language-model.js.map +1 -1
- package/lib/node/deepseek/deepseek-language-model.d.ts +3 -1
- package/lib/node/deepseek/deepseek-language-model.d.ts.map +1 -1
- package/lib/node/deepseek/deepseek-language-model.js +6 -2
- package/lib/node/deepseek/deepseek-language-model.js.map +1 -1
- package/lib/node/openai/openai-language-model.d.ts +5 -4
- package/lib/node/openai/openai-language-model.d.ts.map +1 -1
- package/lib/node/openai/openai-language-model.js +8 -7
- package/lib/node/openai/openai-language-model.js.map +1 -1
- package/lib/node/openai-compatible/openai-compatible-language-model.d.ts +10 -0
- package/lib/node/openai-compatible/openai-compatible-language-model.d.ts.map +1 -0
- package/lib/node/openai-compatible/openai-compatible-language-model.js +32 -0
- package/lib/node/openai-compatible/openai-compatible-language-model.js.map +1 -0
- package/package.json +24 -23
- package/src/browser/ai-core.contribution.ts +81 -17
- package/src/browser/chat/chat-proxy.service.ts +7 -2
- package/src/browser/mcp/tools/components/Terminal.tsx +13 -2
- package/src/browser/preferences/schema.ts +6 -1
- package/src/common/index.ts +2 -0
- package/src/common/model.ts +90 -0
- package/src/node/anthropic/anthropic-language-model.ts +7 -2
- package/src/node/base-language-model.ts +9 -9
- package/src/node/deepseek/deepseek-language-model.ts +7 -2
- package/src/node/openai/openai-language-model.ts +10 -9
- package/src/node/openai-compatible/openai-compatible-language-model.ts +30 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
export interface ModelInfo {
|
|
2
|
+
maxTokens?: number;
|
|
3
|
+
contextWindow?: number;
|
|
4
|
+
supportsImages?: boolean;
|
|
5
|
+
temperature?: number;
|
|
6
|
+
topP?: number;
|
|
7
|
+
topK?: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const deepSeekModels = {
|
|
11
|
+
'deepseek-chat': {
|
|
12
|
+
maxTokens: 8_000,
|
|
13
|
+
contextWindow: 64_000,
|
|
14
|
+
supportsImages: false,
|
|
15
|
+
},
|
|
16
|
+
'deepseek-reasoner': {
|
|
17
|
+
maxTokens: 8_000,
|
|
18
|
+
contextWindow: 64_000,
|
|
19
|
+
supportsImages: false,
|
|
20
|
+
temperature: 0.7,
|
|
21
|
+
topP: 0.95,
|
|
22
|
+
},
|
|
23
|
+
} as Record<string, ModelInfo>;
|
|
24
|
+
|
|
25
|
+
export const anthropicModels = {
|
|
26
|
+
'claude-3-7-sonnet-20250219': {
|
|
27
|
+
maxTokens: 8192,
|
|
28
|
+
contextWindow: 200_000,
|
|
29
|
+
supportsImages: true,
|
|
30
|
+
},
|
|
31
|
+
'claude-3-5-sonnet-20241022': {
|
|
32
|
+
maxTokens: 8192,
|
|
33
|
+
contextWindow: 200_000,
|
|
34
|
+
supportsImages: true,
|
|
35
|
+
},
|
|
36
|
+
'claude-3-5-haiku-20241022': {
|
|
37
|
+
maxTokens: 8192,
|
|
38
|
+
contextWindow: 200_000,
|
|
39
|
+
supportsImages: false,
|
|
40
|
+
},
|
|
41
|
+
'claude-3-opus-20240229': {
|
|
42
|
+
maxTokens: 4096,
|
|
43
|
+
contextWindow: 200_000,
|
|
44
|
+
supportsImages: true,
|
|
45
|
+
},
|
|
46
|
+
'claude-3-haiku-20240307': {
|
|
47
|
+
maxTokens: 4096,
|
|
48
|
+
contextWindow: 200_000,
|
|
49
|
+
supportsImages: true,
|
|
50
|
+
},
|
|
51
|
+
} as Record<string, ModelInfo>; // as const assertion makes the object deeply readonly
|
|
52
|
+
|
|
53
|
+
export const openAiNativeModels = {
|
|
54
|
+
'o3-mini': {
|
|
55
|
+
maxTokens: 100_000,
|
|
56
|
+
contextWindow: 200_000,
|
|
57
|
+
supportsImages: false,
|
|
58
|
+
},
|
|
59
|
+
// don't support tool use yet
|
|
60
|
+
o1: {
|
|
61
|
+
maxTokens: 100_000,
|
|
62
|
+
contextWindow: 200_000,
|
|
63
|
+
supportsImages: true,
|
|
64
|
+
},
|
|
65
|
+
'o1-preview': {
|
|
66
|
+
maxTokens: 32_768,
|
|
67
|
+
contextWindow: 128_000,
|
|
68
|
+
supportsImages: true,
|
|
69
|
+
},
|
|
70
|
+
'o1-mini': {
|
|
71
|
+
maxTokens: 65_536,
|
|
72
|
+
contextWindow: 128_000,
|
|
73
|
+
supportsImages: true,
|
|
74
|
+
},
|
|
75
|
+
'gpt-4o': {
|
|
76
|
+
maxTokens: 4_096,
|
|
77
|
+
contextWindow: 128_000,
|
|
78
|
+
supportsImages: true,
|
|
79
|
+
},
|
|
80
|
+
'gpt-4o-mini': {
|
|
81
|
+
maxTokens: 16_384,
|
|
82
|
+
contextWindow: 128_000,
|
|
83
|
+
supportsImages: true,
|
|
84
|
+
},
|
|
85
|
+
'gpt-4.5-preview': {
|
|
86
|
+
maxTokens: 16_384,
|
|
87
|
+
contextWindow: 128_000,
|
|
88
|
+
supportsImages: true,
|
|
89
|
+
},
|
|
90
|
+
} as Record<string, ModelInfo>;
|
|
@@ -4,6 +4,7 @@ import { Injectable } from '@opensumi/di';
|
|
|
4
4
|
import { IAIBackServiceOption } from '@opensumi/ide-core-common';
|
|
5
5
|
import { AINativeSettingSectionsId } from '@opensumi/ide-core-common/lib/settings/ai-native';
|
|
6
6
|
|
|
7
|
+
import { ModelInfo, anthropicModels } from '../../common/model';
|
|
7
8
|
import { BaseLanguageModel } from '../base-language-model';
|
|
8
9
|
|
|
9
10
|
export const AnthropicModelIdentifier = Symbol('AnthropicModelIdentifier');
|
|
@@ -19,7 +20,11 @@ export class AnthropicModel extends BaseLanguageModel {
|
|
|
19
20
|
return createAnthropic({ apiKey });
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
protected getModelIdentifier(provider: AnthropicProvider) {
|
|
23
|
-
return provider(
|
|
23
|
+
protected getModelIdentifier(provider: AnthropicProvider, modelId = 'claude-3-5-sonnet-20241022') {
|
|
24
|
+
return provider(modelId);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
protected getModelInfo(modelId: string): ModelInfo | undefined {
|
|
28
|
+
return anthropicModels[modelId];
|
|
24
29
|
}
|
|
25
30
|
}
|
|
@@ -5,6 +5,7 @@ import { ChatMessageRole, IAIBackServiceOption, IChatMessage } from '@opensumi/i
|
|
|
5
5
|
import { ChatReadableStream } from '@opensumi/ide-core-node';
|
|
6
6
|
import { CancellationToken } from '@opensumi/ide-utils';
|
|
7
7
|
|
|
8
|
+
import { ModelInfo } from '../common';
|
|
8
9
|
import {
|
|
9
10
|
IToolInvocationRegistryManager,
|
|
10
11
|
ToolInvocationRegistryManager,
|
|
@@ -13,6 +14,8 @@ import {
|
|
|
13
14
|
|
|
14
15
|
@Injectable()
|
|
15
16
|
export abstract class BaseLanguageModel {
|
|
17
|
+
static ModelOptions: Record<string, ModelInfo>;
|
|
18
|
+
|
|
16
19
|
@Autowired(ToolInvocationRegistryManager)
|
|
17
20
|
protected readonly toolInvocationRegistryManager: IToolInvocationRegistryManager;
|
|
18
21
|
|
|
@@ -56,9 +59,6 @@ export abstract class BaseLanguageModel {
|
|
|
56
59
|
chatReadableStream,
|
|
57
60
|
options.history || [],
|
|
58
61
|
options.modelId,
|
|
59
|
-
options.temperature,
|
|
60
|
-
options.topP,
|
|
61
|
-
options.topK,
|
|
62
62
|
options.providerOptions,
|
|
63
63
|
options.trimTexts,
|
|
64
64
|
cancellationToken,
|
|
@@ -77,6 +77,8 @@ export abstract class BaseLanguageModel {
|
|
|
77
77
|
|
|
78
78
|
protected abstract getModelIdentifier(provider: any, modelId?: string): any;
|
|
79
79
|
|
|
80
|
+
protected abstract getModelInfo(modelId: string): ModelInfo | undefined;
|
|
81
|
+
|
|
80
82
|
protected async handleStreamingRequest(
|
|
81
83
|
provider: any,
|
|
82
84
|
request: string,
|
|
@@ -84,9 +86,6 @@ export abstract class BaseLanguageModel {
|
|
|
84
86
|
chatReadableStream: ChatReadableStream,
|
|
85
87
|
history: IChatMessage[] = [],
|
|
86
88
|
modelId?: string,
|
|
87
|
-
temperature?: number,
|
|
88
|
-
topP?: number,
|
|
89
|
-
topK?: number,
|
|
90
89
|
providerOptions?: Record<string, any>,
|
|
91
90
|
trimTexts?: [string, string],
|
|
92
91
|
cancellationToken?: CancellationToken,
|
|
@@ -108,6 +107,7 @@ export abstract class BaseLanguageModel {
|
|
|
108
107
|
})),
|
|
109
108
|
{ role: 'user', content: request },
|
|
110
109
|
];
|
|
110
|
+
const modelInfo = modelId ? this.getModelInfo(modelId) : undefined;
|
|
111
111
|
const stream = streamText({
|
|
112
112
|
model: this.getModelIdentifier(provider, modelId),
|
|
113
113
|
maxTokens: 4096,
|
|
@@ -116,9 +116,9 @@ export abstract class BaseLanguageModel {
|
|
|
116
116
|
abortSignal: abortController.signal,
|
|
117
117
|
experimental_toolCallStreaming: true,
|
|
118
118
|
maxSteps: 12,
|
|
119
|
-
temperature,
|
|
120
|
-
topP: topP || 0.8,
|
|
121
|
-
topK: topK || 1,
|
|
119
|
+
temperature: modelInfo?.temperature || 0,
|
|
120
|
+
topP: modelInfo?.topP || 0.8,
|
|
121
|
+
topK: modelInfo?.topK || 1,
|
|
122
122
|
providerOptions,
|
|
123
123
|
});
|
|
124
124
|
|
|
@@ -4,6 +4,7 @@ import { Injectable } from '@opensumi/di';
|
|
|
4
4
|
import { IAIBackServiceOption } from '@opensumi/ide-core-common';
|
|
5
5
|
import { AINativeSettingSectionsId } from '@opensumi/ide-core-common/lib/settings/ai-native';
|
|
6
6
|
|
|
7
|
+
import { ModelInfo, deepSeekModels } from '../../common';
|
|
7
8
|
import { BaseLanguageModel } from '../base-language-model';
|
|
8
9
|
|
|
9
10
|
export const DeepSeekModelIdentifier = Symbol('DeepSeekModelIdentifier');
|
|
@@ -19,7 +20,11 @@ export class DeepSeekModel extends BaseLanguageModel {
|
|
|
19
20
|
return createDeepSeek({ apiKey });
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
protected getModelIdentifier(provider: DeepSeekProvider) {
|
|
23
|
-
return provider(
|
|
23
|
+
protected getModelIdentifier(provider: DeepSeekProvider, modelId = 'deepseek-chat') {
|
|
24
|
+
return provider(modelId);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
protected getModelInfo(modelId: string): ModelInfo | undefined {
|
|
28
|
+
return deepSeekModels[modelId];
|
|
24
29
|
}
|
|
25
30
|
}
|
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OpenAIProvider, createOpenAI } from '@ai-sdk/openai';
|
|
2
2
|
import { LanguageModelV1 } from 'ai';
|
|
3
3
|
|
|
4
4
|
import { Injectable } from '@opensumi/di';
|
|
5
5
|
import { AINativeSettingSectionsId, IAIBackServiceOption } from '@opensumi/ide-core-common';
|
|
6
6
|
|
|
7
|
+
import { ModelInfo, openAiNativeModels } from '../../common/model';
|
|
7
8
|
import { BaseLanguageModel } from '../base-language-model';
|
|
8
9
|
|
|
9
|
-
export const DeepSeekModelIdentifier = Symbol('DeepSeekModelIdentifier');
|
|
10
|
-
|
|
11
10
|
@Injectable()
|
|
12
11
|
export class OpenAIModel extends BaseLanguageModel {
|
|
13
|
-
protected initializeProvider(options: IAIBackServiceOption):
|
|
12
|
+
protected initializeProvider(options: IAIBackServiceOption): OpenAIProvider {
|
|
14
13
|
const apiKey = options.apiKey;
|
|
15
14
|
if (!apiKey) {
|
|
16
15
|
throw new Error(`Please provide OpenAI API Key in preferences (${AINativeSettingSectionsId.OpenaiApiKey})`);
|
|
17
16
|
}
|
|
18
|
-
return
|
|
17
|
+
return createOpenAI({
|
|
19
18
|
apiKey,
|
|
20
|
-
baseURL: options.baseURL || 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
21
|
-
name: 'openai',
|
|
22
19
|
});
|
|
23
20
|
}
|
|
24
21
|
|
|
25
|
-
protected getModelIdentifier(provider:
|
|
26
|
-
return provider(modelId
|
|
22
|
+
protected getModelIdentifier(provider: OpenAIProvider, modelId: string) {
|
|
23
|
+
return provider(modelId) as LanguageModelV1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
protected getModelInfo(modelId: string): ModelInfo | undefined {
|
|
27
|
+
return openAiNativeModels[modelId];
|
|
27
28
|
}
|
|
28
29
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OpenAICompatibleProvider, createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
2
|
+
import { LanguageModelV1 } from 'ai';
|
|
3
|
+
|
|
4
|
+
import { Injectable } from '@opensumi/di';
|
|
5
|
+
import { AINativeSettingSectionsId, IAIBackServiceOption } from '@opensumi/ide-core-common';
|
|
6
|
+
|
|
7
|
+
import { BaseLanguageModel } from '../base-language-model';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class OpenAICompatibleModel extends BaseLanguageModel {
|
|
11
|
+
protected initializeProvider(options: IAIBackServiceOption): OpenAICompatibleProvider {
|
|
12
|
+
const apiKey = options.apiKey;
|
|
13
|
+
if (!apiKey) {
|
|
14
|
+
throw new Error(`Please provide OpenAI API Key in preferences (${AINativeSettingSectionsId.OpenaiApiKey})`);
|
|
15
|
+
}
|
|
16
|
+
return createOpenAICompatible({
|
|
17
|
+
apiKey,
|
|
18
|
+
baseURL: options.baseURL || 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
19
|
+
name: 'openai',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
protected getModelIdentifier(provider: OpenAICompatibleProvider, modelId = 'qwen-max'): LanguageModelV1 {
|
|
24
|
+
return provider(modelId);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
protected getModelInfo() {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|