xpander-sdk 2.0.208__tar.gz → 2.0.210__tar.gz

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 (113) hide show
  1. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/PKG-INFO +1 -1
  2. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/setup.py +1 -1
  3. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/orchestrations.py +2 -2
  4. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/events_module.py +61 -4
  5. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/models/events.py +6 -0
  6. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk.egg-info/PKG-INFO +1 -1
  7. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/LICENSE +0 -0
  8. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/README.md +0 -0
  9. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/pyproject.toml +0 -0
  10. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/setup.cfg +0 -0
  11. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/__init__.py +0 -0
  12. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/consts/__init__.py +0 -0
  13. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/consts/api_routes.py +0 -0
  14. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/core/__init__.py +0 -0
  15. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/core/module_base.py +0 -0
  16. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/core/state.py +0 -0
  17. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/core/xpander_api_client.py +0 -0
  18. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/exceptions/__init__.py +0 -0
  19. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/exceptions/module_exception.py +0 -0
  20. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/__init__.py +0 -0
  21. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/activity.py +0 -0
  22. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/compactization.py +0 -0
  23. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/configuration.py +0 -0
  24. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/deep_planning.py +0 -0
  25. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/events.py +0 -0
  26. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/frameworks.py +0 -0
  27. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/generic.py +0 -0
  28. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/notifications.py +0 -0
  29. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/shared.py +0 -0
  30. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/models/user.py +0 -0
  31. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/__init__.py +0 -0
  32. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/__init__.py +0 -0
  33. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/agents_module.py +0 -0
  34. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/models/__init__.py +0 -0
  35. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/models/agent.py +0 -0
  36. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/models/agent_list.py +0 -0
  37. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/models/knowledge_bases.py +0 -0
  38. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/sub_modules/__init__.py +0 -0
  39. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/sub_modules/agent.py +0 -0
  40. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/utils/__init__.py +0 -0
  41. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/agents/utils/generic.py +0 -0
  42. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/__init__.py +0 -0
  43. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/backend_module.py +0 -0
  44. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/decorators/__init__.py +0 -0
  45. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/decorators/on_auth_event.py +0 -0
  46. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/events_registry.py +0 -0
  47. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/frameworks/__init__.py +0 -0
  48. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/frameworks/agno.py +0 -0
  49. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/frameworks/dispatch.py +0 -0
  50. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/utils/__init__.py +0 -0
  51. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/backend/utils/mcp_oauth.py +0 -0
  52. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/__init__.py +0 -0
  53. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/decorators/__init__.py +0 -0
  54. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/decorators/on_boot.py +0 -0
  55. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/decorators/on_shutdown.py +0 -0
  56. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/decorators/on_task.py +0 -0
  57. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/decorators/on_tool.py +0 -0
  58. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/models/__init__.py +0 -0
  59. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/models/deployments.py +0 -0
  60. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/utils/__init__.py +0 -0
  61. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/utils/generic.py +0 -0
  62. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/events/utils/git_init.py +0 -0
  63. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/__init__.py +0 -0
  64. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/knowledge_bases_module.py +0 -0
  65. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/models/__init__.py +0 -0
  66. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/models/knowledge_bases.py +0 -0
  67. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/sub_modules/__init__.py +0 -0
  68. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/sub_modules/knowledge_base.py +0 -0
  69. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/sub_modules/knowledge_base_document_item.py +0 -0
  70. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/knowledge_bases/utils/__init__.py +0 -0
  71. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/__init__.py +0 -0
  72. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/models/__init__.py +0 -0
  73. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/models/task.py +0 -0
  74. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/models/tasks_list.py +0 -0
  75. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/sub_modules/__init__.py +0 -0
  76. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/sub_modules/task.py +0 -0
  77. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/tasks_module.py +0 -0
  78. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/utils/__init__.py +0 -0
  79. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tasks/utils/files.py +0 -0
  80. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/__init__.py +0 -0
  81. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/decorators/__init__.py +0 -0
  82. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/decorators/register_tool.py +0 -0
  83. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/models/__init__.py +0 -0
  84. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/models/mcp.py +0 -0
  85. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/models/tool_invocation_result.py +0 -0
  86. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/sub_modules/__init__.py +0 -0
  87. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/sub_modules/tool.py +0 -0
  88. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/tools_repository_module.py +0 -0
  89. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/utils/__init__.py +0 -0
  90. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/utils/generic.py +0 -0
  91. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/utils/local_tools.py +0 -0
  92. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/modules/tools_repository/utils/schemas.py +0 -0
  93. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/utils/__init__.py +0 -0
  94. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/utils/agents/__init__.py +0 -0
  95. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/utils/agents/compactization_agent.py +0 -0
  96. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/utils/env.py +0 -0
  97. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/utils/event_loop.py +0 -0
  98. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/utils/generic.py +0 -0
  99. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk/utils/tools.py +0 -0
  100. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk.egg-info/SOURCES.txt +0 -0
  101. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk.egg-info/dependency_links.txt +0 -0
  102. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk.egg-info/requires.txt +0 -0
  103. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/src/xpander_sdk.egg-info/top_level.txt +0 -0
  104. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_agents_module.py +0 -0
  105. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_api_client.py +0 -0
  106. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_backend_module.py +0 -0
  107. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_boot_shutdown_handlers.py +0 -0
  108. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_configuration.py +0 -0
  109. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_final_validation.py +0 -0
  110. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_knowledge_bases_module.py +0 -0
  111. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_tasks_module.py +0 -0
  112. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_tool_schema_enhancements.py +0 -0
  113. {xpander_sdk-2.0.208 → xpander_sdk-2.0.210}/tests/test_tools_repository.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xpander-sdk
3
- Version: 2.0.208
3
+ Version: 2.0.210
4
4
  Summary: xpander.ai Backend-as-a-service for AI Agents - SDK
5
5
  Home-page: https://www.xpander.ai
6
6
  Author: xpanderAI
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
5
5
 
6
6
  setup(
7
7
  name="xpander-sdk",
8
- version="2.0.208",
8
+ version="2.0.210",
9
9
  author="xpanderAI",
10
10
  author_email="dev@xpander.ai",
11
11
  description="xpander.ai Backend-as-a-service for AI Agents - SDK",
@@ -124,7 +124,7 @@ class OrchestrationClassifierNodeLLMSettings(XPanderSharedModel):
124
124
 
125
125
  Attributes:
126
126
  model_provider: The LLM provider to use. Defaults to OpenAI.
127
- model_name: Specific model identifier. Defaults to "gpt-5-nano".
127
+ model_name: Specific model identifier. Defaults to "gpt-4.1-mini".
128
128
  llm_credentials_key: Key identifier for stored credentials.
129
129
  llm_credentials_key_type: Type of credential key storage. Defaults to XPander.
130
130
  llm_credentials: Direct credential object if not using stored credentials.
@@ -133,7 +133,7 @@ class OrchestrationClassifierNodeLLMSettings(XPanderSharedModel):
133
133
  """
134
134
 
135
135
  model_provider: Optional[LLMModelProvider] = LLMModelProvider.OpenAI
136
- model_name: Optional[str] = "gpt-5-nano"
136
+ model_name: Optional[str] = "gpt-4.1-mini"
137
137
  llm_credentials_key: Optional[str] = None
138
138
  llm_credentials_key_type: Optional[LLMCredentialsKeyType] = (
139
139
  LLMCredentialsKeyType.XPander
@@ -37,6 +37,7 @@ from .models.events import (
37
37
  WorkerEnvironmentConflict,
38
38
  WorkerFinishedEvent,
39
39
  WorkerHeartbeat,
40
+ WorkerCapacityUpdateEvent,
40
41
  )
41
42
  from ..tasks.sub_modules.task import Task
42
43
  from ..tasks.models.task import AgentExecutionStatus, LocalTaskTest
@@ -90,7 +91,7 @@ class Events(ModuleBase):
90
91
  def __init__(
91
92
  self,
92
93
  configuration: Optional[Configuration] = None,
93
- max_sync_workers: Optional[int] = 4,
94
+ max_sync_workers: Optional[int] = 6,
94
95
  max_retries: Optional[int] = _MAX_RETRIES,
95
96
  ):
96
97
  """
@@ -100,7 +101,7 @@ class Events(ModuleBase):
100
101
 
101
102
  Args:
102
103
  configuration (Optional[Configuration]): SDK configuration with credentials and endpoints. Defaults to environment configuration.
103
- max_sync_workers (Optional[int]): Maximum number of synchronous worker threads. Defaults to 4.
104
+ max_sync_workers (Optional[int]): Maximum number of synchronous worker threads. Defaults to 6.
104
105
  max_retries (Optional[int]): Maximum retry attempts for network calls. Defaults to 5.
105
106
 
106
107
  Raises:
@@ -127,6 +128,7 @@ class Events(ModuleBase):
127
128
  )
128
129
 
129
130
  self.max_retries = max_retries
131
+ self.max_sync_workers = max_sync_workers
130
132
 
131
133
  # Internal resources
132
134
  self._pool: ThreadPoolExecutor = ThreadPoolExecutor(
@@ -134,6 +136,7 @@ class Events(ModuleBase):
134
136
  thread_name_prefix="xpander-handler",
135
137
  )
136
138
  self._bg: Set[asyncio.Task] = set()
139
+ self._execution_semaphore: Optional[asyncio.Semaphore] = None
137
140
 
138
141
  logger.debug(
139
142
  f"Events initialised (base_url={self.configuration.base_url}, "
@@ -159,6 +162,9 @@ class Events(ModuleBase):
159
162
  # Execute boot handlers first, before any event listeners are set up
160
163
  await self._execute_boot_handlers()
161
164
 
165
+ # Initialize semaphore for capacity tracking
166
+ self._execution_semaphore = asyncio.Semaphore(self.max_sync_workers)
167
+
162
168
  loop = asyncio.get_running_loop()
163
169
  for sig in (signal.SIGINT, signal.SIGTERM):
164
170
  loop.add_signal_handler(
@@ -260,6 +266,22 @@ class Events(ModuleBase):
260
266
  assert last_exc is not None
261
267
  raise last_exc # for static checkers
262
268
 
269
+ async def _notify_capacity_status(self, worker_id: str, is_busy: bool) -> None:
270
+ """
271
+ Notify the backend of the worker's capacity status.
272
+
273
+ Args:
274
+ worker_id (str): The unique identifier of the worker.
275
+ is_busy (bool): Whether the worker is at max capacity.
276
+ """
277
+ url = f"{get_events_base(configuration=self.configuration)}/{worker_id}?type=worker&agent_id={self.agent_id}"
278
+ await self._request_with_retries(
279
+ "POST",
280
+ url,
281
+ headers=get_events_headers(configuration=self.configuration),
282
+ json=WorkerCapacityUpdateEvent(data={"is_busy": is_busy}).model_dump_safe(),
283
+ )
284
+
263
285
  async def _release_worker(self, worker_id: str) -> None:
264
286
  """
265
287
  Release the worker resource after task execution completion.
@@ -326,6 +348,31 @@ class Events(ModuleBase):
326
348
  await asyncio.sleep(backoff_delay(attempt))
327
349
  attempt += 1
328
350
 
351
+ async def _handle_task_with_semaphore(
352
+ self,
353
+ agent_worker: DeployedAsset,
354
+ task: Task,
355
+ on_execution_request: ExecutionRequestHandler,
356
+ ) -> None:
357
+ """
358
+ Wrapper that releases semaphore after task execution.
359
+ Semaphore is already acquired before calling this method.
360
+ """
361
+ try:
362
+ await self.handle_task_execution_request(
363
+ agent_worker, task, on_execution_request
364
+ )
365
+ finally:
366
+ # Release execution slot
367
+ self._execution_semaphore.release()
368
+
369
+ # Check if we now have available capacity and notify backend
370
+ if self._execution_semaphore._value > 0:
371
+ try:
372
+ await self._notify_capacity_status(agent_worker.id, is_busy=False)
373
+ except Exception as e:
374
+ logger.warning(f"Failed to notify available status: {e}")
375
+
329
376
  async def handle_task_execution_request(
330
377
  self,
331
378
  agent_worker: DeployedAsset,
@@ -379,7 +426,6 @@ class Events(ModuleBase):
379
426
  finally:
380
427
  task_used_tokens = task.tokens
381
428
  task_used_tools = task.used_tools
382
- await self._release_worker(agent_worker.id)
383
429
 
384
430
  if error:
385
431
  task.result = error
@@ -510,9 +556,20 @@ class Events(ModuleBase):
510
556
 
511
557
  elif event.event == EventType.AgentExecution:
512
558
  task = Task(**json.loads(event.data), configuration=self.configuration)
559
+
560
+ # Acquire execution slot immediately (blocks here if at max capacity)
561
+ await self._execution_semaphore.acquire()
562
+
563
+ # Check if we're now at max capacity and notify backend
564
+ if self._execution_semaphore._value == 0:
565
+ try:
566
+ await self._notify_capacity_status(agent_worker.id, is_busy=True)
567
+ except Exception as e:
568
+ logger.warning(f"Failed to notify busy status: {e}")
569
+
513
570
  self.track(
514
571
  asyncio.create_task(
515
- self.handle_task_execution_request(
572
+ self._handle_task_with_semaphore(
516
573
  agent_worker, task, on_execution_request
517
574
  )
518
575
  )
@@ -14,6 +14,7 @@ class EventType(str, Enum):
14
14
  AgentExecution = "agent-execution"
15
15
  WorkerHeartbeat = "worker-heartbeat"
16
16
  WorkerFinished = "worker-finished"
17
+ WorkerCapacityUpdate = "worker-capacity-update"
17
18
  EnvironmentConflict = "worker-environment-conflict"
18
19
 
19
20
 
@@ -52,6 +53,11 @@ class WorkerExecutionRequest(EventMessageBase):
52
53
  data: Task
53
54
 
54
55
 
56
+ class WorkerCapacityUpdateEvent(EventMessageBase):
57
+ event: EventType = EventType.WorkerCapacityUpdate
58
+ data: dict = {"is_busy": False}
59
+
60
+
55
61
  class WorkerEnvironmentConflict(EventMessageBase):
56
62
  event: EventType = EventType.EnvironmentConflict
57
63
  error: str
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xpander-sdk
3
- Version: 2.0.208
3
+ Version: 2.0.210
4
4
  Summary: xpander.ai Backend-as-a-service for AI Agents - SDK
5
5
  Home-page: https://www.xpander.ai
6
6
  Author: xpanderAI
File without changes
File without changes
File without changes