@@ -8,98 +8,12 @@ import { ModelPickerService } from "../services/ModelPickerService";
8
8
import { notify } from "../utils/notification" ;
9
9
import { getMessage , formatMessage } from "../utils/i18n" ;
10
10
import { ProgressHandler } from "../utils/notification/ProgressHandler" ;
11
+ import { validateAndGetModel } from "../utils/ai/modelValidation" ;
11
12
12
13
/**
13
14
* 提交信息生成命令类
14
15
*/
15
16
export class GenerateCommitCommand extends BaseCommand {
16
- /**
17
- * 获取模型并更新配置
18
- * @param provider - 当前AI提供商
19
- * @param model - 当前模型名称
20
- * @returns 更新后的提供商、模型和AI实例信息
21
- * @throws Error 当无法获取模型列表或找不到指定模型时
22
- */
23
- protected async getModelAndUpdateConfiguration (
24
- provider = "Ollama" ,
25
- model = "Ollama"
26
- ) {
27
- let aiProvider = AIProviderFactory . getProvider ( provider ) ;
28
- // 获取模型列表
29
- let models = await aiProvider . getModels ( ) ;
30
-
31
- // 如果模型为空或无法获取,直接让用户选择模型
32
- if ( ! models || models . length === 0 ) {
33
- const { provider : newProvider , model : newModel } =
34
- await this . selectAndUpdateModelConfiguration ( provider , model ) ;
35
- provider = newProvider ;
36
- model = newModel ;
37
-
38
- // 获取更新后的模型列表
39
- aiProvider = AIProviderFactory . getProvider ( provider ) ;
40
- models = await aiProvider . getModels ( ) ;
41
-
42
- // 如果新的模型列表仍然为空,则抛出错误
43
- if ( ! models || models . length === 0 ) {
44
- throw new Error ( getMessage ( "model.list.empty" ) ) ;
45
- }
46
- }
47
-
48
- // 查找已选择的模型
49
- let selectedModel = models . find ( ( m ) => m . name === model ) ;
50
-
51
- // 如果没有找到对应的模型,弹窗让用户重新选择
52
- if ( ! selectedModel ) {
53
- const { provider : newProvider , model : newModel } =
54
- await this . selectAndUpdateModelConfiguration ( provider , model ) ;
55
- provider = newProvider ;
56
- model = newModel ;
57
-
58
- // 获取更新后的模型列表
59
- aiProvider = AIProviderFactory . getProvider ( provider ) ;
60
- models = await aiProvider . getModels ( ) ;
61
-
62
- // 选择有效的模型
63
- selectedModel = models . find ( ( m ) => m . name === model ) ;
64
-
65
- // 如果依然没有找到对应的模型,抛出错误
66
- if ( ! selectedModel ) {
67
- throw new Error ( getMessage ( "model.notFound" ) ) ;
68
- }
69
- }
70
-
71
- return { provider, model, selectedModel, aiProvider } ;
72
- }
73
-
74
- /**
75
- * 选择模型并更新配置
76
- * @param provider - 当前AI提供商
77
- * @param model - 当前模型名称
78
- * @returns 更新后的提供商和模型信息
79
- */
80
- protected async selectAndUpdateModelConfiguration (
81
- provider = "Ollama" ,
82
- model = "Ollama"
83
- ) {
84
- // 获取模型选择
85
- const modelSelection = await this . showModelPicker ( provider , model ) ;
86
-
87
- // 如果没有选择模型,则直接返回当前的 provider 和 model
88
- if ( ! modelSelection ) {
89
- return { provider, model } ;
90
- }
91
-
92
- const config = ConfigurationManager . getInstance ( ) ;
93
- // 使用新的封装方法更新配置
94
- await config . updateAIConfiguration (
95
- modelSelection . provider ,
96
- modelSelection . model
97
- ) ;
98
-
99
- // 返回更新后的 provider 和 model
100
- return { provider : modelSelection . provider , model : modelSelection . model } ;
101
- }
102
-
103
17
/**
104
18
* 处理AI配置
105
19
* @returns AI提供商和模型信息
@@ -142,6 +56,7 @@ export class GenerateCommitCommand extends BaseCommand {
142
56
if ( ! configResult ) {
143
57
return ;
144
58
}
59
+ const { provider, model } = configResult ;
145
60
146
61
try {
147
62
// 检测SCM提供程序
@@ -154,21 +69,10 @@ export class GenerateCommitCommand extends BaseCommand {
154
69
// 获取当前提交输入框内容
155
70
const currentInput = await scmProvider . getCommitInput ( ) ;
156
71
157
- // 获取配置信息
72
+ // 获取配置信息以用于后续操作
158
73
const config = ConfigurationManager . getInstance ( ) ;
159
74
const configuration = config . getConfiguration ( ) ;
160
75
161
- // 获取或更新AI提供商和模型配置
162
- let provider = configuration . base . provider ;
163
- let model = configuration . base . model ;
164
-
165
- if ( ! provider || ! model ) {
166
- const { provider : newProvider , model : newModel } =
167
- await this . selectAndUpdateModelConfiguration ( provider , model ) ;
168
- provider = newProvider ;
169
- model = newModel ;
170
- }
171
-
172
76
// 使用进度提示生成提交信息
173
77
const response = await ProgressHandler . withProgress (
174
78
formatMessage ( "progress.generating.commit" , [
@@ -191,7 +95,7 @@ export class GenerateCommitCommand extends BaseCommand {
191
95
model : newModel ,
192
96
aiProvider,
193
97
selectedModel,
194
- } = await this . getModelAndUpdateConfiguration ( provider , model ) ;
98
+ } = await this . selectAndUpdateModelConfiguration ( provider , model ) ;
195
99
196
100
// 生成提交信息
197
101
const result = await aiProvider . generateResponse ( {
0 commit comments