agentex-sdk 0.4.19__py3-none-any.whl → 0.4.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 (129) hide show
  1. agentex/__init__.py +0 -1
  2. agentex/_utils/_typing.py +3 -1
  3. agentex/_version.py +1 -1
  4. agentex/lib/adk/__init__.py +3 -0
  5. agentex/lib/adk/_modules/acp.py +3 -1
  6. agentex/lib/adk/_modules/agent_task_tracker.py +3 -1
  7. agentex/lib/adk/_modules/agents.py +3 -1
  8. agentex/lib/adk/_modules/events.py +3 -1
  9. agentex/lib/adk/_modules/messages.py +3 -1
  10. agentex/lib/adk/_modules/state.py +3 -1
  11. agentex/lib/adk/_modules/streaming.py +3 -1
  12. agentex/lib/adk/_modules/tasks.py +4 -2
  13. agentex/lib/adk/_modules/tracing.py +3 -1
  14. agentex/lib/adk/providers/__init__.py +2 -2
  15. agentex/lib/adk/providers/_modules/litellm.py +10 -11
  16. agentex/lib/adk/providers/_modules/openai.py +27 -28
  17. agentex/lib/adk/providers/_modules/sgp.py +5 -6
  18. agentex/lib/adk/utils/_modules/client.py +4 -1
  19. agentex/lib/adk/utils/_modules/templating.py +5 -6
  20. agentex/lib/cli/commands/agents.py +21 -21
  21. agentex/lib/cli/commands/init.py +3 -3
  22. agentex/lib/cli/commands/main.py +3 -3
  23. agentex/lib/cli/commands/secrets.py +10 -10
  24. agentex/lib/cli/commands/tasks.py +26 -28
  25. agentex/lib/cli/commands/uv.py +1 -1
  26. agentex/lib/cli/debug/__init__.py +1 -1
  27. agentex/lib/cli/debug/debug_config.py +1 -2
  28. agentex/lib/cli/debug/debug_handlers.py +6 -4
  29. agentex/lib/cli/handlers/agent_handlers.py +15 -16
  30. agentex/lib/cli/handlers/cleanup_handlers.py +1 -1
  31. agentex/lib/cli/handlers/deploy_handlers.py +20 -39
  32. agentex/lib/cli/handlers/run_handlers.py +13 -16
  33. agentex/lib/cli/handlers/secret_handlers.py +25 -25
  34. agentex/lib/cli/templates/temporal/project/acp.py.j2 +11 -8
  35. agentex/lib/cli/utils/auth_utils.py +3 -2
  36. agentex/lib/cli/utils/credential_utils.py +1 -1
  37. agentex/lib/cli/utils/kubectl_utils.py +3 -3
  38. agentex/lib/cli/utils/kubernetes_secrets_utils.py +4 -4
  39. agentex/lib/cli/utils/path_utils.py +2 -2
  40. agentex/lib/core/adapters/llm/adapter_litellm.py +9 -4
  41. agentex/lib/core/adapters/llm/adapter_sgp.py +10 -7
  42. agentex/lib/core/adapters/llm/port.py +1 -1
  43. agentex/lib/core/adapters/streams/adapter_redis.py +7 -4
  44. agentex/lib/core/adapters/streams/port.py +1 -1
  45. agentex/lib/core/clients/temporal/temporal_client.py +34 -34
  46. agentex/lib/core/clients/temporal/types.py +1 -1
  47. agentex/lib/core/clients/temporal/utils.py +9 -12
  48. agentex/lib/core/services/adk/acp/acp.py +6 -6
  49. agentex/lib/core/services/adk/agent_task_tracker.py +1 -1
  50. agentex/lib/core/services/adk/agents.py +1 -1
  51. agentex/lib/core/services/adk/events.py +1 -1
  52. agentex/lib/core/services/adk/messages.py +5 -6
  53. agentex/lib/core/services/adk/providers/litellm.py +10 -10
  54. agentex/lib/core/services/adk/providers/openai.py +75 -43
  55. agentex/lib/core/services/adk/providers/sgp.py +3 -3
  56. agentex/lib/core/services/adk/state.py +5 -1
  57. agentex/lib/core/services/adk/streaming.py +19 -19
  58. agentex/lib/core/services/adk/tasks.py +8 -2
  59. agentex/lib/core/services/adk/tracing.py +3 -2
  60. agentex/lib/core/services/adk/utils/templating.py +4 -2
  61. agentex/lib/core/temporal/activities/__init__.py +27 -27
  62. agentex/lib/core/temporal/activities/activity_helpers.py +1 -1
  63. agentex/lib/core/temporal/activities/adk/acp/acp_activities.py +4 -4
  64. agentex/lib/core/temporal/activities/adk/agent_task_tracker_activities.py +1 -1
  65. agentex/lib/core/temporal/activities/adk/agents_activities.py +2 -2
  66. agentex/lib/core/temporal/activities/adk/events_activities.py +1 -1
  67. agentex/lib/core/temporal/activities/adk/messages_activities.py +3 -3
  68. agentex/lib/core/temporal/activities/adk/providers/litellm_activities.py +4 -4
  69. agentex/lib/core/temporal/activities/adk/providers/sgp_activities.py +1 -1
  70. agentex/lib/core/temporal/activities/adk/state_activities.py +1 -1
  71. agentex/lib/core/temporal/activities/adk/streaming_activities.py +3 -3
  72. agentex/lib/core/temporal/activities/adk/tasks_activities.py +2 -2
  73. agentex/lib/core/temporal/activities/adk/tracing_activities.py +1 -1
  74. agentex/lib/core/temporal/activities/adk/utils/templating_activities.py +1 -1
  75. agentex/lib/core/temporal/services/temporal_task_service.py +7 -7
  76. agentex/lib/core/temporal/workers/worker.py +31 -40
  77. agentex/lib/core/temporal/workflows/workflow.py +2 -2
  78. agentex/lib/core/tracing/__init__.py +2 -2
  79. agentex/lib/core/tracing/processors/agentex_tracing_processor.py +6 -6
  80. agentex/lib/core/tracing/processors/sgp_tracing_processor.py +16 -16
  81. agentex/lib/core/tracing/processors/tracing_processor_interface.py +1 -1
  82. agentex/lib/core/tracing/trace.py +7 -7
  83. agentex/lib/core/tracing/tracer.py +2 -2
  84. agentex/lib/core/tracing/tracing_processor_manager.py +43 -13
  85. agentex/lib/environment_variables.py +4 -4
  86. agentex/lib/sdk/config/agent_config.py +2 -2
  87. agentex/lib/sdk/config/agent_manifest.py +8 -8
  88. agentex/lib/sdk/config/project_config.py +6 -6
  89. agentex/lib/sdk/config/validation.py +2 -2
  90. agentex/lib/sdk/fastacp/base/base_acp_server.py +16 -16
  91. agentex/lib/sdk/fastacp/fastacp.py +14 -15
  92. agentex/lib/sdk/fastacp/impl/agentic_base_acp.py +4 -5
  93. agentex/lib/sdk/fastacp/impl/sync_acp.py +7 -7
  94. agentex/lib/sdk/fastacp/impl/temporal_acp.py +28 -19
  95. agentex/lib/sdk/fastacp/tests/conftest.py +18 -16
  96. agentex/lib/sdk/fastacp/tests/run_tests.py +1 -1
  97. agentex/lib/sdk/fastacp/tests/test_base_acp_server.py +4 -4
  98. agentex/lib/sdk/fastacp/tests/test_fastacp_factory.py +8 -8
  99. agentex/lib/sdk/fastacp/tests/test_integration.py +15 -14
  100. agentex/lib/sdk/state_machine/__init__.py +1 -1
  101. agentex/lib/sdk/state_machine/noop_workflow.py +5 -3
  102. agentex/lib/sdk/state_machine/state_machine.py +18 -12
  103. agentex/lib/sdk/utils/messages.py +5 -5
  104. agentex/lib/types/acp.py +2 -2
  105. agentex/lib/types/agent_configs.py +1 -1
  106. agentex/lib/types/converters.py +4 -2
  107. agentex/lib/types/credentials.py +1 -1
  108. agentex/lib/types/fastacp.py +4 -5
  109. agentex/lib/types/tracing.py +1 -1
  110. agentex/lib/utils/completions.py +5 -5
  111. agentex/lib/utils/console.py +1 -1
  112. agentex/lib/utils/debug.py +10 -5
  113. agentex/lib/utils/dev_tools/async_messages.py +11 -12
  114. agentex/lib/utils/iterables.py +1 -1
  115. agentex/lib/utils/json_schema.py +4 -4
  116. agentex/lib/utils/logging.py +7 -7
  117. agentex/lib/utils/mcp.py +1 -0
  118. agentex/lib/utils/model_utils.py +4 -5
  119. agentex/lib/utils/registration.py +5 -4
  120. agentex/resources/agents.py +11 -4
  121. agentex/types/agent_rpc_response.py +3 -3
  122. agentex/types/data_content.py +1 -1
  123. agentex/types/tool_request_content.py +1 -1
  124. agentex/types/tool_response_content.py +0 -1
  125. {agentex_sdk-0.4.19.dist-info → agentex_sdk-0.4.20.dist-info}/METADATA +1 -1
  126. {agentex_sdk-0.4.19.dist-info → agentex_sdk-0.4.20.dist-info}/RECORD +129 -129
  127. {agentex_sdk-0.4.19.dist-info → agentex_sdk-0.4.20.dist-info}/WHEEL +0 -0
  128. {agentex_sdk-0.4.19.dist-info → agentex_sdk-0.4.20.dist-info}/entry_points.txt +0 -0
  129. {agentex_sdk-0.4.19.dist-info → agentex_sdk-0.4.20.dist-info}/licenses/LICENSE +0 -0
@@ -1,51 +1,51 @@
1
1
  # Standard library imports
2
- from contextlib import AsyncExitStack, asynccontextmanager
3
2
  from typing import Any, Literal
3
+ from contextlib import AsyncExitStack, asynccontextmanager
4
4
 
5
+ from mcp import StdioServerParameters
5
6
  from agents import Agent, Runner, RunResult, RunResultStreaming
7
+ from pydantic import BaseModel
8
+ from agents.mcp import MCPServerStdio
6
9
  from agents.agent import StopAtTools, ToolsToFinalOutputFunction
7
10
  from agents.guardrail import InputGuardrail, OutputGuardrail
8
11
  from agents.exceptions import InputGuardrailTripwireTriggered, OutputGuardrailTripwireTriggered
9
- from agents.mcp import MCPServerStdio
10
- from mcp import StdioServerParameters
11
12
  from openai.types.responses import (
12
13
  ResponseCompletedEvent,
14
+ ResponseTextDeltaEvent,
13
15
  ResponseFunctionWebSearch,
14
- ResponseCodeInterpreterToolCall,
15
16
  ResponseOutputItemDoneEvent,
16
- ResponseTextDeltaEvent,
17
- ResponseReasoningSummaryTextDeltaEvent,
18
- ResponseReasoningSummaryTextDoneEvent,
19
- ResponseReasoningTextDeltaEvent,
20
17
  ResponseReasoningTextDoneEvent,
18
+ ResponseCodeInterpreterToolCall,
19
+ ResponseReasoningTextDeltaEvent,
20
+ ResponseReasoningSummaryTextDoneEvent,
21
+ ResponseReasoningSummaryTextDeltaEvent,
21
22
  )
22
- from pydantic import BaseModel
23
23
 
24
24
  # Local imports
25
25
  from agentex import AsyncAgentex
26
- from agentex.lib.core.services.adk.streaming import (
27
- StreamingService,
28
- StreamingTaskMessageContext,
29
- )
26
+ from agentex.lib.utils import logging
27
+ from agentex.lib.utils.mcp import redact_mcp_server_params
28
+ from agentex.lib.utils.temporal import heartbeat_if_in_workflow
30
29
  from agentex.lib.core.tracing.tracer import AsyncTracer
31
- from agentex.types.task_message_update import (
32
- StreamTaskMessageDelta,
33
- StreamTaskMessageFull,
34
- )
35
30
  from agentex.types.task_message_delta import (
36
31
  TextDelta,
37
- ReasoningSummaryDelta,
38
32
  ReasoningContentDelta,
33
+ ReasoningSummaryDelta,
34
+ )
35
+ from agentex.types.task_message_update import (
36
+ StreamTaskMessageFull,
37
+ StreamTaskMessageDelta,
39
38
  )
40
39
  from agentex.types.task_message_content import (
41
- ReasoningContent,
42
40
  TextContent,
41
+ ReasoningContent,
43
42
  ToolRequestContent,
44
43
  ToolResponseContent,
45
44
  )
46
- from agentex.lib.utils import logging
47
- from agentex.lib.utils.mcp import redact_mcp_server_params
48
- from agentex.lib.utils.temporal import heartbeat_if_in_workflow
45
+ from agentex.lib.core.services.adk.streaming import (
46
+ StreamingService,
47
+ StreamingTaskMessageContext,
48
+ )
49
49
 
50
50
  logger = logging.make_logger(__name__)
51
51
 
@@ -141,15 +141,15 @@ class OpenAIService:
141
141
  content = tool_output_item["output"]
142
142
  else:
143
143
  # Attribute access for structured objects
144
- call_id = getattr(tool_output_item, "call_id", None)
145
- content = getattr(tool_output_item, "output", None)
144
+ call_id = getattr(tool_output_item, "call_id", "")
145
+ content = getattr(tool_output_item, "output", "")
146
146
 
147
147
  # Get the name from the tool call map using generic approach
148
148
  tool_call = tool_call_map[call_id]
149
149
  if hasattr(tool_call, "name"):
150
- tool_name = getattr(tool_call, "name")
150
+ tool_name = tool_call.name
151
151
  elif hasattr(tool_call, "type"):
152
- tool_name = getattr(tool_call, "type")
152
+ tool_name = tool_call.type
153
153
  else:
154
154
  tool_name = type(tool_call).__name__
155
155
 
@@ -176,7 +176,7 @@ class OpenAIService:
176
176
  input_guardrails: list[InputGuardrail] | None = None,
177
177
  output_guardrails: list[OutputGuardrail] | None = None,
178
178
  max_turns: int | None = None,
179
- previous_response_id: str | None = None,
179
+ previous_response_id: str | None = None, # noqa: ARG002
180
180
  ) -> RunResult:
181
181
  """
182
182
  Run an agent without streaming or TaskMessage creation.
@@ -208,6 +208,8 @@ class OpenAIService:
208
208
  """
209
209
  redacted_params = redact_mcp_server_params(mcp_server_params)
210
210
 
211
+ if self.tracer is None:
212
+ raise RuntimeError("Tracer not initialized - ensure tracer is provided to OpenAIService")
211
213
  trace = self.tracer.trace(trace_id)
212
214
  async with trace.span(
213
215
  parent_id=parent_span_id,
@@ -230,8 +232,11 @@ class OpenAIService:
230
232
  heartbeat_if_in_workflow("run agent")
231
233
 
232
234
  async with mcp_server_context(mcp_server_params, mcp_timeout_seconds) as servers:
233
- tools = [tool.to_oai_function_tool() for tool in tools] if tools else []
234
- handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else []
235
+ tools = [
236
+ tool.to_oai_function_tool() if hasattr(tool, 'to_oai_function_tool') else tool # type: ignore[attr-defined]
237
+ for tool in tools
238
+ ] if tools else []
239
+ handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else [] # type: ignore[misc]
235
240
 
236
241
  agent_kwargs = {
237
242
  "name": agent_name,
@@ -245,7 +250,10 @@ class OpenAIService:
245
250
  "tool_use_behavior": tool_use_behavior,
246
251
  }
247
252
  if model_settings is not None:
248
- agent_kwargs["model_settings"] = model_settings.to_oai_model_settings()
253
+ agent_kwargs["model_settings"] = (
254
+ model_settings.to_oai_model_settings() if hasattr(model_settings, 'to_oai_model_settings') # type: ignore[attr-defined]
255
+ else model_settings
256
+ )
249
257
  if input_guardrails is not None:
250
258
  agent_kwargs["input_guardrails"] = input_guardrails
251
259
  if output_guardrails is not None:
@@ -303,7 +311,7 @@ class OpenAIService:
303
311
  input_guardrails: list[InputGuardrail] | None = None,
304
312
  output_guardrails: list[OutputGuardrail] | None = None,
305
313
  max_turns: int | None = None,
306
- previous_response_id: str | None = None,
314
+ previous_response_id: str | None = None, # noqa: ARG002
307
315
  ) -> RunResult:
308
316
  """
309
317
  Run an agent with automatic TaskMessage creation.
@@ -337,6 +345,8 @@ class OpenAIService:
337
345
 
338
346
  redacted_params = redact_mcp_server_params(mcp_server_params)
339
347
 
348
+ if self.tracer is None:
349
+ raise RuntimeError("Tracer not initialized - ensure tracer is provided to OpenAIService")
340
350
  trace = self.tracer.trace(trace_id)
341
351
  async with trace.span(
342
352
  parent_id=parent_span_id,
@@ -360,8 +370,11 @@ class OpenAIService:
360
370
  heartbeat_if_in_workflow("run agent auto send")
361
371
 
362
372
  async with mcp_server_context(mcp_server_params, mcp_timeout_seconds) as servers:
363
- tools = [tool.to_oai_function_tool() for tool in tools] if tools else []
364
- handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else []
373
+ tools = [
374
+ tool.to_oai_function_tool() if hasattr(tool, 'to_oai_function_tool') else tool # type: ignore[attr-defined]
375
+ for tool in tools
376
+ ] if tools else []
377
+ handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else [] # type: ignore[misc]
365
378
  agent_kwargs = {
366
379
  "name": agent_name,
367
380
  "instructions": agent_instructions,
@@ -374,7 +387,10 @@ class OpenAIService:
374
387
  "tool_use_behavior": tool_use_behavior,
375
388
  }
376
389
  if model_settings is not None:
377
- agent_kwargs["model_settings"] = model_settings.to_oai_model_settings()
390
+ agent_kwargs["model_settings"] = (
391
+ model_settings.to_oai_model_settings() if hasattr(model_settings, 'to_oai_model_settings') # type: ignore[attr-defined]
392
+ else model_settings
393
+ )
378
394
  if input_guardrails is not None:
379
395
  agent_kwargs["input_guardrails"] = input_guardrails
380
396
  if output_guardrails is not None:
@@ -414,7 +430,7 @@ class OpenAIService:
414
430
  if item.type == "message_output_item":
415
431
  text_content = TextContent(
416
432
  author="agent",
417
- content=item.raw_item.content[0].text,
433
+ content=item.raw_item.content[0].text, # type: ignore[union-attr]
418
434
  )
419
435
  # Create message for the final result using streaming context
420
436
  async with self.streaming_service.streaming_task_message_context(
@@ -504,7 +520,7 @@ class OpenAIService:
504
520
  input_guardrails: list[InputGuardrail] | None = None,
505
521
  output_guardrails: list[OutputGuardrail] | None = None,
506
522
  max_turns: int | None = None,
507
- previous_response_id: str | None = None,
523
+ previous_response_id: str | None = None, # noqa: ARG002
508
524
  ) -> RunResultStreaming:
509
525
  """
510
526
  Run an agent with streaming enabled but no TaskMessage creation.
@@ -534,6 +550,8 @@ class OpenAIService:
534
550
  Returns:
535
551
  RunResultStreaming: The result of the agent run with streaming.
536
552
  """
553
+ if self.tracer is None:
554
+ raise RuntimeError("Tracer not initialized - ensure tracer is provided to OpenAIService")
537
555
  trace = self.tracer.trace(trace_id)
538
556
  redacted_params = redact_mcp_server_params(mcp_server_params)
539
557
 
@@ -558,8 +576,11 @@ class OpenAIService:
558
576
  heartbeat_if_in_workflow("run agent streamed")
559
577
 
560
578
  async with mcp_server_context(mcp_server_params, mcp_timeout_seconds) as servers:
561
- tools = [tool.to_oai_function_tool() for tool in tools] if tools else []
562
- handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else []
579
+ tools = [
580
+ tool.to_oai_function_tool() if hasattr(tool, 'to_oai_function_tool') else tool # type: ignore[attr-defined]
581
+ for tool in tools
582
+ ] if tools else []
583
+ handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else [] # type: ignore[misc]
563
584
  agent_kwargs = {
564
585
  "name": agent_name,
565
586
  "instructions": agent_instructions,
@@ -572,7 +593,10 @@ class OpenAIService:
572
593
  "tool_use_behavior": tool_use_behavior,
573
594
  }
574
595
  if model_settings is not None:
575
- agent_kwargs["model_settings"] = model_settings.to_oai_model_settings()
596
+ agent_kwargs["model_settings"] = (
597
+ model_settings.to_oai_model_settings() if hasattr(model_settings, 'to_oai_model_settings') # type: ignore[attr-defined]
598
+ else model_settings
599
+ )
576
600
  if input_guardrails is not None:
577
601
  agent_kwargs["input_guardrails"] = input_guardrails
578
602
  if output_guardrails is not None:
@@ -630,7 +654,7 @@ class OpenAIService:
630
654
  input_guardrails: list[InputGuardrail] | None = None,
631
655
  output_guardrails: list[OutputGuardrail] | None = None,
632
656
  max_turns: int | None = None,
633
- previous_response_id: str | None = None,
657
+ previous_response_id: str | None = None, # noqa: ARG002
634
658
  ) -> RunResultStreaming:
635
659
  """
636
660
  Run an agent with streaming enabled and automatic TaskMessage creation.
@@ -669,6 +693,8 @@ class OpenAIService:
669
693
 
670
694
  tool_call_map: dict[str, Any] = {}
671
695
 
696
+ if self.tracer is None:
697
+ raise RuntimeError("Tracer not initialized - ensure tracer is provided to OpenAIService")
672
698
  trace = self.tracer.trace(trace_id)
673
699
  redacted_params = redact_mcp_server_params(mcp_server_params)
674
700
 
@@ -694,8 +720,11 @@ class OpenAIService:
694
720
  heartbeat_if_in_workflow("run agent streamed auto send")
695
721
 
696
722
  async with mcp_server_context(mcp_server_params, mcp_timeout_seconds) as servers:
697
- tools = [tool.to_oai_function_tool() for tool in tools] if tools else []
698
- handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else []
723
+ tools = [
724
+ tool.to_oai_function_tool() if hasattr(tool, 'to_oai_function_tool') else tool # type: ignore[attr-defined]
725
+ for tool in tools
726
+ ] if tools else []
727
+ handoffs = [Agent(**handoff.model_dump()) for handoff in handoffs] if handoffs else [] # type: ignore[misc]
699
728
  agent_kwargs = {
700
729
  "name": agent_name,
701
730
  "instructions": agent_instructions,
@@ -708,7 +737,10 @@ class OpenAIService:
708
737
  "tool_use_behavior": tool_use_behavior,
709
738
  }
710
739
  if model_settings is not None:
711
- agent_kwargs["model_settings"] = model_settings.to_oai_model_settings()
740
+ agent_kwargs["model_settings"] = (
741
+ model_settings.to_oai_model_settings() if hasattr(model_settings, 'to_oai_model_settings') # type: ignore[attr-defined]
742
+ else model_settings
743
+ )
712
744
  if input_guardrails is not None:
713
745
  agent_kwargs["input_guardrails"] = input_guardrails
714
746
  if output_guardrails is not None:
@@ -1,13 +1,13 @@
1
- import base64
2
1
  import os
2
+ import base64
3
3
  import tempfile
4
4
 
5
5
  from scale_gp import SGPClient
6
6
 
7
- from agentex.lib.core.tracing.tracer import AsyncTracer
8
7
  from agentex.lib.types.files import FileContentResponse
9
8
  from agentex.lib.utils.logging import make_logger
10
9
  from agentex.lib.utils.temporal import heartbeat_if_in_workflow
10
+ from agentex.lib.core.tracing.tracer import AsyncTracer
11
11
 
12
12
  logger = make_logger(__name__)
13
13
 
@@ -91,7 +91,7 @@ class SGPService:
91
91
  )
92
92
 
93
93
  # Record metadata for tracing
94
- span.output = {
94
+ span.output = { # type: ignore[union-attr]
95
95
  "file_id": file_id,
96
96
  "mime_type": result.mime_type,
97
97
  "content_size": len(result.base64_content),
@@ -1,9 +1,9 @@
1
1
  from typing import Any, Dict
2
2
 
3
3
  from agentex import AsyncAgentex
4
- from agentex.lib.core.tracing.tracer import AsyncTracer
5
4
  from agentex.types.state import State
6
5
  from agentex.lib.utils.logging import make_logger
6
+ from agentex.lib.core.tracing.tracer import AsyncTracer
7
7
 
8
8
  logger = make_logger(__name__)
9
9
 
@@ -47,6 +47,10 @@ class StateService:
47
47
  parent_span_id: str | None = None,
48
48
  ) -> State | None:
49
49
  trace = self._tracer.trace(trace_id) if self._tracer else None
50
+ if trace is None:
51
+ # Handle case without tracing - implement the core logic here
52
+ return await self._agentex_client.states.retrieve(state_id)
53
+
50
54
  async with trace.span(
51
55
  parent_id=parent_span_id,
52
56
  name="get_state",
@@ -2,33 +2,33 @@ import json
2
2
  from typing import Literal
3
3
 
4
4
  from agentex import AsyncAgentex
5
- from agentex.lib.core.adapters.streams.port import StreamRepository
6
- from agentex.types.task_message_update import (
7
- TaskMessageDelta,
8
- TaskMessageUpdate,
9
- StreamTaskMessageStart,
10
- StreamTaskMessageDelta,
11
- StreamTaskMessageFull,
12
- StreamTaskMessageDone,
5
+ from agentex.lib.utils.logging import make_logger
6
+ from agentex.types.data_content import DataContent
7
+ from agentex.types.task_message import (
8
+ TaskMessage,
9
+ TaskMessageContent,
13
10
  )
11
+ from agentex.types.text_content import TextContent
12
+ from agentex.types.reasoning_content import ReasoningContent
14
13
  from agentex.types.task_message_delta import (
15
- TextDelta,
16
14
  DataDelta,
15
+ TextDelta,
17
16
  ToolRequestDelta,
18
17
  ToolResponseDelta,
19
- ReasoningSummaryDelta,
20
18
  ReasoningContentDelta,
19
+ ReasoningSummaryDelta,
21
20
  )
22
- from agentex.lib.utils.logging import make_logger
23
- from agentex.types.data_content import DataContent
24
- from agentex.types.task_message import (
25
- TaskMessage,
26
- TaskMessageContent,
21
+ from agentex.types.task_message_update import (
22
+ TaskMessageDelta,
23
+ TaskMessageUpdate,
24
+ StreamTaskMessageDone,
25
+ StreamTaskMessageFull,
26
+ StreamTaskMessageDelta,
27
+ StreamTaskMessageStart,
27
28
  )
28
- from agentex.types.text_content import TextContent
29
29
  from agentex.types.tool_request_content import ToolRequestContent
30
30
  from agentex.types.tool_response_content import ToolResponseContent
31
- from agentex.types.reasoning_content import ReasoningContent
31
+ from agentex.lib.core.adapters.streams.port import StreamRepository
32
32
 
33
33
  logger = make_logger(__name__)
34
34
 
@@ -265,7 +265,7 @@ class StreamingTaskMessageContext:
265
265
  elif isinstance(update, StreamTaskMessageFull):
266
266
  await self._agentex_client.messages.update(
267
267
  task_id=self.task_id,
268
- message_id=update.parent_task_message.id,
268
+ message_id=update.parent_task_message.id, # type: ignore[union-attr]
269
269
  content=update.content.model_dump(),
270
270
  streaming_status="DONE",
271
271
  )
@@ -306,7 +306,7 @@ class StreamingService:
306
306
  Returns:
307
307
  True if event was streamed successfully, False otherwise
308
308
  """
309
- stream_topic = _get_stream_topic(update.parent_task_message.task_id)
309
+ stream_topic = _get_stream_topic(update.parent_task_message.task_id) # type: ignore[union-attr]
310
310
 
311
311
  try:
312
312
  await self._stream_repository.send_event(
@@ -1,8 +1,9 @@
1
1
  from agentex import AsyncAgentex
2
- from agentex.lib.core.tracing.tracer import AsyncTracer
3
2
  from agentex.types.task import Task
3
+ from agentex.types.shared import DeleteResponse
4
4
  from agentex.lib.utils.logging import make_logger
5
5
  from agentex.lib.utils.temporal import heartbeat_if_in_workflow
6
+ from agentex.lib.core.tracing.tracer import AsyncTracer
6
7
 
7
8
  logger = make_logger(__name__)
8
9
 
@@ -48,8 +49,13 @@ class TasksService:
48
49
  task_name: str | None = None,
49
50
  trace_id: str | None = None,
50
51
  parent_span_id: str | None = None,
51
- ) -> Task:
52
+ ) -> Task | DeleteResponse:
52
53
  trace = self._tracer.trace(trace_id) if self._tracer else None
54
+ if trace is None:
55
+ # Handle case without tracing
56
+ response = await self._agentex_client.tasks.delete(task_id)
57
+ return Task(**response.model_dump())
58
+
53
59
  async with trace.span(
54
60
  parent_id=parent_span_id,
55
61
  name="delete_task",
@@ -1,9 +1,10 @@
1
1
  from typing import Any
2
- from agentex.lib.core.tracing.tracer import AsyncTracer
2
+
3
3
  from agentex.types.span import Span
4
4
  from agentex.lib.utils.logging import make_logger
5
- from agentex.lib.utils.model_utils import BaseModel
6
5
  from agentex.lib.utils.temporal import heartbeat_if_in_workflow
6
+ from agentex.lib.utils.model_utils import BaseModel
7
+ from agentex.lib.core.tracing.tracer import AsyncTracer
7
8
 
8
9
  logger = make_logger(__name__)
9
10
 
@@ -1,10 +1,10 @@
1
- from datetime import datetime
2
1
  from typing import Any
2
+ from datetime import datetime
3
3
 
4
4
  from jinja2 import BaseLoader, Environment
5
5
 
6
- from agentex.lib.core.tracing.tracer import AsyncTracer
7
6
  from agentex.lib.utils.temporal import heartbeat_if_in_workflow
7
+ from agentex.lib.core.tracing.tracer import AsyncTracer
8
8
 
9
9
  # Create a Jinja environment
10
10
  JINJA_ENV = Environment(
@@ -38,6 +38,8 @@ class TemplatingService:
38
38
  Returns:
39
39
  The rendered template as a string
40
40
  """
41
+ if self.tracer is None:
42
+ raise RuntimeError("Tracer not initialized - ensure tracer is provided to TemplatingService")
41
43
  trace = self.tracer.trace(trace_id)
42
44
  async with trace.span(
43
45
  parent_id=parent_span_id,
@@ -1,45 +1,45 @@
1
1
  import httpx
2
- from agentex.lib.adk.utils._modules.client import create_async_agentex_client
3
2
  from scale_gp import SGPClient, SGPClientError
4
3
 
5
- from agentex import AsyncAgentex
6
- from agentex.lib.core.adapters.llm.adapter_litellm import LiteLLMGateway
7
- from agentex.lib.core.adapters.streams.adapter_redis import RedisStreamRepository
8
- from agentex.lib.core.services.adk.acp.acp import ACPService
9
- from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService
10
- from agentex.lib.core.services.adk.events import EventsService
11
- from agentex.lib.core.services.adk.messages import MessagesService
12
- from agentex.lib.core.services.adk.providers.litellm import LiteLLMService
13
- from agentex.lib.core.services.adk.providers.openai import OpenAIService
14
- from agentex.lib.core.services.adk.providers.sgp import SGPService
4
+ from agentex import AsyncAgentex # noqa: F401
5
+ from agentex.lib.core.tracing import AsyncTracer
15
6
  from agentex.lib.core.services.adk.state import StateService
16
- from agentex.lib.core.services.adk.streaming import StreamingService
17
7
  from agentex.lib.core.services.adk.tasks import TasksService
8
+ from agentex.lib.core.services.adk.events import EventsService
9
+ from agentex.lib.adk.utils._modules.client import create_async_agentex_client
10
+ from agentex.lib.core.services.adk.acp.acp import ACPService
18
11
  from agentex.lib.core.services.adk.tracing import TracingService
12
+ from agentex.lib.core.services.adk.messages import MessagesService
13
+ from agentex.lib.core.services.adk.streaming import StreamingService
14
+ from agentex.lib.core.services.adk.providers.sgp import SGPService
15
+ from agentex.lib.core.adapters.llm.adapter_litellm import LiteLLMGateway
16
+ from agentex.lib.core.services.adk.providers.openai import OpenAIService
19
17
  from agentex.lib.core.services.adk.utils.templating import TemplatingService
20
- from agentex.lib.core.temporal.activities.adk.acp.acp_activities import ACPActivities
21
- from agentex.lib.core.temporal.activities.adk.agent_task_tracker_activities import (
22
- AgentTaskTrackerActivities,
23
- )
18
+ from agentex.lib.core.adapters.streams.adapter_redis import RedisStreamRepository
19
+ from agentex.lib.core.services.adk.providers.litellm import LiteLLMService
20
+ from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService
21
+ from agentex.lib.core.temporal.activities.adk.state_activities import StateActivities
22
+ from agentex.lib.core.temporal.activities.adk.tasks_activities import TasksActivities
24
23
  from agentex.lib.core.temporal.activities.adk.events_activities import EventsActivities
24
+ from agentex.lib.core.temporal.activities.adk.acp.acp_activities import ACPActivities
25
+ from agentex.lib.core.temporal.activities.adk.tracing_activities import TracingActivities
25
26
  from agentex.lib.core.temporal.activities.adk.messages_activities import MessagesActivities
26
- from agentex.lib.core.temporal.activities.adk.providers.litellm_activities import (
27
- LiteLLMActivities,
27
+ from agentex.lib.core.temporal.activities.adk.streaming_activities import (
28
+ StreamingActivities,
28
29
  )
30
+ from agentex.lib.core.temporal.activities.adk.providers.sgp_activities import SGPActivities
29
31
  from agentex.lib.core.temporal.activities.adk.providers.openai_activities import (
30
32
  OpenAIActivities,
31
33
  )
32
- from agentex.lib.core.temporal.activities.adk.providers.sgp_activities import SGPActivities
33
- from agentex.lib.core.temporal.activities.adk.state_activities import StateActivities
34
- from agentex.lib.core.temporal.activities.adk.streaming_activities import (
35
- StreamingActivities,
36
- )
37
- from agentex.lib.core.temporal.activities.adk.tasks_activities import TasksActivities
38
- from agentex.lib.core.temporal.activities.adk.tracing_activities import TracingActivities
39
34
  from agentex.lib.core.temporal.activities.adk.utils.templating_activities import (
40
35
  TemplatingActivities,
41
36
  )
42
- from agentex.lib.core.tracing import AsyncTracer
37
+ from agentex.lib.core.temporal.activities.adk.providers.litellm_activities import (
38
+ LiteLLMActivities,
39
+ )
40
+ from agentex.lib.core.temporal.activities.adk.agent_task_tracker_activities import (
41
+ AgentTaskTrackerActivities,
42
+ )
43
43
 
44
44
 
45
45
  def get_all_activities(sgp_client=None):
@@ -204,7 +204,7 @@ def get_all_activities(sgp_client=None):
204
204
  # SGP activities
205
205
  if sgp_client is not None:
206
206
  sgp_all_activities = [
207
- sgp_activities.download_file_content,
207
+ sgp_activities.download_file_content, # type: ignore[union-attr]
208
208
  ]
209
209
  activities.extend(sgp_all_activities)
210
210
 
@@ -1,5 +1,5 @@
1
- from datetime import timedelta
2
1
  from typing import Any, TypeVar
2
+ from datetime import timedelta
3
3
 
4
4
  from pydantic import TypeAdapter
5
5
  from temporalio import workflow
@@ -3,13 +3,13 @@ from typing import Any, List
3
3
 
4
4
  from temporalio import activity
5
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
6
  from agentex.types.task import Task
7
+ from agentex.types.event import Event
11
8
  from agentex.lib.types.tracing import BaseModelWithTraceParams
12
9
  from agentex.lib.utils.logging import make_logger
10
+ from agentex.types.task_message import TaskMessage
11
+ from agentex.types.task_message_content import TaskMessageContent
12
+ from agentex.lib.core.services.adk.acp.acp import ACPService
13
13
 
14
14
  logger = make_logger(__name__)
15
15
 
@@ -2,10 +2,10 @@ from enum import Enum
2
2
 
3
3
  from temporalio import activity
4
4
 
5
- from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService
6
5
  from agentex.lib.types.tracing import BaseModelWithTraceParams
7
6
  from agentex.lib.utils.logging import make_logger
8
7
  from agentex.types.agent_task_tracker import AgentTaskTracker
8
+ from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService
9
9
 
10
10
  logger = make_logger(__name__)
11
11
 
@@ -1,12 +1,12 @@
1
1
  from enum import Enum
2
2
  from typing import Optional
3
3
 
4
- from agentex.lib.core.services.adk.agents import AgentsService
5
- from agentex.types.agent import Agent
6
4
  from temporalio import activity
7
5
 
6
+ from agentex.types.agent import Agent
8
7
  from agentex.lib.types.tracing import BaseModelWithTraceParams
9
8
  from agentex.lib.utils.logging import make_logger
9
+ from agentex.lib.core.services.adk.agents import AgentsService
10
10
 
11
11
  logger = make_logger(__name__)
12
12
 
@@ -2,10 +2,10 @@ from enum import Enum
2
2
 
3
3
  from temporalio import activity
4
4
 
5
- from agentex.lib.core.services.adk.events import EventsService
6
5
  from agentex.types.event import Event
7
6
  from agentex.lib.types.tracing import BaseModelWithTraceParams
8
7
  from agentex.lib.utils.logging import make_logger
8
+ from agentex.lib.core.services.adk.events import EventsService
9
9
 
10
10
  logger = make_logger(__name__)
11
11
 
@@ -2,11 +2,11 @@ from enum import Enum
2
2
 
3
3
  from temporalio import activity
4
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
5
  from agentex.lib.types.tracing import BaseModelWithTraceParams
9
6
  from agentex.lib.utils.logging import make_logger
7
+ from agentex.types.task_message import TaskMessage
8
+ from agentex.types.task_message_content import TaskMessageContent
9
+ from agentex.lib.core.services.adk.messages import MessagesService
10
10
 
11
11
  logger = make_logger(__name__)
12
12
 
@@ -2,11 +2,11 @@ from enum import Enum
2
2
 
3
3
  from temporalio import activity
4
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
5
  from agentex.lib.utils import logging
6
+ from agentex.lib.types.tracing import BaseModelWithTraceParams
7
+ from agentex.types.task_message import TaskMessage
8
+ from agentex.lib.types.llm_messages import LLMConfig, Completion
9
+ from agentex.lib.core.services.adk.providers.litellm import LiteLLMService
10
10
 
11
11
  logger = logging.make_logger(__name__)
12
12
 
@@ -2,10 +2,10 @@ from enum import Enum
2
2
 
3
3
  from temporalio import activity
4
4
 
5
- from agentex.lib.core.services.adk.providers.sgp import SGPService
6
5
  from agentex.lib.types.files import FileContentResponse
7
6
  from agentex.lib.types.tracing import BaseModelWithTraceParams
8
7
  from agentex.lib.utils.logging import make_logger
8
+ from agentex.lib.core.services.adk.providers.sgp import SGPService
9
9
 
10
10
  logger = make_logger(__name__)
11
11
 
@@ -3,10 +3,10 @@ from typing import Any
3
3
 
4
4
  from temporalio import activity
5
5
 
6
- from agentex.lib.core.services.adk.state import StateService
7
6
  from agentex.types.state import State
8
7
  from agentex.lib.types.tracing import BaseModelWithTraceParams
9
8
  from agentex.lib.utils.logging import make_logger
9
+ from agentex.lib.core.services.adk.state import StateService
10
10
 
11
11
  logger = make_logger(__name__)
12
12