agentex-sdk 0.1.0a6__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 (289) hide show
  1. agentex/__init__.py +103 -0
  2. agentex/_base_client.py +1992 -0
  3. agentex/_client.py +506 -0
  4. agentex/_compat.py +219 -0
  5. agentex/_constants.py +14 -0
  6. agentex/_exceptions.py +108 -0
  7. agentex/_files.py +123 -0
  8. agentex/_models.py +829 -0
  9. agentex/_qs.py +150 -0
  10. agentex/_resource.py +43 -0
  11. agentex/_response.py +830 -0
  12. agentex/_streaming.py +333 -0
  13. agentex/_types.py +219 -0
  14. agentex/_utils/__init__.py +57 -0
  15. agentex/_utils/_logs.py +25 -0
  16. agentex/_utils/_proxy.py +65 -0
  17. agentex/_utils/_reflection.py +42 -0
  18. agentex/_utils/_resources_proxy.py +24 -0
  19. agentex/_utils/_streams.py +12 -0
  20. agentex/_utils/_sync.py +86 -0
  21. agentex/_utils/_transform.py +447 -0
  22. agentex/_utils/_typing.py +151 -0
  23. agentex/_utils/_utils.py +422 -0
  24. agentex/_version.py +4 -0
  25. agentex/lib/.keep +4 -0
  26. agentex/lib/__init__.py +0 -0
  27. agentex/lib/adk/__init__.py +41 -0
  28. agentex/lib/adk/_modules/__init__.py +0 -0
  29. agentex/lib/adk/_modules/acp.py +247 -0
  30. agentex/lib/adk/_modules/agent_task_tracker.py +176 -0
  31. agentex/lib/adk/_modules/agents.py +77 -0
  32. agentex/lib/adk/_modules/events.py +141 -0
  33. agentex/lib/adk/_modules/messages.py +285 -0
  34. agentex/lib/adk/_modules/state.py +291 -0
  35. agentex/lib/adk/_modules/streaming.py +75 -0
  36. agentex/lib/adk/_modules/tasks.py +124 -0
  37. agentex/lib/adk/_modules/tracing.py +194 -0
  38. agentex/lib/adk/providers/__init__.py +9 -0
  39. agentex/lib/adk/providers/_modules/__init__.py +0 -0
  40. agentex/lib/adk/providers/_modules/litellm.py +232 -0
  41. agentex/lib/adk/providers/_modules/openai.py +416 -0
  42. agentex/lib/adk/providers/_modules/sgp.py +85 -0
  43. agentex/lib/adk/utils/__init__.py +5 -0
  44. agentex/lib/adk/utils/_modules/__init__.py +0 -0
  45. agentex/lib/adk/utils/_modules/templating.py +94 -0
  46. agentex/lib/cli/__init__.py +0 -0
  47. agentex/lib/cli/commands/__init__.py +0 -0
  48. agentex/lib/cli/commands/agents.py +328 -0
  49. agentex/lib/cli/commands/init.py +227 -0
  50. agentex/lib/cli/commands/main.py +33 -0
  51. agentex/lib/cli/commands/secrets.py +169 -0
  52. agentex/lib/cli/commands/tasks.py +118 -0
  53. agentex/lib/cli/commands/uv.py +133 -0
  54. agentex/lib/cli/handlers/__init__.py +0 -0
  55. agentex/lib/cli/handlers/agent_handlers.py +160 -0
  56. agentex/lib/cli/handlers/cleanup_handlers.py +186 -0
  57. agentex/lib/cli/handlers/deploy_handlers.py +351 -0
  58. agentex/lib/cli/handlers/run_handlers.py +452 -0
  59. agentex/lib/cli/handlers/secret_handlers.py +670 -0
  60. agentex/lib/cli/templates/default/.dockerignore.j2 +43 -0
  61. agentex/lib/cli/templates/default/Dockerfile-uv.j2 +42 -0
  62. agentex/lib/cli/templates/default/Dockerfile.j2 +42 -0
  63. agentex/lib/cli/templates/default/README.md.j2 +193 -0
  64. agentex/lib/cli/templates/default/deploy/example.yaml.j2 +55 -0
  65. agentex/lib/cli/templates/default/manifest.yaml.j2 +116 -0
  66. agentex/lib/cli/templates/default/project/acp.py.j2 +29 -0
  67. agentex/lib/cli/templates/default/pyproject.toml.j2 +33 -0
  68. agentex/lib/cli/templates/default/requirements.txt.j2 +5 -0
  69. agentex/lib/cli/templates/deploy/Screenshot 2025-03-19 at 10.36.57/342/200/257AM.png +0 -0
  70. agentex/lib/cli/templates/deploy/example.yaml.j2 +55 -0
  71. agentex/lib/cli/templates/sync/.dockerignore.j2 +43 -0
  72. agentex/lib/cli/templates/sync/Dockerfile-uv.j2 +42 -0
  73. agentex/lib/cli/templates/sync/Dockerfile.j2 +42 -0
  74. agentex/lib/cli/templates/sync/README.md.j2 +293 -0
  75. agentex/lib/cli/templates/sync/deploy/example.yaml.j2 +55 -0
  76. agentex/lib/cli/templates/sync/manifest.yaml.j2 +116 -0
  77. agentex/lib/cli/templates/sync/project/acp.py.j2 +26 -0
  78. agentex/lib/cli/templates/sync/pyproject.toml.j2 +33 -0
  79. agentex/lib/cli/templates/sync/requirements.txt.j2 +5 -0
  80. agentex/lib/cli/templates/temporal/.dockerignore.j2 +43 -0
  81. agentex/lib/cli/templates/temporal/Dockerfile-uv.j2 +48 -0
  82. agentex/lib/cli/templates/temporal/Dockerfile.j2 +48 -0
  83. agentex/lib/cli/templates/temporal/README.md.j2 +316 -0
  84. agentex/lib/cli/templates/temporal/deploy/example.yaml.j2 +55 -0
  85. agentex/lib/cli/templates/temporal/manifest.yaml.j2 +137 -0
  86. agentex/lib/cli/templates/temporal/project/acp.py.j2 +30 -0
  87. agentex/lib/cli/templates/temporal/project/run_worker.py.j2 +33 -0
  88. agentex/lib/cli/templates/temporal/project/workflow.py.j2 +66 -0
  89. agentex/lib/cli/templates/temporal/pyproject.toml.j2 +34 -0
  90. agentex/lib/cli/templates/temporal/requirements.txt.j2 +5 -0
  91. agentex/lib/cli/utils/cli_utils.py +14 -0
  92. agentex/lib/cli/utils/credential_utils.py +103 -0
  93. agentex/lib/cli/utils/exceptions.py +6 -0
  94. agentex/lib/cli/utils/kubectl_utils.py +135 -0
  95. agentex/lib/cli/utils/kubernetes_secrets_utils.py +185 -0
  96. agentex/lib/core/__init__.py +0 -0
  97. agentex/lib/core/adapters/__init__.py +0 -0
  98. agentex/lib/core/adapters/llm/__init__.py +1 -0
  99. agentex/lib/core/adapters/llm/adapter_litellm.py +46 -0
  100. agentex/lib/core/adapters/llm/adapter_sgp.py +55 -0
  101. agentex/lib/core/adapters/llm/port.py +24 -0
  102. agentex/lib/core/adapters/streams/adapter_redis.py +128 -0
  103. agentex/lib/core/adapters/streams/port.py +50 -0
  104. agentex/lib/core/clients/__init__.py +1 -0
  105. agentex/lib/core/clients/temporal/__init__.py +0 -0
  106. agentex/lib/core/clients/temporal/temporal_client.py +181 -0
  107. agentex/lib/core/clients/temporal/types.py +47 -0
  108. agentex/lib/core/clients/temporal/utils.py +56 -0
  109. agentex/lib/core/services/__init__.py +0 -0
  110. agentex/lib/core/services/adk/__init__.py +0 -0
  111. agentex/lib/core/services/adk/acp/__init__.py +0 -0
  112. agentex/lib/core/services/adk/acp/acp.py +210 -0
  113. agentex/lib/core/services/adk/agent_task_tracker.py +85 -0
  114. agentex/lib/core/services/adk/agents.py +43 -0
  115. agentex/lib/core/services/adk/events.py +61 -0
  116. agentex/lib/core/services/adk/messages.py +164 -0
  117. agentex/lib/core/services/adk/providers/__init__.py +0 -0
  118. agentex/lib/core/services/adk/providers/litellm.py +256 -0
  119. agentex/lib/core/services/adk/providers/openai.py +723 -0
  120. agentex/lib/core/services/adk/providers/sgp.py +99 -0
  121. agentex/lib/core/services/adk/state.py +120 -0
  122. agentex/lib/core/services/adk/streaming.py +262 -0
  123. agentex/lib/core/services/adk/tasks.py +69 -0
  124. agentex/lib/core/services/adk/tracing.py +36 -0
  125. agentex/lib/core/services/adk/utils/__init__.py +0 -0
  126. agentex/lib/core/services/adk/utils/templating.py +58 -0
  127. agentex/lib/core/temporal/__init__.py +0 -0
  128. agentex/lib/core/temporal/activities/__init__.py +207 -0
  129. agentex/lib/core/temporal/activities/activity_helpers.py +37 -0
  130. agentex/lib/core/temporal/activities/adk/__init__.py +0 -0
  131. agentex/lib/core/temporal/activities/adk/acp/__init__.py +0 -0
  132. agentex/lib/core/temporal/activities/adk/acp/acp_activities.py +86 -0
  133. agentex/lib/core/temporal/activities/adk/agent_task_tracker_activities.py +76 -0
  134. agentex/lib/core/temporal/activities/adk/agents_activities.py +35 -0
  135. agentex/lib/core/temporal/activities/adk/events_activities.py +50 -0
  136. agentex/lib/core/temporal/activities/adk/messages_activities.py +94 -0
  137. agentex/lib/core/temporal/activities/adk/providers/__init__.py +0 -0
  138. agentex/lib/core/temporal/activities/adk/providers/litellm_activities.py +71 -0
  139. agentex/lib/core/temporal/activities/adk/providers/openai_activities.py +210 -0
  140. agentex/lib/core/temporal/activities/adk/providers/sgp_activities.py +42 -0
  141. agentex/lib/core/temporal/activities/adk/state_activities.py +85 -0
  142. agentex/lib/core/temporal/activities/adk/streaming_activities.py +33 -0
  143. agentex/lib/core/temporal/activities/adk/tasks_activities.py +48 -0
  144. agentex/lib/core/temporal/activities/adk/tracing_activities.py +55 -0
  145. agentex/lib/core/temporal/activities/adk/utils/__init__.py +0 -0
  146. agentex/lib/core/temporal/activities/adk/utils/templating_activities.py +41 -0
  147. agentex/lib/core/temporal/services/__init__.py +0 -0
  148. agentex/lib/core/temporal/services/temporal_task_service.py +69 -0
  149. agentex/lib/core/temporal/types/__init__.py +0 -0
  150. agentex/lib/core/temporal/types/workflow.py +5 -0
  151. agentex/lib/core/temporal/workers/__init__.py +0 -0
  152. agentex/lib/core/temporal/workers/worker.py +162 -0
  153. agentex/lib/core/temporal/workflows/workflow.py +26 -0
  154. agentex/lib/core/tracing/__init__.py +5 -0
  155. agentex/lib/core/tracing/processors/agentex_tracing_processor.py +117 -0
  156. agentex/lib/core/tracing/processors/sgp_tracing_processor.py +119 -0
  157. agentex/lib/core/tracing/processors/tracing_processor_interface.py +40 -0
  158. agentex/lib/core/tracing/trace.py +311 -0
  159. agentex/lib/core/tracing/tracer.py +70 -0
  160. agentex/lib/core/tracing/tracing_processor_manager.py +62 -0
  161. agentex/lib/environment_variables.py +87 -0
  162. agentex/lib/py.typed +0 -0
  163. agentex/lib/sdk/__init__.py +0 -0
  164. agentex/lib/sdk/config/__init__.py +0 -0
  165. agentex/lib/sdk/config/agent_config.py +61 -0
  166. agentex/lib/sdk/config/agent_manifest.py +219 -0
  167. agentex/lib/sdk/config/build_config.py +35 -0
  168. agentex/lib/sdk/config/deployment_config.py +117 -0
  169. agentex/lib/sdk/config/local_development_config.py +56 -0
  170. agentex/lib/sdk/config/project_config.py +103 -0
  171. agentex/lib/sdk/fastacp/__init__.py +3 -0
  172. agentex/lib/sdk/fastacp/base/base_acp_server.py +406 -0
  173. agentex/lib/sdk/fastacp/fastacp.py +74 -0
  174. agentex/lib/sdk/fastacp/impl/agentic_base_acp.py +72 -0
  175. agentex/lib/sdk/fastacp/impl/sync_acp.py +109 -0
  176. agentex/lib/sdk/fastacp/impl/temporal_acp.py +97 -0
  177. agentex/lib/sdk/fastacp/tests/README.md +297 -0
  178. agentex/lib/sdk/fastacp/tests/conftest.py +307 -0
  179. agentex/lib/sdk/fastacp/tests/pytest.ini +10 -0
  180. agentex/lib/sdk/fastacp/tests/run_tests.py +227 -0
  181. agentex/lib/sdk/fastacp/tests/test_base_acp_server.py +450 -0
  182. agentex/lib/sdk/fastacp/tests/test_fastacp_factory.py +344 -0
  183. agentex/lib/sdk/fastacp/tests/test_integration.py +477 -0
  184. agentex/lib/sdk/state_machine/__init__.py +6 -0
  185. agentex/lib/sdk/state_machine/noop_workflow.py +21 -0
  186. agentex/lib/sdk/state_machine/state.py +10 -0
  187. agentex/lib/sdk/state_machine/state_machine.py +189 -0
  188. agentex/lib/sdk/state_machine/state_workflow.py +16 -0
  189. agentex/lib/sdk/utils/__init__.py +0 -0
  190. agentex/lib/sdk/utils/messages.py +223 -0
  191. agentex/lib/types/__init__.py +0 -0
  192. agentex/lib/types/acp.py +94 -0
  193. agentex/lib/types/agent_configs.py +79 -0
  194. agentex/lib/types/agent_results.py +29 -0
  195. agentex/lib/types/credentials.py +34 -0
  196. agentex/lib/types/fastacp.py +61 -0
  197. agentex/lib/types/files.py +13 -0
  198. agentex/lib/types/json_rpc.py +49 -0
  199. agentex/lib/types/llm_messages.py +354 -0
  200. agentex/lib/types/task_message_updates.py +171 -0
  201. agentex/lib/types/tracing.py +34 -0
  202. agentex/lib/utils/__init__.py +0 -0
  203. agentex/lib/utils/completions.py +131 -0
  204. agentex/lib/utils/console.py +14 -0
  205. agentex/lib/utils/io.py +29 -0
  206. agentex/lib/utils/iterables.py +14 -0
  207. agentex/lib/utils/json_schema.py +23 -0
  208. agentex/lib/utils/logging.py +31 -0
  209. agentex/lib/utils/mcp.py +17 -0
  210. agentex/lib/utils/model_utils.py +46 -0
  211. agentex/lib/utils/parsing.py +15 -0
  212. agentex/lib/utils/regex.py +6 -0
  213. agentex/lib/utils/temporal.py +13 -0
  214. agentex/py.typed +0 -0
  215. agentex/resources/__init__.py +103 -0
  216. agentex/resources/agents.py +707 -0
  217. agentex/resources/events.py +294 -0
  218. agentex/resources/messages/__init__.py +33 -0
  219. agentex/resources/messages/batch.py +271 -0
  220. agentex/resources/messages/messages.py +492 -0
  221. agentex/resources/spans.py +557 -0
  222. agentex/resources/states.py +544 -0
  223. agentex/resources/tasks.py +615 -0
  224. agentex/resources/tracker.py +384 -0
  225. agentex/types/__init__.py +56 -0
  226. agentex/types/acp_type.py +7 -0
  227. agentex/types/agent.py +29 -0
  228. agentex/types/agent_list_params.py +13 -0
  229. agentex/types/agent_list_response.py +10 -0
  230. agentex/types/agent_rpc_by_name_params.py +21 -0
  231. agentex/types/agent_rpc_params.py +51 -0
  232. agentex/types/agent_rpc_params1.py +21 -0
  233. agentex/types/agent_rpc_response.py +20 -0
  234. agentex/types/agent_rpc_result.py +90 -0
  235. agentex/types/agent_task_tracker.py +34 -0
  236. agentex/types/data_content.py +30 -0
  237. agentex/types/data_content_param.py +31 -0
  238. agentex/types/data_delta.py +14 -0
  239. agentex/types/event.py +29 -0
  240. agentex/types/event_list_params.py +22 -0
  241. agentex/types/event_list_response.py +10 -0
  242. agentex/types/message_author.py +7 -0
  243. agentex/types/message_create_params.py +18 -0
  244. agentex/types/message_list_params.py +14 -0
  245. agentex/types/message_list_response.py +10 -0
  246. agentex/types/message_style.py +7 -0
  247. agentex/types/message_update_params.py +18 -0
  248. agentex/types/messages/__init__.py +8 -0
  249. agentex/types/messages/batch_create_params.py +16 -0
  250. agentex/types/messages/batch_create_response.py +10 -0
  251. agentex/types/messages/batch_update_params.py +16 -0
  252. agentex/types/messages/batch_update_response.py +10 -0
  253. agentex/types/shared/__init__.py +3 -0
  254. agentex/types/shared/task_message_update.py +83 -0
  255. agentex/types/span.py +36 -0
  256. agentex/types/span_create_params.py +40 -0
  257. agentex/types/span_list_params.py +12 -0
  258. agentex/types/span_list_response.py +10 -0
  259. agentex/types/span_update_params.py +37 -0
  260. agentex/types/state.py +25 -0
  261. agentex/types/state_create_params.py +16 -0
  262. agentex/types/state_list_params.py +16 -0
  263. agentex/types/state_list_response.py +10 -0
  264. agentex/types/state_update_params.py +16 -0
  265. agentex/types/task.py +23 -0
  266. agentex/types/task_delete_by_name_response.py +8 -0
  267. agentex/types/task_delete_response.py +8 -0
  268. agentex/types/task_list_response.py +10 -0
  269. agentex/types/task_message.py +33 -0
  270. agentex/types/task_message_content.py +16 -0
  271. agentex/types/task_message_content_param.py +17 -0
  272. agentex/types/task_message_delta.py +16 -0
  273. agentex/types/text_content.py +53 -0
  274. agentex/types/text_content_param.py +54 -0
  275. agentex/types/text_delta.py +14 -0
  276. agentex/types/tool_request_content.py +36 -0
  277. agentex/types/tool_request_content_param.py +37 -0
  278. agentex/types/tool_request_delta.py +18 -0
  279. agentex/types/tool_response_content.py +36 -0
  280. agentex/types/tool_response_content_param.py +36 -0
  281. agentex/types/tool_response_delta.py +18 -0
  282. agentex/types/tracker_list_params.py +16 -0
  283. agentex/types/tracker_list_response.py +10 -0
  284. agentex/types/tracker_update_params.py +19 -0
  285. agentex_sdk-0.1.0a6.dist-info/METADATA +426 -0
  286. agentex_sdk-0.1.0a6.dist-info/RECORD +289 -0
  287. agentex_sdk-0.1.0a6.dist-info/WHEEL +4 -0
  288. agentex_sdk-0.1.0a6.dist-info/entry_points.txt +2 -0
  289. agentex_sdk-0.1.0a6.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,207 @@
1
+ from scale_gp import SGPClient, SGPClientError
2
+
3
+ from agentex import AsyncAgentex
4
+ from agentex.lib.core.adapters.llm.adapter_litellm import LiteLLMGateway
5
+ from agentex.lib.core.adapters.streams.adapter_redis import RedisEventStreamRepository
6
+ from agentex.lib.core.services.adk.acp.acp import ACPService
7
+ from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService
8
+ from agentex.lib.core.services.adk.events import EventsService
9
+ from agentex.lib.core.services.adk.messages import MessagesService
10
+ from agentex.lib.core.services.adk.providers.litellm import LiteLLMService
11
+ from agentex.lib.core.services.adk.providers.openai import OpenAIService
12
+ from agentex.lib.core.services.adk.providers.sgp import SGPService
13
+ from agentex.lib.core.services.adk.state import StateService
14
+ from agentex.lib.core.services.adk.streaming import StreamingService
15
+ from agentex.lib.core.services.adk.tasks import TasksService
16
+ from agentex.lib.core.services.adk.tracing import TracingService
17
+ from agentex.lib.core.services.adk.utils.templating import TemplatingService
18
+ from agentex.lib.core.temporal.activities.adk.acp.acp_activities import ACPActivities
19
+ from agentex.lib.core.temporal.activities.adk.agent_task_tracker_activities import (
20
+ AgentTaskTrackerActivities,
21
+ )
22
+ from agentex.lib.core.temporal.activities.adk.events_activities import EventsActivities
23
+ from agentex.lib.core.temporal.activities.adk.messages_activities import MessagesActivities
24
+ from agentex.lib.core.temporal.activities.adk.providers.litellm_activities import (
25
+ LiteLLMActivities,
26
+ )
27
+ from agentex.lib.core.temporal.activities.adk.providers.openai_activities import (
28
+ OpenAIActivities,
29
+ )
30
+ from agentex.lib.core.temporal.activities.adk.providers.sgp_activities import SGPActivities
31
+ from agentex.lib.core.temporal.activities.adk.state_activities import StateActivities
32
+ from agentex.lib.core.temporal.activities.adk.streaming_activities import (
33
+ StreamingActivities,
34
+ )
35
+ from agentex.lib.core.temporal.activities.adk.tasks_activities import TasksActivities
36
+ from agentex.lib.core.temporal.activities.adk.tracing_activities import TracingActivities
37
+ from agentex.lib.core.temporal.activities.adk.utils.templating_activities import (
38
+ TemplatingActivities,
39
+ )
40
+ from agentex.lib.core.tracing import AsyncTracer
41
+
42
+
43
+ def get_all_activities(sgp_client=None):
44
+ """
45
+ Returns a list of all standard activity functions that can be directly passed to worker.run().
46
+
47
+ Args:
48
+ sgp_client: Optional SGP client instance. If not provided, SGP activities will not be included.
49
+
50
+ Returns:
51
+ list: A list of activity functions ready to be passed to worker.run()
52
+ """
53
+ # Initialize common dependencies
54
+ try:
55
+ sgp_client = SGPClient()
56
+ except SGPClientError:
57
+ sgp_client = None
58
+
59
+ llm_gateway = LiteLLMGateway()
60
+ stream_repository = RedisEventStreamRepository()
61
+ agentex_client = AsyncAgentex()
62
+ tracer = AsyncTracer(agentex_client)
63
+
64
+ # Services
65
+
66
+ ## ADK
67
+ streaming_service = StreamingService(
68
+ agentex_client=agentex_client,
69
+ stream_repository=stream_repository,
70
+ )
71
+ messages_service = MessagesService(
72
+ agentex_client=agentex_client,
73
+ streaming_service=streaming_service,
74
+ tracer=tracer,
75
+ )
76
+ events_service = EventsService(
77
+ agentex_client=agentex_client,
78
+ tracer=tracer,
79
+ )
80
+ agent_task_tracker_service = AgentTaskTrackerService(
81
+ agentex_client=agentex_client,
82
+ tracer=tracer,
83
+ )
84
+ state_service = StateService(
85
+ agentex_client=agentex_client,
86
+ tracer=tracer,
87
+ )
88
+ tasks_service = TasksService(
89
+ agentex_client=agentex_client,
90
+ tracer=tracer,
91
+ )
92
+ tracing_service = TracingService(
93
+ tracer=tracer,
94
+ )
95
+
96
+ ## ACP
97
+ acp_service = ACPService(
98
+ agentex_client=agentex_client,
99
+ tracer=tracer,
100
+ )
101
+
102
+ ## Providers
103
+ litellm_service = LiteLLMService(
104
+ agentex_client=agentex_client,
105
+ llm_gateway=llm_gateway,
106
+ streaming_service=streaming_service,
107
+ tracer=tracer,
108
+ )
109
+ openai_service = OpenAIService(
110
+ agentex_client=agentex_client,
111
+ streaming_service=streaming_service,
112
+ tracer=tracer,
113
+ )
114
+ sgp_service = None
115
+ if sgp_client is not None:
116
+ sgp_service = SGPService(
117
+ sgp_client=sgp_client,
118
+ tracer=tracer,
119
+ )
120
+
121
+ ## Utils
122
+ templating_service = TemplatingService(
123
+ tracer=tracer,
124
+ )
125
+
126
+ # ADK
127
+
128
+ ## Core activities
129
+ messages_activities = MessagesActivities(messages_service=messages_service)
130
+ events_activities = EventsActivities(events_service=events_service)
131
+ agent_task_tracker_activities = AgentTaskTrackerActivities(
132
+ agent_task_tracker_service=agent_task_tracker_service
133
+ )
134
+ state_activities = StateActivities(state_service=state_service)
135
+ streaming_activities = StreamingActivities(streaming_service=streaming_service)
136
+ tasks_activities = TasksActivities(tasks_service=tasks_service)
137
+ tracing_activities = TracingActivities(tracing_service=tracing_service)
138
+
139
+ ## ACP
140
+ acp_activities = ACPActivities(acp_service=acp_service)
141
+
142
+ ## Providers
143
+ litellm_activities = LiteLLMActivities(litellm_service=litellm_service)
144
+ openai_activities = OpenAIActivities(openai_service=openai_service)
145
+ if sgp_client is not None:
146
+ sgp_activities = SGPActivities(sgp_service=sgp_service)
147
+ else:
148
+ sgp_activities = None
149
+
150
+ ## Utils
151
+ templating_activities = TemplatingActivities(templating_service=templating_service)
152
+
153
+ # Build list of standard activities
154
+ activities = [
155
+ # Core activities
156
+ ## Messages activities
157
+ messages_activities.create_message,
158
+ messages_activities.update_message,
159
+ messages_activities.create_messages_batch,
160
+ messages_activities.update_messages_batch,
161
+ messages_activities.list_messages,
162
+ ## Events activities
163
+ events_activities.get_event,
164
+ events_activities.list_events,
165
+ ## Agent Task Tracker activities
166
+ agent_task_tracker_activities.get_agent_task_tracker,
167
+ agent_task_tracker_activities.get_agent_task_tracker_by_task_and_agent,
168
+ agent_task_tracker_activities.update_agent_task_tracker,
169
+ ## State activities
170
+ state_activities.create_state,
171
+ state_activities.get_state,
172
+ state_activities.update_state,
173
+ state_activities.delete_state,
174
+ ## Streaming activities
175
+ streaming_activities.stream_update,
176
+ ## Tasks activities
177
+ tasks_activities.get_task,
178
+ tasks_activities.delete_task,
179
+ ## Tracing activities
180
+ tracing_activities.start_span,
181
+ tracing_activities.end_span,
182
+ # ACP activities
183
+ acp_activities.task_create,
184
+ acp_activities.message_send,
185
+ acp_activities.event_send,
186
+ acp_activities.task_cancel,
187
+ # Providers
188
+ ## LiteLLM activities
189
+ litellm_activities.chat_completion,
190
+ litellm_activities.chat_completion_auto_send,
191
+ litellm_activities.chat_completion_stream_auto_send,
192
+ ## OpenAI activities
193
+ openai_activities.run_agent,
194
+ openai_activities.run_agent_auto_send,
195
+ openai_activities.run_agent_streamed_auto_send,
196
+ # Utils
197
+ templating_activities.render_jinja,
198
+ ]
199
+
200
+ # SGP activities
201
+ if sgp_client is not None:
202
+ sgp_all_activities = [
203
+ sgp_activities.download_file_content,
204
+ ]
205
+ activities.extend(sgp_all_activities)
206
+
207
+ return activities
@@ -0,0 +1,37 @@
1
+ from datetime import timedelta
2
+ from typing import Any, TypeVar
3
+
4
+ from pydantic import TypeAdapter
5
+ from temporalio import workflow
6
+ from temporalio.common import RetryPolicy
7
+
8
+ from agentex.lib.utils.model_utils import BaseModel
9
+
10
+ T = TypeVar("T", bound="BaseModel")
11
+
12
+
13
+ class ActivityHelpers:
14
+ @staticmethod
15
+ async def execute_activity(
16
+ activity_name: str,
17
+ request: BaseModel | str | int | float | bool | dict[str, Any] | list[Any],
18
+ response_type: Any,
19
+ start_to_close_timeout: timedelta | None = None,
20
+ heartbeat_timeout: timedelta | None = None,
21
+ retry_policy: RetryPolicy | None = None,
22
+ ) -> Any:
23
+ if start_to_close_timeout is None:
24
+ start_to_close_timeout = timedelta(seconds=10)
25
+ if retry_policy is None:
26
+ retry_policy = RetryPolicy(maximum_attempts=0)
27
+
28
+ response = await workflow.execute_activity(
29
+ activity=activity_name,
30
+ arg=request,
31
+ start_to_close_timeout=start_to_close_timeout,
32
+ retry_policy=retry_policy,
33
+ heartbeat_timeout=heartbeat_timeout,
34
+ )
35
+
36
+ adapter = TypeAdapter(response_type)
37
+ return adapter.validate_python(response)
File without changes
@@ -0,0 +1,86 @@
1
+ from enum import Enum
2
+ from typing import Any
3
+
4
+ from temporalio import activity
5
+
6
+ from agentex.lib.core.services.adk.acp.acp import ACPService
7
+ from agentex.types.event import Event
8
+ from agentex.types.task_message import TaskMessage
9
+ from agentex.types.task_message_content import TaskMessageContent
10
+ from agentex.types.task import Task
11
+ from agentex.lib.types.tracing import BaseModelWithTraceParams
12
+ from agentex.lib.utils.logging import make_logger
13
+
14
+ logger = make_logger(__name__)
15
+
16
+
17
+ class ACPActivityName(str, Enum):
18
+ TASK_CREATE = "task-create"
19
+ MESSAGE_SEND = "message-send"
20
+ EVENT_SEND = "event-send"
21
+ TASK_CANCEL = "task-cancel"
22
+
23
+
24
+ class TaskCreateParams(BaseModelWithTraceParams):
25
+ name: str | None = None
26
+ agent_id: str | None = None
27
+ agent_name: str | None = None
28
+ params: dict[str, Any] | None = None
29
+
30
+
31
+ class MessageSendParams(BaseModelWithTraceParams):
32
+ agent_id: str | None = None
33
+ agent_name: str | None = None
34
+ task_id: str | None = None
35
+ content: TaskMessageContent
36
+
37
+
38
+ class EventSendParams(BaseModelWithTraceParams):
39
+ agent_id: str | None = None
40
+ agent_name: str | None = None
41
+ task_id: str | None = None
42
+ content: TaskMessageContent
43
+
44
+
45
+ class TaskCancelParams(BaseModelWithTraceParams):
46
+ task_id: str | None = None
47
+ task_name: str | None = None
48
+
49
+
50
+ class ACPActivities:
51
+ def __init__(self, acp_service: ACPService):
52
+ self._acp_service = acp_service
53
+
54
+ @activity.defn(name=ACPActivityName.TASK_CREATE)
55
+ async def task_create(self, params: TaskCreateParams) -> Task:
56
+ return await self._acp_service.task_create(
57
+ name=params.name,
58
+ agent_id=params.agent_id,
59
+ agent_name=params.agent_name,
60
+ params=params.params,
61
+ )
62
+
63
+ @activity.defn(name=ACPActivityName.MESSAGE_SEND)
64
+ async def message_send(self, params: MessageSendParams) -> TaskMessage:
65
+ return await self._acp_service.message_send(
66
+ agent_id=params.agent_id,
67
+ agent_name=params.agent_name,
68
+ task_id=params.task_id,
69
+ content=params.content,
70
+ )
71
+
72
+ @activity.defn(name=ACPActivityName.EVENT_SEND)
73
+ async def event_send(self, params: EventSendParams) -> Event:
74
+ return await self._acp_service.event_send(
75
+ agent_id=params.agent_id,
76
+ agent_name=params.agent_name,
77
+ task_id=params.task_id,
78
+ content=params.content,
79
+ )
80
+
81
+ @activity.defn(name=ACPActivityName.TASK_CANCEL)
82
+ async def task_cancel(self, params: TaskCancelParams) -> Task:
83
+ return await self._acp_service.task_cancel(
84
+ task_id=params.task_id,
85
+ task_name=params.task_name,
86
+ )
@@ -0,0 +1,76 @@
1
+ from enum import Enum
2
+
3
+ from temporalio import activity
4
+
5
+ from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService
6
+ from agentex.lib.types.tracing import BaseModelWithTraceParams
7
+ from agentex.lib.utils.logging import make_logger
8
+ from agentex.types.agent_task_tracker import AgentTaskTracker
9
+
10
+ logger = make_logger(__name__)
11
+
12
+
13
+ class AgentTaskTrackerActivityName(str, Enum):
14
+ GET_AGENT_TASK_TRACKER = "get-agent-task-tracker"
15
+ GET_AGENT_TASK_TRACKER_BY_TASK_AND_AGENT = (
16
+ "get-agent-task-tracker-by-task-and-agent"
17
+ )
18
+ UPDATE_AGENT_TASK_TRACKER = "update-agent-task-tracker"
19
+
20
+
21
+ class GetAgentTaskTrackerParams(BaseModelWithTraceParams):
22
+ tracker_id: str
23
+
24
+
25
+ class GetAgentTaskTrackerByTaskAndAgentParams(BaseModelWithTraceParams):
26
+ task_id: str
27
+ agent_id: str
28
+
29
+
30
+ class UpdateAgentTaskTrackerParams(BaseModelWithTraceParams):
31
+ tracker_id: str
32
+ last_processed_event_id: str | None
33
+ status: str | None
34
+ status_reason: str | None
35
+
36
+
37
+ class AgentTaskTrackerActivities:
38
+ def __init__(self, agent_task_tracker_service: AgentTaskTrackerService):
39
+ self._agent_task_tracker_service = agent_task_tracker_service
40
+
41
+ @activity.defn(name=AgentTaskTrackerActivityName.GET_AGENT_TASK_TRACKER)
42
+ async def get_agent_task_tracker(
43
+ self, params: GetAgentTaskTrackerParams
44
+ ) -> AgentTaskTracker:
45
+ return await self._agent_task_tracker_service.get_agent_task_tracker(
46
+ tracker_id=params.tracker_id,
47
+ trace_id=params.trace_id,
48
+ parent_span_id=params.parent_span_id,
49
+ )
50
+
51
+ @activity.defn(
52
+ name=AgentTaskTrackerActivityName.GET_AGENT_TASK_TRACKER_BY_TASK_AND_AGENT
53
+ )
54
+ async def get_agent_task_tracker_by_task_and_agent(
55
+ self,
56
+ params: GetAgentTaskTrackerByTaskAndAgentParams,
57
+ ) -> AgentTaskTracker | None:
58
+ return await self._agent_task_tracker_service.get_by_task_and_agent(
59
+ task_id=params.task_id,
60
+ agent_id=params.agent_id,
61
+ trace_id=params.trace_id,
62
+ parent_span_id=params.parent_span_id,
63
+ )
64
+
65
+ @activity.defn(name=AgentTaskTrackerActivityName.UPDATE_AGENT_TASK_TRACKER)
66
+ async def update_agent_task_tracker(
67
+ self, params: UpdateAgentTaskTrackerParams
68
+ ) -> AgentTaskTracker:
69
+ return await self._agent_task_tracker_service.update_agent_task_tracker(
70
+ tracker_id=params.tracker_id,
71
+ last_processed_event_id=params.last_processed_event_id,
72
+ status=params.status,
73
+ status_reason=params.status_reason,
74
+ trace_id=params.trace_id,
75
+ parent_span_id=params.parent_span_id,
76
+ )
@@ -0,0 +1,35 @@
1
+ from enum import Enum
2
+ from typing import Optional
3
+
4
+ from agentex.lib.core.services.adk.agents import AgentsService
5
+ from agentex.types.agent import Agent
6
+ from temporalio import activity
7
+
8
+ from agentex.lib.types.tracing import BaseModelWithTraceParams
9
+ from agentex.lib.utils.logging import make_logger
10
+
11
+ logger = make_logger(__name__)
12
+
13
+
14
+ class AgentsActivityName(str, Enum):
15
+ GET_AGENT = "get-agent"
16
+
17
+
18
+ class GetAgentParams(BaseModelWithTraceParams):
19
+ agent_id: Optional[str] = None
20
+ agent_name: Optional[str] = None
21
+
22
+
23
+ class AgentsActivities:
24
+ def __init__(self, agents_service: AgentsService):
25
+ self._agents_service = agents_service
26
+
27
+ @activity.defn(name=AgentsActivityName.GET_AGENT)
28
+ async def get_agent(self, params: GetAgentParams) -> Agent | None:
29
+ return await self._agents_service.get_agent(
30
+ agent_id=params.agent_id,
31
+ agent_name=params.agent_name,
32
+ trace_id=params.trace_id,
33
+ parent_span_id=params.parent_span_id,
34
+ )
35
+
@@ -0,0 +1,50 @@
1
+ from enum import Enum
2
+
3
+ from temporalio import activity
4
+
5
+ from agentex.lib.core.services.adk.events import EventsService
6
+ from agentex.types.event import Event
7
+ from agentex.lib.types.tracing import BaseModelWithTraceParams
8
+ from agentex.lib.utils.logging import make_logger
9
+
10
+ logger = make_logger(__name__)
11
+
12
+
13
+ class EventsActivityName(str, Enum):
14
+ GET_EVENT = "get-event"
15
+ LIST_EVENTS = "list-events"
16
+
17
+
18
+ class GetEventParams(BaseModelWithTraceParams):
19
+ event_id: str
20
+
21
+
22
+ class ListEventsParams(BaseModelWithTraceParams):
23
+ task_id: str
24
+ agent_id: str
25
+ last_processed_event_id: str | None = None
26
+ limit: int | None = None
27
+
28
+
29
+ class EventsActivities:
30
+ def __init__(self, events_service: EventsService):
31
+ self._events_service = events_service
32
+
33
+ @activity.defn(name=EventsActivityName.GET_EVENT)
34
+ async def get_event(self, params: GetEventParams) -> Event | None:
35
+ return await self._events_service.get_event(
36
+ event_id=params.event_id,
37
+ trace_id=params.trace_id,
38
+ parent_span_id=params.parent_span_id,
39
+ )
40
+
41
+ @activity.defn(name=EventsActivityName.LIST_EVENTS)
42
+ async def list_events(self, params: ListEventsParams) -> list[Event]:
43
+ return await self._events_service.list_events(
44
+ task_id=params.task_id,
45
+ agent_id=params.agent_id,
46
+ last_processed_event_id=params.last_processed_event_id,
47
+ limit=params.limit,
48
+ trace_id=params.trace_id,
49
+ parent_span_id=params.parent_span_id,
50
+ )
@@ -0,0 +1,94 @@
1
+ from enum import Enum
2
+
3
+ from temporalio import activity
4
+
5
+ from agentex.lib.core.services.adk.messages import MessagesService
6
+ from agentex.types.task_message import TaskMessage
7
+ from agentex.types.task_message_content import TaskMessageContent
8
+ from agentex.lib.types.tracing import BaseModelWithTraceParams
9
+ from agentex.lib.utils.logging import make_logger
10
+
11
+ logger = make_logger(__name__)
12
+
13
+
14
+ class MessagesActivityName(str, Enum):
15
+ CREATE_MESSAGE = "create-message"
16
+ UPDATE_MESSAGE = "update-message"
17
+ CREATE_MESSAGES_BATCH = "create-messages-batch"
18
+ UPDATE_MESSAGES_BATCH = "update-messages-batch"
19
+ LIST_MESSAGES = "list-messages"
20
+
21
+
22
+ class CreateMessageParams(BaseModelWithTraceParams):
23
+ task_id: str
24
+ content: TaskMessageContent
25
+ emit_updates: bool = True
26
+
27
+
28
+ class UpdateMessageParams(BaseModelWithTraceParams):
29
+ task_id: str
30
+ message_id: str
31
+ content: TaskMessageContent
32
+
33
+
34
+ class CreateMessagesBatchParams(BaseModelWithTraceParams):
35
+ task_id: str
36
+ contents: list[TaskMessageContent]
37
+ emit_updates: bool = True
38
+
39
+
40
+ class UpdateMessagesBatchParams(BaseModelWithTraceParams):
41
+ task_id: str
42
+ updates: dict[str, TaskMessageContent]
43
+
44
+
45
+ class ListMessagesParams(BaseModelWithTraceParams):
46
+ task_id: str
47
+ limit: int | None = None
48
+
49
+
50
+ class MessagesActivities:
51
+ def __init__(self, messages_service: MessagesService):
52
+ self._messages_service = messages_service
53
+
54
+ @activity.defn(name=MessagesActivityName.CREATE_MESSAGE)
55
+ async def create_message(self, params: CreateMessageParams) -> TaskMessage:
56
+ return await self._messages_service.create_message(
57
+ task_id=params.task_id,
58
+ content=params.content,
59
+ emit_updates=params.emit_updates,
60
+ )
61
+
62
+ @activity.defn(name=MessagesActivityName.UPDATE_MESSAGE)
63
+ async def update_message(self, params: UpdateMessageParams) -> TaskMessage:
64
+ return await self._messages_service.update_message(
65
+ task_id=params.task_id,
66
+ message_id=params.message_id,
67
+ content=params.content,
68
+ )
69
+
70
+ @activity.defn(name=MessagesActivityName.CREATE_MESSAGES_BATCH)
71
+ async def create_messages_batch(
72
+ self, params: CreateMessagesBatchParams
73
+ ) -> list[TaskMessage]:
74
+ return await self._messages_service.create_messages_batch(
75
+ task_id=params.task_id,
76
+ contents=params.contents,
77
+ emit_updates=params.emit_updates,
78
+ )
79
+
80
+ @activity.defn(name=MessagesActivityName.UPDATE_MESSAGES_BATCH)
81
+ async def update_messages_batch(
82
+ self, params: UpdateMessagesBatchParams
83
+ ) -> list[TaskMessage]:
84
+ return await self._messages_service.update_messages_batch(
85
+ task_id=params.task_id,
86
+ updates=params.updates,
87
+ )
88
+
89
+ @activity.defn(name=MessagesActivityName.LIST_MESSAGES)
90
+ async def list_messages(self, params: ListMessagesParams) -> list[TaskMessage]:
91
+ return await self._messages_service.list_messages(
92
+ task_id=params.task_id,
93
+ limit=params.limit,
94
+ )
@@ -0,0 +1,71 @@
1
+ from enum import Enum
2
+
3
+ from temporalio import activity
4
+
5
+ from agentex.lib.core.services.adk.providers.litellm import LiteLLMService
6
+ from agentex.lib.types.llm_messages import Completion, LLMConfig
7
+ from agentex.types.task_message import TaskMessage
8
+ from agentex.lib.types.tracing import BaseModelWithTraceParams
9
+ from agentex.lib.utils import logging
10
+
11
+ logger = logging.make_logger(__name__)
12
+
13
+
14
+ class LiteLLMActivityName(str, Enum):
15
+ CHAT_COMPLETION = "chat-completion"
16
+ CHAT_COMPLETION_AUTO_SEND = "chat-completion-auto-send"
17
+ # Note: CHAT_COMPLETION_STREAM is not supported in Temporal due to generator limitations
18
+ CHAT_COMPLETION_STREAM_AUTO_SEND = "chat-completion-stream-auto-send"
19
+
20
+
21
+ class ChatCompletionParams(BaseModelWithTraceParams):
22
+ llm_config: LLMConfig
23
+
24
+
25
+ class ChatCompletionAutoSendParams(BaseModelWithTraceParams):
26
+ task_id: str
27
+ llm_config: LLMConfig
28
+
29
+
30
+ class ChatCompletionStreamAutoSendParams(BaseModelWithTraceParams):
31
+ task_id: str
32
+ llm_config: LLMConfig
33
+
34
+
35
+ class LiteLLMActivities:
36
+ def __init__(self, litellm_service: LiteLLMService):
37
+ self._litellm_service = litellm_service
38
+
39
+ @activity.defn(name=LiteLLMActivityName.CHAT_COMPLETION)
40
+ async def chat_completion(self, params: ChatCompletionParams) -> Completion:
41
+ return await self._litellm_service.chat_completion(
42
+ llm_config=params.llm_config,
43
+ trace_id=params.trace_id,
44
+ parent_span_id=params.parent_span_id,
45
+ )
46
+
47
+ @activity.defn(name=LiteLLMActivityName.CHAT_COMPLETION_AUTO_SEND)
48
+ async def chat_completion_auto_send(self, params: ChatCompletionAutoSendParams) -> TaskMessage | None:
49
+ """
50
+ Activity for non-streaming chat completion with automatic TaskMessage creation.
51
+ """
52
+ return await self._litellm_service.chat_completion_auto_send(
53
+ task_id=params.task_id,
54
+ llm_config=params.llm_config,
55
+ trace_id=params.trace_id,
56
+ parent_span_id=params.parent_span_id,
57
+ )
58
+
59
+ @activity.defn(name=LiteLLMActivityName.CHAT_COMPLETION_STREAM_AUTO_SEND)
60
+ async def chat_completion_stream_auto_send(
61
+ self, params: ChatCompletionStreamAutoSendParams
62
+ ) -> TaskMessage | None:
63
+ """
64
+ Activity for streaming chat completion with automatic TaskMessage creation.
65
+ """
66
+ return await self._litellm_service.chat_completion_stream_auto_send(
67
+ task_id=params.task_id,
68
+ llm_config=params.llm_config,
69
+ trace_id=params.trace_id,
70
+ parent_span_id=params.parent_span_id,
71
+ )