aip-agents-binary 0.5.20__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.
Files changed (280) hide show
  1. aip_agents/__init__.py +65 -0
  2. aip_agents/a2a/__init__.py +19 -0
  3. aip_agents/a2a/server/__init__.py +10 -0
  4. aip_agents/a2a/server/base_executor.py +1086 -0
  5. aip_agents/a2a/server/google_adk_executor.py +198 -0
  6. aip_agents/a2a/server/langflow_executor.py +180 -0
  7. aip_agents/a2a/server/langgraph_executor.py +270 -0
  8. aip_agents/a2a/types.py +232 -0
  9. aip_agents/agent/__init__.py +27 -0
  10. aip_agents/agent/base_agent.py +970 -0
  11. aip_agents/agent/base_langgraph_agent.py +2942 -0
  12. aip_agents/agent/google_adk_agent.py +926 -0
  13. aip_agents/agent/google_adk_constants.py +6 -0
  14. aip_agents/agent/hitl/__init__.py +24 -0
  15. aip_agents/agent/hitl/config.py +28 -0
  16. aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
  17. aip_agents/agent/hitl/manager.py +532 -0
  18. aip_agents/agent/hitl/models.py +18 -0
  19. aip_agents/agent/hitl/prompt/__init__.py +9 -0
  20. aip_agents/agent/hitl/prompt/base.py +42 -0
  21. aip_agents/agent/hitl/prompt/deferred.py +73 -0
  22. aip_agents/agent/hitl/registry.py +149 -0
  23. aip_agents/agent/interface.py +138 -0
  24. aip_agents/agent/interfaces.py +65 -0
  25. aip_agents/agent/langflow_agent.py +464 -0
  26. aip_agents/agent/langgraph_memory_enhancer_agent.py +433 -0
  27. aip_agents/agent/langgraph_react_agent.py +2514 -0
  28. aip_agents/agent/system_instruction_context.py +34 -0
  29. aip_agents/clients/__init__.py +10 -0
  30. aip_agents/clients/langflow/__init__.py +10 -0
  31. aip_agents/clients/langflow/client.py +477 -0
  32. aip_agents/clients/langflow/types.py +18 -0
  33. aip_agents/constants.py +23 -0
  34. aip_agents/credentials/manager.py +132 -0
  35. aip_agents/examples/__init__.py +5 -0
  36. aip_agents/examples/compare_streaming_client.py +783 -0
  37. aip_agents/examples/compare_streaming_server.py +142 -0
  38. aip_agents/examples/demo_memory_recall.py +401 -0
  39. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  40. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  41. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  42. aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
  43. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  44. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  45. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  46. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  47. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  48. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
  49. aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
  50. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
  51. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  52. aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
  53. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  54. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  55. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
  56. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  57. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  58. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  59. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  60. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  61. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  62. aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
  63. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
  64. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
  65. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  66. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  67. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
  68. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  69. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
  70. aip_agents/examples/hello_world_google_adk.py +41 -0
  71. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  72. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  73. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  74. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  75. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  76. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  77. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  78. aip_agents/examples/hello_world_langchain.py +28 -0
  79. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  80. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  81. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  82. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  83. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  84. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  85. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  86. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  87. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  88. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  89. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  90. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  91. aip_agents/examples/hello_world_langgraph.py +39 -0
  92. aip_agents/examples/hello_world_langgraph_bosa_twitter.py +41 -0
  93. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  94. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  95. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  96. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  97. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  98. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  99. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  100. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  101. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  102. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  103. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  104. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  105. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  106. aip_agents/examples/hello_world_pii_logger.py +21 -0
  107. aip_agents/examples/hello_world_sentry.py +133 -0
  108. aip_agents/examples/hello_world_step_limits.py +273 -0
  109. aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
  110. aip_agents/examples/hello_world_tool_output_client.py +46 -0
  111. aip_agents/examples/hello_world_tool_output_server.py +114 -0
  112. aip_agents/examples/hitl_demo.py +724 -0
  113. aip_agents/examples/mcp_configs/configs.py +63 -0
  114. aip_agents/examples/mcp_servers/common.py +76 -0
  115. aip_agents/examples/mcp_servers/mcp_name.py +29 -0
  116. aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
  117. aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
  118. aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
  119. aip_agents/examples/mcp_servers/mcp_time.py +10 -0
  120. aip_agents/examples/pii_demo_langgraph_client.py +69 -0
  121. aip_agents/examples/pii_demo_langgraph_server.py +126 -0
  122. aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
  123. aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
  124. aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
  125. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
  126. aip_agents/examples/tools/__init__.py +27 -0
  127. aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
  128. aip_agents/examples/tools/adk_weather_tool.py +60 -0
  129. aip_agents/examples/tools/data_generator_tool.py +103 -0
  130. aip_agents/examples/tools/data_visualization_tool.py +312 -0
  131. aip_agents/examples/tools/image_artifact_tool.py +136 -0
  132. aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
  133. aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
  134. aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
  135. aip_agents/examples/tools/langchain_weather_tool.py +48 -0
  136. aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
  137. aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
  138. aip_agents/examples/tools/pii_demo_tools.py +189 -0
  139. aip_agents/examples/tools/random_chart_tool.py +142 -0
  140. aip_agents/examples/tools/serper_tool.py +202 -0
  141. aip_agents/examples/tools/stock_tools.py +82 -0
  142. aip_agents/examples/tools/table_generator_tool.py +167 -0
  143. aip_agents/examples/tools/time_tool.py +82 -0
  144. aip_agents/examples/tools/weather_forecast_tool.py +38 -0
  145. aip_agents/executor/agent_executor.py +473 -0
  146. aip_agents/executor/base.py +48 -0
  147. aip_agents/mcp/__init__.py +1 -0
  148. aip_agents/mcp/client/__init__.py +14 -0
  149. aip_agents/mcp/client/base_mcp_client.py +369 -0
  150. aip_agents/mcp/client/connection_manager.py +193 -0
  151. aip_agents/mcp/client/google_adk/__init__.py +11 -0
  152. aip_agents/mcp/client/google_adk/client.py +381 -0
  153. aip_agents/mcp/client/langchain/__init__.py +11 -0
  154. aip_agents/mcp/client/langchain/client.py +265 -0
  155. aip_agents/mcp/client/persistent_session.py +359 -0
  156. aip_agents/mcp/client/session_pool.py +351 -0
  157. aip_agents/mcp/client/transports.py +215 -0
  158. aip_agents/mcp/utils/__init__.py +7 -0
  159. aip_agents/mcp/utils/config_validator.py +139 -0
  160. aip_agents/memory/__init__.py +14 -0
  161. aip_agents/memory/adapters/__init__.py +10 -0
  162. aip_agents/memory/adapters/base_adapter.py +717 -0
  163. aip_agents/memory/adapters/mem0.py +84 -0
  164. aip_agents/memory/base.py +84 -0
  165. aip_agents/memory/constants.py +49 -0
  166. aip_agents/memory/factory.py +86 -0
  167. aip_agents/memory/guidance.py +20 -0
  168. aip_agents/memory/simple_memory.py +47 -0
  169. aip_agents/middleware/__init__.py +17 -0
  170. aip_agents/middleware/base.py +88 -0
  171. aip_agents/middleware/manager.py +128 -0
  172. aip_agents/middleware/todolist.py +274 -0
  173. aip_agents/schema/__init__.py +69 -0
  174. aip_agents/schema/a2a.py +56 -0
  175. aip_agents/schema/agent.py +111 -0
  176. aip_agents/schema/hitl.py +157 -0
  177. aip_agents/schema/langgraph.py +37 -0
  178. aip_agents/schema/model_id.py +97 -0
  179. aip_agents/schema/step_limit.py +108 -0
  180. aip_agents/schema/storage.py +40 -0
  181. aip_agents/sentry/__init__.py +11 -0
  182. aip_agents/sentry/sentry.py +151 -0
  183. aip_agents/storage/__init__.py +41 -0
  184. aip_agents/storage/base.py +85 -0
  185. aip_agents/storage/clients/__init__.py +12 -0
  186. aip_agents/storage/clients/minio_client.py +318 -0
  187. aip_agents/storage/config.py +62 -0
  188. aip_agents/storage/providers/__init__.py +15 -0
  189. aip_agents/storage/providers/base.py +106 -0
  190. aip_agents/storage/providers/memory.py +114 -0
  191. aip_agents/storage/providers/object_storage.py +214 -0
  192. aip_agents/tools/__init__.py +33 -0
  193. aip_agents/tools/bosa_tools.py +105 -0
  194. aip_agents/tools/browser_use/__init__.py +82 -0
  195. aip_agents/tools/browser_use/action_parser.py +103 -0
  196. aip_agents/tools/browser_use/browser_use_tool.py +1112 -0
  197. aip_agents/tools/browser_use/llm_config.py +120 -0
  198. aip_agents/tools/browser_use/minio_storage.py +198 -0
  199. aip_agents/tools/browser_use/schemas.py +119 -0
  200. aip_agents/tools/browser_use/session.py +76 -0
  201. aip_agents/tools/browser_use/session_errors.py +132 -0
  202. aip_agents/tools/browser_use/steel_session_recording.py +317 -0
  203. aip_agents/tools/browser_use/streaming.py +813 -0
  204. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  205. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  206. aip_agents/tools/browser_use/types.py +78 -0
  207. aip_agents/tools/code_sandbox/__init__.py +26 -0
  208. aip_agents/tools/code_sandbox/constant.py +13 -0
  209. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +257 -0
  210. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
  211. aip_agents/tools/constants.py +165 -0
  212. aip_agents/tools/document_loader/__init__.py +44 -0
  213. aip_agents/tools/document_loader/base_reader.py +302 -0
  214. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  215. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  216. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  217. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  218. aip_agents/tools/gl_connector/__init__.py +5 -0
  219. aip_agents/tools/gl_connector/tool.py +351 -0
  220. aip_agents/tools/memory_search/__init__.py +22 -0
  221. aip_agents/tools/memory_search/base.py +200 -0
  222. aip_agents/tools/memory_search/mem0.py +258 -0
  223. aip_agents/tools/memory_search/schema.py +48 -0
  224. aip_agents/tools/memory_search_tool.py +26 -0
  225. aip_agents/tools/time_tool.py +117 -0
  226. aip_agents/tools/tool_config_injector.py +300 -0
  227. aip_agents/tools/web_search/__init__.py +15 -0
  228. aip_agents/tools/web_search/serper_tool.py +187 -0
  229. aip_agents/types/__init__.py +70 -0
  230. aip_agents/types/a2a_events.py +13 -0
  231. aip_agents/utils/__init__.py +79 -0
  232. aip_agents/utils/a2a_connector.py +1757 -0
  233. aip_agents/utils/artifact_helpers.py +502 -0
  234. aip_agents/utils/constants.py +22 -0
  235. aip_agents/utils/datetime/__init__.py +34 -0
  236. aip_agents/utils/datetime/normalization.py +231 -0
  237. aip_agents/utils/datetime/timezone.py +206 -0
  238. aip_agents/utils/env_loader.py +27 -0
  239. aip_agents/utils/event_handler_registry.py +58 -0
  240. aip_agents/utils/file_prompt_utils.py +176 -0
  241. aip_agents/utils/final_response_builder.py +211 -0
  242. aip_agents/utils/formatter_llm_client.py +231 -0
  243. aip_agents/utils/langgraph/__init__.py +19 -0
  244. aip_agents/utils/langgraph/converter.py +128 -0
  245. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  246. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  247. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  248. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1071 -0
  249. aip_agents/utils/langgraph/tool_output_management.py +967 -0
  250. aip_agents/utils/logger.py +195 -0
  251. aip_agents/utils/metadata/__init__.py +27 -0
  252. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  253. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  254. aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
  255. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  256. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  257. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  258. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  259. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  260. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  261. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  262. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  263. aip_agents/utils/metadata_helper.py +358 -0
  264. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  265. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  266. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  267. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  268. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  269. aip_agents/utils/pii/__init__.py +25 -0
  270. aip_agents/utils/pii/pii_handler.py +397 -0
  271. aip_agents/utils/pii/pii_helper.py +207 -0
  272. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  273. aip_agents/utils/reference_helper.py +273 -0
  274. aip_agents/utils/sse_chunk_transformer.py +831 -0
  275. aip_agents/utils/step_limit_manager.py +265 -0
  276. aip_agents/utils/token_usage_helper.py +156 -0
  277. aip_agents_binary-0.5.20.dist-info/METADATA +681 -0
  278. aip_agents_binary-0.5.20.dist-info/RECORD +280 -0
  279. aip_agents_binary-0.5.20.dist-info/WHEEL +5 -0
  280. aip_agents_binary-0.5.20.dist-info/top_level.txt +1 -0
@@ -0,0 +1,232 @@
1
+ """Type definitions and constants for A2A artifact generation.
2
+
3
+ This module provides common MIME types, artifact types, and other constants
4
+ used in A2A artifact generation to ensure consistency across the codebase.
5
+
6
+ Authors:
7
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
8
+ """
9
+
10
+ import base64
11
+ from enum import StrEnum
12
+ from typing import Any
13
+
14
+ from pydantic import BaseModel, Field, field_validator
15
+
16
+
17
+ class MimeType(StrEnum):
18
+ """Common MIME types for A2A artifacts.
19
+
20
+ This class provides constants for commonly used MIME types in artifact generation,
21
+ ensuring consistency and reducing typos across the codebase.
22
+ """
23
+
24
+ # Text formats
25
+ TEXT_PLAIN = "text/plain"
26
+ TEXT_HTML = "text/html"
27
+ TEXT_CSS = "text/css"
28
+ TEXT_JAVASCRIPT = "text/javascript"
29
+ TEXT_CSV = "text/csv"
30
+ TEXT_XML = "text/xml"
31
+ TEXT_MARKDOWN = "text/markdown"
32
+
33
+ # Application formats
34
+ APPLICATION_JSON = "application/json"
35
+ APPLICATION_XML = "application/xml"
36
+ APPLICATION_PDF = "application/pdf"
37
+ APPLICATION_ZIP = "application/zip"
38
+ APPLICATION_GZIP = "application/gzip"
39
+ APPLICATION_TAR = "application/x-tar"
40
+ APPLICATION_OCTET_STREAM = "application/octet-stream"
41
+
42
+ # Microsoft Office formats
43
+ APPLICATION_MSWORD = "application/msword"
44
+ APPLICATION_EXCEL = "application/vnd.ms-excel"
45
+ APPLICATION_POWERPOINT = "application/vnd.ms-powerpoint"
46
+ APPLICATION_DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
47
+ APPLICATION_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
48
+ APPLICATION_PPTX = "application/vnd.openxmlformats-officedocument.presentationml.presentation"
49
+
50
+ # Image formats
51
+ IMAGE_JPEG = "image/jpeg"
52
+ IMAGE_PNG = "image/png"
53
+ IMAGE_GIF = "image/gif"
54
+ IMAGE_WEBP = "image/webp"
55
+ IMAGE_SVG = "image/svg+xml"
56
+ IMAGE_BMP = "image/bmp"
57
+ IMAGE_TIFF = "image/tiff"
58
+ IMAGE_ICO = "image/x-icon"
59
+
60
+ # Audio formats
61
+ AUDIO_MP3 = "audio/mpeg"
62
+ AUDIO_WAV = "audio/wav"
63
+ AUDIO_OGG = "audio/ogg"
64
+ AUDIO_AAC = "audio/aac"
65
+ AUDIO_FLAC = "audio/flac"
66
+
67
+ # Video formats
68
+ VIDEO_MP4 = "video/mp4"
69
+ VIDEO_AVI = "video/x-msvideo"
70
+ VIDEO_MOV = "video/quicktime"
71
+ VIDEO_WMV = "video/x-ms-wmv"
72
+ VIDEO_WEBM = "video/webm"
73
+ VIDEO_MKV = "video/x-matroska"
74
+
75
+ # Font formats
76
+ FONT_TTF = "font/ttf"
77
+ FONT_OTF = "font/otf"
78
+ FONT_WOFF = "font/woff"
79
+ FONT_WOFF2 = "font/woff2"
80
+
81
+
82
+ class ArtifactType(StrEnum):
83
+ """Common artifact types for A2A artifacts.
84
+
85
+ This class provides constants for artifact types used in the A2A protocol.
86
+ """
87
+
88
+ FILE = "file"
89
+ DATA = "data"
90
+ TEXT = "text"
91
+
92
+
93
+ # Common file extension to MIME type mappings
94
+ EXTENSION_TO_MIME_TYPE = {
95
+ # Text files
96
+ ".txt": MimeType.TEXT_PLAIN,
97
+ ".html": MimeType.TEXT_HTML,
98
+ ".htm": MimeType.TEXT_HTML,
99
+ ".css": MimeType.TEXT_CSS,
100
+ ".js": MimeType.TEXT_JAVASCRIPT,
101
+ ".csv": MimeType.TEXT_CSV,
102
+ ".xml": MimeType.TEXT_XML,
103
+ ".md": MimeType.TEXT_MARKDOWN,
104
+ ".markdown": MimeType.TEXT_MARKDOWN,
105
+ # Application files
106
+ ".json": MimeType.APPLICATION_JSON,
107
+ ".pdf": MimeType.APPLICATION_PDF,
108
+ ".zip": MimeType.APPLICATION_ZIP,
109
+ ".gz": MimeType.APPLICATION_GZIP,
110
+ ".tar": MimeType.APPLICATION_TAR,
111
+ # Microsoft Office
112
+ ".doc": MimeType.APPLICATION_MSWORD,
113
+ ".xls": MimeType.APPLICATION_EXCEL,
114
+ ".ppt": MimeType.APPLICATION_POWERPOINT,
115
+ ".docx": MimeType.APPLICATION_DOCX,
116
+ ".xlsx": MimeType.APPLICATION_XLSX,
117
+ ".pptx": MimeType.APPLICATION_PPTX,
118
+ # Images
119
+ ".jpg": MimeType.IMAGE_JPEG,
120
+ ".jpeg": MimeType.IMAGE_JPEG,
121
+ ".png": MimeType.IMAGE_PNG,
122
+ ".gif": MimeType.IMAGE_GIF,
123
+ ".webp": MimeType.IMAGE_WEBP,
124
+ ".svg": MimeType.IMAGE_SVG,
125
+ ".bmp": MimeType.IMAGE_BMP,
126
+ ".tiff": MimeType.IMAGE_TIFF,
127
+ ".tif": MimeType.IMAGE_TIFF,
128
+ ".ico": MimeType.IMAGE_ICO,
129
+ # Audio
130
+ ".mp3": MimeType.AUDIO_MP3,
131
+ ".wav": MimeType.AUDIO_WAV,
132
+ ".ogg": MimeType.AUDIO_OGG,
133
+ ".aac": MimeType.AUDIO_AAC,
134
+ ".flac": MimeType.AUDIO_FLAC,
135
+ # Video
136
+ ".mp4": MimeType.VIDEO_MP4,
137
+ ".avi": MimeType.VIDEO_AVI,
138
+ ".mov": MimeType.VIDEO_MOV,
139
+ ".wmv": MimeType.VIDEO_WMV,
140
+ ".webm": MimeType.VIDEO_WEBM,
141
+ ".mkv": MimeType.VIDEO_MKV,
142
+ # Fonts
143
+ ".ttf": MimeType.FONT_TTF,
144
+ ".otf": MimeType.FONT_OTF,
145
+ ".woff": MimeType.FONT_WOFF,
146
+ ".woff2": MimeType.FONT_WOFF2,
147
+ }
148
+ MIME_TYPE_TO_EXTENSION = {v: k for k, v in EXTENSION_TO_MIME_TYPE.items()}
149
+
150
+
151
+ def get_mime_type_from_filename(filename: str) -> str:
152
+ """Get MIME type from filename extension.
153
+
154
+ Args:
155
+ filename: The filename to get the MIME type for.
156
+
157
+ Returns:
158
+ The MIME type string, or application/octet-stream if unknown.
159
+
160
+ Example:
161
+ >>> get_mime_type_from_filename("data.csv")
162
+ 'text/csv'
163
+ >>> get_mime_type_from_filename("image.png")
164
+ 'image/png'
165
+ >>> get_mime_type_from_filename("unknown.xyz")
166
+ 'application/octet-stream'
167
+ """
168
+ if "." not in filename:
169
+ return MimeType.APPLICATION_OCTET_STREAM
170
+
171
+ extension = "." + filename.split(".")[-1].lower()
172
+ return EXTENSION_TO_MIME_TYPE.get(extension, MimeType.APPLICATION_OCTET_STREAM)
173
+
174
+
175
+ def get_extension_from_mime_type(mime_type: str) -> str | None:
176
+ """Get file extension from MIME type.
177
+
178
+ Args:
179
+ mime_type: The MIME type to get the extension for.
180
+
181
+ Returns:
182
+ The file extension (with dot) or None if not found.
183
+
184
+ Example:
185
+ >>> get_extension_from_mime_type("text/csv")
186
+ '.csv'
187
+ >>> get_extension_from_mime_type("image/png")
188
+ '.png'
189
+ >>> get_extension_from_mime_type("unknown/type")
190
+ None
191
+ """
192
+ return MIME_TYPE_TO_EXTENSION.get(mime_type)
193
+
194
+
195
+ class Artifact(BaseModel):
196
+ """Represents an artifact payload used by A2A helpers and executors.
197
+
198
+ This model standardizes the structure for artifacts generated by tools and
199
+ passed through the A2A pipeline.
200
+
201
+ Attributes:
202
+ artifact_type (ArtifactType): The type of artifact. Defaults to FILE.
203
+ data (str): Base64-encoded content of the artifact.
204
+ name (str): Display name or filename of the artifact.
205
+ description (str): Optional description for the artifact. Defaults to empty string.
206
+ mime_type (str): MIME type of the artifact content.
207
+ metadata (dict[str, Any] | None): Optional per-artifact metadata to pass through.
208
+ """
209
+
210
+ artifact_type: ArtifactType = Field(default=ArtifactType.FILE)
211
+ data: str
212
+ name: str
213
+ description: str = ""
214
+ mime_type: str
215
+ metadata: dict[str, Any] | None = None
216
+
217
+ @field_validator("data")
218
+ @classmethod
219
+ def validate_base64(cls, v: str) -> str:
220
+ """Validate that 'data' is a valid base64 string.
221
+
222
+ Args:
223
+ v (str): The base64 string to validate.
224
+
225
+ Returns:
226
+ str: The validated base64 string if valid.
227
+ """
228
+ try:
229
+ base64.b64decode(v, validate=True)
230
+ except Exception as exc: # noqa: BLE001
231
+ raise ValueError("Artifact.data must be a valid base64-encoded string") from exc
232
+ return v
@@ -0,0 +1,27 @@
1
+ """This module initializes the agent package.
2
+
3
+ Exposes the core agent classes and interfaces.
4
+
5
+ Author:
6
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
7
+ """
8
+
9
+ from aip_agents.agent.base_agent import BaseAgent
10
+ from aip_agents.agent.base_langgraph_agent import BaseLangGraphAgent
11
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent
12
+ from aip_agents.agent.interface import AgentInterface
13
+ from aip_agents.agent.langflow_agent import LangflowAgent
14
+ from aip_agents.agent.langgraph_memory_enhancer_agent import LangGraphMemoryEnhancerAgent
15
+ from aip_agents.agent.langgraph_react_agent import LangChainAgent, LangGraphAgent, LangGraphReactAgent
16
+
17
+ __all__ = [
18
+ "AgentInterface",
19
+ "BaseAgent",
20
+ "BaseLangGraphAgent",
21
+ "LangGraphReactAgent",
22
+ "GoogleADKAgent",
23
+ "LangGraphAgent",
24
+ "LangChainAgent",
25
+ "LangflowAgent",
26
+ "LangGraphMemoryEnhancerAgent",
27
+ ]