aip-agents-binary 0.6.0__py3-none-any.whl → 0.6.2__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/langgraph_react_agent.py +194 -2
- aip_agents/examples/hello_world_ptc.py +49 -0
- aip_agents/ptc/__init__.py +48 -0
- aip_agents/ptc/doc_gen.py +122 -0
- aip_agents/ptc/exceptions.py +39 -0
- aip_agents/ptc/executor.py +143 -0
- aip_agents/ptc/mcp/__init__.py +45 -0
- aip_agents/ptc/mcp/sandbox_bridge.py +668 -0
- aip_agents/ptc/mcp/templates/__init__.py +1 -0
- aip_agents/ptc/mcp/templates/mcp_client.py.template +239 -0
- aip_agents/ptc/naming.py +184 -0
- aip_agents/ptc/payload.py +26 -0
- aip_agents/ptc/prompt_builder.py +571 -0
- aip_agents/ptc/ptc_helper.py +16 -0
- aip_agents/ptc/sandbox_bridge.py +58 -0
- aip_agents/ptc/template_utils.py +33 -0
- aip_agents/ptc/templates/__init__.py +1 -0
- aip_agents/ptc/templates/ptc_helper.py.template +134 -0
- aip_agents/sandbox/__init__.py +43 -0
- aip_agents/sandbox/defaults.py +9 -0
- aip_agents/sandbox/e2b_runtime.py +267 -0
- aip_agents/sandbox/template_builder.py +131 -0
- aip_agents/sandbox/types.py +24 -0
- aip_agents/sandbox/validation.py +50 -0
- aip_agents/tools/__init__.py +2 -0
- aip_agents/tools/execute_ptc_code.py +308 -0
- {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/METADATA +1 -1
- {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/RECORD +30 -282
- 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 -131
- 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.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_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/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 -9
- 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/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/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.0.dist-info → aip_agents_binary-0.6.2.dist-info}/WHEEL +0 -0
- {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/top_level.txt +0 -0
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
from aip_agents.a2a.types import Artifact as Artifact, ArtifactType as ArtifactType, MimeType as MimeType, get_mime_type_from_filename as get_mime_type_from_filename
|
|
2
|
-
from langgraph.types import Command
|
|
3
|
-
from typing import Any
|
|
4
|
-
|
|
5
|
-
class ArtifactHandler:
|
|
6
|
-
"""Handler class for creating and managing artifacts in agent tools.
|
|
7
|
-
|
|
8
|
-
This class provides a clean, object-oriented interface for artifact creation
|
|
9
|
-
with built-in validation, deduplication, and standardized formatting.
|
|
10
|
-
"""
|
|
11
|
-
def __init__(self) -> None:
|
|
12
|
-
"""Initialize the ArtifactHandler."""
|
|
13
|
-
def create_file_artifact(self, result: str, artifact_data: bytes | str, artifact_name: str, artifact_description: str = '', mime_type: str | None = None, enable_deduplication: bool = True) -> dict[str, Any]:
|
|
14
|
-
'''Deprecated. Use create_artifact instead.
|
|
15
|
-
|
|
16
|
-
Args:
|
|
17
|
-
result (str): The message/result to show to the agent.
|
|
18
|
-
artifact_data (bytes | str): The binary data for the artifact.
|
|
19
|
-
artifact_name (str): The name for the artifact file.
|
|
20
|
-
artifact_description (str, optional): Description of the artifact. Defaults to "".
|
|
21
|
-
mime_type (str | None, optional): MIME type of the artifact. If None, will be auto-detected.
|
|
22
|
-
enable_deduplication (bool, optional): Whether to deduplicate by content hash. Defaults to True.
|
|
23
|
-
|
|
24
|
-
Returns:
|
|
25
|
-
dict[str, Any]: Dictionary with \'result\' and \'artifact\' keys.
|
|
26
|
-
'''
|
|
27
|
-
def create_text_artifact(self, result: str, artifact_text: str, artifact_name: str, artifact_description: str = '', mime_type: str | None = None, enable_deduplication: bool = True) -> dict[str, Any]:
|
|
28
|
-
'''Deprecated. Use create_artifact instead.
|
|
29
|
-
|
|
30
|
-
Args:
|
|
31
|
-
result (str): The message/result to show to the agent.
|
|
32
|
-
artifact_text (str): The text content for the artifact.
|
|
33
|
-
artifact_name (str): The name for the artifact file.
|
|
34
|
-
artifact_description (str, optional): Description of the artifact. Defaults to "".
|
|
35
|
-
mime_type (str | None, optional): MIME type of the artifact. If None, will be auto-detected.
|
|
36
|
-
enable_deduplication (bool, optional): Whether to deduplicate by content hash. Defaults to True.
|
|
37
|
-
|
|
38
|
-
Returns:
|
|
39
|
-
dict[str, Any]: Dictionary with \'result\' and \'artifact\' keys.
|
|
40
|
-
'''
|
|
41
|
-
def create_artifact(self, result: str, data: bytes | str, artifact_name: str, artifact_description: str = '', mime_type: str | None = None, enable_deduplication: bool = True) -> dict[str, Any]:
|
|
42
|
-
"""Create an artifact with automatic text/binary handling.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
result: The message/result to show to the agent.
|
|
46
|
-
data: The data for the artifact. Bytes for binary; str for text or base64.
|
|
47
|
-
artifact_name: The filename to present to users.
|
|
48
|
-
artifact_description: Description of the artifact.
|
|
49
|
-
mime_type: Optional MIME type. If None, inferred from filename.
|
|
50
|
-
enable_deduplication: Whether to deduplicate by content hash.
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
Dictionary with 'result' and 'artifact' keys.
|
|
54
|
-
"""
|
|
55
|
-
def create_error_response(self, error_message: str) -> str:
|
|
56
|
-
"""Create a standardized error response for tools.
|
|
57
|
-
|
|
58
|
-
Args:
|
|
59
|
-
error_message: The error message to return.
|
|
60
|
-
|
|
61
|
-
Returns:
|
|
62
|
-
String with error information.
|
|
63
|
-
"""
|
|
64
|
-
def clear_cache(self) -> None:
|
|
65
|
-
"""Clear the artifact cache."""
|
|
66
|
-
def get_cache_size(self) -> int:
|
|
67
|
-
"""Get the number of cached artifacts.
|
|
68
|
-
|
|
69
|
-
Returns:
|
|
70
|
-
Number of artifacts in cache.
|
|
71
|
-
"""
|
|
72
|
-
@staticmethod
|
|
73
|
-
def generate_artifact_hash(artifact_data: str, name: str, mime_type: str) -> str:
|
|
74
|
-
"""Generate a hash for artifact deduplication.
|
|
75
|
-
|
|
76
|
-
Args:
|
|
77
|
-
artifact_data: Base64 encoded artifact data.
|
|
78
|
-
name: Artifact name.
|
|
79
|
-
mime_type: MIME type.
|
|
80
|
-
|
|
81
|
-
Returns:
|
|
82
|
-
Hash string for deduplication.
|
|
83
|
-
"""
|
|
84
|
-
|
|
85
|
-
def create_artifact_response(result: str, artifact_data: bytes | str, artifact_name: str, artifact_description: str = '', mime_type: str | None = None) -> dict[str, Any]:
|
|
86
|
-
'''Create a standardized artifact response for tools.
|
|
87
|
-
|
|
88
|
-
This function creates a response that separates the agent-facing result
|
|
89
|
-
from the user-facing artifact, following the established pattern for
|
|
90
|
-
artifact generation in the agent system.
|
|
91
|
-
|
|
92
|
-
Args:
|
|
93
|
-
result: The message/result to show to the agent (clean, no file data).
|
|
94
|
-
artifact_data: The binary data or base64 string for the artifact.
|
|
95
|
-
artifact_name: The name for the artifact file.
|
|
96
|
-
artifact_description: Description of the artifact. Defaults to "".
|
|
97
|
-
mime_type: MIME type of the artifact. If None, will be auto-detected from filename.
|
|
98
|
-
|
|
99
|
-
Returns:
|
|
100
|
-
Dictionary with \'result\' and \'artifacts\' keys (artifacts is always a list).
|
|
101
|
-
|
|
102
|
-
Example:
|
|
103
|
-
>>> import io
|
|
104
|
-
>>> csv_data = "Name,Age\\\\nAlice,30\\\\nBob,25"
|
|
105
|
-
>>> response = create_artifact_response(
|
|
106
|
-
... result="Generated a 2-row CSV table",
|
|
107
|
-
... artifact_data=csv_data.encode(\'utf-8\'),
|
|
108
|
-
... artifact_name="data.csv",
|
|
109
|
-
... artifact_description="Sample data table",
|
|
110
|
-
... mime_type="text/csv"
|
|
111
|
-
... )
|
|
112
|
-
>>> assert "result" in response
|
|
113
|
-
>>> assert "artifacts" in response
|
|
114
|
-
>>> assert isinstance(response["artifacts"], list)
|
|
115
|
-
'''
|
|
116
|
-
def create_text_artifact_response(result: str, artifact_text: str, artifact_name: str, artifact_description: str = '', mime_type: str | None = None) -> dict[str, Any]:
|
|
117
|
-
"""Create a standardized artifact response for tools.
|
|
118
|
-
|
|
119
|
-
Args:
|
|
120
|
-
result: The message/result to show to the agent.
|
|
121
|
-
artifact_text: The text content for the artifact.
|
|
122
|
-
artifact_name: The name for the artifact file.
|
|
123
|
-
artifact_description: Description of the artifact.
|
|
124
|
-
mime_type: MIME type of the artifact. If None, will be auto-detected from filename.
|
|
125
|
-
|
|
126
|
-
Returns:
|
|
127
|
-
Dictionary with 'result' and 'artifacts' keys (artifacts is always a list).
|
|
128
|
-
"""
|
|
129
|
-
def create_multiple_artifacts_response(result: str, artifacts: list[dict[str, Any]]) -> dict[str, Any]:
|
|
130
|
-
"""Create a standardized response for multiple artifacts.
|
|
131
|
-
|
|
132
|
-
Args:
|
|
133
|
-
result: The message/result to show to the agent.
|
|
134
|
-
artifacts: List of artifact dictionaries.
|
|
135
|
-
|
|
136
|
-
Returns:
|
|
137
|
-
Dictionary with 'result' and 'artifacts' keys.
|
|
138
|
-
"""
|
|
139
|
-
def create_artifact_command(result: str, artifact_data: bytes | str, artifact_name: str, artifact_description: str = '', mime_type: str | None = None, metadata_update: dict[str, Any] | None = None) -> Command:
|
|
140
|
-
"""Create a Command that updates artifacts (and optional metadata).
|
|
141
|
-
|
|
142
|
-
Args:
|
|
143
|
-
result: Message/result to show to the agent (for ToolMessage content).
|
|
144
|
-
artifact_data: The binary data or base64 string for the artifact.
|
|
145
|
-
artifact_name: The name for the artifact file.
|
|
146
|
-
artifact_description: Description of the artifact.
|
|
147
|
-
mime_type: MIME type of the artifact. If None, auto-detected from filename.
|
|
148
|
-
metadata_update: Optional metadata delta to merge into state metadata.
|
|
149
|
-
|
|
150
|
-
Returns:
|
|
151
|
-
Command: A LangGraph Command with update containing 'result', 'artifacts', and optional 'metadata'.
|
|
152
|
-
"""
|
|
153
|
-
def create_multiple_artifacts_command(result: str, artifacts: list[Artifact | dict[str, Any]] | None = None, metadata_update: dict[str, Any] | None = None) -> Command:
|
|
154
|
-
"""Create a Command that updates multiple artifacts (and optional metadata).
|
|
155
|
-
|
|
156
|
-
The 'artifacts' list accepts mixed item types:
|
|
157
|
-
- Artifact: a typed artifact model (preferred). Will be converted via model_dump().
|
|
158
|
-
- dict: a prebuilt artifact dict ready for A2A.
|
|
159
|
-
- DataSpec dict: raw spec to build an artifact with keys:
|
|
160
|
-
{'data': bytes|str, 'artifact_name': str, 'artifact_description'?: str, 'mime_type'?: str}
|
|
161
|
-
|
|
162
|
-
Args:
|
|
163
|
-
result: Message/result to show to the agent.
|
|
164
|
-
artifacts: List of items (Artifact | dict) to attach or build.
|
|
165
|
-
metadata_update: Optional metadata delta to merge into state metadata.
|
|
166
|
-
|
|
167
|
-
Returns:
|
|
168
|
-
Command: A LangGraph Command with update containing 'result', 'artifacts', and optional 'metadata'.
|
|
169
|
-
"""
|
|
170
|
-
def create_error_response(error_message: str) -> str:
|
|
171
|
-
"""Create a standardized error response for tools.
|
|
172
|
-
|
|
173
|
-
For error cases, we return a simple string that will be passed directly
|
|
174
|
-
to the agent without any artifact processing.
|
|
175
|
-
|
|
176
|
-
Args:
|
|
177
|
-
error_message: The error message to return.
|
|
178
|
-
|
|
179
|
-
Returns:
|
|
180
|
-
String with error information.
|
|
181
|
-
"""
|
|
182
|
-
def extract_artifacts_from_agent_response(result: Any) -> tuple[str, list[dict[str, Any]]]:
|
|
183
|
-
"""Extract artifacts from agent response for delegation tools.
|
|
184
|
-
|
|
185
|
-
Args:
|
|
186
|
-
result: The result returned by the delegated agent.
|
|
187
|
-
|
|
188
|
-
Returns:
|
|
189
|
-
Tuple of (text_response, artifacts_list) where:
|
|
190
|
-
- text_response: The text content for the agent
|
|
191
|
-
- artifacts_list: List of artifacts to be passed through
|
|
192
|
-
"""
|
|
193
|
-
def create_delegation_response_with_artifacts(result: str, artifacts: list[dict[str, Any]], agent_name: str = '') -> Command:
|
|
194
|
-
"""Create a delegation response that includes artifacts only when needed.
|
|
195
|
-
|
|
196
|
-
Args:
|
|
197
|
-
result: The text result from the delegated agent.
|
|
198
|
-
artifacts: List of artifacts from the delegated agent (always a list).
|
|
199
|
-
agent_name: Name of the agent for prefixing the result.
|
|
200
|
-
|
|
201
|
-
Returns:
|
|
202
|
-
Command containing 'result' and optional 'artifacts'.
|
|
203
|
-
"""
|
aip_agents/utils/constants.pyi
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from enum import StrEnum
|
|
2
|
-
from uuid import UUID
|
|
3
|
-
|
|
4
|
-
__all__ = ['DefaultTimezone', 'DEFAULT_PII_TAG_NAMESPACE']
|
|
5
|
-
|
|
6
|
-
class DefaultTimezone(StrEnum):
|
|
7
|
-
"""Default timezone constants used across the application."""
|
|
8
|
-
JAKARTA: str
|
|
9
|
-
|
|
10
|
-
DEFAULT_PII_TAG_NAMESPACE: UUID
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
from aip_agents.utils.datetime.normalization import format_created_updated_label as format_created_updated_label, is_valid_date_string as is_valid_date_string, next_day_iso as next_day_iso, normalize_timestamp_to_date as normalize_timestamp_to_date
|
|
2
|
-
from aip_agents.utils.datetime.timezone import ensure_utc_datetime as ensure_utc_datetime, get_timezone_aware_now as get_timezone_aware_now
|
|
3
|
-
|
|
4
|
-
__all__ = ['normalize_timestamp_to_date', 'format_created_updated_label', 'is_valid_date_string', 'next_day_iso', 'ensure_utc_datetime', 'get_timezone_aware_now']
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
__all__ = ['normalize_timestamp_to_date', 'format_created_updated_label', 'is_valid_date_string', 'next_day_iso']
|
|
4
|
-
|
|
5
|
-
def normalize_timestamp_to_date(value: Any) -> str | None:
|
|
6
|
-
'''Normalize various timestamp representations into a YYYY-MM-DD string.
|
|
7
|
-
|
|
8
|
-
This function handles multiple input types and formats, converting them to
|
|
9
|
-
a standardized ISO date string. It gracefully handles invalid inputs by
|
|
10
|
-
returning None or the string representation.
|
|
11
|
-
|
|
12
|
-
Args:
|
|
13
|
-
value: The timestamp value to normalize. Can be:
|
|
14
|
-
- None or empty string: Returns None
|
|
15
|
-
- int/float: Unix timestamp (seconds since epoch)
|
|
16
|
-
- str: ISO format, datetime string, or other string representation
|
|
17
|
-
- Other types: Converted to string representation
|
|
18
|
-
|
|
19
|
-
Returns:
|
|
20
|
-
str | None: A YYYY-MM-DD formatted date string, or None if the input
|
|
21
|
-
cannot be parsed as a valid date.
|
|
22
|
-
|
|
23
|
-
Raises:
|
|
24
|
-
ValueError: If the timestamp value is invalid (e.g., negative timestamp).
|
|
25
|
-
|
|
26
|
-
Examples:
|
|
27
|
-
>>> normalize_timestamp_to_date(1640995200) # Unix timestamp
|
|
28
|
-
\'2022-01-01\'
|
|
29
|
-
>>> normalize_timestamp_to_date("2022-01-01T12:00:00")
|
|
30
|
-
\'2022-01-01\'
|
|
31
|
-
>>> normalize_timestamp_to_date("invalid")
|
|
32
|
-
\'invalid\'
|
|
33
|
-
>>> normalize_timestamp_to_date(None)
|
|
34
|
-
None
|
|
35
|
-
'''
|
|
36
|
-
def format_created_updated_label(created_at: Any | None, updated_at: Any | None) -> str | None:
|
|
37
|
-
'''Build a compact label combining created/updated timestamps when available.
|
|
38
|
-
|
|
39
|
-
Creates a human-readable label that shows creation and update timestamps
|
|
40
|
-
in a compact format. If both dates are the same, only shows one date.
|
|
41
|
-
|
|
42
|
-
Args:
|
|
43
|
-
created_at: The creation timestamp (any format supported by normalize_timestamp_to_date).
|
|
44
|
-
updated_at: The update timestamp (any format supported by normalize_timestamp_to_date).
|
|
45
|
-
|
|
46
|
-
Returns:
|
|
47
|
-
str | None: A formatted label string, or None if both inputs are invalid/empty.
|
|
48
|
-
Examples: "2022-01-01", "2022-01-01 (updated 2022-01-02)", "updated 2022-01-01"
|
|
49
|
-
|
|
50
|
-
Examples:
|
|
51
|
-
>>> format_created_updated_label("2022-01-01", "2022-01-02")
|
|
52
|
-
\'2022-01-01 (updated 2022-01-02)\'
|
|
53
|
-
>>> format_created_updated_label("2022-01-01", "2022-01-01")
|
|
54
|
-
\'2022-01-01\'
|
|
55
|
-
>>> format_created_updated_label(None, "2022-01-01")
|
|
56
|
-
\'updated 2022-01-01\'
|
|
57
|
-
>>> format_created_updated_label("2022-01-01", None)
|
|
58
|
-
\'2022-01-01\'
|
|
59
|
-
'''
|
|
60
|
-
def is_valid_date_string(date_str: str, fmt: str = ...) -> bool:
|
|
61
|
-
'''Validate that a date string matches the provided strftime format.
|
|
62
|
-
|
|
63
|
-
Args:
|
|
64
|
-
date_str: The date string to validate. Must be a non-empty string.
|
|
65
|
-
fmt: The strftime format pattern to validate against.
|
|
66
|
-
Defaults to YYYY-MM-DD format.
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
bool: True if the date string matches the format, False otherwise.
|
|
70
|
-
|
|
71
|
-
Raises:
|
|
72
|
-
ValueError: If the format string is empty or invalid, or if date_str is not a string.
|
|
73
|
-
|
|
74
|
-
Examples:
|
|
75
|
-
>>> is_valid_date_string("2022-01-01")
|
|
76
|
-
True
|
|
77
|
-
>>> is_valid_date_string("2022-13-01")
|
|
78
|
-
False
|
|
79
|
-
>>> is_valid_date_string("01-01-2022", "%m-%d-%Y")
|
|
80
|
-
True
|
|
81
|
-
>>> is_valid_date_string("", "%Y-%m-%d")
|
|
82
|
-
False
|
|
83
|
-
'''
|
|
84
|
-
def next_day_iso(date_str: str) -> str:
|
|
85
|
-
"""Return the ISO date string for the day after the given ``YYYY-MM-DD`` date.
|
|
86
|
-
|
|
87
|
-
Args:
|
|
88
|
-
date_str: A date string in ``YYYY-MM-DD`` format.
|
|
89
|
-
|
|
90
|
-
Returns:
|
|
91
|
-
str: The next day's date in ``YYYY-MM-DD`` format.
|
|
92
|
-
|
|
93
|
-
Raises:
|
|
94
|
-
ValueError: If ``date_str`` is not a valid ``YYYY-MM-DD`` date string.
|
|
95
|
-
"""
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
from datetime import datetime
|
|
2
|
-
|
|
3
|
-
__all__ = ['get_timezone_aware_now', 'ensure_utc_datetime']
|
|
4
|
-
|
|
5
|
-
def get_timezone_aware_now(timezone: str, fallback_timezone: str = 'UTC') -> tuple[datetime, str, bool]:
|
|
6
|
-
'''Return a timezone-aware datetime alongside a timezone label.
|
|
7
|
-
|
|
8
|
-
This function creates a timezone-aware datetime object using the modern
|
|
9
|
-
zoneinfo module (Python 3.9+). It gracefully falls back to UTC if the
|
|
10
|
-
requested timezone is invalid.
|
|
11
|
-
|
|
12
|
-
Args:
|
|
13
|
-
timezone: Desired timezone name in IANA format (e.g., "America/New_York",
|
|
14
|
-
"Europe/London", "Asia/Tokyo"). Must be a non-empty string.
|
|
15
|
-
fallback_timezone: Fallback timezone name to use when the primary
|
|
16
|
-
timezone is invalid. Defaults to "UTC". Must be a non-empty string.
|
|
17
|
-
|
|
18
|
-
Returns:
|
|
19
|
-
tuple[datetime, str, bool]: A 3-tuple containing:
|
|
20
|
-
- now: A timezone-aware datetime object representing the current time
|
|
21
|
-
- timezone_label: A human-readable timezone label (e.g., "EST", "UTC")
|
|
22
|
-
- used_fallback: Boolean indicating whether the fallback timezone was used
|
|
23
|
-
|
|
24
|
-
Raises:
|
|
25
|
-
ValueError: If timezone or fallback_timezone are empty/invalid, or if both
|
|
26
|
-
the requested timezone and fallback timezone are invalid.
|
|
27
|
-
|
|
28
|
-
Examples:
|
|
29
|
-
>>> now, label, fallback = get_timezone_aware_now("America/New_York")
|
|
30
|
-
>>> print(f"Current time: {now}, Timezone: {label}, Used fallback: {fallback}")
|
|
31
|
-
Current time: 2024-01-15 10:30:00-05:00, Timezone: EST, Used fallback: False
|
|
32
|
-
|
|
33
|
-
>>> now, label, fallback = get_timezone_aware_now("Invalid/Timezone")
|
|
34
|
-
>>> print(f"Used fallback: {fallback}, Label: {label}")
|
|
35
|
-
Used fallback: True, Label: UTC
|
|
36
|
-
'''
|
|
37
|
-
def ensure_utc_datetime(value: datetime) -> datetime:
|
|
38
|
-
"""Normalize a datetime to UTC (attaching UTC to naive values).
|
|
39
|
-
|
|
40
|
-
Args:
|
|
41
|
-
value: Datetime to normalize.
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
datetime: Timezone-aware datetime expressed in UTC.
|
|
45
|
-
|
|
46
|
-
Raises:
|
|
47
|
-
TypeError: If ``value`` is not a ``datetime`` instance.
|
|
48
|
-
"""
|
aip_agents/utils/env_loader.pyi
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from _typeshed import Incomplete
|
|
2
|
-
|
|
3
|
-
logger: Incomplete
|
|
4
|
-
|
|
5
|
-
def load_local_env(override: bool = True) -> None:
|
|
6
|
-
"""Load environment variables from a .env file if python-dotenv is available.
|
|
7
|
-
|
|
8
|
-
Args:
|
|
9
|
-
override (bool, optional): Whether to override existing environment variables. Defaults to True.
|
|
10
|
-
"""
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
from _typeshed import Incomplete
|
|
2
|
-
from aip_agents.schema.a2a import A2AStreamEventType as A2AStreamEventType
|
|
3
|
-
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
logger: Incomplete
|
|
7
|
-
|
|
8
|
-
class EventHandlerRegistry:
|
|
9
|
-
"""Registry for tracking known streaming events with pass-through behaviour."""
|
|
10
|
-
def __init__(self) -> None:
|
|
11
|
-
"""Initialize the event handler registry with known event types."""
|
|
12
|
-
def handle(self, event_type: A2AStreamEventType | str | None, payload: dict[str, Any]) -> dict[str, Any]:
|
|
13
|
-
"""Return the payload unchanged while logging unknown events.
|
|
14
|
-
|
|
15
|
-
Args:
|
|
16
|
-
event_type (A2AStreamEventType | str | None): The type of the streaming event.
|
|
17
|
-
payload (dict[str, Any]): The event payload data.
|
|
18
|
-
|
|
19
|
-
Returns:
|
|
20
|
-
dict[str, Any]: The payload unchanged (pass-through).
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
DEFAULT_EVENT_HANDLER_REGISTRY: Incomplete
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
from _typeshed import Incomplete
|
|
2
|
-
from aip_agents.utils.logger import get_logger as get_logger
|
|
3
|
-
|
|
4
|
-
logger: Incomplete
|
|
5
|
-
FILE_PATH_SYSTEM_NOTE: str
|
|
6
|
-
FILE_PATH_INACCESSIBLE_NOTE: str
|
|
7
|
-
FILE_URL_SYSTEM_NOTE: str
|
|
8
|
-
|
|
9
|
-
def augment_query_with_file_paths(query: str, files: list[str | dict[str, object]]) -> str:
|
|
10
|
-
"""Augment query with file path system notes.
|
|
11
|
-
|
|
12
|
-
Args:
|
|
13
|
-
query: The original user query string.
|
|
14
|
-
files: List of local filesystem paths or file metadata dicts to include.
|
|
15
|
-
|
|
16
|
-
Returns:
|
|
17
|
-
The query with system notes appended for each file path.
|
|
18
|
-
|
|
19
|
-
Raises:
|
|
20
|
-
ValueError: If files is not a list of strings or metadata dicts.
|
|
21
|
-
"""
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
from typing import Any
|
|
4
|
-
|
|
5
|
-
__all__ = ['FinalResponseMetadataOptions', 'assemble_final_response']
|
|
6
|
-
|
|
7
|
-
@dataclass(slots=True)
|
|
8
|
-
class FinalResponseMetadataOptions:
|
|
9
|
-
"""Container for optional metadata fields on final response events."""
|
|
10
|
-
step_id: str | None = ...
|
|
11
|
-
previous_step_ids: list[str] | None = ...
|
|
12
|
-
tool_info: dict[str, Any] | None = ...
|
|
13
|
-
thinking_and_activity_info: dict[str, Any] | None = ...
|
|
14
|
-
completion_reason: str | None = ...
|
|
15
|
-
timeout_seconds: float | None = ...
|
|
16
|
-
message: dict[str, Any] | None = ...
|
|
17
|
-
partial_result: str | None = ...
|
|
18
|
-
metadata_extra: dict[str, Any] | None = ...
|
|
19
|
-
|
|
20
|
-
def assemble_final_response(*, content: str, artifacts: list[dict[str, Any]] | None = None, metadata_options: FinalResponseMetadataOptions | None = None, status: str = 'success', task_state: str = 'completed', extra_fields: dict[str, Any] | None = None, timestamp: datetime | None = None) -> dict[str, Any]:
|
|
21
|
-
'''Create a final response event with optional artifacts and overrides.
|
|
22
|
-
|
|
23
|
-
Args:
|
|
24
|
-
content: Human readable message for the final response.
|
|
25
|
-
artifacts: Optional list of artifact dictionaries to attach.
|
|
26
|
-
metadata_options: Metadata overrides passed through to the underlying builder.
|
|
27
|
-
status: Top-level status string; defaults to ``"success"``.
|
|
28
|
-
task_state: State string describing the task; defaults to ``"completed"``.
|
|
29
|
-
extra_fields: Additional top-level fields to merge onto the event.
|
|
30
|
-
timestamp: Explicit timestamp for the event. Defaults to ``datetime.now(UTC)``.
|
|
31
|
-
|
|
32
|
-
Returns:
|
|
33
|
-
dict[str, Any]: Final response event payload ready for downstream streaming.
|
|
34
|
-
'''
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
from _typeshed import Incomplete
|
|
2
|
-
from aip_agents.utils.logger import get_logger as get_logger
|
|
3
|
-
from collections.abc import Awaitable as Awaitable
|
|
4
|
-
from gllm_inference.lm_invoker.lm_invoker import BaseLMInvoker
|
|
5
|
-
from typing import Any, TypeVar
|
|
6
|
-
|
|
7
|
-
logger: Incomplete
|
|
8
|
-
FORMATTER_ENV_VAR: str
|
|
9
|
-
T = TypeVar('T')
|
|
10
|
-
|
|
11
|
-
class FormatterInvokerUnavailableError(RuntimeError):
|
|
12
|
-
"""Raised when no formatter LLM invoker can be resolved."""
|
|
13
|
-
class FormatterInvocationError(RuntimeError):
|
|
14
|
-
"""Raised when invoking the formatter LLM fails."""
|
|
15
|
-
|
|
16
|
-
class FormatterLLMClient:
|
|
17
|
-
"""Stateful helper that manages formatter invoker resolution and execution."""
|
|
18
|
-
def __init__(self) -> None:
|
|
19
|
-
"""Initialize the formatter LLM client with caching and thread safety."""
|
|
20
|
-
def seed_default(self, default_model_id: str | None) -> None:
|
|
21
|
-
"""Populate ``DEFAULT_MODEL_FORMATTER`` when unset.
|
|
22
|
-
|
|
23
|
-
Args:
|
|
24
|
-
default_model_id: Preferred formatter model id to use as a fallback.
|
|
25
|
-
"""
|
|
26
|
-
def resolve_invoker(self, *, reset_cache: bool = False) -> BaseLMInvoker | None:
|
|
27
|
-
"""Return the cached formatter invoker, optionally refreshing it.
|
|
28
|
-
|
|
29
|
-
Args:
|
|
30
|
-
reset_cache: When True, clear the cached invoker before resolving.
|
|
31
|
-
|
|
32
|
-
Returns:
|
|
33
|
-
BaseLMInvoker | None: Cached invoker if the formatter is configured, otherwise None.
|
|
34
|
-
"""
|
|
35
|
-
async def invoke(self, *args: Any, invoker: BaseLMInvoker | None = None, timeout: float | None = None, **kwargs: Any) -> Any:
|
|
36
|
-
"""Dispatch formatter prompts asynchronously with timeout/error handling.
|
|
37
|
-
|
|
38
|
-
Args:
|
|
39
|
-
*args: Positional arguments forwarded to the invoker.
|
|
40
|
-
invoker: Explicit invoker instance to reuse instead of resolving one.
|
|
41
|
-
timeout: Optional timeout (seconds) enforced with ``asyncio.timeout``.
|
|
42
|
-
**kwargs: Keyword arguments forwarded to the invoker.
|
|
43
|
-
|
|
44
|
-
Returns:
|
|
45
|
-
Any: Result returned by the formatter LLM.
|
|
46
|
-
|
|
47
|
-
Raises:
|
|
48
|
-
FormatterInvokerUnavailableError: If no formatter model is configured.
|
|
49
|
-
FormatterInvocationError: When the invocation fails or exceeds the timeout.
|
|
50
|
-
"""
|
|
51
|
-
def invoke_blocking(self, *args: Any, invoker: BaseLMInvoker | None = None, timeout: float | None = None, **kwargs: Any) -> Any:
|
|
52
|
-
"""Invoke the formatter LLM from synchronous contexts.
|
|
53
|
-
|
|
54
|
-
Args:
|
|
55
|
-
*args: Positional arguments forwarded to ``invoke``.
|
|
56
|
-
invoker: Optional invoker to reuse.
|
|
57
|
-
timeout: Optional timeout (seconds) for the async invocation.
|
|
58
|
-
**kwargs: Keyword arguments forwarded to ``invoke``.
|
|
59
|
-
|
|
60
|
-
Returns:
|
|
61
|
-
Any: Result returned by the formatter LLM.
|
|
62
|
-
"""
|
|
63
|
-
|
|
64
|
-
def get_formatter_llm_client() -> FormatterLLMClient:
|
|
65
|
-
"""Return the process-wide formatter LLM client."""
|
|
66
|
-
def seed_formatter_llm_default(default_model_id: str | None) -> None:
|
|
67
|
-
"""Convenience wrapper for seeding the formatter default model.
|
|
68
|
-
|
|
69
|
-
Args:
|
|
70
|
-
default_model_id: Formatter model identifier to seed when missing.
|
|
71
|
-
"""
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
from aip_agents.utils.langgraph.converter import convert_gllm_tool_call_to_langchain_tool_call as convert_gllm_tool_call_to_langchain_tool_call, convert_langchain_messages_to_gllm_messages as convert_langchain_messages_to_gllm_messages, convert_langchain_tool_call_to_gllm_tool_call as convert_langchain_tool_call_to_gllm_tool_call, convert_lm_output_to_langchain_message as convert_lm_output_to_langchain_message
|
|
2
|
-
|
|
3
|
-
__all__ = ['convert_gllm_tool_call_to_langchain_tool_call', 'convert_langchain_tool_call_to_gllm_tool_call', 'convert_lm_output_to_langchain_message', 'convert_langchain_messages_to_gllm_messages']
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
from collections.abc import Sequence
|
|
2
|
-
from gllm_inference.schema import LMOutput, Message, ToolCall as GllmToolCall
|
|
3
|
-
from langchain_core.messages import AIMessage, BaseMessage as BaseMessage
|
|
4
|
-
from langchain_core.messages.tool import ToolCall as LangChainToolCall
|
|
5
|
-
|
|
6
|
-
def convert_langchain_messages_to_gllm_messages(messages: Sequence[BaseMessage], instruction: str) -> list[Message]:
|
|
7
|
-
"""Convert LangChain messages to gllm-inference Message format.
|
|
8
|
-
|
|
9
|
-
This function transforms a sequence of LangChain messages into the Message
|
|
10
|
-
format expected by LM Invoker. It handles system messages, human messages, AI messages
|
|
11
|
-
with tool calls, and tool result messages.
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
messages: Sequence of LangChain BaseMessage objects to convert.
|
|
15
|
-
instruction: System instruction to prepend if not already present in messages.
|
|
16
|
-
|
|
17
|
-
Returns:
|
|
18
|
-
List of Message objects containing the converted message sequence.
|
|
19
|
-
"""
|
|
20
|
-
def convert_lm_output_to_langchain_message(response: LMOutput | str) -> AIMessage:
|
|
21
|
-
"""Convert LM Invoker output to LangChain AIMessage.
|
|
22
|
-
|
|
23
|
-
This function transforms the output from LM Invoker back into LangChain's
|
|
24
|
-
AIMessage format, handling both text responses and tool calls.
|
|
25
|
-
|
|
26
|
-
Args:
|
|
27
|
-
response: The response from LM Invoker (MultimodalOutput).
|
|
28
|
-
|
|
29
|
-
Returns:
|
|
30
|
-
AIMessage containing the converted response.
|
|
31
|
-
"""
|
|
32
|
-
def convert_langchain_tool_call_to_gllm_tool_call(lc_tool_call: LangChainToolCall) -> GllmToolCall:
|
|
33
|
-
"""Convert LangChain tool call to gllm ToolCall.
|
|
34
|
-
|
|
35
|
-
Args:
|
|
36
|
-
lc_tool_call: LangChain ToolCall (TypedDict).
|
|
37
|
-
|
|
38
|
-
Returns:
|
|
39
|
-
GllmToolCall object for gllm-inference.
|
|
40
|
-
"""
|
|
41
|
-
def convert_gllm_tool_call_to_langchain_tool_call(gllm_tool_call: GllmToolCall) -> LangChainToolCall:
|
|
42
|
-
"""Convert gllm ToolCall to LangChain ToolCall format.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
gllm_tool_call: GllmToolCall object from gllm-inference.
|
|
46
|
-
|
|
47
|
-
Returns:
|
|
48
|
-
LangChain ToolCall (TypedDict) with proper type annotation.
|
|
49
|
-
"""
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
from aip_agents.utils.langgraph.tool_managers.a2a_tool_manager import A2AToolManager as A2AToolManager
|
|
2
|
-
from aip_agents.utils.langgraph.tool_managers.base_tool_manager import BaseLangGraphToolManager as BaseLangGraphToolManager
|
|
3
|
-
from aip_agents.utils.langgraph.tool_managers.delegation_tool_manager import DelegationToolManager as DelegationToolManager
|
|
4
|
-
|
|
5
|
-
__all__ = ['BaseLangGraphToolManager', 'A2AToolManager', 'DelegationToolManager']
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
from _typeshed import Incomplete
|
|
2
|
-
from a2a.types import AgentCard as AgentCard
|
|
3
|
-
from aip_agents.utils.a2a_connector import A2AConnector as A2AConnector
|
|
4
|
-
from aip_agents.utils.langgraph.tool_managers.base_tool_manager import BaseLangGraphToolManager as BaseLangGraphToolManager
|
|
5
|
-
from aip_agents.utils.logger import get_logger as get_logger
|
|
6
|
-
from langchain_core.tools import BaseTool
|
|
7
|
-
|
|
8
|
-
logger: Incomplete
|
|
9
|
-
|
|
10
|
-
class A2AToolManager(BaseLangGraphToolManager):
|
|
11
|
-
"""Manages A2A communication tools for LangGraph agents.
|
|
12
|
-
|
|
13
|
-
This tool manager converts A2A agent cards into LangChain tools that can
|
|
14
|
-
be used in a unified ToolNode within LangGraph agents. Each A2A agent
|
|
15
|
-
becomes a tool that the LLM can call for external communication.
|
|
16
|
-
"""
|
|
17
|
-
registered_agents: list
|
|
18
|
-
def __init__(self) -> None:
|
|
19
|
-
"""Initialize the A2A tool manager."""
|
|
20
|
-
created_tools: Incomplete
|
|
21
|
-
def register_resources(self, agent_cards: list[AgentCard]) -> list[BaseTool]:
|
|
22
|
-
"""Register A2A agents and convert them to LangChain tools.
|
|
23
|
-
|
|
24
|
-
Args:
|
|
25
|
-
agent_cards: List of AgentCard instances for external communication.
|
|
26
|
-
|
|
27
|
-
Returns:
|
|
28
|
-
List of created A2A communication tools.
|
|
29
|
-
"""
|
|
30
|
-
def get_resource_names(self) -> list[str]:
|
|
31
|
-
"""Get names of all registered A2A agents.
|
|
32
|
-
|
|
33
|
-
Returns:
|
|
34
|
-
list[str]: A list of names of all registered A2A agents.
|
|
35
|
-
"""
|