aip-agents-binary 0.5.24__py3-none-any.whl → 0.5.25b1__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__.pyi +19 -0
- aip_agents/a2a/__init__.pyi +3 -0
- aip_agents/a2a/server/__init__.pyi +4 -0
- aip_agents/a2a/server/base_executor.pyi +73 -0
- aip_agents/a2a/server/google_adk_executor.pyi +51 -0
- aip_agents/a2a/server/langflow_executor.pyi +43 -0
- aip_agents/a2a/server/langgraph_executor.pyi +47 -0
- aip_agents/a2a/types.pyi +132 -0
- aip_agents/agent/__init__.pyi +9 -0
- aip_agents/agent/base_agent.pyi +221 -0
- aip_agents/agent/base_langgraph_agent.py +6 -0
- aip_agents/agent/base_langgraph_agent.pyi +232 -0
- aip_agents/agent/google_adk_agent.pyi +141 -0
- aip_agents/agent/google_adk_constants.pyi +3 -0
- aip_agents/agent/hitl/__init__.pyi +6 -0
- aip_agents/agent/hitl/config.pyi +15 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
- aip_agents/agent/hitl/manager.pyi +200 -0
- aip_agents/agent/hitl/models.pyi +3 -0
- aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
- aip_agents/agent/hitl/prompt/base.pyi +24 -0
- aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
- aip_agents/agent/hitl/registry.pyi +101 -0
- aip_agents/agent/interface.pyi +81 -0
- aip_agents/agent/interfaces.pyi +44 -0
- aip_agents/agent/langflow_agent.pyi +133 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
- aip_agents/agent/langgraph_react_agent.py +96 -14
- aip_agents/agent/langgraph_react_agent.pyi +131 -0
- aip_agents/agent/system_instruction_context.pyi +13 -0
- aip_agents/clients/__init__.pyi +4 -0
- aip_agents/clients/langflow/__init__.pyi +4 -0
- aip_agents/clients/langflow/client.pyi +140 -0
- aip_agents/clients/langflow/types.pyi +7 -0
- aip_agents/constants.pyi +7 -0
- aip_agents/examples/__init__.pyi +0 -0
- aip_agents/examples/compare_streaming_client.py +2 -2
- aip_agents/examples/compare_streaming_client.pyi +48 -0
- aip_agents/examples/compare_streaming_server.py +1 -1
- aip_agents/examples/compare_streaming_server.pyi +18 -0
- aip_agents/examples/demo_memory_recall.pyi +58 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -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.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -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.pyi +45 -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.pyi +15 -0
- aip_agents/examples/hello_world_google_adk.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain.pyi +5 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
- aip_agents/examples/hello_world_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
- aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
- aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_pii_logger.pyi +5 -0
- aip_agents/examples/hello_world_sentry.pyi +21 -0
- aip_agents/examples/hello_world_step_limits.pyi +17 -0
- aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
- aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
- aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
- aip_agents/examples/hitl_demo.pyi +67 -0
- aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
- aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
- aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
- aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.py +2 -2
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +1 -1
- aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
- aip_agents/examples/tools/__init__.pyi +9 -0
- aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
- aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
- aip_agents/examples/tools/data_generator_tool.pyi +15 -0
- aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
- aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
- aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
- aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
- aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
- aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
- aip_agents/examples/tools/random_chart_tool.pyi +20 -0
- aip_agents/examples/tools/serper_tool.pyi +16 -0
- aip_agents/examples/tools/stock_tools.pyi +36 -0
- aip_agents/examples/tools/table_generator_tool.pyi +22 -0
- aip_agents/examples/tools/time_tool.pyi +15 -0
- aip_agents/examples/tools/weather_forecast_tool.pyi +14 -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__.pyi +0 -0
- aip_agents/mcp/client/__init__.pyi +5 -0
- aip_agents/mcp/client/base_mcp_client.pyi +148 -0
- aip_agents/mcp/client/connection_manager.pyi +48 -0
- aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
- aip_agents/mcp/client/google_adk/client.pyi +75 -0
- aip_agents/mcp/client/langchain/__init__.pyi +3 -0
- aip_agents/mcp/client/langchain/client.pyi +48 -0
- aip_agents/mcp/client/persistent_session.pyi +113 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.pyi +123 -0
- aip_agents/mcp/utils/__init__.pyi +0 -0
- aip_agents/mcp/utils/config_validator.pyi +82 -0
- aip_agents/memory/__init__.pyi +5 -0
- aip_agents/memory/adapters/__init__.pyi +4 -0
- aip_agents/memory/adapters/base_adapter.pyi +150 -0
- aip_agents/memory/adapters/mem0.pyi +22 -0
- aip_agents/memory/base.pyi +60 -0
- aip_agents/memory/constants.pyi +25 -0
- aip_agents/memory/factory.pyi +24 -0
- aip_agents/memory/guidance.pyi +3 -0
- aip_agents/memory/simple_memory.pyi +23 -0
- aip_agents/middleware/__init__.pyi +5 -0
- aip_agents/middleware/base.py +8 -0
- aip_agents/middleware/base.pyi +75 -0
- aip_agents/middleware/manager.py +22 -0
- aip_agents/middleware/manager.pyi +84 -0
- aip_agents/middleware/todolist.pyi +125 -0
- aip_agents/schema/__init__.pyi +9 -0
- aip_agents/schema/a2a.pyi +40 -0
- aip_agents/schema/agent.pyi +65 -0
- aip_agents/schema/hitl.pyi +89 -0
- aip_agents/schema/langgraph.pyi +28 -0
- aip_agents/schema/model_id.pyi +54 -0
- aip_agents/schema/step_limit.pyi +63 -0
- aip_agents/schema/storage.pyi +21 -0
- aip_agents/sentry/__init__.pyi +3 -0
- aip_agents/sentry/sentry.pyi +48 -0
- aip_agents/storage/__init__.pyi +8 -0
- aip_agents/storage/base.pyi +58 -0
- aip_agents/storage/clients/__init__.pyi +3 -0
- aip_agents/storage/clients/minio_client.pyi +137 -0
- aip_agents/storage/config.pyi +29 -0
- aip_agents/storage/providers/__init__.pyi +5 -0
- aip_agents/storage/providers/base.pyi +88 -0
- aip_agents/storage/providers/memory.pyi +79 -0
- aip_agents/storage/providers/object_storage.pyi +98 -0
- aip_agents/tools/__init__.pyi +9 -0
- aip_agents/tools/browser_use/__init__.pyi +14 -0
- aip_agents/tools/browser_use/action_parser.pyi +18 -0
- aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
- aip_agents/tools/browser_use/llm_config.pyi +52 -0
- aip_agents/tools/browser_use/minio_storage.pyi +109 -0
- aip_agents/tools/browser_use/schemas.pyi +32 -0
- aip_agents/tools/browser_use/session.pyi +4 -0
- aip_agents/tools/browser_use/session_errors.pyi +53 -0
- aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
- aip_agents/tools/browser_use/streaming.pyi +81 -0
- aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
- aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
- aip_agents/tools/browser_use/types.pyi +45 -0
- aip_agents/tools/code_sandbox/__init__.pyi +3 -0
- aip_agents/tools/code_sandbox/constant.pyi +4 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
- aip_agents/tools/constants.pyi +138 -0
- aip_agents/tools/document_loader/__init__.pyi +7 -0
- aip_agents/tools/document_loader/base_reader.pyi +75 -0
- aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
- aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
- aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
- aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
- aip_agents/tools/gl_connector/__init__.pyi +3 -0
- aip_agents/tools/gl_connector/tool.pyi +74 -0
- aip_agents/tools/gl_connector_tools.pyi +39 -0
- aip_agents/tools/memory_search/__init__.pyi +5 -0
- aip_agents/tools/memory_search/base.pyi +69 -0
- aip_agents/tools/memory_search/mem0.pyi +19 -0
- aip_agents/tools/memory_search/schema.pyi +15 -0
- aip_agents/tools/memory_search_tool.pyi +3 -0
- aip_agents/tools/time_tool.pyi +16 -0
- aip_agents/tools/tool_config_injector.pyi +26 -0
- aip_agents/tools/web_search/__init__.pyi +3 -0
- aip_agents/tools/web_search/serper_tool.pyi +19 -0
- aip_agents/types/__init__.pyi +36 -0
- aip_agents/types/a2a_events.pyi +3 -0
- aip_agents/utils/__init__.pyi +11 -0
- aip_agents/utils/a2a_connector.pyi +146 -0
- aip_agents/utils/artifact_helpers.pyi +203 -0
- aip_agents/utils/constants.pyi +10 -0
- aip_agents/utils/datetime/__init__.pyi +4 -0
- aip_agents/utils/datetime/normalization.pyi +95 -0
- aip_agents/utils/datetime/timezone.pyi +48 -0
- aip_agents/utils/env_loader.pyi +10 -0
- aip_agents/utils/event_handler_registry.pyi +23 -0
- aip_agents/utils/file_prompt_utils.pyi +21 -0
- aip_agents/utils/final_response_builder.pyi +34 -0
- aip_agents/utils/formatter_llm_client.pyi +71 -0
- aip_agents/utils/langgraph/__init__.pyi +3 -0
- aip_agents/utils/langgraph/converter.pyi +49 -0
- aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
- aip_agents/utils/logger.pyi +60 -0
- aip_agents/utils/metadata/__init__.pyi +5 -0
- aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
- aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
- aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
- aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
- aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
- aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
- aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
- aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
- aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
- aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
- aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
- aip_agents/utils/metadata_helper.pyi +117 -0
- aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
- aip_agents/utils/pii/__init__.pyi +5 -0
- aip_agents/utils/pii/pii_handler.pyi +96 -0
- aip_agents/utils/pii/pii_helper.pyi +78 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
- aip_agents/utils/reference_helper.pyi +81 -0
- aip_agents/utils/sse_chunk_transformer.pyi +166 -0
- aip_agents/utils/step_limit_manager.pyi +112 -0
- aip_agents/utils/token_usage_helper.pyi +60 -0
- {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/METADATA +49 -49
- aip_agents_binary-0.5.25b1.dist-info/RECORD +566 -0
- {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/WHEEL +1 -1
- aip_agents_binary-0.5.24.dist-info/RECORD +0 -280
- {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.schema.a2a import A2AEvent
|
|
3
|
+
from collections.abc import AsyncGenerator
|
|
4
|
+
from enum import StrEnum
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
__all__ = ['SSEChunkTransformer', 'TaskState', 'ChunkStatus', 'ChunkReason', 'ChunkFieldKeys']
|
|
8
|
+
|
|
9
|
+
class TaskState(StrEnum):
|
|
10
|
+
"""Task state values for SSE chunks."""
|
|
11
|
+
WORKING: str
|
|
12
|
+
COMPLETED: str
|
|
13
|
+
FAILED: str
|
|
14
|
+
|
|
15
|
+
class ChunkStatus(StrEnum):
|
|
16
|
+
"""Status values for SSE chunks."""
|
|
17
|
+
SUCCESS: str
|
|
18
|
+
ERROR: str
|
|
19
|
+
|
|
20
|
+
class ChunkReason(StrEnum):
|
|
21
|
+
"""Reason codes for special chunk states."""
|
|
22
|
+
EMPTY_PAYLOAD: str
|
|
23
|
+
|
|
24
|
+
class ChunkFieldKeys(StrEnum):
|
|
25
|
+
"""Field name constants for SSE chunk structure."""
|
|
26
|
+
STATUS: str
|
|
27
|
+
TASK_STATE: str
|
|
28
|
+
CONTENT: str
|
|
29
|
+
EVENT_TYPE: str
|
|
30
|
+
FINAL: str
|
|
31
|
+
METADATA: str
|
|
32
|
+
TIMESTAMP: str
|
|
33
|
+
TASK_ID: str
|
|
34
|
+
CONTEXT_ID: str
|
|
35
|
+
ARTIFACTS: str
|
|
36
|
+
REASON: str
|
|
37
|
+
|
|
38
|
+
class SSEChunkTransformer:
|
|
39
|
+
'''Transforms A2AEvent stream to SSE-compatible output.
|
|
40
|
+
|
|
41
|
+
This class converts events from arun_a2a_stream into the normalized dict format
|
|
42
|
+
matching A2AConnector.astream_to_agent output.
|
|
43
|
+
|
|
44
|
+
Lifecycle:
|
|
45
|
+
Single-stream instance. Must NOT be reused across concurrent streams.
|
|
46
|
+
Each arun_sse_stream call creates a fresh instance.
|
|
47
|
+
|
|
48
|
+
Attributes:
|
|
49
|
+
task_id: Optional task identifier for the stream.
|
|
50
|
+
context_id: Optional context identifier for the stream.
|
|
51
|
+
|
|
52
|
+
Example:
|
|
53
|
+
>>> transformer = SSEChunkTransformer(task_id="task-123")
|
|
54
|
+
>>> async for chunk in transformer.transform_stream(agent.arun_a2a_stream("query")):
|
|
55
|
+
... print(chunk)
|
|
56
|
+
'''
|
|
57
|
+
task_id: Incomplete
|
|
58
|
+
context_id: Incomplete
|
|
59
|
+
def __init__(self, task_id: str | None = None, context_id: str | None = None, pii_mapping: dict[str, str] | None = None) -> None:
|
|
60
|
+
"""Initialize the transformer with optional task and context IDs.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
task_id: Optional task identifier for the stream.
|
|
64
|
+
context_id: Optional context identifier for the stream.
|
|
65
|
+
pii_mapping: Optional PII mapping to inject into each chunk's metadata.
|
|
66
|
+
"""
|
|
67
|
+
@staticmethod
|
|
68
|
+
def normalize_metadata_enums(data: Any) -> Any:
|
|
69
|
+
"""Recursively convert enum keys/values to their string values.
|
|
70
|
+
|
|
71
|
+
This is a pure normalization utility that converts any enum instances
|
|
72
|
+
(MetadataFieldKeys, Kind, Status, etc.) to their .value strings.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
data: Dict, list, or value that may contain enum keys/values.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Normalized data with all enums converted to their .value strings.
|
|
79
|
+
"""
|
|
80
|
+
@staticmethod
|
|
81
|
+
def normalize_event_type_value(event_type: Any) -> str | None:
|
|
82
|
+
"""Convert A2AStreamEventType enum to string.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
event_type: Event type (enum, string, or None).
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
String value of the event type, or None if invalid.
|
|
89
|
+
"""
|
|
90
|
+
@staticmethod
|
|
91
|
+
def create_artifact_hash(artifact: dict[str, Any]) -> str:
|
|
92
|
+
"""Create a stable hash for artifact deduplication.
|
|
93
|
+
|
|
94
|
+
Uses name, content_type, mime_type, and file_data for hashing,
|
|
95
|
+
excluding artifact_id which may be randomly generated.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
artifact: Artifact dict with name, content_type, mime_type, and optionally file_data.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
SHA256 hexdigest hash string for deduplication.
|
|
102
|
+
"""
|
|
103
|
+
@staticmethod
|
|
104
|
+
def extract_tool_outputs(tool_calls: list[dict[str, Any]]) -> list[str]:
|
|
105
|
+
"""Extract human-readable output strings from tool calls.
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
tool_calls: List of tool call dictionaries.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
List of human-readable output strings.
|
|
112
|
+
"""
|
|
113
|
+
@staticmethod
|
|
114
|
+
def format_tool_output(output: Any, tool_name: str) -> str:
|
|
115
|
+
"""Format a single tool output for display.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
output: The tool output to format.
|
|
119
|
+
tool_name: The name of the tool.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
The formatted output string.
|
|
123
|
+
"""
|
|
124
|
+
@staticmethod
|
|
125
|
+
def apply_hitl_content_override(content: str | None, event_type_str: str, metadata: dict[str, Any]) -> str | None:
|
|
126
|
+
"""Apply HITL content override when HITL is active and tool results are available.
|
|
127
|
+
|
|
128
|
+
This method overrides the content with human-readable tool output when HITL
|
|
129
|
+
is active, matching A2AConnector behavior.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
content: The original content/status message.
|
|
133
|
+
event_type_str: The type of event being processed (normalized string).
|
|
134
|
+
metadata: The metadata dictionary containing tool_info and hitl flag.
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
The original content or human-readable tool output if HITL is active.
|
|
138
|
+
"""
|
|
139
|
+
def transform_event(self, event: A2AEvent) -> dict[str, Any]:
|
|
140
|
+
"""Transform a single A2AEvent to SSE chunk format.
|
|
141
|
+
|
|
142
|
+
Converts the A2AEvent structure to the normalized SSE chunk format,
|
|
143
|
+
relocating fields like tool_info and thinking_and_activity_info into
|
|
144
|
+
metadata, and normalizing enum values to strings.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
event: Single A2AEvent dict from arun_a2a_stream.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
SSEChunk dict with normalized structure.
|
|
151
|
+
"""
|
|
152
|
+
async def transform_stream(self, stream: AsyncGenerator[A2AEvent, None]) -> AsyncGenerator[dict[str, Any], None]:
|
|
153
|
+
"""Transform A2AEvent stream to SSE-compatible chunks.
|
|
154
|
+
|
|
155
|
+
Wraps the input stream and transforms each event, handling artifact
|
|
156
|
+
deduplication and time tracking across the stream.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
stream: Async generator yielding A2AEvent dicts.
|
|
160
|
+
|
|
161
|
+
Yields:
|
|
162
|
+
SSEChunk dicts with normalized structure.
|
|
163
|
+
|
|
164
|
+
Raises:
|
|
165
|
+
Exceptions from underlying stream propagate to caller.
|
|
166
|
+
"""
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.schema.step_limit import MaxDelegationDepthExceededError as MaxDelegationDepthExceededError, MaxStepsExceededError as MaxStepsExceededError, StepLimitConfig as StepLimitConfig, StepLimitErrorResponse as StepLimitErrorResponse, StepLimitErrorType as StepLimitErrorType
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class StepExecutionContext:
|
|
8
|
+
"""Runtime context for tracking step execution and delegation depth.
|
|
9
|
+
|
|
10
|
+
Attributes:
|
|
11
|
+
current_step: Current step number (0-indexed).
|
|
12
|
+
delegation_depth: Current depth in delegation chain (0 for root agent).
|
|
13
|
+
remaining_step_budget: Steps remaining before limit is hit.
|
|
14
|
+
delegation_chain: List of agent names in the delegation chain.
|
|
15
|
+
"""
|
|
16
|
+
current_step: int = ...
|
|
17
|
+
delegation_depth: int = ...
|
|
18
|
+
remaining_step_budget: int | None = ...
|
|
19
|
+
delegation_chain: list[str] = field(default_factory=list)
|
|
20
|
+
|
|
21
|
+
class StepLimitManager:
|
|
22
|
+
"""Manages step and delegation limit enforcement during agent execution.
|
|
23
|
+
|
|
24
|
+
This manager integrates with LangGraph's existing step mechanisms and adds
|
|
25
|
+
delegation depth tracking and budget propagation.
|
|
26
|
+
|
|
27
|
+
Attributes:
|
|
28
|
+
config: Step limit configuration.
|
|
29
|
+
context: Current execution context.
|
|
30
|
+
"""
|
|
31
|
+
config: Incomplete
|
|
32
|
+
context: Incomplete
|
|
33
|
+
def __init__(self, config: StepLimitConfig | None = None, initial_delegation_depth: int = 0, parent_step_budget: int | None = None) -> None:
|
|
34
|
+
"""Initialize step limit manager.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
config: Optional step limit configuration. Uses defaults if None.
|
|
38
|
+
initial_delegation_depth: Starting delegation depth (from parent).
|
|
39
|
+
parent_step_budget: Remaining step budget inherited from parent agent.
|
|
40
|
+
"""
|
|
41
|
+
def check_step_limit(self, agent_name: str = 'agent', count: int = 1) -> None:
|
|
42
|
+
"""Check if taking 'count' steps would exceed limit.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
agent_name: Name of the agent to identify in error message.
|
|
46
|
+
count: Number of steps to check (useful for parallel tool batches).
|
|
47
|
+
|
|
48
|
+
Raises:
|
|
49
|
+
MaxStepsExceededError: If max_steps limit is exceeded.
|
|
50
|
+
"""
|
|
51
|
+
def check_delegation_depth(self, target_agent_name: str) -> None:
|
|
52
|
+
"""Check if delegation to target agent would exceed depth limit.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
target_agent_name: Name of the agent to delegate to.
|
|
56
|
+
|
|
57
|
+
Raises:
|
|
58
|
+
MaxDelegationDepthExceededError: If delegation depth limit exceeded.
|
|
59
|
+
"""
|
|
60
|
+
def increment_step(self, count: int = 1) -> None:
|
|
61
|
+
"""Increment step counter and update remaining budget.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
count: Number of steps to consume (defaults to 1).
|
|
65
|
+
"""
|
|
66
|
+
def get_child_budget(self, child_max_steps: int | None = None) -> int:
|
|
67
|
+
"""Calculate step budget to allocate to child agent.
|
|
68
|
+
|
|
69
|
+
Algorithm:
|
|
70
|
+
1. If remaining_step_budget is None (root with no limit), use config.max_steps - 1
|
|
71
|
+
2. If remaining_step_budget <= 1, return 0 (no budget left for child)
|
|
72
|
+
3. Calculate child_budget = remaining_step_budget - 1 (reserve 1 for parent)
|
|
73
|
+
4. If child has own max_steps config, return min(child_budget, child.max_steps)
|
|
74
|
+
5. Otherwise return child_budget
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
child_max_steps: Optional child agent's own max_steps limit.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
Step budget for child agent, accounting for parent's continuation.
|
|
81
|
+
Returns 0 if no budget available for child.
|
|
82
|
+
|
|
83
|
+
Edge Cases:
|
|
84
|
+
- remaining=1: Returns 0 (parent needs the last step)
|
|
85
|
+
- remaining=None: Uses config.max_steps - 1
|
|
86
|
+
- child has own limit: Returns min(calculated_budget, child_limit)
|
|
87
|
+
"""
|
|
88
|
+
def add_to_delegation_chain(self, agent_name: str) -> None:
|
|
89
|
+
"""Add agent to delegation chain for tracking.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
agent_name: Name of the agent being delegated to.
|
|
93
|
+
"""
|
|
94
|
+
@classmethod
|
|
95
|
+
def from_state(cls, state: dict[str, Any], config: StepLimitConfig | None = None) -> StepLimitManager:
|
|
96
|
+
"""Create manager from LangGraph state.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
state: LangGraph agent state containing remaining_steps, etc.
|
|
100
|
+
config: Optional step limit configuration.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Initialized step limit manager.
|
|
104
|
+
"""
|
|
105
|
+
def set_context(self) -> None:
|
|
106
|
+
"""Set context variables for downstream consumption (e.g. by delegation tools)."""
|
|
107
|
+
def to_state_update(self) -> dict[str, Any]:
|
|
108
|
+
"""Convert current context to LangGraph state update.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
Dictionary of state fields to update.
|
|
112
|
+
"""
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from langchain_core.messages.ai import AIMessage, UsageMetadata
|
|
2
|
+
from langchain_core.messages.tool import ToolMessage as ToolMessage
|
|
3
|
+
from langgraph.types import Command
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
USAGE_METADATA_KEY: str
|
|
7
|
+
TOTAL_USAGE_KEY: str
|
|
8
|
+
STEP_USAGE_KEY: str
|
|
9
|
+
|
|
10
|
+
def add_usage_metadata(cur_accumulated_token_usage: UsageMetadata | None, new_token_usage: UsageMetadata | None) -> UsageMetadata | None:
|
|
11
|
+
"""Reducer function to accumulate UsageMetadata across agent runs.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
cur_accumulated_token_usage: The current accumulated token usage metadata.
|
|
15
|
+
new_token_usage: New token usage metadata to add.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
Accumulated usage metadata or None if both inputs are None.
|
|
19
|
+
"""
|
|
20
|
+
def extract_and_update_token_usage_from_ai_message(ai_message: AIMessage) -> dict[str, Any]:
|
|
21
|
+
"""Extract token usage from AI message and prepare state update.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
ai_message: The AI message containing usage metadata.
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
Dictionary with accumulated_usage_metadata update if usage metadata is available.
|
|
28
|
+
"""
|
|
29
|
+
def extract_token_usage_from_tool_output(tool_output: Any) -> UsageMetadata | None:
|
|
30
|
+
"""Extract token usage from various tool output formats.
|
|
31
|
+
|
|
32
|
+
Supports multiple tool output formats:
|
|
33
|
+
1. Dictionary with 'usage_metadata' field
|
|
34
|
+
2. Command with 'usage_metadata' attribute
|
|
35
|
+
3. Any object with 'usage_metadata' attribute
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
tool_output: The output from a tool execution.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
UsageMetadata if found, None otherwise.
|
|
42
|
+
"""
|
|
43
|
+
def extract_token_usage_from_command(command: Command) -> UsageMetadata | None:
|
|
44
|
+
"""Extract token usage from Command object.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
command: The Command object to extract token usage from.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
UsageMetadata if found, None otherwise.
|
|
51
|
+
"""
|
|
52
|
+
def extract_token_usage_from_agent_response(agent_response: dict[str, Any]) -> UsageMetadata | None:
|
|
53
|
+
"""Extract accumulated token usage from agent response.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
agent_response: The agent response to extract token usage from.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
UsageMetadata if found, None otherwise.
|
|
60
|
+
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aip-agents-binary
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.25b1
|
|
4
4
|
Summary: A library for managing agents in Gen AI applications.
|
|
5
5
|
Author-email: Raymond Christopher <raymond.christopher@gdplabs.id>
|
|
6
6
|
Requires-Python: <3.13,>=3.11
|
|
@@ -27,10 +27,22 @@ Requires-Dist: pydantic<3.0.0,>=2.11.7
|
|
|
27
27
|
Requires-Dist: python-dotenv<2.0.0,>=1.1.0
|
|
28
28
|
Requires-Dist: requests<3.0.0,>=2.32.4
|
|
29
29
|
Requires-Dist: uvicorn<0.35.0,>=0.34.3
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: coverage<8.0.0,>=7.4.4; extra == "dev"
|
|
32
|
+
Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest<9.0.0,>=8.1.1; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-asyncio<0.24.0,>=0.23.6; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov<6.0.0,>=5.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff<0.7.0,>=0.6.7; extra == "dev"
|
|
39
|
+
Requires-Dist: pillow<12.0.0,>=11.3.0; extra == "dev"
|
|
30
40
|
Provides-Extra: memory
|
|
31
41
|
Requires-Dist: gllm-memory-binary[mem0ai]<0.2.0,>=0.1.1; extra == "memory"
|
|
32
42
|
Provides-Extra: privacy
|
|
33
43
|
Requires-Dist: gllm-privacy-binary<0.5.0,>=0.4.12; extra == "privacy"
|
|
44
|
+
Provides-Extra: guardrails
|
|
45
|
+
Requires-Dist: gllm-guardrail-binary<0.1.0,>=0.0.1; extra == "guardrails"
|
|
34
46
|
Provides-Extra: gl-connector
|
|
35
47
|
Requires-Dist: bosa-connectors-binary<0.4.0,>=0.3.1; extra == "gl-connector"
|
|
36
48
|
Provides-Extra: local
|
|
@@ -43,16 +55,6 @@ Requires-Dist: unidecode<2.0.0,>=1.3.0; extra == "local"
|
|
|
43
55
|
Requires-Dist: gllm-docproc-binary[docx,pdf,xlsx]<0.8.0,>=0.7.21; extra == "local"
|
|
44
56
|
Requires-Dist: gllm-multimodal-binary==0.2.0.post1; extra == "local"
|
|
45
57
|
Requires-Dist: bosa-connectors-binary<0.4.0,>=0.3.1; extra == "local"
|
|
46
|
-
Provides-Extra: dev
|
|
47
|
-
Requires-Dist: coverage<8.0.0,>=7.4.4; extra == "dev"
|
|
48
|
-
Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev"
|
|
49
|
-
Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
|
|
50
|
-
Requires-Dist: pytest<9.0.0,>=8.1.1; extra == "dev"
|
|
51
|
-
Requires-Dist: pytest-asyncio<0.24.0,>=0.23.6; extra == "dev"
|
|
52
|
-
Requires-Dist: pytest-cov<6.0.0,>=5.0.0; extra == "dev"
|
|
53
|
-
Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
|
|
54
|
-
Requires-Dist: ruff<0.7.0,>=0.6.7; extra == "dev"
|
|
55
|
-
Requires-Dist: pillow<12.0.0,>=11.3.0; extra == "dev"
|
|
56
58
|
|
|
57
59
|
# AIP Agents
|
|
58
60
|
|
|
@@ -71,13 +73,13 @@ You can use `aip-agents` directly for local execution, or let `glaip-sdk` manage
|
|
|
71
73
|
### Prerequisites
|
|
72
74
|
- Python 3.11 - 3.12 - [Install here](https://www.python.org/downloads/)
|
|
73
75
|
- Pip (if using Pip) - [Install here](https://pip.pypa.io/en/stable/installation/)
|
|
74
|
-
-
|
|
76
|
+
- uv (if using uv) - [Install here](https://docs.astral.sh/uv/)
|
|
75
77
|
- Git (if using Git) - [Install here](https://git-scm.com/downloads)
|
|
76
78
|
- For git installation:
|
|
77
79
|
- Access to the [GDP Labs SDK repository](https://github.com/GDP-ADMIN/glaip-sdk)
|
|
78
80
|
|
|
79
81
|
### 1. Installation from the GDP Labs registry
|
|
80
|
-
This package is published to the internal GDP Labs registry. Ensure your pip
|
|
82
|
+
This package is published to the internal GDP Labs registry. Ensure your uv/pip config includes the registry:
|
|
81
83
|
`https://glsdk.gdplabs.id/gen-ai-internal/simple/`.
|
|
82
84
|
|
|
83
85
|
#### Using pip
|
|
@@ -85,15 +87,15 @@ This package is published to the internal GDP Labs registry. Ensure your pip/Poe
|
|
|
85
87
|
pip install aip-agents
|
|
86
88
|
```
|
|
87
89
|
|
|
88
|
-
#### Using
|
|
90
|
+
#### Using uv
|
|
89
91
|
```bash
|
|
90
|
-
|
|
92
|
+
uv pip install aip-agents
|
|
91
93
|
```
|
|
92
94
|
|
|
93
95
|
### 2. Development Installation (Git)
|
|
94
96
|
For development purposes, you can install directly from the Git repository:
|
|
95
97
|
```bash
|
|
96
|
-
|
|
98
|
+
uv pip install "git+ssh://git@github.com/GDP-ADMIN/glaip-sdk.git#subdirectory=python/aip-agents"
|
|
97
99
|
```
|
|
98
100
|
|
|
99
101
|
### 3. Recommended: install via glaip-sdk for local mode
|
|
@@ -110,21 +112,19 @@ pip install "aip-agents[privacy]"
|
|
|
110
112
|
|
|
111
113
|
## Managing Dependencies
|
|
112
114
|
1. Go to the `aip-agents` module root, e.g. `cd python/aip-agents`.
|
|
113
|
-
2. Run `
|
|
114
|
-
3. Run `
|
|
115
|
-
4. Run `poetry update` if you change any dependency versions in `pyproject.toml`.
|
|
115
|
+
2. Run `uv sync --extra dev` to install the `aip-agents` requirements.
|
|
116
|
+
3. Run `uv lock` if you change any dependency versions in `pyproject.toml`.
|
|
116
117
|
|
|
117
118
|
## Contributing
|
|
118
119
|
Please refer to this [Python Style Guide](https://docs.google.com/document/d/1uRggCrHnVfDPBnG641FyQBwUwLoFw0kTzNqRm92vUwM/edit?usp=sharing)
|
|
119
120
|
to get information about code style, documentation standard, and SCA that you need to use when contributing to this project
|
|
120
121
|
|
|
121
122
|
1. Activate `pre-commit` hooks using `pre-commit install`
|
|
122
|
-
2. Run `
|
|
123
|
-
3. Run `
|
|
124
|
-
4.
|
|
125
|
-
5. Try running the unit test to see if it's working:
|
|
123
|
+
2. Run `uv sync --extra dev` to install the `aip-agents` requirements.
|
|
124
|
+
3. Run `which python` to get the path to be referenced at Visual Studio Code interpreter path (`Ctrl`+`Shift`+`P` or `Cmd`+`Shift`+`P`)
|
|
125
|
+
4. Try running the unit test to see if it's working:
|
|
126
126
|
```bash
|
|
127
|
-
|
|
127
|
+
uv run pytest -s tests/unit_tests/
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
## Hello World Examples
|
|
@@ -225,57 +225,57 @@ For STDIO, SSE, and HTTP transports using local servers, open a terminal in the
|
|
|
225
225
|
- For STDIO:
|
|
226
226
|
|
|
227
227
|
```bash
|
|
228
|
-
|
|
228
|
+
uv run python aip_agents/examples/mcp_servers/mcp_server_stdio.py
|
|
229
229
|
```
|
|
230
230
|
|
|
231
231
|
- For SSE:
|
|
232
232
|
|
|
233
233
|
```bash
|
|
234
|
-
|
|
234
|
+
uv run python aip_agents/examples/mcp_servers/mcp_server_sse.py
|
|
235
235
|
```
|
|
236
236
|
|
|
237
237
|
- For HTTP:
|
|
238
238
|
|
|
239
239
|
```bash
|
|
240
|
-
|
|
240
|
+
uv run python aip_agents/examples/mcp_servers/mcp_server_http.py
|
|
241
241
|
```
|
|
242
242
|
|
|
243
243
|
Note: Start the appropriate server before running the client examples for that transport.
|
|
244
244
|
|
|
245
245
|
### Running Examples
|
|
246
246
|
|
|
247
|
-
All examples are run from the library root using `
|
|
247
|
+
All examples are run from the library root using `uv run python aip_agents/examples/<file>.py`. Examples support OpenAI for LangGraph/LangChain and Google ADK where specified.
|
|
248
248
|
|
|
249
249
|
#### LangChain Examples
|
|
250
250
|
|
|
251
251
|
##### STDIO Transport
|
|
252
252
|
- Non-Streaming:
|
|
253
253
|
```bash
|
|
254
|
-
|
|
254
|
+
uv run python aip_agents/examples/hello_world_langchain_mcp_stdio.py
|
|
255
255
|
```
|
|
256
256
|
- Streaming:
|
|
257
257
|
```bash
|
|
258
|
-
|
|
258
|
+
uv run python aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py
|
|
259
259
|
```
|
|
260
260
|
|
|
261
261
|
##### SSE Transport
|
|
262
262
|
- Non-Streaming:
|
|
263
263
|
```bash
|
|
264
|
-
|
|
264
|
+
uv run python aip_agents/examples/hello_world_langchain_mcp_sse.py
|
|
265
265
|
```
|
|
266
266
|
- Streaming:
|
|
267
267
|
```bash
|
|
268
|
-
|
|
268
|
+
uv run python aip_agents/examples/hello_world_langchain_mcp_sse_stream.py
|
|
269
269
|
```
|
|
270
270
|
|
|
271
271
|
##### HTTP Transport
|
|
272
272
|
- Non-Streaming:
|
|
273
273
|
```bash
|
|
274
|
-
|
|
274
|
+
uv run python aip_agents/examples/hello_world_langchain_mcp_http.py
|
|
275
275
|
```
|
|
276
276
|
- Streaming:
|
|
277
277
|
```bash
|
|
278
|
-
|
|
278
|
+
uv run python aip_agents/examples/hello_world_langchain_mcp_http_stream.py
|
|
279
279
|
```
|
|
280
280
|
|
|
281
281
|
#### Google ADK Examples
|
|
@@ -283,31 +283,31 @@ poetry run python aip_agents/examples/hello_world_langchain_mcp_http_stream.py
|
|
|
283
283
|
##### STDIO Transport
|
|
284
284
|
- Non-Streaming:
|
|
285
285
|
```bash
|
|
286
|
-
|
|
286
|
+
uv run python aip_agents/examples/hello_world_google_adk_mcp_stdio.py
|
|
287
287
|
```
|
|
288
288
|
- Streaming:
|
|
289
289
|
```bash
|
|
290
|
-
|
|
290
|
+
uv run python aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py
|
|
291
291
|
```
|
|
292
292
|
|
|
293
293
|
##### SSE Transport
|
|
294
294
|
- Non-Streaming:
|
|
295
295
|
```bash
|
|
296
|
-
|
|
296
|
+
uv run python aip_agents/examples/hello_world_google_adk_mcp_sse.py
|
|
297
297
|
```
|
|
298
298
|
- Streaming:
|
|
299
299
|
```bash
|
|
300
|
-
|
|
300
|
+
uv run python aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py
|
|
301
301
|
```
|
|
302
302
|
|
|
303
303
|
##### HTTP Transport
|
|
304
304
|
- Non-Streaming:
|
|
305
305
|
```bash
|
|
306
|
-
|
|
306
|
+
uv run python aip_agents/examples/hello_world_google_adk_mcp_http.py
|
|
307
307
|
```
|
|
308
308
|
- Streaming:
|
|
309
309
|
```bash
|
|
310
|
-
|
|
310
|
+
uv run python aip_agents/examples/hello_world_google_adk_mcp_http_stream.py
|
|
311
311
|
```
|
|
312
312
|
|
|
313
313
|
#### LangGraph Examples (OpenAI)
|
|
@@ -315,31 +315,31 @@ poetry run python aip_agents/examples/hello_world_google_adk_mcp_http_stream.py
|
|
|
315
315
|
##### STDIO Transport
|
|
316
316
|
- Non-Streaming:
|
|
317
317
|
```bash
|
|
318
|
-
|
|
318
|
+
uv run python aip_agents/examples/hello_world_langgraph_mcp_stdio.py
|
|
319
319
|
```
|
|
320
320
|
- Streaming:
|
|
321
321
|
```bash
|
|
322
|
-
|
|
322
|
+
uv run python aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py
|
|
323
323
|
```
|
|
324
324
|
|
|
325
325
|
##### SSE Transport
|
|
326
326
|
- Non-Streaming:
|
|
327
327
|
```bash
|
|
328
|
-
|
|
328
|
+
uv run python aip_agents/examples/hello_world_langgraph_mcp_sse.py
|
|
329
329
|
```
|
|
330
330
|
- Streaming:
|
|
331
331
|
```bash
|
|
332
|
-
|
|
332
|
+
uv run python aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py
|
|
333
333
|
```
|
|
334
334
|
|
|
335
335
|
##### HTTP Transport
|
|
336
336
|
- Non-Streaming:
|
|
337
337
|
```bash
|
|
338
|
-
|
|
338
|
+
uv run python aip_agents/examples/hello_world_langgraph_mcp_http.py
|
|
339
339
|
```
|
|
340
340
|
- Streaming:
|
|
341
341
|
```bash
|
|
342
|
-
|
|
342
|
+
uv run python aip_agents/examples/hello_world_langgraph_mcp_http_stream.py
|
|
343
343
|
```
|
|
344
344
|
|
|
345
345
|
### Multi-Server Example
|
|
@@ -355,13 +355,13 @@ npx @playwright/mcp@latest --headless --port 8931
|
|
|
355
355
|
2. In another terminal, start the Name Generator SSE server:
|
|
356
356
|
|
|
357
357
|
```bash
|
|
358
|
-
|
|
358
|
+
uv run python aip_agents/examples/mcp_servers/mcp_name.py
|
|
359
359
|
```
|
|
360
360
|
|
|
361
361
|
3. Run the multi-server client example:
|
|
362
362
|
|
|
363
363
|
```bash
|
|
364
|
-
|
|
364
|
+
uv run python aip_agents/examples/hello_world_langchain_mcp_multi_server.py
|
|
365
365
|
```
|
|
366
366
|
**3. Running Individual A2A Examples:**
|
|
367
367
|
|
|
@@ -477,7 +477,7 @@ The library supports Mem0 as a memory backend for long-term conversation recall.
|
|
|
477
477
|
Use the coordinator example with memory enabled:
|
|
478
478
|
|
|
479
479
|
```bash
|
|
480
|
-
|
|
480
|
+
uv run python aip_agents/examples/hello_world_a2a_mem0_coordinator_server.py
|
|
481
481
|
```
|
|
482
482
|
|
|
483
483
|
In client:
|