mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
fix(memory): enhance null-safe in memory-related modules
This commit is contained in:
@@ -96,6 +96,9 @@ public class MemoryRuntime extends AbstractAgentModule.Standalone implements Sta
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String fixTopicPath(String topicPath) {
|
public String fixTopicPath(String topicPath) {
|
||||||
|
if (topicPath == null || topicPath.isBlank()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
String[] parts = topicPath.split("->");
|
String[] parts = topicPath.split("->");
|
||||||
List<String> cleanedParts = new ArrayList<>();
|
List<String> cleanedParts = new ArrayList<>();
|
||||||
for (String part : parts) {
|
for (String part : parts) {
|
||||||
|
|||||||
@@ -155,6 +155,9 @@ public class MemorySelector extends AbstractAgentModule.Running<PartnerRunningFl
|
|||||||
|
|
||||||
private void setMemoryCandidates(LinkedHashMap<String, ActivatedMemorySlice> candidates, List<ExtractorResult.ExtractorMatchData> matches) {
|
private void setMemoryCandidates(LinkedHashMap<String, ActivatedMemorySlice> candidates, List<ExtractorResult.ExtractorMatchData> matches) {
|
||||||
for (ExtractorResult.ExtractorMatchData match : matches) {
|
for (ExtractorResult.ExtractorMatchData match : matches) {
|
||||||
|
if (match == null || match.getType() == null || match.getText() == null || match.getText().isBlank()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
List<ActivatedMemorySlice> recalledSlices = switch (match.getType()) {
|
List<ActivatedMemorySlice> recalledSlices = switch (match.getType()) {
|
||||||
case ExtractorResult.ExtractorMatchData.Constant.TOPIC ->
|
case ExtractorResult.ExtractorMatchData.Constant.TOPIC ->
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import work.slhaf.partner.module.memory.selector.extractor.entity.ExtractorInput
|
|||||||
import work.slhaf.partner.module.memory.selector.extractor.entity.ExtractorResult;
|
import work.slhaf.partner.module.memory.selector.extractor.entity.ExtractorResult;
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MemoryRecallCueExtractor extends AbstractAgentModule.Sub<ExtractorInput, ExtractorResult> implements ActivateModel {
|
public class MemoryRecallCueExtractor extends AbstractAgentModule.Sub<ExtractorInput, ExtractorResult> implements ActivateModel {
|
||||||
@@ -155,17 +156,40 @@ public class MemoryRecallCueExtractor extends AbstractAgentModule.Sub<ExtractorI
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ExtractorResult fix(ExtractorResult extractorResult) {
|
private ExtractorResult fix(ExtractorResult extractorResult) {
|
||||||
extractorResult.getMatches().forEach(m -> {
|
ExtractorResult safeResult = extractorResult == null ? new ExtractorResult() : extractorResult;
|
||||||
if (m.getType().equals(ExtractorResult.ExtractorMatchData.Constant.DATE)) {
|
List<ExtractorResult.ExtractorMatchData> rawMatches = safeResult.getMatches();
|
||||||
return;
|
if (rawMatches == null || rawMatches.isEmpty()) {
|
||||||
}
|
safeResult.setMatches(List.of());
|
||||||
m.setText(memoryRuntime.fixTopicPath(m.getText()));
|
return safeResult;
|
||||||
});
|
|
||||||
if (extractorResult.getMatches().isEmpty()) {
|
|
||||||
return extractorResult;
|
|
||||||
}
|
}
|
||||||
extractorResult.getMatches().removeIf(m -> m.getText().split("->")[0].isEmpty());
|
|
||||||
return extractorResult;
|
List<ExtractorResult.ExtractorMatchData> normalizedMatches = new ArrayList<>();
|
||||||
|
for (ExtractorResult.ExtractorMatchData match : rawMatches) {
|
||||||
|
if (match == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String type = match.getType();
|
||||||
|
String text = match.getText();
|
||||||
|
if (text == null || text.isBlank()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ExtractorResult.ExtractorMatchData.Constant.TOPIC.equals(type)) {
|
||||||
|
text = memoryRuntime.fixTopicPath(text);
|
||||||
|
if (text.isBlank() || text.split("->")[0].isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
match.setText(text);
|
||||||
|
normalizedMatches.add(match);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ExtractorResult.ExtractorMatchData.Constant.DATE.equals(type)) {
|
||||||
|
normalizedMatches.add(match);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
safeResult.setMatches(normalizedMatches);
|
||||||
|
return safeResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user