aip-agents-binary 0.5.5__cp311-cp311-manylinux_2_31_x86_64.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.
Files changed (243) hide show
  1. aip_agents/__init__.pyi +19 -0
  2. aip_agents/a2a/__init__.pyi +3 -0
  3. aip_agents/a2a/server/__init__.pyi +4 -0
  4. aip_agents/a2a/server/base_executor.pyi +73 -0
  5. aip_agents/a2a/server/google_adk_executor.pyi +51 -0
  6. aip_agents/a2a/server/langflow_executor.pyi +43 -0
  7. aip_agents/a2a/server/langgraph_executor.pyi +47 -0
  8. aip_agents/a2a/types.pyi +132 -0
  9. aip_agents/agent/__init__.pyi +9 -0
  10. aip_agents/agent/base_agent.pyi +221 -0
  11. aip_agents/agent/base_langgraph_agent.pyi +232 -0
  12. aip_agents/agent/google_adk_agent.pyi +141 -0
  13. aip_agents/agent/google_adk_constants.pyi +3 -0
  14. aip_agents/agent/hitl/__init__.pyi +6 -0
  15. aip_agents/agent/hitl/config.pyi +15 -0
  16. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  17. aip_agents/agent/hitl/manager.pyi +199 -0
  18. aip_agents/agent/hitl/models.pyi +3 -0
  19. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  20. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  21. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  22. aip_agents/agent/interface.pyi +81 -0
  23. aip_agents/agent/interfaces.pyi +44 -0
  24. aip_agents/agent/langflow_agent.pyi +133 -0
  25. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  26. aip_agents/agent/langgraph_react_agent.pyi +126 -0
  27. aip_agents/agent/system_instruction_context.pyi +13 -0
  28. aip_agents/clients/__init__.pyi +4 -0
  29. aip_agents/clients/langflow/__init__.pyi +4 -0
  30. aip_agents/clients/langflow/client.pyi +140 -0
  31. aip_agents/clients/langflow/types.pyi +7 -0
  32. aip_agents/constants.pyi +7 -0
  33. aip_agents/examples/__init__.pyi +0 -0
  34. aip_agents/examples/compare_streaming_client.pyi +48 -0
  35. aip_agents/examples/compare_streaming_server.pyi +18 -0
  36. aip_agents/examples/demo_memory_recall.pyi +58 -0
  37. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  38. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  39. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  40. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  41. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  42. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  43. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  44. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  45. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  46. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  47. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  48. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  49. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  50. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  51. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  52. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  53. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  54. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  55. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  56. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  57. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  58. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  59. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  60. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  61. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  62. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  63. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  64. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  65. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  66. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  67. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  68. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  69. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  70. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  71. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  72. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  73. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  74. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  75. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  76. aip_agents/examples/hello_world_langchain.pyi +5 -0
  77. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  78. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  79. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  80. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  81. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  82. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  83. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  84. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  85. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  86. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  87. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  88. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  89. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  90. aip_agents/examples/hello_world_langgraph_bosa_twitter.pyi +5 -0
  91. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  92. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  93. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  94. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  95. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  96. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  97. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  98. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  99. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  100. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  101. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  102. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  103. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  104. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  105. aip_agents/examples/hello_world_sentry.pyi +21 -0
  106. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  107. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  108. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  109. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  110. aip_agents/examples/hitl_demo.pyi +67 -0
  111. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  112. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  113. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  114. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  115. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  116. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  117. aip_agents/examples/tools/__init__.pyi +9 -0
  118. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  119. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  120. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  121. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  122. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  123. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  124. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  125. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  126. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  127. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  128. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  129. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  130. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  131. aip_agents/examples/tools/serper_tool.pyi +16 -0
  132. aip_agents/examples/tools/stock_tools.pyi +36 -0
  133. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  134. aip_agents/examples/tools/time_tool.pyi +15 -0
  135. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  136. aip_agents/mcp/__init__.pyi +0 -0
  137. aip_agents/mcp/client/__init__.pyi +5 -0
  138. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  139. aip_agents/mcp/client/connection_manager.pyi +48 -0
  140. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  141. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  142. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  143. aip_agents/mcp/client/langchain/client.pyi +48 -0
  144. aip_agents/mcp/client/persistent_session.pyi +113 -0
  145. aip_agents/mcp/client/session_pool.pyi +101 -0
  146. aip_agents/mcp/client/transports.pyi +123 -0
  147. aip_agents/mcp/utils/__init__.pyi +0 -0
  148. aip_agents/mcp/utils/config_validator.pyi +82 -0
  149. aip_agents/memory/__init__.pyi +5 -0
  150. aip_agents/memory/adapters/__init__.pyi +4 -0
  151. aip_agents/memory/adapters/base_adapter.pyi +150 -0
  152. aip_agents/memory/adapters/mem0.pyi +22 -0
  153. aip_agents/memory/base.pyi +60 -0
  154. aip_agents/memory/constants.pyi +25 -0
  155. aip_agents/memory/factory.pyi +24 -0
  156. aip_agents/memory/guidance.pyi +3 -0
  157. aip_agents/memory/simple_memory.pyi +23 -0
  158. aip_agents/middleware/__init__.pyi +5 -0
  159. aip_agents/middleware/base.pyi +71 -0
  160. aip_agents/middleware/manager.pyi +80 -0
  161. aip_agents/middleware/todolist.pyi +125 -0
  162. aip_agents/schema/__init__.pyi +9 -0
  163. aip_agents/schema/a2a.pyi +40 -0
  164. aip_agents/schema/agent.pyi +65 -0
  165. aip_agents/schema/hitl.pyi +89 -0
  166. aip_agents/schema/langgraph.pyi +28 -0
  167. aip_agents/schema/model_id.pyi +54 -0
  168. aip_agents/schema/step_limit.pyi +63 -0
  169. aip_agents/schema/storage.pyi +21 -0
  170. aip_agents/sentry/__init__.pyi +3 -0
  171. aip_agents/sentry/sentry.pyi +48 -0
  172. aip_agents/storage/__init__.pyi +8 -0
  173. aip_agents/storage/base.pyi +58 -0
  174. aip_agents/storage/clients/__init__.pyi +3 -0
  175. aip_agents/storage/clients/minio_client.pyi +137 -0
  176. aip_agents/storage/config.pyi +29 -0
  177. aip_agents/storage/providers/__init__.pyi +5 -0
  178. aip_agents/storage/providers/base.pyi +88 -0
  179. aip_agents/storage/providers/memory.pyi +79 -0
  180. aip_agents/storage/providers/object_storage.pyi +98 -0
  181. aip_agents/tools/__init__.pyi +3 -0
  182. aip_agents/tools/bosa_tools.pyi +37 -0
  183. aip_agents/tools/constants.pyi +135 -0
  184. aip_agents/tools/memory_search/__init__.pyi +5 -0
  185. aip_agents/tools/memory_search/base.pyi +69 -0
  186. aip_agents/tools/memory_search/mem0.pyi +19 -0
  187. aip_agents/tools/memory_search/schema.pyi +15 -0
  188. aip_agents/tools/memory_search_tool.pyi +3 -0
  189. aip_agents/tools/tool_config_injector.pyi +26 -0
  190. aip_agents/types/__init__.pyi +36 -0
  191. aip_agents/types/a2a_events.pyi +3 -0
  192. aip_agents/utils/__init__.pyi +11 -0
  193. aip_agents/utils/a2a_connector.pyi +146 -0
  194. aip_agents/utils/artifact_helpers.pyi +203 -0
  195. aip_agents/utils/constants.pyi +10 -0
  196. aip_agents/utils/datetime/__init__.pyi +4 -0
  197. aip_agents/utils/datetime/normalization.pyi +95 -0
  198. aip_agents/utils/datetime/timezone.pyi +48 -0
  199. aip_agents/utils/env_loader.pyi +10 -0
  200. aip_agents/utils/event_handler_registry.pyi +23 -0
  201. aip_agents/utils/file_prompt_utils.pyi +21 -0
  202. aip_agents/utils/final_response_builder.pyi +34 -0
  203. aip_agents/utils/formatter_llm_client.pyi +71 -0
  204. aip_agents/utils/langgraph/__init__.pyi +3 -0
  205. aip_agents/utils/langgraph/converter.pyi +49 -0
  206. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  207. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  208. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  209. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  210. aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
  211. aip_agents/utils/logger.pyi +60 -0
  212. aip_agents/utils/metadata/__init__.pyi +5 -0
  213. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  214. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  215. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  216. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  217. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  218. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  219. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  220. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  221. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  222. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  223. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  224. aip_agents/utils/metadata_helper.pyi +117 -0
  225. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  226. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  227. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  228. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  229. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  230. aip_agents/utils/pii/__init__.pyi +5 -0
  231. aip_agents/utils/pii/pii_handler.pyi +96 -0
  232. aip_agents/utils/pii/pii_helper.pyi +78 -0
  233. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  234. aip_agents/utils/reference_helper.pyi +81 -0
  235. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  236. aip_agents/utils/step_limit_manager.pyi +112 -0
  237. aip_agents/utils/token_usage_helper.pyi +60 -0
  238. aip_agents.cpython-311-x86_64-linux-gnu.so +0 -0
  239. aip_agents.pyi +235 -0
  240. aip_agents_binary-0.5.5.dist-info/METADATA +669 -0
  241. aip_agents_binary-0.5.5.dist-info/RECORD +243 -0
  242. aip_agents_binary-0.5.5.dist-info/WHEEL +5 -0
  243. aip_agents_binary-0.5.5.dist-info/top_level.txt +1 -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
+ """
aip_agents.pyi ADDED
@@ -0,0 +1,235 @@
1
+ # This file was generated by Nuitka
2
+
3
+ # Stubs included by default
4
+ from __future__ import annotations
5
+ from __future__ import annotations
6
+ from typing import Any
7
+ import importlib
8
+ import sys
9
+
10
+ __all__: list[str] = []
11
+ def _export(module_name: str) -> None:
12
+ ...
13
+
14
+ __version__ = '0.0.0'
15
+ def __getattr__(name: str) -> Any:
16
+ ...
17
+
18
+
19
+ __name__ = ...
20
+
21
+
22
+
23
+ # Modules used internally, to allow implicit dependencies to be seen:
24
+ import os
25
+ import __future__
26
+ import importlib
27
+ import sys
28
+ import typing
29
+ import asyncio
30
+ import time
31
+ import uuid
32
+ import abc
33
+ import collections
34
+ import collections.abc
35
+ import dataclasses
36
+ import datetime
37
+ import a2a
38
+ import a2a.server
39
+ import a2a.server.agent_execution
40
+ import a2a.server.events
41
+ import a2a.server.events.event_queue
42
+ import a2a.server.tasks
43
+ import a2a.types
44
+ import a2a.utils
45
+ import a2a.utils.artifact
46
+ import aip_agents.types.A2AEvent
47
+ import aip_agents.types.A2AStreamEventType
48
+ import aip_agents.utils.serialize_references_for_metadata
49
+ import base64
50
+ import enum
51
+ import pydantic
52
+ import pathlib
53
+ import warnings
54
+ import httpx
55
+ import a2a.server.apps
56
+ import a2a.server.request_handlers
57
+ import gllm_core
58
+ import gllm_core.utils
59
+ import gllm_core.utils.retry
60
+ import gllm_inference
61
+ import gllm_inference.builder
62
+ import gllm_inference.lm_invoker
63
+ import gllm_inference.lm_invoker.lm_invoker
64
+ import langchain_core
65
+ import langchain_core.language_models
66
+ import starlette
67
+ import starlette.applications
68
+ import copy
69
+ import hashlib
70
+ import json
71
+ import concurrent
72
+ import concurrent.futures
73
+ import concurrent.futures.Future
74
+ import contextlib
75
+ import contextvars
76
+ import aiostream
77
+ import gllm_core.event
78
+ import gllm_core.event.handler
79
+ import gllm_core.schema
80
+ import langchain_core.messages
81
+ import langchain_core.tools
82
+ import langgraph
83
+ import langgraph.graph
84
+ import langgraph.graph.message
85
+ import langgraph.graph.state
86
+ import langgraph.types
87
+ import typing_extensions
88
+ import aip_agents.mcp.client.LangchainMCPClient
89
+ import aip_agents.memory.BaseMemory
90
+ import aip_agents.memory.MemoryFactory
91
+ import aip_agents.memory.MemoryMethod
92
+ import aip_agents.utils.augment_query_with_file_paths
93
+ import aip_agents.utils.validate_references
94
+ import aip_agents.utils.pii.deanonymize_final_response_content
95
+ import google
96
+ import google.adk
97
+ import google.adk.agents
98
+ import google.adk.agents.invocation_context
99
+ import google.adk.events
100
+ import google.adk.sessions
101
+ import google.adk.sessions.in_memory_session_service
102
+ import google.adk.sessions.state
103
+ import google.adk.tools
104
+ import google.adk.tools.base_tool
105
+ import google.adk.tools.langchain_tool
106
+ import google.genai
107
+ import google.genai.types
108
+ import langchain
109
+ import langchain.tools
110
+ import aip_agents.agent.hitl.prompt.BasePromptHandler
111
+ import aip_agents.agent.hitl.prompt.DeferredPromptHandler
112
+ import langgraph.config
113
+ import aip_agents.utils.datetime.ensure_utc_datetime
114
+ import aip_agents.clients.langflow.LangflowApiClient
115
+ import textwrap
116
+ import functools
117
+ import deprecated
118
+ import langchain_core.messages.ai
119
+ import langgraph.managed
120
+ import aip_agents.utils.add_references_chunks
121
+ import aip_agents.utils.langgraph.convert_langchain_messages_to_gllm_messages
122
+ import aip_agents.utils.langgraph.convert_lm_output_to_langchain_message
123
+ import aip_agents.utils.pii.ToolPIIHandler
124
+ import aip_agents.utils.pii.add_pii_mappings
125
+ import aip_agents.utils.pii.normalize_enable_pii
126
+ import aip_agents.utils.datetime.get_timezone_aware_now
127
+ import _frozen_importlib_external
128
+ import langchain_openai
129
+ import aip_agents.agent.LangGraphAgent
130
+ import click
131
+ import uvicorn
132
+ import dotenv
133
+ import aip_agents.agent.LangChainAgent
134
+ import pprint
135
+ import aip_agents.examples.tools.google_serper_tool
136
+ import aip_agents.examples.tools.weather_tool_langchain
137
+ import traceback
138
+ import aip_agents.agent.LangGraphReactAgent
139
+ import logging
140
+ import aip_agents.tools.BOSA_AUTOMATED_TOOLS
141
+ import nest_asyncio
142
+ import io
143
+ import subprocess
144
+ import threading
145
+ import fastapi
146
+ import fastapi.responses
147
+ import fastapi.staticfiles
148
+ import aip_agents.sentry.setup_telemetry
149
+ import http
150
+ import http.HTTPStatus
151
+ import starlette.requests
152
+ import starlette.responses
153
+ import starlette.routing
154
+ import random
155
+ import mcp
156
+ import mcp.server
157
+ import mcp.server.fastmcp
158
+ import PIL
159
+ import langchain_core.runnables
160
+ import csv
161
+ import gllm_core.constants
162
+ import gllm_inference.schema
163
+ import langchain.agents
164
+ import langchain.agents.tools
165
+ import langchain_core.agents
166
+ import langchain_core.callbacks
167
+ import gllm_tools
168
+ import gllm_tools.mcp
169
+ import gllm_tools.mcp.client
170
+ import gllm_tools.mcp.client.client
171
+ import gllm_tools.mcp.client.config
172
+ import gllm_tools.mcp.client.resource
173
+ import mcp.types
174
+ import inspect
175
+ import gllm_tools.mcp.client.tool
176
+ import langchain_core.documents
177
+ import langchain_core.documents.base
178
+ import mcp.client
179
+ import mcp.client.sse
180
+ import mcp.client.stdio
181
+ import mcp.client.streamable_http
182
+ import concurrent.futures.ThreadPoolExecutor
183
+ import gllm_inference.schema.message
184
+ import gllm_memory
185
+ import gllm_memory.enums
186
+ import aip_agents.types.ChatMessage
187
+ import aip_agents.utils.datetime.format_created_updated_label
188
+ import bosa_core
189
+ import bosa_core.telemetry
190
+ import bosa_core.telemetry.opentelemetry
191
+ import bosa_core.telemetry.opentelemetry.instrument
192
+ import bosa_core.telemetry.opentelemetry.instrument.functions
193
+ import aip_agents.agent.BaseAgent
194
+ import aip_agents.agent.GoogleADKAgent
195
+ import minio
196
+ import urllib3
197
+ import urllib3.exceptions
198
+ import pickle
199
+ import bosa_connectors
200
+ import aip_agents.utils.datetime.is_valid_date_string
201
+ import aip_agents.utils.datetime.next_day_iso
202
+ import aip_agents.tools.memory_search.MEMORY_SEARCH_TOOL_NAME
203
+ import aip_agents.tools.memory_search.LongTermMemorySearchInput
204
+ import aip_agents.tools.memory_search.LongTermMemorySearchTool
205
+ import aip_agents.tools.memory_search.Mem0SearchInput
206
+ import aip_agents.tools.memory_search.Mem0SearchTool
207
+ import aip_agents.tools.memory_search.MemoryConfig
208
+ import a2a.client
209
+ import zoneinfo
210
+ import zoneinfo.ZoneInfo
211
+ import zoneinfo.ZoneInfoNotFoundError
212
+ import langchain_core.messages.tool
213
+ import re
214
+ import re.Pattern
215
+ import gllm_core.utils.logger_manager
216
+ import aip_agents.utils.metadata.schemas.Activity
217
+ import aip_agents.utils.metadata.schemas.ActivityDataType
218
+ import aip_agents.utils.metadata.schemas.Thinking
219
+ import aip_agents.utils.metadata.activity_narrative.DELEGATE_PREFIX
220
+ import aip_agents.utils.metadata.activity_narrative.HITL_DECISION_MESSAGES
221
+ import aip_agents.utils.metadata.activity_narrative.HITL_PENDING_DESCRIPTION
222
+ import aip_agents.utils.metadata.activity_narrative.HITL_PENDING_TITLE
223
+ import aip_agents.utils.metadata.activity_narrative.ActivityNarrativeBuilder
224
+ import aip_agents.utils.metadata.activity_narrative._format_tool_or_subagent_name
225
+ import aip_agents.utils.metadata.create_tool_activity_info
226
+ import aip_agents.utils.name_preprocessor.BaseNamePreprocessor
227
+ import gllm_privacy
228
+ import gllm_privacy.pii_detector
229
+ import gllm_privacy.pii_detector.anonymizer
230
+ import gllm_privacy.pii_detector.constants
231
+ import gllm_privacy.pii_detector.recognizer
232
+ import gllm_privacy.pii_detector.recognizer.gdplabs_ner_api_remote_recognizer
233
+ import collections.defaultdict
234
+ import gllm_privacy.pii_detector.utils
235
+ import gllm_privacy.pii_detector.utils.deanonymizer_mapping