aip-agents-binary 0.6.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aip_agents/__init__.py +65 -0
- aip_agents/__init__.pyi +19 -0
- aip_agents/a2a/__init__.py +19 -0
- aip_agents/a2a/__init__.pyi +3 -0
- aip_agents/a2a/server/__init__.py +10 -0
- aip_agents/a2a/server/__init__.pyi +4 -0
- aip_agents/a2a/server/base_executor.py +1086 -0
- aip_agents/a2a/server/base_executor.pyi +73 -0
- aip_agents/a2a/server/google_adk_executor.py +198 -0
- aip_agents/a2a/server/google_adk_executor.pyi +51 -0
- aip_agents/a2a/server/langflow_executor.py +180 -0
- aip_agents/a2a/server/langflow_executor.pyi +43 -0
- aip_agents/a2a/server/langgraph_executor.py +270 -0
- aip_agents/a2a/server/langgraph_executor.pyi +47 -0
- aip_agents/a2a/types.py +232 -0
- aip_agents/a2a/types.pyi +132 -0
- aip_agents/agent/__init__.py +27 -0
- aip_agents/agent/__init__.pyi +9 -0
- aip_agents/agent/base_agent.py +970 -0
- aip_agents/agent/base_agent.pyi +221 -0
- aip_agents/agent/base_langgraph_agent.py +3037 -0
- aip_agents/agent/base_langgraph_agent.pyi +233 -0
- aip_agents/agent/google_adk_agent.py +926 -0
- aip_agents/agent/google_adk_agent.pyi +141 -0
- aip_agents/agent/google_adk_constants.py +6 -0
- aip_agents/agent/google_adk_constants.pyi +3 -0
- aip_agents/agent/hitl/__init__.py +24 -0
- aip_agents/agent/hitl/__init__.pyi +6 -0
- aip_agents/agent/hitl/config.py +28 -0
- aip_agents/agent/hitl/config.pyi +15 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
- aip_agents/agent/hitl/manager.py +532 -0
- aip_agents/agent/hitl/manager.pyi +200 -0
- aip_agents/agent/hitl/models.py +18 -0
- aip_agents/agent/hitl/models.pyi +3 -0
- aip_agents/agent/hitl/prompt/__init__.py +9 -0
- aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
- aip_agents/agent/hitl/prompt/base.py +42 -0
- aip_agents/agent/hitl/prompt/base.pyi +24 -0
- aip_agents/agent/hitl/prompt/deferred.py +73 -0
- aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
- aip_agents/agent/hitl/registry.py +149 -0
- aip_agents/agent/hitl/registry.pyi +101 -0
- aip_agents/agent/interface.py +138 -0
- aip_agents/agent/interface.pyi +81 -0
- aip_agents/agent/interfaces.py +65 -0
- aip_agents/agent/interfaces.pyi +44 -0
- aip_agents/agent/langflow_agent.py +464 -0
- aip_agents/agent/langflow_agent.pyi +133 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.py +767 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +50 -0
- aip_agents/agent/langgraph_react_agent.py +2856 -0
- aip_agents/agent/langgraph_react_agent.pyi +170 -0
- aip_agents/agent/system_instruction_context.py +34 -0
- aip_agents/agent/system_instruction_context.pyi +13 -0
- aip_agents/clients/__init__.py +10 -0
- aip_agents/clients/__init__.pyi +4 -0
- aip_agents/clients/langflow/__init__.py +10 -0
- aip_agents/clients/langflow/__init__.pyi +4 -0
- aip_agents/clients/langflow/client.py +477 -0
- aip_agents/clients/langflow/client.pyi +140 -0
- aip_agents/clients/langflow/types.py +18 -0
- aip_agents/clients/langflow/types.pyi +7 -0
- aip_agents/constants.py +23 -0
- aip_agents/constants.pyi +7 -0
- aip_agents/credentials/manager.py +132 -0
- aip_agents/examples/__init__.py +5 -0
- aip_agents/examples/__init__.pyi +0 -0
- aip_agents/examples/compare_streaming_client.py +783 -0
- aip_agents/examples/compare_streaming_client.pyi +48 -0
- aip_agents/examples/compare_streaming_server.py +142 -0
- aip_agents/examples/compare_streaming_server.pyi +18 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
- aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
- aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
- aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_google_adk.py +41 -0
- aip_agents/examples/hello_world_google_adk.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_stream.py +44 -0
- aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain.py +28 -0
- aip_agents/examples/hello_world_langchain.pyi +5 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream.py +36 -0
- aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_langflow_agent.py +163 -0
- aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
- aip_agents/examples/hello_world_langgraph.py +39 -0
- aip_agents/examples/hello_world_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream.py +43 -0
- aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_model_switch_cli.py +210 -0
- aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
- aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
- aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
- aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
- aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_pii_logger.py +21 -0
- aip_agents/examples/hello_world_pii_logger.pyi +5 -0
- aip_agents/examples/hello_world_ptc.py +49 -0
- aip_agents/examples/hello_world_ptc.pyi +5 -0
- aip_agents/examples/hello_world_sentry.py +133 -0
- aip_agents/examples/hello_world_sentry.pyi +21 -0
- aip_agents/examples/hello_world_step_limits.py +273 -0
- aip_agents/examples/hello_world_step_limits.pyi +17 -0
- aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
- aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
- aip_agents/examples/hello_world_tool_output_client.py +55 -0
- aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
- aip_agents/examples/hello_world_tool_output_server.py +114 -0
- aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
- aip_agents/examples/hitl_demo.py +724 -0
- aip_agents/examples/hitl_demo.pyi +67 -0
- aip_agents/examples/mcp_configs/configs.py +63 -0
- aip_agents/examples/mcp_servers/common.py +76 -0
- aip_agents/examples/mcp_servers/mcp_name.py +29 -0
- aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
- aip_agents/examples/mcp_servers/mcp_time.py +10 -0
- aip_agents/examples/pii_demo_langgraph_client.py +69 -0
- aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
- aip_agents/examples/pii_demo_langgraph_server.py +126 -0
- aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
- aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
- aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
- aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
- aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
- aip_agents/examples/tools/__init__.py +27 -0
- aip_agents/examples/tools/__init__.pyi +9 -0
- aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
- aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
- aip_agents/examples/tools/adk_weather_tool.py +60 -0
- aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
- aip_agents/examples/tools/data_generator_tool.py +103 -0
- aip_agents/examples/tools/data_generator_tool.pyi +15 -0
- aip_agents/examples/tools/data_visualization_tool.py +312 -0
- aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
- aip_agents/examples/tools/image_artifact_tool.py +136 -0
- aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
- aip_agents/examples/tools/langchain_weather_tool.py +48 -0
- aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
- aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
- aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
- aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
- aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
- aip_agents/examples/tools/pii_demo_tools.py +189 -0
- aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
- aip_agents/examples/tools/random_chart_tool.py +142 -0
- aip_agents/examples/tools/random_chart_tool.pyi +20 -0
- aip_agents/examples/tools/serper_tool.py +202 -0
- aip_agents/examples/tools/serper_tool.pyi +16 -0
- aip_agents/examples/tools/stock_tools.py +82 -0
- aip_agents/examples/tools/stock_tools.pyi +36 -0
- aip_agents/examples/tools/table_generator_tool.py +167 -0
- aip_agents/examples/tools/table_generator_tool.pyi +22 -0
- aip_agents/examples/tools/time_tool.py +82 -0
- aip_agents/examples/tools/time_tool.pyi +15 -0
- aip_agents/examples/tools/weather_forecast_tool.py +38 -0
- aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
- aip_agents/executor/agent_executor.py +473 -0
- aip_agents/executor/base.py +48 -0
- aip_agents/guardrails/__init__.py +83 -0
- aip_agents/guardrails/__init__.pyi +6 -0
- aip_agents/guardrails/engines/__init__.py +69 -0
- aip_agents/guardrails/engines/__init__.pyi +4 -0
- aip_agents/guardrails/engines/base.py +90 -0
- aip_agents/guardrails/engines/base.pyi +61 -0
- aip_agents/guardrails/engines/nemo.py +101 -0
- aip_agents/guardrails/engines/nemo.pyi +46 -0
- aip_agents/guardrails/engines/phrase_matcher.py +113 -0
- aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
- aip_agents/guardrails/exceptions.py +39 -0
- aip_agents/guardrails/exceptions.pyi +23 -0
- aip_agents/guardrails/manager.py +163 -0
- aip_agents/guardrails/manager.pyi +42 -0
- aip_agents/guardrails/middleware.py +199 -0
- aip_agents/guardrails/middleware.pyi +87 -0
- aip_agents/guardrails/schemas.py +63 -0
- aip_agents/guardrails/schemas.pyi +43 -0
- aip_agents/guardrails/utils.py +45 -0
- aip_agents/guardrails/utils.pyi +19 -0
- aip_agents/mcp/__init__.py +1 -0
- aip_agents/mcp/__init__.pyi +0 -0
- aip_agents/mcp/client/__init__.py +14 -0
- aip_agents/mcp/client/__init__.pyi +5 -0
- aip_agents/mcp/client/base_mcp_client.py +369 -0
- aip_agents/mcp/client/base_mcp_client.pyi +148 -0
- aip_agents/mcp/client/connection_manager.py +228 -0
- aip_agents/mcp/client/connection_manager.pyi +51 -0
- aip_agents/mcp/client/google_adk/__init__.py +11 -0
- aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
- aip_agents/mcp/client/google_adk/client.py +381 -0
- aip_agents/mcp/client/google_adk/client.pyi +75 -0
- aip_agents/mcp/client/langchain/__init__.py +11 -0
- aip_agents/mcp/client/langchain/__init__.pyi +3 -0
- aip_agents/mcp/client/langchain/client.py +265 -0
- aip_agents/mcp/client/langchain/client.pyi +48 -0
- aip_agents/mcp/client/persistent_session.py +612 -0
- aip_agents/mcp/client/persistent_session.pyi +122 -0
- aip_agents/mcp/client/session_pool.py +351 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.py +263 -0
- aip_agents/mcp/client/transports.pyi +132 -0
- aip_agents/mcp/utils/__init__.py +7 -0
- aip_agents/mcp/utils/__init__.pyi +0 -0
- aip_agents/mcp/utils/config_validator.py +139 -0
- aip_agents/mcp/utils/config_validator.pyi +82 -0
- aip_agents/memory/__init__.py +14 -0
- aip_agents/memory/__init__.pyi +5 -0
- aip_agents/memory/adapters/__init__.py +10 -0
- aip_agents/memory/adapters/__init__.pyi +4 -0
- aip_agents/memory/adapters/base_adapter.py +811 -0
- aip_agents/memory/adapters/base_adapter.pyi +176 -0
- aip_agents/memory/adapters/mem0.py +84 -0
- aip_agents/memory/adapters/mem0.pyi +22 -0
- aip_agents/memory/base.py +84 -0
- aip_agents/memory/base.pyi +60 -0
- aip_agents/memory/constants.py +49 -0
- aip_agents/memory/constants.pyi +25 -0
- aip_agents/memory/factory.py +86 -0
- aip_agents/memory/factory.pyi +24 -0
- aip_agents/memory/guidance.py +20 -0
- aip_agents/memory/guidance.pyi +3 -0
- aip_agents/memory/simple_memory.py +47 -0
- aip_agents/memory/simple_memory.pyi +23 -0
- aip_agents/middleware/__init__.py +17 -0
- aip_agents/middleware/__init__.pyi +5 -0
- aip_agents/middleware/base.py +96 -0
- aip_agents/middleware/base.pyi +75 -0
- aip_agents/middleware/manager.py +150 -0
- aip_agents/middleware/manager.pyi +84 -0
- aip_agents/middleware/todolist.py +274 -0
- aip_agents/middleware/todolist.pyi +125 -0
- aip_agents/ptc/__init__.py +48 -0
- aip_agents/ptc/__init__.pyi +10 -0
- aip_agents/ptc/doc_gen.py +122 -0
- aip_agents/ptc/doc_gen.pyi +40 -0
- aip_agents/ptc/exceptions.py +39 -0
- aip_agents/ptc/exceptions.pyi +22 -0
- aip_agents/ptc/executor.py +143 -0
- aip_agents/ptc/executor.pyi +73 -0
- aip_agents/ptc/mcp/__init__.py +45 -0
- aip_agents/ptc/mcp/__init__.pyi +7 -0
- aip_agents/ptc/mcp/sandbox_bridge.py +668 -0
- aip_agents/ptc/mcp/sandbox_bridge.pyi +47 -0
- aip_agents/ptc/mcp/templates/__init__.py +1 -0
- aip_agents/ptc/mcp/templates/__init__.pyi +0 -0
- aip_agents/ptc/mcp/templates/mcp_client.py.template +239 -0
- aip_agents/ptc/naming.py +184 -0
- aip_agents/ptc/naming.pyi +76 -0
- aip_agents/ptc/payload.py +26 -0
- aip_agents/ptc/payload.pyi +15 -0
- aip_agents/ptc/prompt_builder.py +571 -0
- aip_agents/ptc/prompt_builder.pyi +55 -0
- aip_agents/ptc/ptc_helper.py +16 -0
- aip_agents/ptc/ptc_helper.pyi +1 -0
- aip_agents/ptc/sandbox_bridge.py +58 -0
- aip_agents/ptc/sandbox_bridge.pyi +25 -0
- aip_agents/ptc/template_utils.py +33 -0
- aip_agents/ptc/template_utils.pyi +13 -0
- aip_agents/ptc/templates/__init__.py +1 -0
- aip_agents/ptc/templates/__init__.pyi +0 -0
- aip_agents/ptc/templates/ptc_helper.py.template +134 -0
- aip_agents/sandbox/__init__.py +43 -0
- aip_agents/sandbox/__init__.pyi +5 -0
- aip_agents/sandbox/defaults.py +9 -0
- aip_agents/sandbox/defaults.pyi +2 -0
- aip_agents/sandbox/e2b_runtime.py +267 -0
- aip_agents/sandbox/e2b_runtime.pyi +51 -0
- aip_agents/sandbox/template_builder.py +131 -0
- aip_agents/sandbox/template_builder.pyi +36 -0
- aip_agents/sandbox/types.py +24 -0
- aip_agents/sandbox/types.pyi +14 -0
- aip_agents/sandbox/validation.py +50 -0
- aip_agents/sandbox/validation.pyi +20 -0
- aip_agents/schema/__init__.py +69 -0
- aip_agents/schema/__init__.pyi +9 -0
- aip_agents/schema/a2a.py +56 -0
- aip_agents/schema/a2a.pyi +40 -0
- aip_agents/schema/agent.py +111 -0
- aip_agents/schema/agent.pyi +65 -0
- aip_agents/schema/hitl.py +157 -0
- aip_agents/schema/hitl.pyi +89 -0
- aip_agents/schema/langgraph.py +37 -0
- aip_agents/schema/langgraph.pyi +28 -0
- aip_agents/schema/model_id.py +97 -0
- aip_agents/schema/model_id.pyi +54 -0
- aip_agents/schema/step_limit.py +108 -0
- aip_agents/schema/step_limit.pyi +63 -0
- aip_agents/schema/storage.py +40 -0
- aip_agents/schema/storage.pyi +21 -0
- aip_agents/sentry/__init__.py +11 -0
- aip_agents/sentry/__init__.pyi +3 -0
- aip_agents/sentry/sentry.py +151 -0
- aip_agents/sentry/sentry.pyi +48 -0
- aip_agents/storage/__init__.py +41 -0
- aip_agents/storage/__init__.pyi +8 -0
- aip_agents/storage/base.py +85 -0
- aip_agents/storage/base.pyi +58 -0
- aip_agents/storage/clients/__init__.py +12 -0
- aip_agents/storage/clients/__init__.pyi +3 -0
- aip_agents/storage/clients/minio_client.py +318 -0
- aip_agents/storage/clients/minio_client.pyi +137 -0
- aip_agents/storage/config.py +62 -0
- aip_agents/storage/config.pyi +29 -0
- aip_agents/storage/providers/__init__.py +15 -0
- aip_agents/storage/providers/__init__.pyi +5 -0
- aip_agents/storage/providers/base.py +106 -0
- aip_agents/storage/providers/base.pyi +88 -0
- aip_agents/storage/providers/memory.py +114 -0
- aip_agents/storage/providers/memory.pyi +79 -0
- aip_agents/storage/providers/object_storage.py +214 -0
- aip_agents/storage/providers/object_storage.pyi +98 -0
- aip_agents/tools/__init__.py +64 -0
- aip_agents/tools/__init__.pyi +11 -0
- aip_agents/tools/browser_use/__init__.py +82 -0
- aip_agents/tools/browser_use/__init__.pyi +14 -0
- aip_agents/tools/browser_use/action_parser.py +103 -0
- aip_agents/tools/browser_use/action_parser.pyi +18 -0
- aip_agents/tools/browser_use/browser_use_tool.py +1120 -0
- aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
- aip_agents/tools/browser_use/llm_config.py +120 -0
- aip_agents/tools/browser_use/llm_config.pyi +52 -0
- aip_agents/tools/browser_use/minio_storage.py +198 -0
- aip_agents/tools/browser_use/minio_storage.pyi +109 -0
- aip_agents/tools/browser_use/schemas.py +119 -0
- aip_agents/tools/browser_use/schemas.pyi +32 -0
- aip_agents/tools/browser_use/session.py +76 -0
- aip_agents/tools/browser_use/session.pyi +4 -0
- aip_agents/tools/browser_use/session_errors.py +132 -0
- aip_agents/tools/browser_use/session_errors.pyi +53 -0
- aip_agents/tools/browser_use/steel_session_recording.py +317 -0
- aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
- aip_agents/tools/browser_use/streaming.py +815 -0
- aip_agents/tools/browser_use/streaming.pyi +81 -0
- aip_agents/tools/browser_use/structured_data_parser.py +257 -0
- aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
- aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
- aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
- aip_agents/tools/browser_use/types.py +78 -0
- aip_agents/tools/browser_use/types.pyi +45 -0
- aip_agents/tools/code_sandbox/__init__.py +26 -0
- aip_agents/tools/code_sandbox/__init__.pyi +3 -0
- aip_agents/tools/code_sandbox/constant.py +13 -0
- aip_agents/tools/code_sandbox/constant.pyi +4 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +306 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
- aip_agents/tools/constants.py +177 -0
- aip_agents/tools/constants.pyi +138 -0
- aip_agents/tools/date_range_tool.py +554 -0
- aip_agents/tools/date_range_tool.pyi +21 -0
- aip_agents/tools/document_loader/__init__.py +44 -0
- aip_agents/tools/document_loader/__init__.pyi +7 -0
- aip_agents/tools/document_loader/base_reader.py +302 -0
- aip_agents/tools/document_loader/base_reader.pyi +75 -0
- aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
- aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
- aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
- aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
- aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
- aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
- aip_agents/tools/document_loader/pdf_splitter.py +169 -0
- aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
- aip_agents/tools/execute_ptc_code.py +308 -0
- aip_agents/tools/execute_ptc_code.pyi +90 -0
- aip_agents/tools/gl_connector/__init__.py +5 -0
- aip_agents/tools/gl_connector/__init__.pyi +3 -0
- aip_agents/tools/gl_connector/tool.py +383 -0
- aip_agents/tools/gl_connector/tool.pyi +74 -0
- aip_agents/tools/gl_connector_tools.py +119 -0
- aip_agents/tools/gl_connector_tools.pyi +39 -0
- aip_agents/tools/memory_search/__init__.py +29 -0
- aip_agents/tools/memory_search/__init__.pyi +5 -0
- aip_agents/tools/memory_search/base.py +200 -0
- aip_agents/tools/memory_search/base.pyi +69 -0
- aip_agents/tools/memory_search/mem0.py +365 -0
- aip_agents/tools/memory_search/mem0.pyi +29 -0
- aip_agents/tools/memory_search/schema.py +81 -0
- aip_agents/tools/memory_search/schema.pyi +25 -0
- aip_agents/tools/memory_search_tool.py +34 -0
- aip_agents/tools/memory_search_tool.pyi +3 -0
- aip_agents/tools/time_tool.py +117 -0
- aip_agents/tools/time_tool.pyi +16 -0
- aip_agents/tools/tool_config_injector.py +300 -0
- aip_agents/tools/tool_config_injector.pyi +26 -0
- aip_agents/tools/web_search/__init__.py +15 -0
- aip_agents/tools/web_search/__init__.pyi +3 -0
- aip_agents/tools/web_search/serper_tool.py +187 -0
- aip_agents/tools/web_search/serper_tool.pyi +19 -0
- aip_agents/types/__init__.py +70 -0
- aip_agents/types/__init__.pyi +36 -0
- aip_agents/types/a2a_events.py +13 -0
- aip_agents/types/a2a_events.pyi +3 -0
- aip_agents/utils/__init__.py +79 -0
- aip_agents/utils/__init__.pyi +11 -0
- aip_agents/utils/a2a_connector.py +1757 -0
- aip_agents/utils/a2a_connector.pyi +146 -0
- aip_agents/utils/artifact_helpers.py +502 -0
- aip_agents/utils/artifact_helpers.pyi +203 -0
- aip_agents/utils/constants.py +22 -0
- aip_agents/utils/constants.pyi +10 -0
- aip_agents/utils/datetime/__init__.py +34 -0
- aip_agents/utils/datetime/__init__.pyi +4 -0
- aip_agents/utils/datetime/normalization.py +231 -0
- aip_agents/utils/datetime/normalization.pyi +95 -0
- aip_agents/utils/datetime/timezone.py +206 -0
- aip_agents/utils/datetime/timezone.pyi +48 -0
- aip_agents/utils/env_loader.py +27 -0
- aip_agents/utils/env_loader.pyi +10 -0
- aip_agents/utils/event_handler_registry.py +58 -0
- aip_agents/utils/event_handler_registry.pyi +23 -0
- aip_agents/utils/file_prompt_utils.py +176 -0
- aip_agents/utils/file_prompt_utils.pyi +21 -0
- aip_agents/utils/final_response_builder.py +211 -0
- aip_agents/utils/final_response_builder.pyi +34 -0
- aip_agents/utils/formatter_llm_client.py +231 -0
- aip_agents/utils/formatter_llm_client.pyi +71 -0
- aip_agents/utils/langgraph/__init__.py +19 -0
- aip_agents/utils/langgraph/__init__.pyi +3 -0
- aip_agents/utils/langgraph/converter.py +128 -0
- aip_agents/utils/langgraph/converter.pyi +49 -0
- aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
- aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1096 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.py +1047 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
- aip_agents/utils/logger.py +195 -0
- aip_agents/utils/logger.pyi +60 -0
- aip_agents/utils/metadata/__init__.py +27 -0
- aip_agents/utils/metadata/__init__.pyi +5 -0
- aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
- aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
- aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
- aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
- aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
- aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
- aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
- aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
- aip_agents/utils/metadata/activity_narrative/context.py +49 -0
- aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
- aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
- aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
- aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
- aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
- aip_agents/utils/metadata/schemas/__init__.py +16 -0
- aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
- aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
- aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
- aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
- aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
- aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
- aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
- aip_agents/utils/metadata_helper.py +358 -0
- aip_agents/utils/metadata_helper.pyi +117 -0
- aip_agents/utils/name_preprocessor/__init__.py +17 -0
- aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
- aip_agents/utils/pii/__init__.py +25 -0
- aip_agents/utils/pii/__init__.pyi +5 -0
- aip_agents/utils/pii/pii_handler.py +397 -0
- aip_agents/utils/pii/pii_handler.pyi +96 -0
- aip_agents/utils/pii/pii_helper.py +207 -0
- aip_agents/utils/pii/pii_helper.pyi +78 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
- aip_agents/utils/reference_helper.py +273 -0
- aip_agents/utils/reference_helper.pyi +81 -0
- aip_agents/utils/sse_chunk_transformer.py +831 -0
- aip_agents/utils/sse_chunk_transformer.pyi +166 -0
- aip_agents/utils/step_limit_manager.py +265 -0
- aip_agents/utils/step_limit_manager.pyi +112 -0
- aip_agents/utils/token_usage_helper.py +156 -0
- aip_agents/utils/token_usage_helper.pyi +60 -0
- aip_agents_binary-0.6.4.dist-info/METADATA +673 -0
- aip_agents_binary-0.6.4.dist-info/RECORD +612 -0
- aip_agents_binary-0.6.4.dist-info/WHEEL +5 -0
- aip_agents_binary-0.6.4.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.memory.base import BaseMemory as BaseMemory
|
|
3
|
+
from aip_agents.memory.constants import MemoryDefaults as MemoryDefaults
|
|
4
|
+
from aip_agents.types import ChatMessage as ChatMessage
|
|
5
|
+
from aip_agents.utils.datetime import format_created_updated_label as format_created_updated_label
|
|
6
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
7
|
+
from concurrent.futures import Future
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from gllm_memory import MemoryManager
|
|
10
|
+
from gllm_memory.enums import MemoryScope
|
|
11
|
+
from typing import Any, ClassVar
|
|
12
|
+
|
|
13
|
+
MemoryManager = Any
|
|
14
|
+
MemoryScope = Any
|
|
15
|
+
logger: Incomplete
|
|
16
|
+
DEFAULT_SCOPE: ClassVar[set[MemoryScope]]
|
|
17
|
+
|
|
18
|
+
@dataclass(frozen=True)
|
|
19
|
+
class _RetrieveOptions:
|
|
20
|
+
user_id: str
|
|
21
|
+
top_k: int
|
|
22
|
+
metadata: dict[str, str] | None
|
|
23
|
+
keywords: Any
|
|
24
|
+
page: int
|
|
25
|
+
categories: list[str] | None
|
|
26
|
+
|
|
27
|
+
class _AsyncRunner:
|
|
28
|
+
"""Runs async coroutines on a dedicated background event loop."""
|
|
29
|
+
def __init__(self) -> None: ...
|
|
30
|
+
def run(self, awaitable: Any) -> Any:
|
|
31
|
+
"""Execute an awaitable on the background loop and block for the result.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
awaitable: The coroutine to execute.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
The result of the coroutine execution.
|
|
38
|
+
"""
|
|
39
|
+
def shutdown(self, timeout: float | None = 5.0) -> None:
|
|
40
|
+
"""Gracefully stop the event loop thread.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
timeout: Maximum time to wait for the thread to stop.
|
|
44
|
+
"""
|
|
45
|
+
def __del__(self) -> None: ...
|
|
46
|
+
|
|
47
|
+
class BaseMemoryAdapter(BaseMemory):
|
|
48
|
+
"""Provider-agnostic long-term memory adapter backed by gllm_memory."""
|
|
49
|
+
agent_id: Incomplete
|
|
50
|
+
namespace: Incomplete
|
|
51
|
+
limit: Incomplete
|
|
52
|
+
max_chars: Incomplete
|
|
53
|
+
def __init__(self, *, agent_id: str, manager: MemoryManager, namespace: str | None = None, limit: int = ..., max_chars: int = ...) -> None:
|
|
54
|
+
"""Initialize the GLLM memory adapter.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
agent_id: Unique identifier for the agent using this memory.
|
|
58
|
+
manager: Configured gllm_memory MemoryManager instance.
|
|
59
|
+
namespace: Optional namespace for organizing memories.
|
|
60
|
+
limit: Maximum number of memories to retrieve in search operations.
|
|
61
|
+
max_chars: Maximum character length for text content.
|
|
62
|
+
"""
|
|
63
|
+
@classmethod
|
|
64
|
+
def validate_env(cls) -> None:
|
|
65
|
+
"""Base adapter does not enforce environment validation."""
|
|
66
|
+
def get_messages(self) -> list[ChatMessage]:
|
|
67
|
+
"""Retrieve all stored chat messages.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
An empty list as GLLM adapter doesn't support message retrieval.
|
|
71
|
+
"""
|
|
72
|
+
def add_message(self, message: ChatMessage) -> None:
|
|
73
|
+
"""Best-effort single-message persistence for API parity.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
message: The chat message to add to memory.
|
|
77
|
+
"""
|
|
78
|
+
def clear(self) -> None:
|
|
79
|
+
"""Clear all stored memories.
|
|
80
|
+
|
|
81
|
+
Raises:
|
|
82
|
+
NotImplementedError: This method is not implemented for GLLM adapter.
|
|
83
|
+
"""
|
|
84
|
+
def search(self, query: str, *, user_id: str, limit: int | None = None, filters: dict[str, Any] | None = None) -> list[dict[str, Any]]:
|
|
85
|
+
"""Search for memories using a text query.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
query: The search query string.
|
|
89
|
+
user_id: User identifier for the search scope.
|
|
90
|
+
limit: Maximum number of results to return.
|
|
91
|
+
filters: Optional filters to apply to the search.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
List of memory hits matching the search criteria.
|
|
95
|
+
"""
|
|
96
|
+
def retrieve(self, *, query: str | None, user_id: str, limit: int | None = None, filters: dict[str, Any] | None = None, page: int | None = None) -> list[dict[str, Any]]:
|
|
97
|
+
"""Retrieve memories with optional search query and filters.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
query: Optional search query string. If None, retrieves all memories.
|
|
101
|
+
user_id: User identifier for the retrieval scope.
|
|
102
|
+
limit: Maximum number of results to return.
|
|
103
|
+
filters: Optional filters to apply to the retrieval.
|
|
104
|
+
page: Page number for pagination.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
List of memory hits matching the criteria.
|
|
108
|
+
"""
|
|
109
|
+
def delete_by_query(self, *, query: str, user_id: str, metadata: dict[str, Any] | None = None, threshold: float | None = None, top_k: int | None = None, categories: list[str] | None = None) -> Any:
|
|
110
|
+
"""Delete memories by semantic query.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
query: Semantic query describing memories to delete.
|
|
114
|
+
user_id: User identifier for the deletion scope.
|
|
115
|
+
metadata: Optional metadata filters to constrain deletion.
|
|
116
|
+
threshold: Optional semantic threshold (if supported by backend).
|
|
117
|
+
top_k: Optional max number of memories to delete by query.
|
|
118
|
+
categories: Optional categories to filter by (best-effort).
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
Backend-specific delete result or None on failure.
|
|
122
|
+
"""
|
|
123
|
+
def delete(self, *, memory_ids: list[str] | None, user_id: str, metadata: dict[str, Any] | None = None, categories: list[str] | None = None) -> Any:
|
|
124
|
+
"""Delete memories by IDs or by user scope when IDs are None.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
memory_ids: Optional list of memory IDs to delete.
|
|
128
|
+
user_id: User identifier for the deletion scope.
|
|
129
|
+
metadata: Optional metadata filters to constrain deletion.
|
|
130
|
+
categories: Optional categories to filter by (best-effort).
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
Backend-specific delete result or None on failure.
|
|
134
|
+
"""
|
|
135
|
+
def save_interaction(self, *, user_text: str, ai_text: str, user_id: str) -> None:
|
|
136
|
+
"""Save a user-AI interaction as memories.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
user_text: The user's input text.
|
|
140
|
+
ai_text: The AI's response text.
|
|
141
|
+
user_id: User identifier for the memory storage.
|
|
142
|
+
"""
|
|
143
|
+
def save_interaction_async(self, *, user_text: str, ai_text: str, user_id: str) -> Future[Any]:
|
|
144
|
+
"""Schedule save_interaction without blocking the caller.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
user_text: The user's input text to save.
|
|
148
|
+
ai_text: The AI's response text to save.
|
|
149
|
+
user_id: User identifier for the memory storage.
|
|
150
|
+
"""
|
|
151
|
+
def format_hits(self, hits: list[dict[str, Any]], max_items: int = ..., with_tag: bool = True) -> str:
|
|
152
|
+
"""Format memory hits into a readable string.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
hits: List of memory hit dictionaries to format.
|
|
156
|
+
max_items: Maximum number of hits to include in the output.
|
|
157
|
+
with_tag: Whether to wrap the output with memory tags.
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
Formatted string representation of the memory hits.
|
|
161
|
+
"""
|
|
162
|
+
def flush_pending_writes(self, timeout: float | None = None) -> None:
|
|
163
|
+
"""Block until current async writes complete.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
timeout: Maximum time to wait for pending writes to complete.
|
|
167
|
+
"""
|
|
168
|
+
def close(self, *, wait: bool = True, timeout: float | None = None) -> None:
|
|
169
|
+
"""Release background resources and optionally wait for pending saves.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
wait: Whether to wait for pending async operations to complete.
|
|
173
|
+
timeout: Maximum time to wait when wait=True.
|
|
174
|
+
"""
|
|
175
|
+
def __del__(self) -> None:
|
|
176
|
+
"""Clean up resources when the adapter is garbage collected."""
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Mem0-specific adapter built on top of the BaseMemoryAdapter.
|
|
2
|
+
|
|
3
|
+
Authors:
|
|
4
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
from gllm_memory import MemoryManager
|
|
14
|
+
|
|
15
|
+
_HAS_GLLM_MEMORY = True
|
|
16
|
+
except ImportError: # pragma: no cover
|
|
17
|
+
MemoryManager = Any # type: ignore[assignment]
|
|
18
|
+
_HAS_GLLM_MEMORY = False
|
|
19
|
+
|
|
20
|
+
from aip_agents.memory.adapters.base_adapter import BaseMemoryAdapter
|
|
21
|
+
from aip_agents.memory.constants import MemoryDefaults
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Mem0Memory(BaseMemoryAdapter):
|
|
25
|
+
"""Mem0-backed long-term memory adapter using the gllm_memory SDK."""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
*,
|
|
30
|
+
agent_id: str,
|
|
31
|
+
namespace: str | None = None,
|
|
32
|
+
limit: int = MemoryDefaults.RETRIEVAL_LIMIT,
|
|
33
|
+
max_chars: int = MemoryDefaults.MAX_CHARS,
|
|
34
|
+
host: str | None = None,
|
|
35
|
+
instruction: str | None = None,
|
|
36
|
+
) -> None:
|
|
37
|
+
"""Initialize the Mem0 memory adapter.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
agent_id: Unique identifier for the agent using this memory.
|
|
41
|
+
namespace: Optional namespace for organizing memories.
|
|
42
|
+
limit: Maximum number of memories to retrieve in search operations.
|
|
43
|
+
max_chars: Maximum character length for text content.
|
|
44
|
+
host: Optional host URL for the Mem0 service.
|
|
45
|
+
instruction: Optional instruction text for memory operations.
|
|
46
|
+
"""
|
|
47
|
+
if not _HAS_GLLM_MEMORY:
|
|
48
|
+
raise ImportError("optional dependency 'gllm-memory' is required for Mem0Memory")
|
|
49
|
+
|
|
50
|
+
manager = self._initialize_manager(host=host, instruction=instruction)
|
|
51
|
+
super().__init__(
|
|
52
|
+
agent_id=agent_id,
|
|
53
|
+
manager=manager,
|
|
54
|
+
namespace=namespace,
|
|
55
|
+
limit=limit,
|
|
56
|
+
max_chars=max_chars,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@classmethod
|
|
60
|
+
def validate_env(cls) -> None:
|
|
61
|
+
"""Ensure the Mem0 API key is available."""
|
|
62
|
+
cls._resolve_api_key()
|
|
63
|
+
|
|
64
|
+
@staticmethod
|
|
65
|
+
def _resolve_api_key() -> str:
|
|
66
|
+
api_key = os.getenv("MEM0_API_KEY") or os.getenv("GLLM_MEMORY_API_KEY")
|
|
67
|
+
if not api_key:
|
|
68
|
+
raise ValueError("MEM0_API_KEY (or GLLM_MEMORY_API_KEY) must be configured for Mem0 access.")
|
|
69
|
+
return api_key
|
|
70
|
+
|
|
71
|
+
def _initialize_manager(self, host: str | None, instruction: str | None) -> MemoryManager:
|
|
72
|
+
"""Create a MemoryManager tailored for the Mem0 backend.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
host: Optional host URL for the Mem0 service.
|
|
76
|
+
instruction: Optional instruction text for memory operations.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
Configured MemoryManager instance for Mem0.
|
|
80
|
+
"""
|
|
81
|
+
api_key = self._resolve_api_key()
|
|
82
|
+
resolved_host = host or os.getenv("MEM0_HOST") or os.getenv("GLLM_MEMORY_HOST")
|
|
83
|
+
resolved_instruction = instruction or os.getenv("GLLM_MEMORY_INSTRUCTION")
|
|
84
|
+
return MemoryManager(api_key=api_key, host=resolved_host, instruction=resolved_instruction)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from aip_agents.memory.adapters.base_adapter import BaseMemoryAdapter as BaseMemoryAdapter
|
|
2
|
+
from aip_agents.memory.constants import MemoryDefaults as MemoryDefaults
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
MemoryManager = Any
|
|
6
|
+
|
|
7
|
+
class Mem0Memory(BaseMemoryAdapter):
|
|
8
|
+
"""Mem0-backed long-term memory adapter using the gllm_memory SDK."""
|
|
9
|
+
def __init__(self, *, agent_id: str, namespace: str | None = None, limit: int = ..., max_chars: int = ..., host: str | None = None, instruction: str | None = None) -> None:
|
|
10
|
+
"""Initialize the Mem0 memory adapter.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
agent_id: Unique identifier for the agent using this memory.
|
|
14
|
+
namespace: Optional namespace for organizing memories.
|
|
15
|
+
limit: Maximum number of memories to retrieve in search operations.
|
|
16
|
+
max_chars: Maximum character length for text content.
|
|
17
|
+
host: Optional host URL for the Mem0 service.
|
|
18
|
+
instruction: Optional instruction text for memory operations.
|
|
19
|
+
"""
|
|
20
|
+
@classmethod
|
|
21
|
+
def validate_env(cls) -> None:
|
|
22
|
+
"""Ensure the Mem0 API key is available."""
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Base Memory Module for AIP Agents.
|
|
2
|
+
|
|
3
|
+
This module defines the BaseMemory class which serves as a template
|
|
4
|
+
for implementing different types of memory for agents.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
8
|
+
|
|
9
|
+
References:
|
|
10
|
+
https://github.com/GDP-ADMIN/gdplabs-exploration/blob/ai-agent-app/backend/aip_agents/memory/base.py
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from abc import ABC, abstractmethod
|
|
14
|
+
from collections.abc import Sequence
|
|
15
|
+
from typing import Any
|
|
16
|
+
|
|
17
|
+
from aip_agents.types import ChatMessage
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class BaseMemory(ABC):
|
|
21
|
+
"""Base class for agent memory.
|
|
22
|
+
|
|
23
|
+
This concrete base class provides a default structure. Subclasses
|
|
24
|
+
can inherit from this class to implement specific memory management
|
|
25
|
+
behaviors.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def validate_env(cls) -> None: # pragma: no cover - default no-op
|
|
30
|
+
"""Validate environment prerequisites for a memory backend.
|
|
31
|
+
|
|
32
|
+
This hook allows memory implementations to fail fast when required
|
|
33
|
+
environment variables or credentials are missing. Default is a no-op.
|
|
34
|
+
"""
|
|
35
|
+
return None
|
|
36
|
+
|
|
37
|
+
@abstractmethod
|
|
38
|
+
def get_messages(self) -> list[ChatMessage]:
|
|
39
|
+
"""Retrieve a list of messages.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
List[ChatMessage]: A list of messages in a generic format.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
@abstractmethod
|
|
46
|
+
def add_message(self, message: ChatMessage) -> None:
|
|
47
|
+
"""Add a message to the memory.
|
|
48
|
+
|
|
49
|
+
Adds a single ChatMessage to the memory storage. The exact implementation
|
|
50
|
+
depends on the specific memory backend.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
message: The ChatMessage object to add to memory. The message should
|
|
54
|
+
contain role and content information.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
def add_messages(self, messages: Sequence[ChatMessage]) -> None:
|
|
58
|
+
"""Add multiple messages to the memory.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
messages: A sequence of ChatMessage objects to add.
|
|
62
|
+
"""
|
|
63
|
+
for message in messages:
|
|
64
|
+
self.add_message(message)
|
|
65
|
+
|
|
66
|
+
@abstractmethod
|
|
67
|
+
def clear(self) -> None:
|
|
68
|
+
"""Clears the memory or resets the state of the agent.
|
|
69
|
+
|
|
70
|
+
This method must be implemented to define the specific behavior
|
|
71
|
+
for clearing or resetting the memory of the agent.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
def get_memory_variables(self) -> dict[str, Any]:
|
|
75
|
+
"""Retrieve memory variables.
|
|
76
|
+
|
|
77
|
+
This method returns a dictionary containing memory-related variables.
|
|
78
|
+
The default implementation returns a dictionary with chat_history.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
Dict[str, Any]: A dictionary where keys are variable names and values
|
|
82
|
+
are the corresponding memory-related data.
|
|
83
|
+
"""
|
|
84
|
+
return {"chat_history": self.get_messages()}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from aip_agents.types import ChatMessage as ChatMessage
|
|
3
|
+
from collections.abc import Sequence
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
class BaseMemory(ABC):
|
|
7
|
+
"""Base class for agent memory.
|
|
8
|
+
|
|
9
|
+
This concrete base class provides a default structure. Subclasses
|
|
10
|
+
can inherit from this class to implement specific memory management
|
|
11
|
+
behaviors.
|
|
12
|
+
"""
|
|
13
|
+
@classmethod
|
|
14
|
+
def validate_env(cls) -> None:
|
|
15
|
+
"""Validate environment prerequisites for a memory backend.
|
|
16
|
+
|
|
17
|
+
This hook allows memory implementations to fail fast when required
|
|
18
|
+
environment variables or credentials are missing. Default is a no-op.
|
|
19
|
+
"""
|
|
20
|
+
@abstractmethod
|
|
21
|
+
def get_messages(self) -> list[ChatMessage]:
|
|
22
|
+
"""Retrieve a list of messages.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
List[ChatMessage]: A list of messages in a generic format.
|
|
26
|
+
"""
|
|
27
|
+
@abstractmethod
|
|
28
|
+
def add_message(self, message: ChatMessage) -> None:
|
|
29
|
+
"""Add a message to the memory.
|
|
30
|
+
|
|
31
|
+
Adds a single ChatMessage to the memory storage. The exact implementation
|
|
32
|
+
depends on the specific memory backend.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
message: The ChatMessage object to add to memory. The message should
|
|
36
|
+
contain role and content information.
|
|
37
|
+
"""
|
|
38
|
+
def add_messages(self, messages: Sequence[ChatMessage]) -> None:
|
|
39
|
+
"""Add multiple messages to the memory.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
messages: A sequence of ChatMessage objects to add.
|
|
43
|
+
"""
|
|
44
|
+
@abstractmethod
|
|
45
|
+
def clear(self) -> None:
|
|
46
|
+
"""Clears the memory or resets the state of the agent.
|
|
47
|
+
|
|
48
|
+
This method must be implemented to define the specific behavior
|
|
49
|
+
for clearing or resetting the memory of the agent.
|
|
50
|
+
"""
|
|
51
|
+
def get_memory_variables(self) -> dict[str, Any]:
|
|
52
|
+
"""Retrieve memory variables.
|
|
53
|
+
|
|
54
|
+
This method returns a dictionary containing memory-related variables.
|
|
55
|
+
The default implementation returns a dictionary with chat_history.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Dict[str, Any]: A dictionary where keys are variable names and values
|
|
59
|
+
are the corresponding memory-related data.
|
|
60
|
+
"""
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Memory constants for AIP Agents.
|
|
2
|
+
|
|
3
|
+
This module defines constants for memory-related method names and other
|
|
4
|
+
memory-related constants to avoid magic strings and numbers throughout the codebase.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class MemoryMethod:
|
|
12
|
+
"""Constants for memory method names used in hasattr checks."""
|
|
13
|
+
|
|
14
|
+
SEARCH = "search"
|
|
15
|
+
SAVE_INTERACTION = "save_interaction"
|
|
16
|
+
FORMAT_HITS = "format_hits"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class MemoryDefaults:
|
|
20
|
+
"""Default values for memory configuration parameters."""
|
|
21
|
+
|
|
22
|
+
# Memory retrieval and formatting limits
|
|
23
|
+
MAX_ITEMS = 8 # Maximum number of memory items to include in formatted output
|
|
24
|
+
RETRIEVAL_LIMIT = 5 # Default number of memories to retrieve per search
|
|
25
|
+
MAX_CHARS = 1500 # Maximum characters per memory entry when saving
|
|
26
|
+
|
|
27
|
+
# Logging and display
|
|
28
|
+
LOG_PREVIEW_LENGTH = 100 # Length of text preview in logs
|
|
29
|
+
SMALL_PREVIEW_LENGTH = 16 # Length of text preview in logs
|
|
30
|
+
|
|
31
|
+
# Agent ID generation
|
|
32
|
+
AGENT_ID_PREFIX = "agent-" # Prefix for generated agent IDs
|
|
33
|
+
|
|
34
|
+
# Memory formatting
|
|
35
|
+
MEMORY_TAG_OPEN = "<RELEVANT_MEMORY>"
|
|
36
|
+
MEMORY_TAG_CLOSE = "</RELEVANT_MEMORY>"
|
|
37
|
+
|
|
38
|
+
# Default user ID for compatibility
|
|
39
|
+
DEFAULT_USER_ID = "default"
|
|
40
|
+
|
|
41
|
+
# Date format constants
|
|
42
|
+
DATE_STRING_LENGTH = 10 # Length of "YYYY-MM-DD" format strings
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class MemoryBackends:
|
|
46
|
+
"""Supported memory backend identifiers."""
|
|
47
|
+
|
|
48
|
+
MEM0 = "mem0"
|
|
49
|
+
SUPPORTED = frozenset({MEM0})
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
|
|
3
|
+
class MemoryMethod:
|
|
4
|
+
"""Constants for memory method names used in hasattr checks."""
|
|
5
|
+
SEARCH: str
|
|
6
|
+
SAVE_INTERACTION: str
|
|
7
|
+
FORMAT_HITS: str
|
|
8
|
+
|
|
9
|
+
class MemoryDefaults:
|
|
10
|
+
"""Default values for memory configuration parameters."""
|
|
11
|
+
MAX_ITEMS: int
|
|
12
|
+
RETRIEVAL_LIMIT: int
|
|
13
|
+
MAX_CHARS: int
|
|
14
|
+
LOG_PREVIEW_LENGTH: int
|
|
15
|
+
SMALL_PREVIEW_LENGTH: int
|
|
16
|
+
AGENT_ID_PREFIX: str
|
|
17
|
+
MEMORY_TAG_OPEN: str
|
|
18
|
+
MEMORY_TAG_CLOSE: str
|
|
19
|
+
DEFAULT_USER_ID: str
|
|
20
|
+
DATE_STRING_LENGTH: int
|
|
21
|
+
|
|
22
|
+
class MemoryBackends:
|
|
23
|
+
"""Supported memory backend identifiers."""
|
|
24
|
+
MEM0: str
|
|
25
|
+
SUPPORTED: Incomplete
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""Memory factory for creating memory adapters by backend string.
|
|
2
|
+
|
|
3
|
+
This module provides a single point of construction for memory backends,
|
|
4
|
+
so agent code does not depend on concrete memory implementations.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import importlib
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from aip_agents.memory.base import BaseMemory
|
|
14
|
+
from aip_agents.utils.logger import get_logger
|
|
15
|
+
|
|
16
|
+
logger = get_logger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
BACKENDS = {
|
|
20
|
+
# backend_name: "module_path:ClassName"
|
|
21
|
+
"mem0": "aip_agents.memory.adapters.mem0:Mem0Memory",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _import_class(path: str) -> type[BaseMemory]:
|
|
26
|
+
"""Import a memory class from a module path string.
|
|
27
|
+
|
|
28
|
+
Dynamically imports a memory implementation class from a string path in
|
|
29
|
+
the format "module_path:ClassName".
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
path: A string in the format "module_path:ClassName" specifying the
|
|
33
|
+
module and class to import.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
type[BaseMemory]: The imported memory class that implements the
|
|
37
|
+
BaseMemory interface.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ModuleNotFoundError: If the specified module cannot be imported.
|
|
41
|
+
AttributeError: If the specified class does not exist in the module.
|
|
42
|
+
ValueError: If the path format is invalid (does not contain ':').
|
|
43
|
+
"""
|
|
44
|
+
module_path, class_name = path.split(":", 1)
|
|
45
|
+
module = importlib.import_module(module_path)
|
|
46
|
+
memory_cls = getattr(module, class_name)
|
|
47
|
+
return memory_cls
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class MemoryFactory:
|
|
51
|
+
"""Factory to build concrete memory adapters by backend name."""
|
|
52
|
+
|
|
53
|
+
@staticmethod
|
|
54
|
+
def create(backend: str, **kwargs: Any) -> BaseMemory:
|
|
55
|
+
"""Create a memory adapter instance.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
backend: Backend identifier (e.g., "mem0").
|
|
59
|
+
**kwargs: Keyword args passed to adapter constructor (e.g., limit, max_chars, namespace).
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
BaseMemory: A constructed memory adapter instance.
|
|
63
|
+
|
|
64
|
+
Raises:
|
|
65
|
+
ValueError: If backend is unknown or adapter can't be constructed.
|
|
66
|
+
"""
|
|
67
|
+
if backend not in BACKENDS:
|
|
68
|
+
raise ValueError(f"Unknown memory backend: {backend}")
|
|
69
|
+
|
|
70
|
+
cls_path = BACKENDS[backend]
|
|
71
|
+
memory_cls = _import_class(cls_path)
|
|
72
|
+
|
|
73
|
+
# Validate environment (adapter may raise)
|
|
74
|
+
try:
|
|
75
|
+
if hasattr(memory_cls, "validate_env"):
|
|
76
|
+
memory_cls.validate_env() # type: ignore[misc]
|
|
77
|
+
except Exception as e: # noqa: BLE001
|
|
78
|
+
logger.error(f"MemoryFactory: environment validation failed for '{backend}': {e}")
|
|
79
|
+
raise
|
|
80
|
+
|
|
81
|
+
try:
|
|
82
|
+
instance = memory_cls(**kwargs)
|
|
83
|
+
return instance
|
|
84
|
+
except Exception as e: # noqa: BLE001
|
|
85
|
+
logger.error(f"MemoryFactory: failed to create memory adapter '{backend}': {e}")
|
|
86
|
+
raise
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.memory.base import BaseMemory as BaseMemory
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
logger: Incomplete
|
|
7
|
+
BACKENDS: Incomplete
|
|
8
|
+
|
|
9
|
+
class MemoryFactory:
|
|
10
|
+
"""Factory to build concrete memory adapters by backend name."""
|
|
11
|
+
@staticmethod
|
|
12
|
+
def create(backend: str, **kwargs: Any) -> BaseMemory:
|
|
13
|
+
'''Create a memory adapter instance.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
backend: Backend identifier (e.g., "mem0").
|
|
17
|
+
**kwargs: Keyword args passed to adapter constructor (e.g., limit, max_chars, namespace).
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
BaseMemory: A constructed memory adapter instance.
|
|
21
|
+
|
|
22
|
+
Raises:
|
|
23
|
+
ValueError: If backend is unknown or adapter can\'t be constructed.
|
|
24
|
+
'''
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""Guidance text helpers for Mem0-based memory recall.
|
|
2
|
+
|
|
3
|
+
Authors:
|
|
4
|
+
- Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import textwrap
|
|
8
|
+
|
|
9
|
+
MEM0_MEMORY_RECALL_GUIDANCE = textwrap.dedent("""
|
|
10
|
+
Memory Recall Guidance:
|
|
11
|
+
- Use `built_in_mem0_search` whenever you need facts from long-term memory.
|
|
12
|
+
- You can also use `built_in_mem0_search` for explicit recall or recap requests of
|
|
13
|
+
conversation/chat/discussion by the user.
|
|
14
|
+
Reach for it when prior context such as but not limited to: names, decisions, or
|
|
15
|
+
preferences, will help you respond.
|
|
16
|
+
It is also appropriate when the user asks about the AI's previous responses.
|
|
17
|
+
- Provide a concise `query` that describes what you are looking for (e.g., 'project plan', 'user preferences').
|
|
18
|
+
- If the user specifies a time period for a memory, set `time_period` according to user query
|
|
19
|
+
to retrieve memories based on that time period.
|
|
20
|
+
""").strip()
|