282282 name =" refresh"
283283 class =" refresh-icon"
284284 :class =" { spinning: modelStatus.embedding.checking }"
285- @click =" checkRemoteModelStatus('embedding' )"
285+ @click =" checkEmbeddingModelStatus( )"
286286 />
287287 </t-tooltip >
288288 <t-icon
@@ -1422,7 +1422,7 @@ const onModelNameInput = (type: 'llm' | 'embedding' | 'vlm') => {
14221422 if (type === ' llm' && formData .llm .source === ' remote' && formData .llm .baseUrl ) {
14231423 await checkRemoteModelStatus (' llm' );
14241424 } else if (type === ' embedding' && formData .embedding .source === ' remote' && formData .embedding .baseUrl ) {
1425- await checkRemoteModelStatus ( ' embedding ' );
1425+ await checkEmbeddingModelStatus ( );
14261426 } else if (type === ' vlm' && ! isVlmOllama .value ) {
14271427 // VLM远程API校验可以在这里添加
14281428 }
@@ -1465,7 +1465,11 @@ const onRemoteConfigChange = async (type: 'llm' | 'embedding') => {
14651465
14661466 // 如果配置完整,检查模型
14671467 if (formData [type ].modelName && formData [type ].baseUrl ) {
1468- await checkRemoteModelStatus (type );
1468+ if (type === ' llm' ) {
1469+ await checkRemoteModelStatus (type );
1470+ } else if (type === ' embedding' ) {
1471+ await checkEmbeddingModelStatus ();
1472+ }
14691473 }
14701474};
14711475
@@ -1492,13 +1496,17 @@ const onRemoteConfigInput = async (type: 'llm' | 'embedding') => {
14921496 form .value ?.validate ([` ${type }.modelName ` , ` ${type }.baseUrl ` ]);
14931497
14941498 // 自动检查远程API模型状态
1495- await checkRemoteModelStatus (type );
1499+ if (type === ' llm' ) {
1500+ await checkRemoteModelStatus (type );
1501+ } else if (type === ' embedding' ) {
1502+ await checkEmbeddingModelStatus ();
1503+ }
14961504 }
14971505 }, 500 ); // 500ms防抖延迟
14981506};
14991507
15001508// 检查远程模型
1501- const checkRemoteModelStatus = async (type : ' llm' | ' embedding ' ) => {
1509+ const checkRemoteModelStatus = async (type : ' llm' ) => {
15021510 if (! formData [type ].modelName || ! formData [type ].baseUrl ) {
15031511 return ;
15041512 }
@@ -1752,15 +1760,8 @@ onMounted(async () => {
17521760 // 加载当前配置
17531761 await loadCurrentConfig ();
17541762
1755- // 检查Ollama状态
1756- const needOllamaCheck =
1757- formData .llm .source === ' local' ||
1758- formData .embedding .source === ' local' ||
1759- (formData .multimodal .enabled && formData .multimodal .vlm .interfaceType === ' ollama' );
1760-
1761- if (needOllamaCheck ) {
1762- await refreshOllamaSummary ();
1763- }
1763+ // 总是检查Ollama状态,因为这是独立于具体配置的
1764+ await refreshOllamaSummary ();
17641765
17651766 // 检查已配置模型状态
17661767 await checkAllConfiguredModels ();
@@ -2220,7 +2221,7 @@ const checkAllConfiguredModels = async () => {
22202221 if (formData .embedding .source === ' local' && formData .embedding .modelName && ollamaStatus .available ) {
22212222 await checkAllOllamaModels ();
22222223 } else if (formData .embedding .source === ' remote' && formData .embedding .modelName && formData .embedding .baseUrl ) {
2223- await checkRemoteModelStatus ( ' embedding ' );
2224+ await checkEmbeddingModelStatus ( );
22242225 }
22252226 }
22262227
@@ -2243,6 +2244,51 @@ const onDimensionInput = (event: any) => {
22432244 formData .embedding .dimension = Number (event .target .value );
22442245};
22452246
2247+ // 检查Embedding模型状态
2248+ const checkEmbeddingModelStatus = async () => {
2249+ if (! formData .embedding .modelName ) {
2250+ return ;
2251+ }
2252+
2253+ try {
2254+ modelStatus .embedding .checking = true ;
2255+ modelStatus .embedding .checked = false ;
2256+ modelStatus .embedding .available = false ;
2257+ modelStatus .embedding .message = ' ' ;
2258+
2259+ const result = await testEmbeddingModel ({
2260+ source: formData .embedding .source as ' local' | ' remote' ,
2261+ modelName: formData .embedding .modelName ,
2262+ baseUrl: formData .embedding .source === ' remote' ? formData .embedding .baseUrl : undefined ,
2263+ apiKey: formData .embedding .apiKey || undefined ,
2264+ dimension: formData .embedding .dimension || undefined ,
2265+ });
2266+
2267+ modelStatus .embedding .checked = true ;
2268+ modelStatus .embedding .available = result .available || false ;
2269+ modelStatus .embedding .message = result .message || ' ' ;
2270+
2271+ // 如果检测到维度信息,自动更新
2272+ if (result .available && result .dimension && result .dimension > 0 ) {
2273+ formData .embedding .dimension = result .dimension ;
2274+ }
2275+
2276+ // 触发表单验证
2277+ setTimeout (() => {
2278+ form .value ?.validate ([' embedding.modelName' ]);
2279+ }, 100 );
2280+
2281+ } catch (error ) {
2282+ console .error (' 检查Embedding模型失败:' , error );
2283+ modelStatus .embedding .checked = true ;
2284+ modelStatus .embedding .available = false ;
2285+ const err = error as any ;
2286+ modelStatus .embedding .message = (err && err .message ) || ' 检查失败' ;
2287+ } finally {
2288+ modelStatus .embedding .checking = false ;
2289+ }
2290+ };
2291+
22462292// 检测并自动填写 Embedding 维度
22472293const detectEmbeddingDimension = async () => {
22482294 if (hasFiles .value ) return ;
0 commit comments