mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-15 11:58:34 +08:00
chore(memory): backport bundled Mem0 docs source and align plugin code style with repo conventions
This commit is contained in:
parent
396cdb175b
commit
f9fcf35dc7
@ -4,6 +4,8 @@ import org.slf4j.Logger;
|
|||||||
import vip.mate.plugin.api.MateClawPlugin;
|
import vip.mate.plugin.api.MateClawPlugin;
|
||||||
import vip.mate.plugin.api.PluginContext;
|
import vip.mate.plugin.api.PluginContext;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MateClaw plugin entrypoint that registers {@link Mem0Provider} with the
|
* MateClaw plugin entrypoint that registers {@link Mem0Provider} with the
|
||||||
* platform's memory subsystem.
|
* platform's memory subsystem.
|
||||||
@ -94,7 +96,7 @@ public class Mem0Plugin implements MateClawPlugin {
|
|||||||
private static String maskUrl(String url) {
|
private static String maskUrl(String url) {
|
||||||
if (url == null || url.isBlank()) return "(unset)";
|
if (url == null || url.isBlank()) return "(unset)";
|
||||||
try {
|
try {
|
||||||
java.net.URI u = java.net.URI.create(url);
|
URI u = URI.create(url);
|
||||||
String host = u.getHost();
|
String host = u.getHost();
|
||||||
int port = u.getPort();
|
int port = u.getPort();
|
||||||
return u.getScheme() + "://" + host + (port > 0 ? ":" + port : "");
|
return u.getScheme() + "://" + host + (port > 0 ? ":" + port : "");
|
||||||
|
|||||||
@ -30,7 +30,7 @@ import java.util.concurrent.Executors;
|
|||||||
* When {@code ownerKey} is null/blank, both recall and sync are skipped — Mem0
|
* When {@code ownerKey} is null/blank, both recall and sync are skipped — Mem0
|
||||||
* requires {@code user_id}.
|
* requires {@code user_id}.
|
||||||
*
|
*
|
||||||
* <p>Asynchronous sync: a single-thread virtual-thread-per-task executor is used
|
* <p>Asynchronous sync: a single-thread daemon executor is used
|
||||||
* so that bursts of turns don't pile up on the platform's request thread.
|
* so that bursts of turns don't pile up on the platform's request thread.
|
||||||
*
|
*
|
||||||
* @author MateClaw Team
|
* @author MateClaw Team
|
||||||
|
|||||||
@ -3,13 +3,18 @@ package vip.mate.plugin.mem0;
|
|||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.ai.chat.model.ChatModel;
|
||||||
|
import org.springframework.ai.tool.ToolCallback;
|
||||||
import vip.mate.plugin.api.PluginContext;
|
import vip.mate.plugin.api.PluginContext;
|
||||||
import vip.mate.plugin.api.PluginException;
|
import vip.mate.plugin.api.PluginException;
|
||||||
|
import vip.mate.plugin.api.channel.PluginChannelAdapter;
|
||||||
import vip.mate.plugin.api.memory.PluginMemoryProvider;
|
import vip.mate.plugin.api.memory.PluginMemoryProvider;
|
||||||
|
import vip.mate.plugin.api.search.PluginSearchProvider;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
@ -132,10 +137,10 @@ class Mem0PluginTest {
|
|||||||
|
|
||||||
// The remaining methods are not used by Mem0Plugin; stub them out.
|
// The remaining methods are not used by Mem0Plugin; stub them out.
|
||||||
|
|
||||||
@Override public void registerTool(org.springframework.ai.tool.ToolCallback tool) { throw new UnsupportedOperationException(); }
|
@Override public void registerTool(ToolCallback tool) { throw new UnsupportedOperationException(); }
|
||||||
@Override public void registerTool(org.springframework.ai.tool.ToolCallback tool, java.util.function.Supplier<Boolean> availabilityCheck) { throw new UnsupportedOperationException(); }
|
@Override public void registerTool(ToolCallback tool, Supplier<Boolean> availabilityCheck) { throw new UnsupportedOperationException(); }
|
||||||
@Override public void registerProvider(String providerId, org.springframework.ai.chat.model.ChatModel chatModel) { throw new UnsupportedOperationException(); }
|
@Override public void registerProvider(String providerId, ChatModel chatModel) { throw new UnsupportedOperationException(); }
|
||||||
@Override public void registerChannel(vip.mate.plugin.api.channel.PluginChannelAdapter channel) { throw new UnsupportedOperationException(); }
|
@Override public void registerChannel(PluginChannelAdapter channel) { throw new UnsupportedOperationException(); }
|
||||||
@Override public void registerSearchProvider(vip.mate.plugin.api.search.PluginSearchProvider provider) { throw new UnsupportedOperationException(); }
|
@Override public void registerSearchProvider(PluginSearchProvider provider) { throw new UnsupportedOperationException(); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -140,7 +140,7 @@ class Mem0ProviderTest {
|
|||||||
void syncTurn_pushesAsynchronouslyWithoutBlocking() throws Exception {
|
void syncTurn_pushesAsynchronouslyWithoutBlocking() throws Exception {
|
||||||
provider.syncTurn(1L, "conv-1", "hello", "world");
|
provider.syncTurn(1L, "conv-1", "hello", "world");
|
||||||
|
|
||||||
// Wait briefly for the virtual thread to fire the POST.
|
// Wait briefly for the async executor to fire the POST.
|
||||||
long deadline = System.currentTimeMillis() + 2000;
|
long deadline = System.currentTimeMillis() + 2000;
|
||||||
while (addCount.get() == 0 && System.currentTimeMillis() < deadline) {
|
while (addCount.get() == 0 && System.currentTimeMillis() < deadline) {
|
||||||
Thread.sleep(20);
|
Thread.sleep(20);
|
||||||
|
|||||||
@ -47,7 +47,8 @@ public class PluginMemoryBridge implements MemoryProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String prefetch(Long agentId, String userQuery, String ownerKey) {
|
public String prefetch(Long agentId, String userQuery, String ownerKey) {
|
||||||
// 透传 ownerKey 到插件 provider;插件若未 override 三参版会走 default 退化到两参
|
// Forward ownerKey to the plugin provider; plugins that don't override the
|
||||||
|
// three-arg variant fall back to the two-arg default (ownerKey dropped).
|
||||||
return delegate.prefetch(agentId, userQuery, ownerKey);
|
return delegate.prefetch(agentId, userQuery, ownerKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user