agentex-sdk 0.4.9__py3-none-any.whl → 0.4.11__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.
@@ -3,12 +3,14 @@ import base64
3
3
  from collections.abc import Callable
4
4
  from contextlib import AsyncExitStack, asynccontextmanager
5
5
  from enum import Enum
6
- from typing import Any, Literal, Optional, override
6
+ from typing import Any, Literal, Optional
7
7
 
8
8
  from pydantic import Field, PrivateAttr
9
9
 
10
10
  import cloudpickle
11
11
  from agents import RunContextWrapper, RunResult, RunResultStreaming
12
+ from agents.guardrail import InputGuardrail, OutputGuardrail
13
+ from agents.exceptions import InputGuardrailTripwireTriggered, OutputGuardrailTripwireTriggered
12
14
  from agents.mcp import MCPServerStdio, MCPServerStdioParams
13
15
  from agents.model_settings import ModelSettings as OAIModelSettings
14
16
  from agents.tool import FunctionTool as OAIFunctionTool
@@ -16,7 +18,6 @@ from mcp import StdioServerParameters
16
18
  from openai.types.responses.response_includable import ResponseIncludable
17
19
  from openai.types.shared.reasoning import Reasoning
18
20
  from temporalio import activity
19
-
20
21
  from agentex.lib.core.services.adk.providers.openai import OpenAIService
21
22
 
22
23
  # Local imports
@@ -133,6 +134,150 @@ class FunctionTool(BaseModelWithTraceParams):
133
134
  return OAIFunctionTool(**data)
134
135
 
135
136
 
137
+ class TemporalInputGuardrail(BaseModelWithTraceParams):
138
+ """Temporal-compatible wrapper for InputGuardrail with function
139
+ serialization."""
140
+ name: str
141
+ _guardrail_function: Callable = PrivateAttr()
142
+ guardrail_function_serialized: str = Field(
143
+ default="",
144
+ description=(
145
+ "Serialized guardrail function. Set automatically during initialization. "
146
+ "Pass `guardrail_function` to the constructor instead."
147
+ ),
148
+ )
149
+
150
+ def __init__(
151
+ self,
152
+ *,
153
+ guardrail_function: Optional[Callable] = None,
154
+ **data,
155
+ ):
156
+ """Initialize with function serialization support for Temporal."""
157
+ super().__init__(**data)
158
+ if not guardrail_function:
159
+ if not self.guardrail_function_serialized:
160
+ raise ValueError(
161
+ "One of `guardrail_function` or "
162
+ "`guardrail_function_serialized` should be set"
163
+ )
164
+ else:
165
+ guardrail_function = self._deserialize_callable(
166
+ self.guardrail_function_serialized
167
+ )
168
+ else:
169
+ self.guardrail_function_serialized = self._serialize_callable(
170
+ guardrail_function
171
+ )
172
+
173
+ self._guardrail_function = guardrail_function
174
+
175
+ @classmethod
176
+ def _deserialize_callable(cls, serialized: str) -> Callable:
177
+ encoded = serialized.encode()
178
+ serialized_bytes = base64.b64decode(encoded)
179
+ return cloudpickle.loads(serialized_bytes)
180
+
181
+ @classmethod
182
+ def _serialize_callable(cls, func: Callable) -> str:
183
+ serialized_bytes = cloudpickle.dumps(func)
184
+ encoded = base64.b64encode(serialized_bytes)
185
+ return encoded.decode()
186
+
187
+ @property
188
+ def guardrail_function(self) -> Callable:
189
+ if (self._guardrail_function is None and
190
+ self.guardrail_function_serialized):
191
+ self._guardrail_function = self._deserialize_callable(
192
+ self.guardrail_function_serialized
193
+ )
194
+ return self._guardrail_function
195
+
196
+ @guardrail_function.setter
197
+ def guardrail_function(self, value: Callable):
198
+ self.guardrail_function_serialized = self._serialize_callable(value)
199
+ self._guardrail_function = value
200
+
201
+ def to_oai_input_guardrail(self) -> InputGuardrail:
202
+ """Convert to OpenAI InputGuardrail."""
203
+ return InputGuardrail(
204
+ guardrail_function=self.guardrail_function,
205
+ name=self.name
206
+ )
207
+
208
+
209
+ class TemporalOutputGuardrail(BaseModelWithTraceParams):
210
+ """Temporal-compatible wrapper for OutputGuardrail with function
211
+ serialization."""
212
+ name: str
213
+ _guardrail_function: Callable = PrivateAttr()
214
+ guardrail_function_serialized: str = Field(
215
+ default="",
216
+ description=(
217
+ "Serialized guardrail function. Set automatically during initialization. "
218
+ "Pass `guardrail_function` to the constructor instead."
219
+ ),
220
+ )
221
+
222
+ def __init__(
223
+ self,
224
+ *,
225
+ guardrail_function: Optional[Callable] = None,
226
+ **data,
227
+ ):
228
+ """Initialize with function serialization support for Temporal."""
229
+ super().__init__(**data)
230
+ if not guardrail_function:
231
+ if not self.guardrail_function_serialized:
232
+ raise ValueError(
233
+ "One of `guardrail_function` or "
234
+ "`guardrail_function_serialized` should be set"
235
+ )
236
+ else:
237
+ guardrail_function = self._deserialize_callable(
238
+ self.guardrail_function_serialized
239
+ )
240
+ else:
241
+ self.guardrail_function_serialized = self._serialize_callable(
242
+ guardrail_function
243
+ )
244
+
245
+ self._guardrail_function = guardrail_function
246
+
247
+ @classmethod
248
+ def _deserialize_callable(cls, serialized: str) -> Callable:
249
+ encoded = serialized.encode()
250
+ serialized_bytes = base64.b64decode(encoded)
251
+ return cloudpickle.loads(serialized_bytes)
252
+
253
+ @classmethod
254
+ def _serialize_callable(cls, func: Callable) -> str:
255
+ serialized_bytes = cloudpickle.dumps(func)
256
+ encoded = base64.b64encode(serialized_bytes)
257
+ return encoded.decode()
258
+
259
+ @property
260
+ def guardrail_function(self) -> Callable:
261
+ if (self._guardrail_function is None and
262
+ self.guardrail_function_serialized):
263
+ self._guardrail_function = self._deserialize_callable(
264
+ self.guardrail_function_serialized
265
+ )
266
+ return self._guardrail_function
267
+
268
+ @guardrail_function.setter
269
+ def guardrail_function(self, value: Callable):
270
+ self.guardrail_function_serialized = self._serialize_callable(value)
271
+ self._guardrail_function = value
272
+
273
+ def to_oai_output_guardrail(self) -> OutputGuardrail:
274
+ """Convert to OpenAI OutputGuardrail."""
275
+ return OutputGuardrail(
276
+ guardrail_function=self.guardrail_function,
277
+ name=self.name
278
+ )
279
+
280
+
136
281
  class ModelSettings(BaseModelWithTraceParams):
137
282
  temperature: float | None = None
138
283
  top_p: float | None = None
@@ -172,6 +317,8 @@ class RunAgentParams(BaseModelWithTraceParams):
172
317
  output_type: Any = None
173
318
  tool_use_behavior: Literal["run_llm_again", "stop_on_first_tool"] = "run_llm_again"
174
319
  mcp_timeout_seconds: int | None = None
320
+ input_guardrails: list[TemporalInputGuardrail] | None = None
321
+ output_guardrails: list[TemporalOutputGuardrail] | None = None
175
322
 
176
323
 
177
324
  class RunAgentAutoSendParams(RunAgentParams):
@@ -214,6 +361,15 @@ class OpenAIActivities:
214
361
  @activity.defn(name=OpenAIActivityName.RUN_AGENT)
215
362
  async def run_agent(self, params: RunAgentParams) -> SerializableRunResult:
216
363
  """Run an agent without streaming or TaskMessage creation."""
364
+ # Convert Temporal guardrails to OpenAI guardrails
365
+ input_guardrails = None
366
+ if params.input_guardrails:
367
+ input_guardrails = [g.to_oai_input_guardrail() for g in params.input_guardrails]
368
+
369
+ output_guardrails = None
370
+ if params.output_guardrails:
371
+ output_guardrails = [g.to_oai_output_guardrail() for g in params.output_guardrails]
372
+
217
373
  result = await self._openai_service.run_agent(
218
374
  input_list=params.input_list,
219
375
  mcp_server_params=params.mcp_server_params,
@@ -228,6 +384,8 @@ class OpenAIActivities:
228
384
  tools=params.tools,
229
385
  output_type=params.output_type,
230
386
  tool_use_behavior=params.tool_use_behavior,
387
+ input_guardrails=input_guardrails,
388
+ output_guardrails=output_guardrails,
231
389
  )
232
390
  return self._to_serializable_run_result(result)
233
391
 
@@ -236,46 +394,154 @@ class OpenAIActivities:
236
394
  self, params: RunAgentAutoSendParams
237
395
  ) -> SerializableRunResult:
238
396
  """Run an agent with automatic TaskMessage creation."""
239
- result = await self._openai_service.run_agent_auto_send(
240
- task_id=params.task_id,
241
- input_list=params.input_list,
242
- mcp_server_params=params.mcp_server_params,
243
- agent_name=params.agent_name,
244
- agent_instructions=params.agent_instructions,
245
- trace_id=params.trace_id,
246
- parent_span_id=params.parent_span_id,
247
- handoff_description=params.handoff_description,
248
- handoffs=params.handoffs,
249
- model=params.model,
250
- model_settings=params.model_settings,
251
- tools=params.tools,
252
- output_type=params.output_type,
253
- tool_use_behavior=params.tool_use_behavior,
254
- )
255
- return self._to_serializable_run_result(result)
397
+ # Convert Temporal guardrails to OpenAI guardrails
398
+ input_guardrails = None
399
+ if params.input_guardrails:
400
+ input_guardrails = [g.to_oai_input_guardrail() for g in params.input_guardrails]
401
+
402
+ output_guardrails = None
403
+ if params.output_guardrails:
404
+ output_guardrails = [g.to_oai_output_guardrail() for g in params.output_guardrails]
405
+
406
+ try:
407
+ result = await self._openai_service.run_agent_auto_send(
408
+ task_id=params.task_id,
409
+ input_list=params.input_list,
410
+ mcp_server_params=params.mcp_server_params,
411
+ agent_name=params.agent_name,
412
+ agent_instructions=params.agent_instructions,
413
+ trace_id=params.trace_id,
414
+ parent_span_id=params.parent_span_id,
415
+ handoff_description=params.handoff_description,
416
+ handoffs=params.handoffs,
417
+ model=params.model,
418
+ model_settings=params.model_settings,
419
+ tools=params.tools,
420
+ output_type=params.output_type,
421
+ tool_use_behavior=params.tool_use_behavior,
422
+ input_guardrails=input_guardrails,
423
+ output_guardrails=output_guardrails,
424
+ )
425
+ return self._to_serializable_run_result(result)
426
+ except InputGuardrailTripwireTriggered as e:
427
+ # Handle guardrail trigger gracefully
428
+ rejection_message = "I'm sorry, but I cannot process this request due to a guardrail. Please try a different question."
429
+
430
+ # Try to extract rejection message from the guardrail result
431
+ if hasattr(e, 'guardrail_result') and hasattr(e.guardrail_result, 'output'):
432
+ output_info = getattr(e.guardrail_result.output, 'output_info', {})
433
+ if isinstance(output_info, dict) and 'rejection_message' in output_info:
434
+ rejection_message = output_info['rejection_message']
435
+
436
+ # Build the final input list with the rejection message
437
+ final_input_list = list(params.input_list or [])
438
+ final_input_list.append({
439
+ "role": "assistant",
440
+ "content": rejection_message
441
+ })
442
+
443
+ return SerializableRunResult(
444
+ final_output=rejection_message,
445
+ final_input_list=final_input_list
446
+ )
447
+ except OutputGuardrailTripwireTriggered as e:
448
+ # Handle output guardrail trigger gracefully
449
+ rejection_message = "I'm sorry, but I cannot provide this response due to a guardrail. Please try a different question."
450
+
451
+ # Try to extract rejection message from the guardrail result
452
+ if hasattr(e, 'guardrail_result') and hasattr(e.guardrail_result, 'output'):
453
+ output_info = getattr(e.guardrail_result.output, 'output_info', {})
454
+ if isinstance(output_info, dict) and 'rejection_message' in output_info:
455
+ rejection_message = output_info['rejection_message']
456
+
457
+ # Build the final input list with the rejection message
458
+ final_input_list = list(params.input_list or [])
459
+ final_input_list.append({
460
+ "role": "assistant",
461
+ "content": rejection_message
462
+ })
463
+
464
+ return SerializableRunResult(
465
+ final_output=rejection_message,
466
+ final_input_list=final_input_list
467
+ )
256
468
 
257
469
  @activity.defn(name=OpenAIActivityName.RUN_AGENT_STREAMED_AUTO_SEND)
258
470
  async def run_agent_streamed_auto_send(
259
471
  self, params: RunAgentStreamedAutoSendParams
260
472
  ) -> SerializableRunResultStreaming:
261
473
  """Run an agent with streaming and automatic TaskMessage creation."""
262
- result = await self._openai_service.run_agent_streamed_auto_send(
263
- task_id=params.task_id,
264
- input_list=params.input_list,
265
- mcp_server_params=params.mcp_server_params,
266
- agent_name=params.agent_name,
267
- agent_instructions=params.agent_instructions,
268
- trace_id=params.trace_id,
269
- parent_span_id=params.parent_span_id,
270
- handoff_description=params.handoff_description,
271
- handoffs=params.handoffs,
272
- model=params.model,
273
- model_settings=params.model_settings,
274
- tools=params.tools,
275
- output_type=params.output_type,
276
- tool_use_behavior=params.tool_use_behavior,
277
- )
278
- return self._to_serializable_run_result_streaming(result)
474
+ # Convert Temporal guardrails to OpenAI guardrails
475
+ input_guardrails = None
476
+ if params.input_guardrails:
477
+ input_guardrails = [g.to_oai_input_guardrail() for g in params.input_guardrails]
478
+
479
+ output_guardrails = None
480
+ if params.output_guardrails:
481
+ output_guardrails = [g.to_oai_output_guardrail() for g in params.output_guardrails]
482
+
483
+ try:
484
+ result = await self._openai_service.run_agent_streamed_auto_send(
485
+ task_id=params.task_id,
486
+ input_list=params.input_list,
487
+ mcp_server_params=params.mcp_server_params,
488
+ agent_name=params.agent_name,
489
+ agent_instructions=params.agent_instructions,
490
+ trace_id=params.trace_id,
491
+ parent_span_id=params.parent_span_id,
492
+ handoff_description=params.handoff_description,
493
+ handoffs=params.handoffs,
494
+ model=params.model,
495
+ model_settings=params.model_settings,
496
+ tools=params.tools,
497
+ output_type=params.output_type,
498
+ tool_use_behavior=params.tool_use_behavior,
499
+ input_guardrails=input_guardrails,
500
+ output_guardrails=output_guardrails,
501
+ )
502
+ return self._to_serializable_run_result_streaming(result)
503
+ except InputGuardrailTripwireTriggered as e:
504
+ # Handle guardrail trigger gracefully
505
+ rejection_message = "I'm sorry, but I cannot process this request due to a guardrail. Please try a different question."
506
+
507
+ # Try to extract rejection message from the guardrail result
508
+ if hasattr(e, 'guardrail_result') and hasattr(e.guardrail_result, 'output'):
509
+ output_info = getattr(e.guardrail_result.output, 'output_info', {})
510
+ if isinstance(output_info, dict) and 'rejection_message' in output_info:
511
+ rejection_message = output_info['rejection_message']
512
+
513
+ # Build the final input list with the rejection message
514
+ final_input_list = list(params.input_list or [])
515
+ final_input_list.append({
516
+ "role": "assistant",
517
+ "content": rejection_message
518
+ })
519
+
520
+ return SerializableRunResultStreaming(
521
+ final_output=rejection_message,
522
+ final_input_list=final_input_list
523
+ )
524
+ except OutputGuardrailTripwireTriggered as e:
525
+ # Handle output guardrail trigger gracefully
526
+ rejection_message = "I'm sorry, but I cannot provide this response due to a guardrail. Please try a different question."
527
+
528
+ # Try to extract rejection message from the guardrail result
529
+ if hasattr(e, 'guardrail_result') and hasattr(e.guardrail_result, 'output'):
530
+ output_info = getattr(e.guardrail_result.output, 'output_info', {})
531
+ if isinstance(output_info, dict) and 'rejection_message' in output_info:
532
+ rejection_message = output_info['rejection_message']
533
+
534
+ # Build the final input list with the rejection message
535
+ final_input_list = list(params.input_list or [])
536
+ final_input_list.append({
537
+ "role": "assistant",
538
+ "content": rejection_message
539
+ })
540
+
541
+ return SerializableRunResultStreaming(
542
+ final_output=rejection_message,
543
+ final_input_list=final_input_list
544
+ )
279
545
 
280
546
  @staticmethod
281
547
  def _to_serializable_run_result(result: RunResult) -> SerializableRunResult:
@@ -2,9 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import List, Optional
5
+ from typing import Optional
6
6
  from typing_extensions import Literal, Required, TypedDict
7
7
 
8
+ from .._types import SequenceNotStr
8
9
  from .message_style import MessageStyle
9
10
  from .message_author import MessageAuthor
10
11
 
@@ -18,10 +19,10 @@ class ReasoningContentParam(TypedDict, total=False):
18
19
  `tool`.
19
20
  """
20
21
 
21
- summary: Required[List[str]]
22
+ summary: Required[SequenceNotStr[str]]
22
23
  """A list of short reasoning summaries"""
23
24
 
24
- content: Optional[List[str]]
25
+ content: Optional[SequenceNotStr[str]]
25
26
  """The reasoning content or chain-of-thought text"""
26
27
 
27
28
  style: MessageStyle
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: agentex-sdk
3
- Version: 0.4.9
3
+ Version: 0.4.11
4
4
  Summary: The official Python library for the agentex API
5
5
  Project-URL: Homepage, https://github.com/scaleapi/agentex-python
6
6
  Project-URL: Repository, https://github.com/scaleapi/agentex-python
@@ -1,28 +1,30 @@
1
1
  agentex/__init__.py,sha256=j0BX5IfIjYaWdXQC7P4bh1Ev2-0bJe4Uh7IbqG551ng,2667
2
- agentex/_base_client.py,sha256=q63ijJoTHK1JW9gdjw-EH7seYy5rOJ3UlHSkZvGNt0M,67036
2
+ agentex/_base_client.py,sha256=Y_EaL4x9g7EsRADVD6vJ303tLO0iyB3K5SbTSvKCS2k,67048
3
3
  agentex/_client.py,sha256=Fae6qw42eIjFaENpQ5nrq5SyW1310UoHZGNrG-DSa_g,20493
4
- agentex/_compat.py,sha256=VWemUKbj6DDkQ-O4baSpHVLJafotzeXmCQGJugfVTIw,6580
4
+ agentex/_compat.py,sha256=DQBVORjFb33zch24jzkhM14msvnzY7mmSmgDLaVFUM8,6562
5
5
  agentex/_constants.py,sha256=S14PFzyN9-I31wiV7SmIlL5Ga0MLHxdvegInGdXH7tM,462
6
6
  agentex/_exceptions.py,sha256=B09aFjWFRSShb9BFJd-MNDblsGDyGk3w-vItYmjg_AI,3222
7
7
  agentex/_files.py,sha256=KnEzGi_O756MvKyJ4fOCW_u3JhOeWPQ4RsmDvqihDQU,3545
8
- agentex/_models.py,sha256=KvjsMfb88XZlFUKVoOxr8OyDj47MhoH2OKqWNEbBhk4,30010
8
+ agentex/_models.py,sha256=c29x_mRccdxlGwdUPfSR5eJxGXe74Ea5Dje5igZTrKQ,30024
9
9
  agentex/_qs.py,sha256=AOkSz4rHtK4YI3ZU_kzea-zpwBUgEY8WniGmTPyEimc,4846
10
10
  agentex/_resource.py,sha256=S1t7wmR5WUvoDIhZjo_x-E7uoTJBynJ3d8tPJMQYdjw,1106
11
11
  agentex/_response.py,sha256=Tb9zazsnemO2rTxWtBjAD5WBqlhli5ZaXGbiKgdu5DE,28794
12
12
  agentex/_streaming.py,sha256=FNGJExRCF-vTRUZHFKUfoAWFhDGOB3XbioVCF37Jr7E,10104
13
- agentex/_types.py,sha256=KyKYySGIfHPod2hho1fPxssk5NuVn8C4MeMTtA-lg80,6198
14
- agentex/_version.py,sha256=uP-Bz46kvosoPnuC2x255N_8qwRibejXkKPv4P-Gg9Q,159
13
+ agentex/_types.py,sha256=lO491FSd7vM_uBp7-TvItbauEAH8SsEPYcyNO_5lKGM,7297
14
+ agentex/_version.py,sha256=UYgXD2yMmHvxJnwHfei7jWGFpHJyHk2QvkCDUFQ7L5c,160
15
15
  agentex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- agentex/_utils/__init__.py,sha256=PNZ_QJuzZEgyYXqkO1HVhGkj5IU9bglVUcw7H-Knjzw,2062
16
+ agentex/_utils/__init__.py,sha256=7fch0GT9zpNnErbciSpUNa-SjTxxjY6kxHxKMOM4AGs,2305
17
+ agentex/_utils/_compat.py,sha256=D8gtAvjJQrDWt9upS0XaG9Rr5l1QhiAx_I_1utT_tt0,1195
18
+ agentex/_utils/_datetime_parse.py,sha256=bABTs0Bc6rabdFvnIwXjEhWL15TcRgWZ_6XGTqN8xUk,4204
17
19
  agentex/_utils/_logs.py,sha256=LUjFPc3fweSChBUmjhQD8uYmwQAmFMNDuVFKfjYBQfM,777
18
20
  agentex/_utils/_proxy.py,sha256=aglnj2yBTDyGX9Akk2crZHrl10oqRmceUy2Zp008XEs,1975
19
21
  agentex/_utils/_reflection.py,sha256=ZmGkIgT_PuwedyNBrrKGbxoWtkpytJNU1uU4QHnmEMU,1364
20
22
  agentex/_utils/_resources_proxy.py,sha256=W1Rrg7LVZHLIUq40nOfgQv6orKG16CKqDRKHiaSUVYg,594
21
23
  agentex/_utils/_streams.py,sha256=SMC90diFFecpEg_zgDRVbdR3hSEIgVVij4taD-noMLM,289
22
24
  agentex/_utils/_sync.py,sha256=TpGLrrhRNWTJtODNE6Fup3_k7zrWm1j2RlirzBwre-0,2862
23
- agentex/_utils/_transform.py,sha256=n7kskEWz6o__aoNvhFoGVyDoalNe6mJwp-g7BWkdj88,15617
24
- agentex/_utils/_typing.py,sha256=D0DbbNu8GnYQTSICnTSHDGsYXj8TcAKyhejb0XcnjtY,4602
25
- agentex/_utils/_utils.py,sha256=ts4CiiuNpFiGB6YMdkQRh2SZvYvsl7mAF-JWHCcLDf4,12312
25
+ agentex/_utils/_transform.py,sha256=i_U4R82RtQJtKKCriwFqmfcWjtwmmsiiF1AEXKQ_OPo,15957
26
+ agentex/_utils/_typing.py,sha256=N_5PPuFNsaygbtA_npZd98SVN1LQQvFTKL6bkWPBZGU,4786
27
+ agentex/_utils/_utils.py,sha256=D2QE7mVPNEJzaB50u8rvDQAUDS5jx7JoeFD7zdj-TeI,12231
26
28
  agentex/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
27
29
  agentex/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
30
  agentex/lib/environment_variables.py,sha256=6iWpCEURbahnLxZIjvJGES-zs7euUI8bxVXFN29tyYg,3242
@@ -41,7 +43,7 @@ agentex/lib/adk/_modules/tracing.py,sha256=A_kH332f_DFVfMftPHGEg3oi4RFcwDXohg7xt
41
43
  agentex/lib/adk/providers/__init__.py,sha256=KPWC8AYsl8lPgpFoRXlGwzozb-peKLAzV_DcTWXBsz4,306
42
44
  agentex/lib/adk/providers/_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
45
  agentex/lib/adk/providers/_modules/litellm.py,sha256=11LxGsverxarRgxoP7Ni17GOCZwSlQlxHBz7ksToEkc,9486
44
- agentex/lib/adk/providers/_modules/openai.py,sha256=QyjujK4JHiATB4xI9CiR67agcRhAPkNkcp4VqFsrqfk,17786
46
+ agentex/lib/adk/providers/_modules/openai.py,sha256=1zoFkvhHJH4Z5a5ZNQSqW28fOZuv33T5P7f4phy1aOY,20619
45
47
  agentex/lib/adk/providers/_modules/sgp.py,sha256=QszUPyeGBODfI5maYvlzErD87PsMsX6vrfC7n65WNjE,3224
46
48
  agentex/lib/adk/utils/__init__.py,sha256=7f6ayV0_fqyw5cwzVANNcZWGJZ-vrrYtZ0qi7KKBRFs,130
47
49
  agentex/lib/adk/utils/_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -65,7 +67,7 @@ agentex/lib/cli/handlers/deploy_handlers.py,sha256=qHmoTOUmSo7-GrFXFDFAYHDCgoKd7
65
67
  agentex/lib/cli/handlers/run_handlers.py,sha256=TMelCWTwFxUJJJ7At3zG-cXTn2mBmK1ZJuJ63Ero6xs,15396
66
68
  agentex/lib/cli/handlers/secret_handlers.py,sha256=VfAdAQovW9tG36Xgk_gGIGwTyFMxR3P6xc7fmAviNA8,24719
67
69
  agentex/lib/cli/templates/default/.dockerignore.j2,sha256=hweGFxw5eDZYsb5EnRHpv27o9M1HF2PEWOxqsfBBcAE,320
68
- agentex/lib/cli/templates/default/Dockerfile-uv.j2,sha256=I527RB_2Byn6tkBNVxxCq7ivVFJDgDNRSC7Vz2w9u4k,1060
70
+ agentex/lib/cli/templates/default/Dockerfile-uv.j2,sha256=9-xbz3mh5yGuSxtQ6FRltzY45OyUzvi1ZmlfwOioK-M,1085
69
71
  agentex/lib/cli/templates/default/Dockerfile.j2,sha256=Q-8T9mid_DfgZlQd6JFZKphdDngEsTLlqDvJtEvU_7k,1092
70
72
  agentex/lib/cli/templates/default/README.md.j2,sha256=4Sn_cY_TMfN_c5h-I_L3TgTrNKUvhzQvKGDZjS3n2Gw,6361
71
73
  agentex/lib/cli/templates/default/dev.ipynb.j2,sha256=8xY82gVfQ0mhzlEZzI4kLqIXCF19YgimLnpEirDMX8I,3395
@@ -75,7 +77,7 @@ agentex/lib/cli/templates/default/pyproject.toml.j2,sha256=eyN6dYqJTFzb5WztJMxbo
75
77
  agentex/lib/cli/templates/default/requirements.txt.j2,sha256=iTmO-z8qFkUa1jTctFCs0WYuq7Sqi6VNQAwATakh2fQ,94
76
78
  agentex/lib/cli/templates/default/project/acp.py.j2,sha256=XZsHNQaQDNvooarFt_NvM8rLQ-rpc_knKkNTPnRxtM4,1136
77
79
  agentex/lib/cli/templates/sync/.dockerignore.j2,sha256=hweGFxw5eDZYsb5EnRHpv27o9M1HF2PEWOxqsfBBcAE,320
78
- agentex/lib/cli/templates/sync/Dockerfile-uv.j2,sha256=I527RB_2Byn6tkBNVxxCq7ivVFJDgDNRSC7Vz2w9u4k,1060
80
+ agentex/lib/cli/templates/sync/Dockerfile-uv.j2,sha256=9-xbz3mh5yGuSxtQ6FRltzY45OyUzvi1ZmlfwOioK-M,1085
79
81
  agentex/lib/cli/templates/sync/Dockerfile.j2,sha256=-P2CwE84h4mwO1Gnl779c4MdoOcVX8_ndpesq9M4fQQ,1093
80
82
  agentex/lib/cli/templates/sync/README.md.j2,sha256=_S7Ngl4qOUQHPFldLXDBvuIWPFU2-WcuxGmr5EXLX6k,8816
81
83
  agentex/lib/cli/templates/sync/dev.ipynb.j2,sha256=Z42iRveuI_k5LcJqWX-3H1glPtNTkxg_MKVe1lwuJos,6055
@@ -85,16 +87,17 @@ agentex/lib/cli/templates/sync/pyproject.toml.j2,sha256=eyN6dYqJTFzb5WztJMxboy9W
85
87
  agentex/lib/cli/templates/sync/requirements.txt.j2,sha256=iTmO-z8qFkUa1jTctFCs0WYuq7Sqi6VNQAwATakh2fQ,94
86
88
  agentex/lib/cli/templates/sync/project/acp.py.j2,sha256=PUVXnN7IikBWYnfqLMgual-iXdl_benAjEfNcRADHBk,998
87
89
  agentex/lib/cli/templates/temporal/.dockerignore.j2,sha256=hweGFxw5eDZYsb5EnRHpv27o9M1HF2PEWOxqsfBBcAE,320
88
- agentex/lib/cli/templates/temporal/Dockerfile-uv.j2,sha256=_FNRUdE8m1jfcmYR3rZAAkm2mqyTCwUXbLs4dm4lZs8,1401
90
+ agentex/lib/cli/templates/temporal/Dockerfile-uv.j2,sha256=g8zECsR9_byvlc8bPdbY4Lw97w9nlWb8edx5FPiJav0,1426
89
91
  agentex/lib/cli/templates/temporal/Dockerfile.j2,sha256=N1Z73jb8pnxsjP9zbs-tSyNHO6usVzyOdtWorbR5gVY,1434
90
- agentex/lib/cli/templates/temporal/README.md.j2,sha256=d6BQAZBf7lCKROXnpDu-Ml1Rq0OM8cCFEOpmStoPWfc,10132
92
+ agentex/lib/cli/templates/temporal/README.md.j2,sha256=xIR3j97RA2F2x1PjfJTJ83YhoU108vS9WO1bZmM1vj8,10855
91
93
  agentex/lib/cli/templates/temporal/dev.ipynb.j2,sha256=8xY82gVfQ0mhzlEZzI4kLqIXCF19YgimLnpEirDMX8I,3395
92
94
  agentex/lib/cli/templates/temporal/environments.yaml.j2,sha256=WJq3WOac9mWCTcZnMrjIU65lBzYLBU5Qeo-pl9geV1w,2089
93
95
  agentex/lib/cli/templates/temporal/manifest.yaml.j2,sha256=Ic2CjQ-4tNCQhJ3phhAUj7a3xzijXegZ976glgj0-sg,4569
94
96
  agentex/lib/cli/templates/temporal/pyproject.toml.j2,sha256=MoR1g6KnGOQrXWOXhFKMw561kgpxy0tdom0KLtQe8A8,548
95
97
  agentex/lib/cli/templates/temporal/requirements.txt.j2,sha256=iTmO-z8qFkUa1jTctFCs0WYuq7Sqi6VNQAwATakh2fQ,94
96
98
  agentex/lib/cli/templates/temporal/project/acp.py.j2,sha256=Ha5oBaGT1WC93TEBfWMM7OtbmAYOF2t3PjY6uOL6mJE,2386
97
- agentex/lib/cli/templates/temporal/project/run_worker.py.j2,sha256=ozHR7uXB9Tc012wY9vRhHe5N6n1HC1ihYiKQdL2WCyc,987
99
+ agentex/lib/cli/templates/temporal/project/activities.py.j2,sha256=kRDCMs5YYY24K88WuoPBzSdLQdLILVlAbud0G5ULJvU,2304
100
+ agentex/lib/cli/templates/temporal/project/run_worker.py.j2,sha256=_JeknhHcE77GwVdJAWRTdgREJQXGTVOI2HDfh4QNZSw,1065
98
101
  agentex/lib/cli/templates/temporal/project/workflow.py.j2,sha256=VPnHnzr09i5y68vCOIJ8wTrc8KVHoDp5WooQew0GiWg,3210
99
102
  agentex/lib/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
103
  agentex/lib/cli/utils/auth_utils.py,sha256=FaF1nDh1swxCBeBO9aOk20ewkWDg7UjQGHT7nqZEBn0,1876
@@ -131,7 +134,7 @@ agentex/lib/core/services/adk/acp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
131
134
  agentex/lib/core/services/adk/acp/acp.py,sha256=s5dUYTFTIlkvD0x5g5FYVt9Z9Zt2KEHsWya30dRpO0w,7993
132
135
  agentex/lib/core/services/adk/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
136
  agentex/lib/core/services/adk/providers/litellm.py,sha256=EKzus_xohNW-85V5hwvd1WqUd3ebv2wc9vDIWO2t1Mw,10044
134
- agentex/lib/core/services/adk/providers/openai.py,sha256=Ad7iFQDg1iz8KjswO16lzjpzEJCz5FtyXV-fB6qMPLk,39535
137
+ agentex/lib/core/services/adk/providers/openai.py,sha256=f3yPy3mWddo8sbOHHay8PpkWbvLC8TrAbepiHY7AamI,46897
135
138
  agentex/lib/core/services/adk/providers/sgp.py,sha256=9gm-sPNQ_OSTaBzL0onerKhokPk_ZHndaKNO-z16wyQ,3676
136
139
  agentex/lib/core/services/adk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
140
  agentex/lib/core/services/adk/utils/templating.py,sha256=eaXSFq31Y9p5pRD6J6SL4QdTFtxy81dilbF2XXc2JYQ,1889
@@ -151,7 +154,7 @@ agentex/lib/core/temporal/activities/adk/acp/__init__.py,sha256=47DEQpj8HBSa-_TI
151
154
  agentex/lib/core/temporal/activities/adk/acp/acp_activities.py,sha256=yWgL99R3rYF2o_A38B92IsJPSdCWFN0DT6DtNEGY9YA,2693
152
155
  agentex/lib/core/temporal/activities/adk/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
156
  agentex/lib/core/temporal/activities/adk/providers/litellm_activities.py,sha256=Ix92XZIQIbhf-_fOWkUZDxZ1UUCOF0kOwxbcRYBzBQA,2583
154
- agentex/lib/core/temporal/activities/adk/providers/openai_activities.py,sha256=SLypk8i8hB98hPPcj8rWQwb_Sr4NXoMcfFUV7-dsauU,11096
157
+ agentex/lib/core/temporal/activities/adk/providers/openai_activities.py,sha256=SP6amg_B3UVanCkX4WIetO42flSGLoGe4fKcxtiACRw,22558
155
158
  agentex/lib/core/temporal/activities/adk/providers/sgp_activities.py,sha256=C8n97mEhc3yFDgdejERDob9g5STfWgGoY-BmkQBH6Lg,1266
156
159
  agentex/lib/core/temporal/activities/adk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
160
  agentex/lib/core/temporal/activities/adk/utils/templating_activities.py,sha256=dX6wpcTKY_qWsm3uJV-XU5fQLqwWAhnjO83k8EK0N7o,1189
@@ -260,7 +263,7 @@ agentex/types/message_style.py,sha256=nuoXzoDyP3KAQsQeKHaiby1EMxeY-8TJjWr8eMMpQE
260
263
  agentex/types/message_update_params.py,sha256=_KpnJ56FNeoIcwodQmAgsweqH1YAeIgYVT2jo9ahUhY,502
261
264
  agentex/types/reasoning_content.py,sha256=ieA_EmFlHHo5suNnY6_7Qq3u34h8ehZ0E-vhp32Am1o,915
262
265
  agentex/types/reasoning_content_delta.py,sha256=tU-ndHhj9x8Mmn3BWwSouqViYHWzVOlZGYL_QF17wC4,386
263
- agentex/types/reasoning_content_param.py,sha256=qpuwnaQK-ofl8OtvwxpSSiHCwL7nIY0knX10EgGl0W4,942
266
+ agentex/types/reasoning_content_param.py,sha256=LLXLWWfU83R_nHsEC0HJsbPS3GyxSnEZzOTVQyjPekE,992
264
267
  agentex/types/reasoning_summary_delta.py,sha256=J2VY9VF1tLCNTIoN0qQmvZgGX35P9Ndmv1fRbcMl6R4,386
265
268
  agentex/types/span.py,sha256=OfNLddf5qjwv52ZrxLmgbXDDkBBovMeG7ovc4sRJReg,1045
266
269
  agentex/types/span_create_params.py,sha256=o-M8rzB_6yoLrn3gQJ9Ecc6ZrsKp7uVyILam_wsGrgc,1392
@@ -300,8 +303,8 @@ agentex/types/messages/batch_update_params.py,sha256=Ug5CThbD49a8j4qucg04OdmVrp_
300
303
  agentex/types/messages/batch_update_response.py,sha256=TbSBe6SuPzjXXWSj-nRjT1JHGBooTshHQQDa1AixQA8,278
301
304
  agentex/types/shared/__init__.py,sha256=IKs-Qn5Yja0kFh1G1kDqYZo43qrOu1hSoxlPdN-85dI,149
302
305
  agentex/types/shared/delete_response.py,sha256=8qH3zvQXaOHYQSHyXi7UQxdR4miTzR7V9K4zXVsiUyk,215
303
- agentex_sdk-0.4.9.dist-info/METADATA,sha256=Z4iJELn7KSCCX8g9yo-rvJskP_2euQ-2CW6VXvOFjIE,15094
304
- agentex_sdk-0.4.9.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
305
- agentex_sdk-0.4.9.dist-info/entry_points.txt,sha256=V7vJuMZdF0UlvgX6KiBN7XUvq_cxF5kplcYvc1QlFaQ,62
306
- agentex_sdk-0.4.9.dist-info/licenses/LICENSE,sha256=Q1AOx2FtRcMlyMgQJ9eVN2WKPq2mQ33lnB4tvWxabLA,11337
307
- agentex_sdk-0.4.9.dist-info/RECORD,,
306
+ agentex_sdk-0.4.11.dist-info/METADATA,sha256=NxRs3dgfHa40J2MXrPTMppsbpAdK-FWiV1jnRhgeG0k,15095
307
+ agentex_sdk-0.4.11.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
308
+ agentex_sdk-0.4.11.dist-info/entry_points.txt,sha256=V7vJuMZdF0UlvgX6KiBN7XUvq_cxF5kplcYvc1QlFaQ,62
309
+ agentex_sdk-0.4.11.dist-info/licenses/LICENSE,sha256=Q1AOx2FtRcMlyMgQJ9eVN2WKPq2mQ33lnB4tvWxabLA,11337
310
+ agentex_sdk-0.4.11.dist-info/RECORD,,