You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by xt...@apache.org on 2025/12/24 03:11:33 UTC
(flink-agents) 01/02: [api][runtime] Add return value for add and improve summarization prompt.
This is an automated email from the ASF dual-hosted git repository.
xtsong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-agents.git
commit c11f79a4267ee1229d9afaeb94ee061d0940b39e
Author: WenjinXie <we...@gmail.com>
AuthorDate: Fri Dec 19 17:57:43 2025 +0800
[api][runtime] Add return value for add and improve summarization prompt.
---
python/flink_agents/api/memory/long_term_memory.py | 37 +++++++++++++++++++---
.../memory/vector_store_long_term_memory.py | 17 ++++++++--
2 files changed, 47 insertions(+), 7 deletions(-)
diff --git a/python/flink_agents/api/memory/long_term_memory.py b/python/flink_agents/api/memory/long_term_memory.py
index 6373499..7d61182 100644
--- a/python/flink_agents/api/memory/long_term_memory.py
+++ b/python/flink_agents/api/memory/long_term_memory.py
@@ -30,6 +30,7 @@ from pydantic import (
from typing_extensions import override
from flink_agents.api.chat_message import ChatMessage
+from flink_agents.api.configuration import ConfigOption
from flink_agents.api.prompts.prompt import Prompt
ItemType = str | ChatMessage
@@ -76,6 +77,28 @@ class LongTermMemoryBackend(Enum):
EXTERNAL_VECTOR_STORE = "external_vector_store"
+class LongTermMemoryOptions:
+ """Config options for ReActAgent."""
+
+ BACKEND = ConfigOption(
+ key="long-term-memory.",
+ config_type=LongTermMemoryBackend,
+ default=None,
+ )
+
+ EXTERNAL_VECTOR_STORE_NAME = ConfigOption(
+ key="long-term-memory.external-vector-store-name",
+ config_type=str,
+ default=None,
+ )
+
+ ASYNC_COMPACTION = ConfigOption(
+ key="long-term-memory.async-compaction",
+ config_type=bool,
+ default=False,
+ )
+
+
class DatetimeRange(BaseModel):
"""Represents a datetime range."""
@@ -159,7 +182,7 @@ class MemorySet(BaseModel):
def add(
self, items: ItemType | List[ItemType], ids: str | List[str] | None = None
- ) -> None:
+ ) -> List[str]:
"""Add a memory item to the set, currently only support item with
type str or ChatMessage.
@@ -169,8 +192,11 @@ class MemorySet(BaseModel):
Args:
items: The items to be inserted to this set.
ids: The ids of the items to be inserted. Optional.
+
+ Returns:
+ The IDs of the items added.
"""
- self.ltm.add(memory_set=self, memory_items=items, ids=ids)
+ return self.ltm.add(memory_set=self, memory_items=items, ids=ids)
def get(
self, ids: str | List[str] | None = None
@@ -203,7 +229,7 @@ class BaseLongTermMemory(ABC, BaseModel):
def get_or_create_memory_set(
self,
name: str,
- item_type: str | Type[ChatMessage],
+ item_type: type[str] | Type[ChatMessage],
capacity: int,
compaction_strategy: CompactionStrategy,
) -> MemorySet:
@@ -257,7 +283,7 @@ class BaseLongTermMemory(ABC, BaseModel):
memory_items: ItemType | List[ItemType],
ids: str | List[str] | None = None,
metadatas: Dict[str, Any] | List[Dict[str, Any]] | None = None,
- ) -> None:
+ ) -> List[str]:
"""Add items to the memory set, currently only support items with
type str or ChatMessage.
@@ -269,6 +295,9 @@ class BaseLongTermMemory(ABC, BaseModel):
ids: The IDs of items. Will be automatically generated if not provided.
Optional.
metadatas: The metadata for items. Optional.
+
+ Returns:
+ The IDs of added items.
"""
@abstractmethod
diff --git a/python/flink_agents/runtime/memory/vector_store_long_term_memory.py b/python/flink_agents/runtime/memory/vector_store_long_term_memory.py
index e4aabda..92ff6ac 100644
--- a/python/flink_agents/runtime/memory/vector_store_long_term_memory.py
+++ b/python/flink_agents/runtime/memory/vector_store_long_term_memory.py
@@ -29,6 +29,7 @@ from flink_agents.api.memory.long_term_memory import (
CompactionStrategyType,
DatetimeRange,
ItemType,
+ LongTermMemoryOptions,
MemorySet,
MemorySetItem,
)
@@ -61,6 +62,10 @@ class VectorStoreLongTermMemory(BaseLongTermMemory):
key: str = Field(description="Unique identifier for the keyed partition.")
+ async_compaction: bool = Field(
+ default=False, description="Whether to execute compact asynchronously."
+ )
+
def __init__(
self,
*,
@@ -76,6 +81,7 @@ class VectorStoreLongTermMemory(BaseLongTermMemory):
vector_store=vector_store,
job_id=job_id,
key=key,
+ async_compaction=ctx.config.get(LongTermMemoryOptions.ASYNC_COMPACTION),
**kwargs,
)
@@ -137,7 +143,7 @@ class VectorStoreLongTermMemory(BaseLongTermMemory):
memory_items: ItemType | List[ItemType],
ids: str | List[str] | None = None,
metadatas: Dict[str, Any] | List[Dict[str, Any]] | None = None,
- ) -> None:
+ ) -> List[str]:
memory_items = _maybe_cast_to_list(memory_items)
ids = _maybe_cast_to_list(ids)
metadatas = _maybe_cast_to_list(metadatas)
@@ -171,13 +177,18 @@ class VectorStoreLongTermMemory(BaseLongTermMemory):
)
)
- self.store.add(
+ ids = self.store.add(
documents=documents, collection_name=self._name_mangling(memory_set.name)
)
if memory_set.size >= memory_set.capacity:
# trigger compaction
- self._compact(memory_set)
+ if self.async_compaction:
+ self.ctx.executor.submit(self._compact, memory_set=memory_set)
+ else:
+ self._compact(memory_set=memory_set)
+
+ return ids
@override
def get(