mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-15 20:08:18 +08:00
fix(delegate): reliability patches for multi-agent delegation
This commit is contained in:
parent
41a040de35
commit
11fa7487d0
@ -47,7 +47,6 @@ public class WikiEmbeddingService {
|
|||||||
private final ModelConfigService modelConfigService;
|
private final ModelConfigService modelConfigService;
|
||||||
private final WikiKnowledgeBaseService kbService;
|
private final WikiKnowledgeBaseService kbService;
|
||||||
private final SystemSettingMapper systemSettingMapper;
|
private final SystemSettingMapper systemSettingMapper;
|
||||||
private final vip.mate.llm.service.ModelProviderService modelProviderService;
|
|
||||||
|
|
||||||
/** 系统默认 embedding 模型的 mate_system_setting key */
|
/** 系统默认 embedding 模型的 mate_system_setting key */
|
||||||
public static final String SYSTEM_SETTING_DEFAULT_EMBEDDING_ID = "embedding.default.model.id";
|
public static final String SYSTEM_SETTING_DEFAULT_EMBEDDING_ID = "embedding.default.model.id";
|
||||||
@ -88,24 +87,15 @@ public class WikiEmbeddingService {
|
|||||||
if (defaultId != null) {
|
if (defaultId != null) {
|
||||||
ModelConfigEntity model = safeGetModel(defaultId);
|
ModelConfigEntity model = safeGetModel(defaultId);
|
||||||
if (isUsable(model)) {
|
if (isUsable(model)) {
|
||||||
try {
|
return new Resolved(factory.build(model), model.getModelName());
|
||||||
return new Resolved(factory.build(model), model.getModelName());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.warn("[WikiEmbedding] System default embedding model {} build failed: {}", defaultId, e.getMessage());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.warn("[WikiEmbedding] System default embedding model {} is unusable, falling back", defaultId);
|
|
||||||
}
|
}
|
||||||
|
log.warn("[WikiEmbedding] System default embedding model {} is unusable, falling back", defaultId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 优先级 3:任意 enabled
|
// 优先级 3:任意 enabled
|
||||||
ModelConfigEntity anyEnabled = modelConfigService.findFirstEnabledEmbedding();
|
ModelConfigEntity anyEnabled = modelConfigService.findFirstEnabledEmbedding();
|
||||||
if (isUsable(anyEnabled)) {
|
if (isUsable(anyEnabled)) {
|
||||||
try {
|
return new Resolved(factory.build(anyEnabled), anyEnabled.getModelName());
|
||||||
return new Resolved(factory.build(anyEnabled), anyEnabled.getModelName());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.warn("[WikiEmbedding] Fallback embedding model {} build failed: {}", anyEnabled.getId(), e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.warn("[WikiEmbedding] No usable embedding model configured. "
|
log.warn("[WikiEmbedding] No usable embedding model configured. "
|
||||||
@ -365,17 +355,9 @@ public class WikiEmbeddingService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isUsable(ModelConfigEntity model) {
|
private boolean isUsable(ModelConfigEntity model) {
|
||||||
if (model == null || !Boolean.TRUE.equals(model.getEnabled())
|
return model != null
|
||||||
|| !"embedding".equals(model.getModelType())) {
|
&& Boolean.TRUE.equals(model.getEnabled())
|
||||||
return false;
|
&& "embedding".equals(model.getModelType());
|
||||||
}
|
|
||||||
// Skip models whose provider lacks a valid API key (mirrors chat model path fix 341ad1f)
|
|
||||||
try {
|
|
||||||
return modelProviderService.isProviderConfigured(model.getProvider());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.debug("[WikiEmbedding] Provider check failed for model {}: {}", model.getId(), e.getMessage());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long readSystemDefaultEmbeddingId() {
|
private Long readSystemDefaultEmbeddingId() {
|
||||||
|
|||||||
@ -450,7 +450,8 @@ public class ConversationService {
|
|||||||
}
|
}
|
||||||
switch (part.getType()) {
|
switch (part.getType()) {
|
||||||
case "text" -> appendSegment(text, part.getText());
|
case "text" -> appendSegment(text, part.getText());
|
||||||
case "thinking", "tool_call", "parse_error" -> { /* skip — frontend reads these from contentParts directly */ }
|
case "thinking", "tool_call" -> { /* skip — frontend reads these from contentParts directly */ }
|
||||||
|
case "parse_error" -> appendSegment(text, part.getText());
|
||||||
case "file" -> appendSegment(text, "[附件] " + safe(part.getFileName()));
|
case "file" -> appendSegment(text, "[附件] " + safe(part.getFileName()));
|
||||||
default -> appendSegment(text, part.getText());
|
default -> appendSegment(text, part.getText());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -179,7 +179,7 @@ export interface MessageMetadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface MessageContentPart {
|
export interface MessageContentPart {
|
||||||
type: 'text' | 'thinking' | 'image' | 'file' | 'audio' | 'video' | 'tool_call' | 'parse_error'
|
type: 'text' | 'thinking' | 'image' | 'file' | 'audio' | 'video' | 'tool_call'
|
||||||
text?: string
|
text?: string
|
||||||
fileUrl?: string
|
fileUrl?: string
|
||||||
fileName?: string
|
fileName?: string
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user