aip-agents-binary 0.6.3__py3-none-any.whl → 0.6.5__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/agent/__init__.py +44 -4
- aip_agents/agent/base_langgraph_agent.py +26 -6
- aip_agents/agent/langgraph_memory_enhancer_agent.py +368 -34
- aip_agents/agent/langgraph_react_agent.py +30 -6
- aip_agents/mcp/client/__init__.py +38 -2
- aip_agents/mcp/client/transports.py +5 -1
- aip_agents/memory/adapters/base_adapter.py +94 -0
- aip_agents/sentry/sentry.py +29 -8
- aip_agents/tools/memory_search/__init__.py +8 -1
- aip_agents/tools/memory_search/mem0.py +108 -1
- aip_agents/tools/memory_search/schema.py +33 -0
- aip_agents/tools/memory_search_tool.py +8 -0
- {aip_agents_binary-0.6.3.dist-info → aip_agents_binary-0.6.5.dist-info}/METADATA +4 -16
- aip_agents_binary-0.6.5.dist-info/RECORD +314 -0
- aip_agents/__init__.pyi +0 -19
- aip_agents/a2a/__init__.pyi +0 -3
- aip_agents/a2a/server/__init__.pyi +0 -4
- aip_agents/a2a/server/base_executor.pyi +0 -73
- aip_agents/a2a/server/google_adk_executor.pyi +0 -51
- aip_agents/a2a/server/langflow_executor.pyi +0 -43
- aip_agents/a2a/server/langgraph_executor.pyi +0 -47
- aip_agents/a2a/types.pyi +0 -132
- aip_agents/agent/__init__.pyi +0 -9
- aip_agents/agent/base_agent.pyi +0 -221
- aip_agents/agent/base_langgraph_agent.pyi +0 -233
- aip_agents/agent/google_adk_agent.pyi +0 -141
- aip_agents/agent/google_adk_constants.pyi +0 -3
- aip_agents/agent/hitl/__init__.pyi +0 -6
- aip_agents/agent/hitl/config.pyi +0 -15
- aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +0 -42
- aip_agents/agent/hitl/manager.pyi +0 -200
- aip_agents/agent/hitl/models.pyi +0 -3
- aip_agents/agent/hitl/prompt/__init__.pyi +0 -4
- aip_agents/agent/hitl/prompt/base.pyi +0 -24
- aip_agents/agent/hitl/prompt/deferred.pyi +0 -30
- aip_agents/agent/hitl/registry.pyi +0 -101
- aip_agents/agent/interface.pyi +0 -81
- aip_agents/agent/interfaces.pyi +0 -44
- aip_agents/agent/langflow_agent.pyi +0 -133
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +0 -49
- aip_agents/agent/langgraph_react_agent.pyi +0 -170
- aip_agents/agent/system_instruction_context.pyi +0 -13
- aip_agents/clients/__init__.pyi +0 -4
- aip_agents/clients/langflow/__init__.pyi +0 -4
- aip_agents/clients/langflow/client.pyi +0 -140
- aip_agents/clients/langflow/types.pyi +0 -7
- aip_agents/constants.pyi +0 -7
- aip_agents/examples/__init__.pyi +0 -0
- aip_agents/examples/compare_streaming_client.pyi +0 -48
- aip_agents/examples/compare_streaming_server.pyi +0 -18
- aip_agents/examples/demo_memory_recall.py +0 -401
- aip_agents/examples/demo_memory_recall.pyi +0 -58
- aip_agents/examples/hello_world_a2a_google_adk_client.pyi +0 -9
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +0 -9
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +0 -9
- aip_agents/examples/hello_world_a2a_google_adk_server.pyi +0 -15
- aip_agents/examples/hello_world_a2a_langchain_client.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +0 -15
- aip_agents/examples/hello_world_a2a_langchain_server.pyi +0 -15
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +0 -15
- aip_agents/examples/hello_world_a2a_langflow_client.pyi +0 -9
- aip_agents/examples/hello_world_a2a_langflow_server.pyi +0 -14
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +0 -16
- aip_agents/examples/hello_world_a2a_langgraph_client.pyi +0 -9
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +0 -9
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +0 -2
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +0 -9
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +0 -5
- aip_agents/examples/hello_world_a2a_langgraph_server.pyi +0 -14
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +0 -15
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +0 -15
- aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +0 -48
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +0 -48
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +0 -45
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +0 -5
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +0 -15
- aip_agents/examples/hello_world_google_adk.pyi +0 -5
- aip_agents/examples/hello_world_google_adk_mcp_http.pyi +0 -5
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +0 -5
- aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +0 -5
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +0 -5
- aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +0 -5
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +0 -5
- aip_agents/examples/hello_world_google_adk_stream.pyi +0 -5
- aip_agents/examples/hello_world_langchain.pyi +0 -5
- aip_agents/examples/hello_world_langchain_lm_invoker.pyi +0 -2
- aip_agents/examples/hello_world_langchain_mcp_http.pyi +0 -5
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +0 -16
- aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +0 -5
- aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +0 -18
- aip_agents/examples/hello_world_langchain_mcp_sse.pyi +0 -5
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +0 -5
- aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +0 -5
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +0 -5
- aip_agents/examples/hello_world_langchain_stream.pyi +0 -5
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +0 -5
- aip_agents/examples/hello_world_langflow_agent.pyi +0 -35
- aip_agents/examples/hello_world_langgraph.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_mcp_http.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_stream.pyi +0 -5
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +0 -5
- aip_agents/examples/hello_world_model_switch_cli.pyi +0 -30
- aip_agents/examples/hello_world_multi_agent_adk.pyi +0 -6
- aip_agents/examples/hello_world_multi_agent_langchain.pyi +0 -5
- aip_agents/examples/hello_world_multi_agent_langgraph.pyi +0 -5
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +0 -5
- aip_agents/examples/hello_world_pii_logger.pyi +0 -5
- aip_agents/examples/hello_world_ptc.pyi +0 -5
- aip_agents/examples/hello_world_sentry.pyi +0 -21
- aip_agents/examples/hello_world_step_limits.pyi +0 -17
- aip_agents/examples/hello_world_stock_a2a_server.pyi +0 -17
- aip_agents/examples/hello_world_tool_output_client.pyi +0 -5
- aip_agents/examples/hello_world_tool_output_server.pyi +0 -19
- aip_agents/examples/hitl_demo.pyi +0 -67
- aip_agents/examples/pii_demo_langgraph_client.pyi +0 -5
- aip_agents/examples/pii_demo_langgraph_server.pyi +0 -20
- aip_agents/examples/pii_demo_multi_agent_client.pyi +0 -5
- aip_agents/examples/pii_demo_multi_agent_server.pyi +0 -40
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +0 -5
- aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +0 -19
- aip_agents/examples/tools/__init__.pyi +0 -9
- aip_agents/examples/tools/adk_arithmetic_tools.pyi +0 -24
- aip_agents/examples/tools/adk_weather_tool.pyi +0 -18
- aip_agents/examples/tools/data_generator_tool.pyi +0 -15
- aip_agents/examples/tools/data_visualization_tool.pyi +0 -19
- aip_agents/examples/tools/image_artifact_tool.pyi +0 -26
- aip_agents/examples/tools/langchain_arithmetic_tools.pyi +0 -17
- aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +0 -20
- aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +0 -25
- aip_agents/examples/tools/langchain_weather_tool.pyi +0 -19
- aip_agents/examples/tools/langgraph_streaming_tool.pyi +0 -43
- aip_agents/examples/tools/mock_retrieval_tool.pyi +0 -13
- aip_agents/examples/tools/pii_demo_tools.pyi +0 -54
- aip_agents/examples/tools/random_chart_tool.pyi +0 -20
- aip_agents/examples/tools/serper_tool.pyi +0 -16
- aip_agents/examples/tools/stock_tools.pyi +0 -36
- aip_agents/examples/tools/table_generator_tool.pyi +0 -22
- aip_agents/examples/tools/time_tool.pyi +0 -15
- aip_agents/examples/tools/weather_forecast_tool.pyi +0 -14
- aip_agents/guardrails/__init__.pyi +0 -6
- aip_agents/guardrails/engines/__init__.pyi +0 -4
- aip_agents/guardrails/engines/base.pyi +0 -61
- aip_agents/guardrails/engines/nemo.pyi +0 -46
- aip_agents/guardrails/engines/phrase_matcher.pyi +0 -48
- aip_agents/guardrails/exceptions.pyi +0 -23
- aip_agents/guardrails/manager.pyi +0 -42
- aip_agents/guardrails/middleware.pyi +0 -87
- aip_agents/guardrails/schemas.pyi +0 -43
- aip_agents/guardrails/utils.pyi +0 -19
- aip_agents/mcp/__init__.pyi +0 -0
- aip_agents/mcp/client/__init__.pyi +0 -5
- aip_agents/mcp/client/base_mcp_client.pyi +0 -148
- aip_agents/mcp/client/connection_manager.pyi +0 -51
- aip_agents/mcp/client/google_adk/__init__.pyi +0 -3
- aip_agents/mcp/client/google_adk/client.pyi +0 -75
- aip_agents/mcp/client/langchain/__init__.pyi +0 -3
- aip_agents/mcp/client/langchain/client.pyi +0 -48
- aip_agents/mcp/client/persistent_session.pyi +0 -122
- aip_agents/mcp/client/session_pool.pyi +0 -101
- aip_agents/mcp/client/transports.pyi +0 -132
- aip_agents/mcp/utils/__init__.pyi +0 -0
- aip_agents/mcp/utils/config_validator.pyi +0 -82
- aip_agents/memory/__init__.pyi +0 -5
- aip_agents/memory/adapters/__init__.pyi +0 -4
- aip_agents/memory/adapters/base_adapter.pyi +0 -150
- aip_agents/memory/adapters/mem0.pyi +0 -22
- aip_agents/memory/base.pyi +0 -60
- aip_agents/memory/constants.pyi +0 -25
- aip_agents/memory/factory.pyi +0 -24
- aip_agents/memory/guidance.pyi +0 -3
- aip_agents/memory/simple_memory.pyi +0 -23
- aip_agents/middleware/__init__.pyi +0 -5
- aip_agents/middleware/base.pyi +0 -75
- aip_agents/middleware/manager.pyi +0 -84
- aip_agents/middleware/todolist.pyi +0 -125
- aip_agents/ptc/__init__.pyi +0 -10
- aip_agents/ptc/doc_gen.pyi +0 -40
- aip_agents/ptc/exceptions.pyi +0 -22
- aip_agents/ptc/executor.pyi +0 -73
- aip_agents/ptc/mcp/__init__.pyi +0 -7
- aip_agents/ptc/mcp/sandbox_bridge.pyi +0 -47
- aip_agents/ptc/mcp/templates/__init__.pyi +0 -0
- aip_agents/ptc/naming.pyi +0 -76
- aip_agents/ptc/payload.pyi +0 -15
- aip_agents/ptc/prompt_builder.pyi +0 -55
- aip_agents/ptc/ptc_helper.pyi +0 -1
- aip_agents/ptc/sandbox_bridge.pyi +0 -25
- aip_agents/ptc/template_utils.pyi +0 -13
- aip_agents/ptc/templates/__init__.pyi +0 -0
- aip_agents/sandbox/__init__.pyi +0 -5
- aip_agents/sandbox/defaults.pyi +0 -2
- aip_agents/sandbox/e2b_runtime.pyi +0 -51
- aip_agents/sandbox/template_builder.pyi +0 -36
- aip_agents/sandbox/types.pyi +0 -14
- aip_agents/sandbox/validation.pyi +0 -20
- aip_agents/schema/__init__.pyi +0 -9
- aip_agents/schema/a2a.pyi +0 -40
- aip_agents/schema/agent.pyi +0 -65
- aip_agents/schema/hitl.pyi +0 -89
- aip_agents/schema/langgraph.pyi +0 -28
- aip_agents/schema/model_id.pyi +0 -54
- aip_agents/schema/step_limit.pyi +0 -63
- aip_agents/schema/storage.pyi +0 -21
- aip_agents/sentry/__init__.pyi +0 -3
- aip_agents/sentry/sentry.pyi +0 -48
- aip_agents/storage/__init__.pyi +0 -8
- aip_agents/storage/base.pyi +0 -58
- aip_agents/storage/clients/__init__.pyi +0 -3
- aip_agents/storage/clients/minio_client.pyi +0 -137
- aip_agents/storage/config.pyi +0 -29
- aip_agents/storage/providers/__init__.pyi +0 -5
- aip_agents/storage/providers/base.pyi +0 -88
- aip_agents/storage/providers/memory.pyi +0 -79
- aip_agents/storage/providers/object_storage.pyi +0 -98
- aip_agents/tools/__init__.pyi +0 -11
- aip_agents/tools/browser_use/__init__.pyi +0 -14
- aip_agents/tools/browser_use/action_parser.pyi +0 -18
- aip_agents/tools/browser_use/browser_use_tool.pyi +0 -50
- aip_agents/tools/browser_use/llm_config.pyi +0 -52
- aip_agents/tools/browser_use/minio_storage.pyi +0 -109
- aip_agents/tools/browser_use/schemas.pyi +0 -32
- aip_agents/tools/browser_use/session.pyi +0 -4
- aip_agents/tools/browser_use/session_errors.pyi +0 -53
- aip_agents/tools/browser_use/steel_session_recording.pyi +0 -63
- aip_agents/tools/browser_use/streaming.pyi +0 -81
- aip_agents/tools/browser_use/structured_data_parser.pyi +0 -86
- aip_agents/tools/browser_use/structured_data_recovery.pyi +0 -43
- aip_agents/tools/browser_use/types.pyi +0 -45
- aip_agents/tools/code_sandbox/__init__.pyi +0 -3
- aip_agents/tools/code_sandbox/constant.pyi +0 -4
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +0 -102
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +0 -29
- aip_agents/tools/constants.pyi +0 -138
- aip_agents/tools/date_range_tool.pyi +0 -21
- aip_agents/tools/document_loader/__init__.pyi +0 -7
- aip_agents/tools/document_loader/base_reader.pyi +0 -75
- aip_agents/tools/document_loader/docx_reader_tool.pyi +0 -10
- aip_agents/tools/document_loader/excel_reader_tool.pyi +0 -26
- aip_agents/tools/document_loader/pdf_reader_tool.pyi +0 -11
- aip_agents/tools/document_loader/pdf_splitter.pyi +0 -18
- aip_agents/tools/execute_ptc_code.pyi +0 -90
- aip_agents/tools/gl_connector/__init__.pyi +0 -3
- aip_agents/tools/gl_connector/tool.pyi +0 -74
- aip_agents/tools/gl_connector_tools.pyi +0 -39
- aip_agents/tools/memory_search/__init__.pyi +0 -5
- aip_agents/tools/memory_search/base.pyi +0 -69
- aip_agents/tools/memory_search/mem0.pyi +0 -19
- aip_agents/tools/memory_search/schema.pyi +0 -15
- aip_agents/tools/memory_search_tool.pyi +0 -3
- aip_agents/tools/time_tool.pyi +0 -16
- aip_agents/tools/tool_config_injector.pyi +0 -26
- aip_agents/tools/web_search/__init__.pyi +0 -3
- aip_agents/tools/web_search/serper_tool.pyi +0 -19
- aip_agents/types/__init__.pyi +0 -36
- aip_agents/types/a2a_events.pyi +0 -3
- aip_agents/utils/__init__.pyi +0 -11
- aip_agents/utils/a2a_connector.pyi +0 -146
- aip_agents/utils/artifact_helpers.pyi +0 -203
- aip_agents/utils/constants.pyi +0 -10
- aip_agents/utils/datetime/__init__.pyi +0 -4
- aip_agents/utils/datetime/normalization.pyi +0 -95
- aip_agents/utils/datetime/timezone.pyi +0 -48
- aip_agents/utils/env_loader.pyi +0 -10
- aip_agents/utils/event_handler_registry.pyi +0 -23
- aip_agents/utils/file_prompt_utils.pyi +0 -21
- aip_agents/utils/final_response_builder.pyi +0 -34
- aip_agents/utils/formatter_llm_client.pyi +0 -71
- aip_agents/utils/langgraph/__init__.pyi +0 -3
- aip_agents/utils/langgraph/converter.pyi +0 -49
- aip_agents/utils/langgraph/tool_managers/__init__.pyi +0 -5
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +0 -35
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +0 -48
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +0 -56
- aip_agents/utils/langgraph/tool_output_management.pyi +0 -329
- aip_agents/utils/logger.pyi +0 -60
- aip_agents/utils/metadata/__init__.pyi +0 -5
- aip_agents/utils/metadata/activity_metadata_helper.pyi +0 -25
- aip_agents/utils/metadata/activity_narrative/__init__.pyi +0 -7
- aip_agents/utils/metadata/activity_narrative/builder.pyi +0 -35
- aip_agents/utils/metadata/activity_narrative/constants.pyi +0 -10
- aip_agents/utils/metadata/activity_narrative/context.pyi +0 -32
- aip_agents/utils/metadata/activity_narrative/formatters.pyi +0 -48
- aip_agents/utils/metadata/activity_narrative/utils.pyi +0 -12
- aip_agents/utils/metadata/schemas/__init__.pyi +0 -4
- aip_agents/utils/metadata/schemas/activity_schema.pyi +0 -18
- aip_agents/utils/metadata/schemas/thinking_schema.pyi +0 -20
- aip_agents/utils/metadata/thinking_metadata_helper.pyi +0 -4
- aip_agents/utils/metadata_helper.pyi +0 -117
- aip_agents/utils/name_preprocessor/__init__.pyi +0 -6
- aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +0 -52
- aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +0 -38
- aip_agents/utils/name_preprocessor/name_preprocessor.pyi +0 -41
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +0 -34
- aip_agents/utils/pii/__init__.pyi +0 -5
- aip_agents/utils/pii/pii_handler.pyi +0 -96
- aip_agents/utils/pii/pii_helper.pyi +0 -78
- aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +0 -73
- aip_agents/utils/reference_helper.pyi +0 -81
- aip_agents/utils/sse_chunk_transformer.pyi +0 -166
- aip_agents/utils/step_limit_manager.pyi +0 -112
- aip_agents/utils/token_usage_helper.pyi +0 -60
- aip_agents_binary-0.6.3.dist-info/RECORD +0 -614
- {aip_agents_binary-0.6.3.dist-info → aip_agents_binary-0.6.5.dist-info}/WHEEL +0 -0
- {aip_agents_binary-0.6.3.dist-info → aip_agents_binary-0.6.5.dist-info}/top_level.txt +0 -0
|
@@ -1,150 +0,0 @@
|
|
|
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 save_interaction(self, *, user_text: str, ai_text: str, user_id: str) -> None:
|
|
110
|
-
"""Save a user-AI interaction as memories.
|
|
111
|
-
|
|
112
|
-
Args:
|
|
113
|
-
user_text: The user's input text.
|
|
114
|
-
ai_text: The AI's response text.
|
|
115
|
-
user_id: User identifier for the memory storage.
|
|
116
|
-
"""
|
|
117
|
-
def save_interaction_async(self, *, user_text: str, ai_text: str, user_id: str) -> Future[Any]:
|
|
118
|
-
"""Schedule save_interaction without blocking the caller.
|
|
119
|
-
|
|
120
|
-
Args:
|
|
121
|
-
user_text: The user's input text to save.
|
|
122
|
-
ai_text: The AI's response text to save.
|
|
123
|
-
user_id: User identifier for the memory storage.
|
|
124
|
-
"""
|
|
125
|
-
def format_hits(self, hits: list[dict[str, Any]], max_items: int = ..., with_tag: bool = True) -> str:
|
|
126
|
-
"""Format memory hits into a readable string.
|
|
127
|
-
|
|
128
|
-
Args:
|
|
129
|
-
hits: List of memory hit dictionaries to format.
|
|
130
|
-
max_items: Maximum number of hits to include in the output.
|
|
131
|
-
with_tag: Whether to wrap the output with memory tags.
|
|
132
|
-
|
|
133
|
-
Returns:
|
|
134
|
-
Formatted string representation of the memory hits.
|
|
135
|
-
"""
|
|
136
|
-
def flush_pending_writes(self, timeout: float | None = None) -> None:
|
|
137
|
-
"""Block until current async writes complete.
|
|
138
|
-
|
|
139
|
-
Args:
|
|
140
|
-
timeout: Maximum time to wait for pending writes to complete.
|
|
141
|
-
"""
|
|
142
|
-
def close(self, *, wait: bool = True, timeout: float | None = None) -> None:
|
|
143
|
-
"""Release background resources and optionally wait for pending saves.
|
|
144
|
-
|
|
145
|
-
Args:
|
|
146
|
-
wait: Whether to wait for pending async operations to complete.
|
|
147
|
-
timeout: Maximum time to wait when wait=True.
|
|
148
|
-
"""
|
|
149
|
-
def __del__(self) -> None:
|
|
150
|
-
"""Clean up resources when the adapter is garbage collected."""
|
|
@@ -1,22 +0,0 @@
|
|
|
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."""
|
aip_agents/memory/base.pyi
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
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
|
-
"""
|
aip_agents/memory/constants.pyi
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
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
|
aip_agents/memory/factory.pyi
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
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
|
-
'''
|
aip_agents/memory/guidance.pyi
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
from aip_agents.memory.base import BaseMemory as BaseMemory, ChatMessage as ChatMessage
|
|
2
|
-
|
|
3
|
-
class SimpleMemory(BaseMemory):
|
|
4
|
-
"""A simple memory implementation that stores messages in a list."""
|
|
5
|
-
messages: list[ChatMessage]
|
|
6
|
-
def __init__(self) -> None:
|
|
7
|
-
"""Initialize the SimpleMemory instance with an empty message list."""
|
|
8
|
-
def add_message(self, message_or_role, content=None) -> None:
|
|
9
|
-
'''Add a message to memory.
|
|
10
|
-
|
|
11
|
-
Supports two calling patterns for backward compatibility:
|
|
12
|
-
1. add_message(ChatMessage) - Adds a ChatMessage object directly
|
|
13
|
-
2. add_message(role, content) - Creates and adds a ChatMessage with the given role and content
|
|
14
|
-
|
|
15
|
-
Args:
|
|
16
|
-
message_or_role: Either a ChatMessage object or a string role (e.g., "user", "assistant").
|
|
17
|
-
content: Optional content string when using the role+content pattern.
|
|
18
|
-
Required when message_or_role is a string role.
|
|
19
|
-
'''
|
|
20
|
-
def get_messages(self) -> list[ChatMessage]:
|
|
21
|
-
"""Get all messages from memory."""
|
|
22
|
-
def clear(self) -> None:
|
|
23
|
-
"""Clear all messages from memory."""
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
from aip_agents.middleware.base import AgentMiddleware as AgentMiddleware, ModelRequest as ModelRequest
|
|
2
|
-
from aip_agents.middleware.manager import MiddlewareManager as MiddlewareManager
|
|
3
|
-
from aip_agents.middleware.todolist import TodoListMiddleware as TodoListMiddleware, TodoStatus as TodoStatus
|
|
4
|
-
|
|
5
|
-
__all__ = ['AgentMiddleware', 'ModelRequest', 'MiddlewareManager', 'TodoListMiddleware', 'TodoStatus']
|
aip_agents/middleware/base.pyi
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
from langchain_core.tools import BaseTool as BaseTool
|
|
2
|
-
from typing import Any, Protocol, TypedDict
|
|
3
|
-
|
|
4
|
-
class ModelRequest(TypedDict, total=False):
|
|
5
|
-
"""Represents parameters for a model invocation that middleware can modify.
|
|
6
|
-
|
|
7
|
-
This TypedDict defines the structure of requests passed to the LLM, allowing
|
|
8
|
-
middleware to add tools or modify prompts before each invocation.
|
|
9
|
-
|
|
10
|
-
Attributes:
|
|
11
|
-
messages: List of messages in the conversation.
|
|
12
|
-
tools: List of tools available to the model.
|
|
13
|
-
system_prompt: System-level instruction for the model.
|
|
14
|
-
"""
|
|
15
|
-
messages: list[Any]
|
|
16
|
-
tools: list[BaseTool]
|
|
17
|
-
system_prompt: str
|
|
18
|
-
|
|
19
|
-
class AgentMiddleware(Protocol):
|
|
20
|
-
"""Protocol defining the interface for composable agent middleware.
|
|
21
|
-
|
|
22
|
-
Middleware components can contribute tools, enhance system prompts, and provide
|
|
23
|
-
lifecycle hooks that execute before, during, and after model invocations.
|
|
24
|
-
|
|
25
|
-
All middleware must implement this protocol to be compatible with MiddlewareManager.
|
|
26
|
-
|
|
27
|
-
Attributes:
|
|
28
|
-
tools: List of tools contributed by this middleware.
|
|
29
|
-
system_prompt_additions: Optional text to append to the agent's system prompt.
|
|
30
|
-
"""
|
|
31
|
-
tools: list[BaseTool]
|
|
32
|
-
system_prompt_additions: str | None
|
|
33
|
-
def before_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
34
|
-
"""Hook executed before each model invocation.
|
|
35
|
-
|
|
36
|
-
Use this hook to prepare state, log context, or perform setup tasks
|
|
37
|
-
before the model is called.
|
|
38
|
-
|
|
39
|
-
Args:
|
|
40
|
-
state: Current agent state containing messages and other context.
|
|
41
|
-
|
|
42
|
-
Returns:
|
|
43
|
-
Dict of state updates to merge into the agent state. Return empty dict
|
|
44
|
-
if no updates are needed.
|
|
45
|
-
"""
|
|
46
|
-
def modify_model_request(self, request: ModelRequest, state: dict[str, Any]) -> ModelRequest:
|
|
47
|
-
"""Hook to modify the model request before invocation.
|
|
48
|
-
|
|
49
|
-
Use this hook to add tools, modify the system prompt, adjust model parameters,
|
|
50
|
-
or change tool selection strategy.
|
|
51
|
-
|
|
52
|
-
Args:
|
|
53
|
-
request: The model request that will be sent to the LLM.
|
|
54
|
-
state: Current agent state for context.
|
|
55
|
-
|
|
56
|
-
Returns:
|
|
57
|
-
Modified ModelRequest. Can return the same request if no changes needed.
|
|
58
|
-
"""
|
|
59
|
-
def after_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
60
|
-
"""Hook executed after each model invocation.
|
|
61
|
-
|
|
62
|
-
Use this hook for cleanup, logging, state updates, or post-processing
|
|
63
|
-
of model outputs.
|
|
64
|
-
|
|
65
|
-
Args:
|
|
66
|
-
state: Current agent state after model invocation.
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
Dict of state updates to merge into the agent state. Return empty dict
|
|
70
|
-
if no updates are needed.
|
|
71
|
-
"""
|
|
72
|
-
async def abefore_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
73
|
-
"""Asynchronous version of before_model hook."""
|
|
74
|
-
async def aafter_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
75
|
-
"""Asynchronous version of after_model hook."""
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
from _typeshed import Incomplete
|
|
2
|
-
from aip_agents.middleware.base import AgentMiddleware as AgentMiddleware, ModelRequest as ModelRequest
|
|
3
|
-
from langchain_core.tools import BaseTool as BaseTool
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
class MiddlewareManager:
|
|
7
|
-
"""Orchestrates multiple middleware components and manages hook execution.
|
|
8
|
-
|
|
9
|
-
The manager collects tools from all middleware, builds enhanced system prompts,
|
|
10
|
-
and executes lifecycle hooks in the correct order (forward for setup, reverse
|
|
11
|
-
for cleanup).
|
|
12
|
-
|
|
13
|
-
Attributes:
|
|
14
|
-
middleware: List of middleware components in registration order.
|
|
15
|
-
"""
|
|
16
|
-
middleware: Incomplete
|
|
17
|
-
def __init__(self, middleware: list[AgentMiddleware]) -> None:
|
|
18
|
-
"""Initialize the middleware manager.
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
middleware: List of middleware components to manage. Order matters:
|
|
22
|
-
hooks execute forward (first to last) for before/modify,
|
|
23
|
-
and reverse (last to first) for after.
|
|
24
|
-
"""
|
|
25
|
-
def get_all_tools(self) -> list[BaseTool]:
|
|
26
|
-
"""Collect tools from all registered middleware.
|
|
27
|
-
|
|
28
|
-
Returns:
|
|
29
|
-
Combined list of all tools contributed by all middleware components.
|
|
30
|
-
Empty list if no middleware or if middleware provide no tools.
|
|
31
|
-
"""
|
|
32
|
-
def build_system_prompt(self, base_instruction: str) -> str:
|
|
33
|
-
"""Build enhanced system prompt by concatenating base instruction with middleware additions.
|
|
34
|
-
|
|
35
|
-
Args:
|
|
36
|
-
base_instruction: The base system prompt for the agent.
|
|
37
|
-
|
|
38
|
-
Returns:
|
|
39
|
-
Enhanced system prompt with all middleware additions appended.
|
|
40
|
-
If no middleware provide additions, returns base_instruction unchanged.
|
|
41
|
-
"""
|
|
42
|
-
def before_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
43
|
-
"""Execute before_model hooks for all middleware in forward order.
|
|
44
|
-
|
|
45
|
-
Hooks run first to last, allowing earlier middleware to prepare state
|
|
46
|
-
for later middleware.
|
|
47
|
-
|
|
48
|
-
Args:
|
|
49
|
-
state: Current agent state.
|
|
50
|
-
|
|
51
|
-
Returns:
|
|
52
|
-
Merged dictionary of all state updates from all middleware.
|
|
53
|
-
Updates are accumulated in order of execution.
|
|
54
|
-
"""
|
|
55
|
-
def modify_model_request(self, request: ModelRequest, state: dict[str, Any]) -> ModelRequest:
|
|
56
|
-
"""Execute modify_model_request hooks for all middleware in forward order.
|
|
57
|
-
|
|
58
|
-
Each middleware receives the request modified by previous middleware,
|
|
59
|
-
allowing them to build on each other's changes.
|
|
60
|
-
|
|
61
|
-
Args:
|
|
62
|
-
request: The model request to be modified.
|
|
63
|
-
state: Current agent state for context.
|
|
64
|
-
|
|
65
|
-
Returns:
|
|
66
|
-
Final modified request after all middleware have processed it.
|
|
67
|
-
"""
|
|
68
|
-
def after_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
69
|
-
"""Execute after_model hooks for all middleware in reverse order.
|
|
70
|
-
|
|
71
|
-
Hooks run last to first (reverse of registration order), allowing
|
|
72
|
-
proper cleanup and unwinding of middleware operations.
|
|
73
|
-
|
|
74
|
-
Args:
|
|
75
|
-
state: Current agent state after model invocation.
|
|
76
|
-
|
|
77
|
-
Returns:
|
|
78
|
-
Merged dictionary of all state updates from all middleware.
|
|
79
|
-
Updates are accumulated in reverse order of execution.
|
|
80
|
-
"""
|
|
81
|
-
async def abefore_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
82
|
-
"""Asynchronously execute before_model hooks for all middleware."""
|
|
83
|
-
async def aafter_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
84
|
-
"""Asynchronously execute after_model hooks for all middleware in reverse order."""
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import threading
|
|
2
|
-
from _typeshed import Incomplete
|
|
3
|
-
from aip_agents.middleware.base import ModelRequest as ModelRequest
|
|
4
|
-
from aip_agents.utils.logger import get_logger as get_logger
|
|
5
|
-
from enum import StrEnum
|
|
6
|
-
from langchain_core.tools import BaseTool
|
|
7
|
-
from pydantic import BaseModel, SkipValidation
|
|
8
|
-
from typing import Any
|
|
9
|
-
|
|
10
|
-
logger: Incomplete
|
|
11
|
-
|
|
12
|
-
class TodoStatus(StrEnum):
|
|
13
|
-
"""Enumeration of possible todo item statuses."""
|
|
14
|
-
PENDING: str
|
|
15
|
-
IN_PROGRESS: str
|
|
16
|
-
COMPLETED: str
|
|
17
|
-
|
|
18
|
-
WRITE_TODOS_SYSTEM_PROMPT: str
|
|
19
|
-
EMPTY_TODO_REMINDER: str
|
|
20
|
-
|
|
21
|
-
class TodoItem(BaseModel):
|
|
22
|
-
"""Represents a single todo item in the agent's plan.
|
|
23
|
-
|
|
24
|
-
Attributes:
|
|
25
|
-
content: Human-readable description of the task.
|
|
26
|
-
active_form: Short imperative phrase for UI display.
|
|
27
|
-
status: Current status of the todo item.
|
|
28
|
-
"""
|
|
29
|
-
content: str
|
|
30
|
-
active_form: str
|
|
31
|
-
status: TodoStatus
|
|
32
|
-
|
|
33
|
-
class TodoList(BaseModel):
|
|
34
|
-
"""Represents a complete todo list for a thread.
|
|
35
|
-
|
|
36
|
-
Attributes:
|
|
37
|
-
items: List of todo items in order.
|
|
38
|
-
"""
|
|
39
|
-
items: list[TodoItem]
|
|
40
|
-
|
|
41
|
-
WRITE_TODOS_TOOL_DESCRIPTION: str
|
|
42
|
-
|
|
43
|
-
class WriteTodosInput(BaseModel):
|
|
44
|
-
"""Input schema for the write_todos tool."""
|
|
45
|
-
todos: TodoList
|
|
46
|
-
|
|
47
|
-
class WriteTodosTool(BaseTool):
|
|
48
|
-
"""LangChain-compatible tool for managing todo lists via TodoListMiddleware."""
|
|
49
|
-
name: str
|
|
50
|
-
description: str
|
|
51
|
-
args_schema: type[BaseModel]
|
|
52
|
-
storage: SkipValidation[dict[str, TodoList]]
|
|
53
|
-
storage_lock: SkipValidation[threading.RLock]
|
|
54
|
-
|
|
55
|
-
class TodoListMiddleware:
|
|
56
|
-
"""Middleware that provides planning capabilities via todo list management.
|
|
57
|
-
|
|
58
|
-
Adds the write_todos tool and enhances the system prompt with planning
|
|
59
|
-
instructions, encouraging agents to break down complex tasks.
|
|
60
|
-
|
|
61
|
-
This middleware maintains thread-isolated todo lists, ensuring that
|
|
62
|
-
different conversation threads don't interfere with each other.
|
|
63
|
-
|
|
64
|
-
Each middleware instance has its own storage, preventing race conditions
|
|
65
|
-
when multiple agent instances are used concurrently.
|
|
66
|
-
"""
|
|
67
|
-
tools: Incomplete
|
|
68
|
-
system_prompt_additions: Incomplete
|
|
69
|
-
def __init__(self) -> None:
|
|
70
|
-
"""Initialize the TodoList middleware with planning tools and instructions."""
|
|
71
|
-
def before_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
72
|
-
"""Hook executed before model invocation.
|
|
73
|
-
|
|
74
|
-
Syncs todos FROM state TO internal storage for LangGraph agents.
|
|
75
|
-
This allows todos to be persisted via LangGraph checkpointer.
|
|
76
|
-
|
|
77
|
-
Args:
|
|
78
|
-
state: Current agent state (may contain 'todos' key).
|
|
79
|
-
|
|
80
|
-
Returns:
|
|
81
|
-
Empty dict (no state updates needed).
|
|
82
|
-
"""
|
|
83
|
-
def modify_model_request(self, request: ModelRequest, state: dict[str, Any]) -> ModelRequest:
|
|
84
|
-
"""Hook to modify model request before invocation.
|
|
85
|
-
|
|
86
|
-
Injects current todo list status into the system prompt, ensuring
|
|
87
|
-
the agent has visibility into its current plan on every turn.
|
|
88
|
-
This follows Claude Code's pattern of injecting system reminders.
|
|
89
|
-
|
|
90
|
-
Args:
|
|
91
|
-
request: The model request.
|
|
92
|
-
state: Current agent state.
|
|
93
|
-
|
|
94
|
-
Returns:
|
|
95
|
-
Modified request with todo status injected into system prompt.
|
|
96
|
-
"""
|
|
97
|
-
def after_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
98
|
-
"""Hook executed after model invocation.
|
|
99
|
-
|
|
100
|
-
Syncs todos FROM internal storage TO state for LangGraph agents.
|
|
101
|
-
This ensures any tool updates are reflected in the checkpointed state.
|
|
102
|
-
|
|
103
|
-
Args:
|
|
104
|
-
state: Current agent state.
|
|
105
|
-
|
|
106
|
-
Returns:
|
|
107
|
-
Dict with 'todos' key containing updated TodoList, or empty dict.
|
|
108
|
-
"""
|
|
109
|
-
def get_todos(self, thread_id: str = 'default') -> TodoList:
|
|
110
|
-
'''Retrieve the todo list for a specific thread.
|
|
111
|
-
|
|
112
|
-
Args:
|
|
113
|
-
thread_id: Thread identifier. Defaults to "default".
|
|
114
|
-
|
|
115
|
-
Returns:
|
|
116
|
-
TodoList for the thread, or empty list if none exists.
|
|
117
|
-
'''
|
|
118
|
-
def clear_todos(self, thread_id: str = 'default') -> None:
|
|
119
|
-
'''Clear the todo list for a specific thread.
|
|
120
|
-
|
|
121
|
-
Useful for cleanup between test runs or conversation resets.
|
|
122
|
-
|
|
123
|
-
Args:
|
|
124
|
-
thread_id: Thread identifier. Defaults to "default".
|
|
125
|
-
'''
|
aip_agents/ptc/__init__.pyi
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from aip_agents.ptc.exceptions import PTCError as PTCError, PTCToolError as PTCToolError
|
|
2
|
-
from aip_agents.ptc.prompt_builder import PromptConfig as PromptConfig, build_ptc_prompt as build_ptc_prompt, compute_ptc_prompt_hash as compute_ptc_prompt_hash
|
|
3
|
-
|
|
4
|
-
__all__ = ['PTCError', 'PTCToolError', 'PTCSandboxConfig', 'PTCSandboxExecutor', 'PromptConfig', 'build_ptc_prompt', 'compute_ptc_prompt_hash', 'build_sandbox_payload', 'wrap_ptc_code']
|
|
5
|
-
|
|
6
|
-
# Names in __all__ with no definition:
|
|
7
|
-
# PTCSandboxConfig
|
|
8
|
-
# PTCSandboxExecutor
|
|
9
|
-
# build_sandbox_payload
|
|
10
|
-
# wrap_ptc_code
|
aip_agents/ptc/doc_gen.pyi
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
from aip_agents.ptc.naming import sanitize_function_name as sanitize_function_name
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
DOC_DESC_LIMIT: int
|
|
5
|
-
DOC_PARAM_DESC_LIMIT: int
|
|
6
|
-
|
|
7
|
-
def json_type_to_display(json_type: Any) -> str:
|
|
8
|
-
"""Convert JSON type to display string.
|
|
9
|
-
|
|
10
|
-
Args:
|
|
11
|
-
json_type: JSON schema type.
|
|
12
|
-
|
|
13
|
-
Returns:
|
|
14
|
-
Human-readable type string.
|
|
15
|
-
"""
|
|
16
|
-
def trim_text(text: str | None, limit: int) -> str:
|
|
17
|
-
"""Trim text to limit with ellipsis if needed.
|
|
18
|
-
|
|
19
|
-
Args:
|
|
20
|
-
text: Text to trim.
|
|
21
|
-
limit: Maximum length before trimming.
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
Trimmed text.
|
|
25
|
-
"""
|
|
26
|
-
def render_tool_doc(func_name: str, signature: str, description: str, schema: dict[str, Any], is_stub: bool = False, example_code: str | None = None, example_heading: str = '## Example') -> str:
|
|
27
|
-
"""Render markdown documentation for a tool.
|
|
28
|
-
|
|
29
|
-
Args:
|
|
30
|
-
func_name: Sanitized function name.
|
|
31
|
-
signature: Full function signature.
|
|
32
|
-
description: Tool description.
|
|
33
|
-
schema: Input schema for parameters.
|
|
34
|
-
is_stub: Whether this is a stub documentation.
|
|
35
|
-
example_code: Optional example code block content (without ```python).
|
|
36
|
-
example_heading: Heading for the example section.
|
|
37
|
-
|
|
38
|
-
Returns:
|
|
39
|
-
Markdown documentation string.
|
|
40
|
-
"""
|