diff --git a/reme_ai/constants/common_constants.py b/reme_ai/constants/common_constants.py index 547875b6..aeb7794b 100644 --- a/reme_ai/constants/common_constants.py +++ b/reme_ai/constants/common_constants.py @@ -1,4 +1,4 @@ -"""Common constants module. +"""Common constants' module. This module defines constants used as keys throughout the application to maintain a consistent reference for data structures related to workflow management, chat diff --git a/reme_ai/core/op/base_ray_op.py b/reme_ai/core/op/base_ray_op.py index 88cc2985..7a8fe113 100644 --- a/reme_ai/core/op/base_ray_op.py +++ b/reme_ai/core/op/base_ray_op.py @@ -57,7 +57,7 @@ class BaseRayOp(BaseOp, metaclass=ABCMeta): for k, v in kwargs.items() } - # Submit sliced chunks to reduce inter-node data transfer + # Submit sliced chunks to reduce internode data transfer remote_task_loop = ray.remote(self._ray_task_loop) for i in range(max_workers): chunk = parallel_list[i::max_workers] diff --git a/reme_ai/core/schema/message.py b/reme_ai/core/schema/message.py index 496ef7ec..510bb7c4 100644 --- a/reme_ai/core/schema/message.py +++ b/reme_ai/core/schema/message.py @@ -2,7 +2,6 @@ import datetime import json -from typing import Any from pydantic import BaseModel, ConfigDict, Field, model_validator @@ -44,14 +43,14 @@ class ContentBlock(BaseModel): @model_validator(mode="before") @classmethod - def init_block(cls, data: dict[str, Any]) -> dict[str, Any]: + def init_block(cls, data: dict) -> dict: """Dynamically maps the type-specific key to the content field.""" content_type = data.get("type", "") if content_type and content_type in data: data["content"] = data[content_type] return data - def simple_dump(self) -> dict[str, Any]: + def simple_dump(self) -> dict: """Serializes the block into an API-compatible dictionary format.""" return { "type": self.type, @@ -69,28 +68,45 @@ class Message(BaseModel): reasoning_content: str = Field(default="") tool_calls: list[ToolCall] = Field(default_factory=list) tool_call_id: str = Field(default="") - time_created: str = Field( - default_factory=lambda: datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), - ) - metadata: dict[str, Any] = Field(default_factory=dict) + time_created: str = Field(default_factory=lambda: datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) + metadata: dict = Field(default_factory=dict) - def dump_content(self) -> str | list[dict[str, Any]]: + def dump_content(self) -> str | list[dict]: """Returns content as a raw string or a list of serialized blocks.""" if isinstance(self.content, str): return self.content return [block.simple_dump() for block in self.content] - def simple_dump(self, add_reasoning: bool = True) -> dict[str, Any]: + def simple_dump( + self, + add_name: bool = False, + add_reasoning: bool = True, + add_time_created: bool = False, + add_metadata: bool = False, + ) -> dict: """Transforms the message into a simplified dictionary for standard APIs.""" - result = {"role": self.role.value, "content": self.dump_content()} + result = {} + if add_name and self.name: + result["name"] = self.name + + result["role"] = self.role.value + result["content"] = self.dump_content() if add_reasoning and self.reasoning_content: result["reasoning_content"] = self.reasoning_content + if self.tool_calls: result["tool_calls"] = [tc.simple_output_dump() for tc in self.tool_calls] + if self.tool_call_id: result["tool_call_id"] = self.tool_call_id + if add_time_created: + result["time_created"] = self.time_created + + if add_metadata: + result["metadata"] = self.metadata + return result def format_message( @@ -133,4 +149,4 @@ class Trajectory(BaseModel): task_id: str = Field(default="") messages: list[Message] = Field(default_factory=list) score: float = Field(default=0.0) - metadata: dict[str, Any] = Field(default_factory=dict) + metadata: dict = Field(default_factory=dict) diff --git a/reme_ai/core/service/mcp_service.py b/reme_ai/core/service/mcp_service.py index e60aec85..7ac62a26 100644 --- a/reme_ai/core/service/mcp_service.py +++ b/reme_ai/core/service/mcp_service.py @@ -34,8 +34,8 @@ class MCPService(BaseService): self.mcp.add_tool( FunctionTool( - name=tool_call.name, - description=tool_call.description, + name=tool_call.name, # noqa + description=tool_call.description, # noqa fn=execute_tool, parameters=tool_call.parameters.simple_input_dump(), ), diff --git a/reme_ai/core/utils/mcp_client.py b/reme_ai/core/utils/mcp_client.py index 4c13be9f..7f5a1514 100644 --- a/reme_ai/core/utils/mcp_client.py +++ b/reme_ai/core/utils/mcp_client.py @@ -8,7 +8,7 @@ from typing import Any from mcp import ClientSession, StdioServerParameters, Tool from mcp.client.sse import sse_client from mcp.client.stdio import stdio_client -from mcp.client.streamable_http import streamablehttp_client +from mcp.client.streamable_http import streamable_http_client from mcp.types import CallToolResult, TextContent from ..schema import ToolCall @@ -64,7 +64,7 @@ class MCPClient: async with sse_client(**cfg) as transport: yield transport elif t_type == "streamable-http": - async with streamablehttp_client(**cfg) as transport: + async with streamable_http_client(**cfg) as transport: yield transport else: raise NotImplementedError(f"Unsupported transport: {t_type}") diff --git a/reme_ai/mem_agent/base_memory_agent.py b/reme_ai/mem_agent/base_memory_agent.py index b7913ed1..e4466fc3 100644 --- a/reme_ai/mem_agent/base_memory_agent.py +++ b/reme_ai/mem_agent/base_memory_agent.py @@ -8,7 +8,7 @@ from loguru import logger from ..core.enumeration import Role, MemoryType from ..core.op import BaseOp from ..core.schema import Message, ToolCall -from ..tool.memory import BaseMemoryTool, ThinkTool +from ..mem_tool import BaseMemoryTool, ThinkTool class BaseMemoryAgent(BaseOp, metaclass=ABCMeta): @@ -141,35 +141,26 @@ class BaseMemoryAgent(BaseOp, metaclass=ABCMeta): async def react(self, messages: list[Message]): """Performs reasoning and acting steps until completion or max steps reached.""" - success: bool = False for step in range(self.max_steps): assistant_message, should_act = await self._reasoning_step(messages, step) if not should_act: - success = True break tool_result_messages = await self._acting_step(assistant_message, step) messages.extend(tool_result_messages) - return messages, success + return messages async def execute(self): messages = await self.build_messages() for i, message in enumerate(messages): logger.info(f"step0.{i} {message.role} {message.name or ''} {message.simple_dump()}") - messages, success = await self.react(messages) - if messages: - if success: - self.output = messages[-1].content - else: - self.output = f"react is not complete with content:\n{messages[-1].content}" - else: - self.output = "empty messages" - - self.context.response.metadata["messages"] = messages - self.context.response.metadata["success"] = success + messages = await self.react(messages) + self.output = [ + m.simple_dump(add_name=True, add_reasoning=True, add_time_created=True, add_metadata=True) for m in messages + ] @property def memory_target(self) -> str: diff --git a/reme_ai/tool/memory/__init__.py b/reme_ai/mem_tool/__init__.py similarity index 100% rename from reme_ai/tool/memory/__init__.py rename to reme_ai/mem_tool/__init__.py diff --git a/reme_ai/tool/memory/base_memory_tool.py b/reme_ai/mem_tool/base_memory_tool.py similarity index 95% rename from reme_ai/tool/memory/base_memory_tool.py rename to reme_ai/mem_tool/base_memory_tool.py index f87286a0..7ec1a133 100644 --- a/reme_ai/tool/memory/base_memory_tool.py +++ b/reme_ai/mem_tool/base_memory_tool.py @@ -3,10 +3,10 @@ from abc import ABCMeta from pathlib import Path -from ...core.enumeration import MemoryType -from ...core.op import BaseOp -from ...core.schema import ToolCall, MemoryNode -from ...core.utils import CacheHandler +from ..core.enumeration import MemoryType +from ..core.op import BaseOp +from ..core.schema import ToolCall, MemoryNode +from ..core.utils import CacheHandler class BaseMemoryTool(BaseOp, metaclass=ABCMeta): diff --git a/reme_ai/tool/memory/history/__init__.py b/reme_ai/mem_tool/history/__init__.py similarity index 100% rename from reme_ai/tool/memory/history/__init__.py rename to reme_ai/mem_tool/history/__init__.py diff --git a/reme_ai/tool/memory/history/add_history_memory.py b/reme_ai/mem_tool/history/add_history_memory.py similarity index 90% rename from reme_ai/tool/memory/history/add_history_memory.py rename to reme_ai/mem_tool/history/add_history_memory.py index 125ebe86..1701582d 100644 --- a/reme_ai/tool/memory/history/add_history_memory.py +++ b/reme_ai/mem_tool/history/add_history_memory.py @@ -3,10 +3,10 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C -from ....core.enumeration import MemoryType -from ....core.schema import ToolCall, Message -from ....core.utils import format_messages +from ...core.context import C +from ...core.enumeration import MemoryType +from ...core.schema import ToolCall, Message +from ...core.utils import format_messages @C.register_op() diff --git a/reme_ai/tool/memory/history/add_history_memory.yaml b/reme_ai/mem_tool/history/add_history_memory.yaml similarity index 100% rename from reme_ai/tool/memory/history/add_history_memory.yaml rename to reme_ai/mem_tool/history/add_history_memory.yaml diff --git a/reme_ai/tool/memory/history/read_history_memory.py b/reme_ai/mem_tool/history/read_history_memory.py similarity index 96% rename from reme_ai/tool/memory/history/read_history_memory.py rename to reme_ai/mem_tool/history/read_history_memory.py index 25c71f8d..056a7ca7 100644 --- a/reme_ai/tool/memory/history/read_history_memory.py +++ b/reme_ai/mem_tool/history/read_history_memory.py @@ -3,8 +3,8 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C -from ....core.schema import MemoryNode +from ...core.context import C +from ...core.schema import MemoryNode @C.register_op() diff --git a/reme_ai/tool/memory/history/read_history_memory.yaml b/reme_ai/mem_tool/history/read_history_memory.yaml similarity index 100% rename from reme_ai/tool/memory/history/read_history_memory.yaml rename to reme_ai/mem_tool/history/read_history_memory.yaml diff --git a/reme_ai/tool/memory/identity/__init__.py b/reme_ai/mem_tool/identity/__init__.py similarity index 100% rename from reme_ai/tool/memory/identity/__init__.py rename to reme_ai/mem_tool/identity/__init__.py diff --git a/reme_ai/tool/memory/identity/read_identity_memory.py b/reme_ai/mem_tool/identity/read_identity_memory.py similarity index 95% rename from reme_ai/tool/memory/identity/read_identity_memory.py rename to reme_ai/mem_tool/identity/read_identity_memory.py index 0e1e5df4..bd9f8031 100644 --- a/reme_ai/tool/memory/identity/read_identity_memory.py +++ b/reme_ai/mem_tool/identity/read_identity_memory.py @@ -3,7 +3,7 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C +from ...core.context import C @C.register_op() diff --git a/reme_ai/tool/memory/identity/read_identity_memory.yaml b/reme_ai/mem_tool/identity/read_identity_memory.yaml similarity index 100% rename from reme_ai/tool/memory/identity/read_identity_memory.yaml rename to reme_ai/mem_tool/identity/read_identity_memory.yaml diff --git a/reme_ai/tool/memory/identity/update_identity_memory.py b/reme_ai/mem_tool/identity/update_identity_memory.py similarity index 97% rename from reme_ai/tool/memory/identity/update_identity_memory.py rename to reme_ai/mem_tool/identity/update_identity_memory.py index dec7444b..b0211242 100644 --- a/reme_ai/tool/memory/identity/update_identity_memory.py +++ b/reme_ai/mem_tool/identity/update_identity_memory.py @@ -3,7 +3,7 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C +from ...core.context import C @C.register_op() diff --git a/reme_ai/tool/memory/identity/update_identity_memory.yaml b/reme_ai/mem_tool/identity/update_identity_memory.yaml similarity index 100% rename from reme_ai/tool/memory/identity/update_identity_memory.yaml rename to reme_ai/mem_tool/identity/update_identity_memory.yaml diff --git a/reme_ai/tool/memory/meta/__init__.py b/reme_ai/mem_tool/meta/__init__.py similarity index 100% rename from reme_ai/tool/memory/meta/__init__.py rename to reme_ai/mem_tool/meta/__init__.py diff --git a/reme_ai/tool/memory/meta/add_meta_memory.py b/reme_ai/mem_tool/meta/add_meta_memory.py similarity index 98% rename from reme_ai/tool/memory/meta/add_meta_memory.py rename to reme_ai/mem_tool/meta/add_meta_memory.py index 2de6cc74..d7b41254 100644 --- a/reme_ai/tool/memory/meta/add_meta_memory.py +++ b/reme_ai/mem_tool/meta/add_meta_memory.py @@ -5,8 +5,8 @@ import json from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C -from ....core.enumeration import MemoryType +from ...core.context import C +from ...core.enumeration import MemoryType @C.register_op() diff --git a/reme_ai/tool/memory/meta/add_meta_memory.yaml b/reme_ai/mem_tool/meta/add_meta_memory.yaml similarity index 100% rename from reme_ai/tool/memory/meta/add_meta_memory.yaml rename to reme_ai/mem_tool/meta/add_meta_memory.yaml diff --git a/reme_ai/tool/memory/meta/read_meta_memory.py b/reme_ai/mem_tool/meta/read_meta_memory.py similarity index 97% rename from reme_ai/tool/memory/meta/read_meta_memory.py rename to reme_ai/mem_tool/meta/read_meta_memory.py index 0aee30c8..b763ec1a 100644 --- a/reme_ai/tool/memory/meta/read_meta_memory.py +++ b/reme_ai/mem_tool/meta/read_meta_memory.py @@ -3,8 +3,8 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C -from ....core.enumeration import MemoryType +from ...core.context import C +from ...core.enumeration import MemoryType @C.register_op() diff --git a/reme_ai/tool/memory/meta/read_meta_memory.yaml b/reme_ai/mem_tool/meta/read_meta_memory.yaml similarity index 100% rename from reme_ai/tool/memory/meta/read_meta_memory.yaml rename to reme_ai/mem_tool/meta/read_meta_memory.yaml diff --git a/reme_ai/tool/memory/think_tool.py b/reme_ai/mem_tool/think_tool.py similarity index 96% rename from reme_ai/tool/memory/think_tool.py rename to reme_ai/mem_tool/think_tool.py index 3172010e..1d26446a 100644 --- a/reme_ai/tool/memory/think_tool.py +++ b/reme_ai/mem_tool/think_tool.py @@ -5,8 +5,8 @@ before taking actions, helping agents reason about their next steps. """ from .base_memory_tool import BaseMemoryTool -from ...core.context import C -from ...core.schema import ToolCall +from ..core.context import C +from ..core.schema import ToolCall @C.register_op() diff --git a/reme_ai/tool/memory/think_tool.yaml b/reme_ai/mem_tool/think_tool.yaml similarity index 100% rename from reme_ai/tool/memory/think_tool.yaml rename to reme_ai/mem_tool/think_tool.yaml diff --git a/reme_ai/tool/memory/vector/__init__.py b/reme_ai/mem_tool/vector/__init__.py similarity index 100% rename from reme_ai/tool/memory/vector/__init__.py rename to reme_ai/mem_tool/vector/__init__.py diff --git a/reme_ai/tool/memory/vector/add_memory.py b/reme_ai/mem_tool/vector/add_memory.py similarity index 98% rename from reme_ai/tool/memory/vector/add_memory.py rename to reme_ai/mem_tool/vector/add_memory.py index 15fc86c4..87e54169 100644 --- a/reme_ai/tool/memory/vector/add_memory.py +++ b/reme_ai/mem_tool/vector/add_memory.py @@ -3,8 +3,8 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C -from ....core.schema import MemoryNode +from ...core.context import C +from ...core.schema import MemoryNode @C.register_op() diff --git a/reme_ai/tool/memory/vector/add_memory.yaml b/reme_ai/mem_tool/vector/add_memory.yaml similarity index 100% rename from reme_ai/tool/memory/vector/add_memory.yaml rename to reme_ai/mem_tool/vector/add_memory.yaml diff --git a/reme_ai/tool/memory/vector/add_summary_memory.py b/reme_ai/mem_tool/vector/add_summary_memory.py similarity index 98% rename from reme_ai/tool/memory/vector/add_summary_memory.py rename to reme_ai/mem_tool/vector/add_summary_memory.py index 8907aab3..eaedf01e 100644 --- a/reme_ai/tool/memory/vector/add_summary_memory.py +++ b/reme_ai/mem_tool/vector/add_summary_memory.py @@ -3,7 +3,7 @@ from loguru import logger from .add_memory import AddMemory -from ....core.context import C +from ...core.context import C @C.register_op() diff --git a/reme_ai/tool/memory/vector/add_summary_memory.yaml b/reme_ai/mem_tool/vector/add_summary_memory.yaml similarity index 100% rename from reme_ai/tool/memory/vector/add_summary_memory.yaml rename to reme_ai/mem_tool/vector/add_summary_memory.yaml diff --git a/reme_ai/tool/memory/vector/delete_memory.py b/reme_ai/mem_tool/vector/delete_memory.py similarity index 98% rename from reme_ai/tool/memory/vector/delete_memory.py rename to reme_ai/mem_tool/vector/delete_memory.py index aa529283..a40f7509 100644 --- a/reme_ai/tool/memory/vector/delete_memory.py +++ b/reme_ai/mem_tool/vector/delete_memory.py @@ -3,7 +3,7 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C +from ...core.context import C @C.register_op() diff --git a/reme_ai/tool/memory/vector/delete_memory.yaml b/reme_ai/mem_tool/vector/delete_memory.yaml similarity index 100% rename from reme_ai/tool/memory/vector/delete_memory.yaml rename to reme_ai/mem_tool/vector/delete_memory.yaml diff --git a/reme_ai/tool/memory/vector/update_memory.py b/reme_ai/mem_tool/vector/update_memory.py similarity index 98% rename from reme_ai/tool/memory/vector/update_memory.py rename to reme_ai/mem_tool/vector/update_memory.py index ad7203bd..e6c64981 100644 --- a/reme_ai/tool/memory/vector/update_memory.py +++ b/reme_ai/mem_tool/vector/update_memory.py @@ -3,8 +3,8 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C -from ....core.schema import MemoryNode +from ...core.context import C +from ...core.schema import MemoryNode @C.register_op() diff --git a/reme_ai/tool/memory/vector/update_memory.yaml b/reme_ai/mem_tool/vector/update_memory.yaml similarity index 100% rename from reme_ai/tool/memory/vector/update_memory.yaml rename to reme_ai/mem_tool/vector/update_memory.yaml diff --git a/reme_ai/tool/memory/vector/vector_retrieve_memory.py b/reme_ai/mem_tool/vector/vector_retrieve_memory.py similarity index 97% rename from reme_ai/tool/memory/vector/vector_retrieve_memory.py rename to reme_ai/mem_tool/vector/vector_retrieve_memory.py index f6c7c271..b0eb8ba7 100644 --- a/reme_ai/tool/memory/vector/vector_retrieve_memory.py +++ b/reme_ai/mem_tool/vector/vector_retrieve_memory.py @@ -3,10 +3,10 @@ from loguru import logger from ..base_memory_tool import BaseMemoryTool -from ....core.context import C -from ....core.enumeration import MemoryType -from ....core.schema import MemoryNode, VectorNode -from ....core.utils import deduplicate_memories +from ...core.context import C +from ...core.enumeration import MemoryType +from ...core.schema import MemoryNode, VectorNode +from ...core.utils import deduplicate_memories @C.register_op() diff --git a/reme_ai/tool/memory/vector/vector_retrieve_memory.yaml b/reme_ai/mem_tool/vector/vector_retrieve_memory.yaml similarity index 100% rename from reme_ai/tool/memory/vector/vector_retrieve_memory.yaml rename to reme_ai/mem_tool/vector/vector_retrieve_memory.yaml diff --git a/reme_ai/tool/__init__.py b/reme_ai/tool/__init__.py index f1dcedd3..653cbed4 100644 --- a/reme_ai/tool/__init__.py +++ b/reme_ai/tool/__init__.py @@ -1,11 +1,9 @@ """tool""" from . import execute -from . import memory from . import search __all__ = [ "execute", - "memory", "search", ]