julep icon indicating copy to clipboard operation
julep copied to clipboard

[Bug]: `DeadlockError` on `api_call` tool-calling with large response payloads

Open HamadaSalhab opened this issue 8 months ago • 0 comments
trafficstars

📜 Description

Worker Stack Trace:

worker-1  | INFO:temporalio.workflow:TaskExecutionWorkflow for task cf6e3294-66de-4aba-b019-bd3733d6cd7c [LOC main.0] ({'attempt': 1, 'namespace': 'default', 'run_id': 'd8fcd064-e206-480a-907a-42c08d41dec3', 'task_queue': 'julep-task-queue', 'workflow_id': '067c1696-664c-726a-8000-d6a82280fc51', 'workflow_type': 'TaskExecutionWorkflow'})
worker-1  | INFO:temporalio.workflow:Executing step 0 of type ToolCallStep ({'attempt': 1, 'namespace': 'default', 'run_id': 'd8fcd064-e206-480a-907a-42c08d41dec3', 'task_queue': 'julep-task-queue', 'workflow_id': '067c1696-664c-726a-8000-d6a82280fc51', 'workflow_type': 'TaskExecutionWorkflow'})
worker-1  | INFO:temporalio.workflow:Processing outcome for step 0 ({'attempt': 1, 'namespace': 'default', 'run_id': 'd8fcd064-e206-480a-907a-42c08d41dec3', 'task_queue': 'julep-task-queue', 'workflow_id': '067c1696-664c-726a-8000-d6a82280fc51', 'workflow_type': 'TaskExecutionWorkflow'})
worker-1  | INFO:httpx:HTTP Request: GET https://www.tirabeauty.com/ext/plpoffers/application/api/v1.0/collections/skin/items?filters=false&page_id=1&page_size=1000 "HTTP/1.1 200 OK"
worker-1  | INFO:temporalio.workflow:Transitioning after step 0 ({'attempt': 1, 'namespace': 'default', 'run_id': 'd8fcd064-e206-480a-907a-42c08d41dec3', 'task_queue': 'julep-task-queue', 'workflow_id': '067c1696-664c-726a-8000-d6a82280fc51', 'workflow_type': 'TaskExecutionWorkflow'})
worker-1  | ERROR:temporalio.worker._workflow:Failed handling activation on workflow with run ID d8fcd064-e206-480a-907a-42c08d41dec3
worker-1  | Traceback (most recent call last):
worker-1  |   File "/app/agents_api/common/interceptors.py", line 94, in <genexpr>
worker-1  |     size += sum(get_deep_size(item, seen) for item in obj)
worker-1  |                 ^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 94, in get_deep_size
worker-1  |     size += sum(get_deep_size(item, seen) for item in obj)
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in <genexpr>
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |                                          ^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in get_deep_size
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in <genexpr>
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |                                          ^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in get_deep_size
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in <genexpr>
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |                                          ^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in get_deep_size
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in <genexpr>
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |                                          ^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in get_deep_size
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 94, in <genexpr>
worker-1  |     size += sum(get_deep_size(item, seen) for item in obj)
worker-1  |                 ^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 94, in get_deep_size
worker-1  |     size += sum(get_deep_size(item, seen) for item in obj)
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in <genexpr>
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |                                          ^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in get_deep_size
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in <genexpr>
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |                                          ^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in get_deep_size
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in <genexpr>
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |                                          ^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 97, in get_deep_size
worker-1  |     size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 101, in get_deep_size
worker-1  |     size += get_deep_size(obj.__dict__, seen)
worker-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 115, in is_too_large
worker-1  |     return get_deep_size(result) > blob_store_cutoff_kb * 1024
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 150, in offload_if_large
worker-1  |     if is_too_large(result):
worker-1  |        ^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 316, in start_activity
worker-1  |     input.args = [offload_if_large(arg) for arg in input.args]
worker-1  |                   ^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 1180, in workflow_start_activity
worker-1  |     return self._outbound.start_activity(
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/workflow.py", line 2053, in execute_activity
worker-1  |     return await _Runtime.current().workflow_start_activity(
worker-1  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/workflows/task_execution/transition.py", line 54, in transition
worker-1  |     await workflow.execute_activity(
worker-1  |   File "/app/agents_api/workflows/task_execution/__init__.py", line 811, in run
worker-1  |     final_state = await transition(
worker-1  |                   ^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 2140, in execute_workflow
worker-1  |     return await input.run_fn(*args)
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_interceptor.py", line 328, in execute_workflow
worker-1  |     return await self.next.execute_workflow(input)
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 216, in handle_execution_with_errors
worker-1  |     return await execution_fn(input)
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 303, in execute_workflow
worker-1  |     return await handle_execution_with_errors(
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/agents_api/common/interceptors.py", line 171, in wrapper
worker-1  |     result = await func(self, input)
worker-1  |              ^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_interceptor.py", line 328, in execute_workflow
worker-1  |     return await self.next.execute_workflow(input)
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/contrib/opentelemetry.py", line 356, in execute_workflow
worker-1  |     return await super().execute_workflow(input)
worker-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 857, in run_workflow
worker-1  |     result = await self._inbound.execute_workflow(input)
worker-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 1808, in _run_top_level_workflow_function
worker-1  |     await coro
worker-1  |   File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run
worker-1  |     self._context.run(self._callback, *self._args)
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 1785, in _run_once
worker-1  |     handle._run()
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 377, in activate
worker-1  |     self._run_once(check_conditions=index == 1 or index == 2)
worker-1  |   File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 59, in run
worker-1  |     result = self.fn(*self.args, **self.kwargs)
worker-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 93, in _worker
worker-1  |     work_item.run()
worker-1  |   File "/usr/local/lib/python3.12/threading.py", line 1012, in run
worker-1  |     self._target(*self._args, **self._kwargs)
worker-1  |   File "/usr/local/lib/python3.12/threading.py", line 1075, in _bootstrap_inner
worker-1  |     self.run()
worker-1  |   File "/usr/local/lib/python3.12/threading.py", line 1032, in _bootstrap
worker-1  |     self._bootstrap_inner()
worker-1  | temporalio.worker._workflow._DeadlockError: [TMPRL1101] Potential deadlock detected: workflow didn't yield within 2 second(s).
worker-1  | 2025-02-28T07:45:06.846949Z  WARN temporal_sdk_core::worker::workflow: Failing workflow task run_id=d8fcd064-e206-480a-907a-42c08d41dec3 failure=Failure { failure: Some(Failure { message: "[TMPRL1101] Potential deadlock detected: workflow didn't yield within 2 second(s).", source: "", stack_trace: "  File \"/app/agents_api/common/interceptors.py\", line 94, in <genexpr>\n    size += sum(get_deep_size(item, seen) for item in obj)\n                ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 94, in get_deep_size\n    size += sum(get_deep_size(item, seen) for item in obj)\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in <genexpr>\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n                                         ^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in get_deep_size\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in <genexpr>\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n                                         ^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in get_deep_size\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in <genexpr>\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n                                         ^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in get_deep_size\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in <genexpr>\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n                                         ^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in get_deep_size\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 94, in <genexpr>\n    size += sum(get_deep_size(item, seen) for item in obj)\n                ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 94, in get_deep_size\n    size += sum(get_deep_size(item, seen) for item in obj)\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in <genexpr>\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n                                         ^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in get_deep_size\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in <genexpr>\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n                                         ^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in get_deep_size\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in <genexpr>\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n                                         ^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 97, in get_deep_size\n    size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 101, in get_deep_size\n    size += get_deep_size(obj.__dict__, seen)\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 115, in is_too_large\n    return get_deep_size(result) > blob_store_cutoff_kb * 1024\n           ^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 150, in offload_if_large\n    if is_too_large(result):\n       ^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 316, in start_activity\n    input.args = [offload_if_large(arg) for arg in input.args]\n                  ^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py\", line 1180, in workflow_start_activity\n    return self._outbound.start_activity(\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/workflow.py\", line 2053, in execute_activity\n    return await _Runtime.current().workflow_start_activity(\n                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/workflows/task_execution/transition.py\", line 54, in transition\n    await workflow.execute_activity(\n\n  File \"/app/agents_api/workflows/task_execution/__init__.py\", line 811, in run\n    final_state = await transition(\n                  ^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py\", line 2140, in execute_workflow\n    return await input.run_fn(*args)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_interceptor.py\", line 328, in execute_workflow\n    return await self.next.execute_workflow(input)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 216, in handle_execution_with_errors\n    return await execution_fn(input)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 303, in execute_workflow\n    return await handle_execution_with_errors(\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/agents_api/common/interceptors.py\", line 171, in wrapper\n    result = await func(self, input)\n             ^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_interceptor.py\", line 328, in execute_workflow\n    return await self.next.execute_workflow(input)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/contrib/opentelemetry.py\", line 356, in execute_workflow\n    return await super().execute_workflow(input)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py\", line 857, in run_workflow\n    result = await self._inbound.execute_workflow(input)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py\", line 1808, in _run_top_level_workflow_function\n    await coro\n\n  File \"/usr/local/lib/python3.12/asyncio/events.py\", line 88, in _run\n    self._context.run(self._callback, *self._args)\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py\", line 1785, in _run_once\n    handle._run()\n\n  File \"/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py\", line 377, in activate\n    self._run_once(check_conditions=index == 1 or index == 2)\n\n  File \"/usr/local/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n    result = self.fn(*self.args, **self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n  File \"/usr/local/lib/python3.12/concurrent/futures/thread.py\", line 93, in _worker\n    work_item.run()\n\n  File \"/usr/local/lib/python3.12/threading.py\", line 1012, in run\n    self._target(*self._args, **self._kwargs)\n\n  File \"/usr/local/lib/python3.12/threading.py\", line 1075, in _bootstrap_inner\n    self.run()\n\n  File \"/usr/local/lib/python3.12/threading.py\", line 1032, in _bootstrap\n    self._bootstrap_inner()\n", encoded_attributes: None, cause: None, failure_info: Some(ApplicationFailureInfo(ApplicationFailureInfo { r#type: "_DeadlockError", non_retryable: false, details: None, next_retry_delay: None })) }), force_cause: Unspecified }
worker-1  | ERROR:temporalio.worker._workflow:Failed running eviction job, not evicting. Since eviction could not be processed, this worker cannot complete and the slot will remain forever used.
worker-1  | Traceback (most recent call last):
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow.py", line 260, in _handle_activation
worker-1  |     completion = await asyncio.wait_for(
worker-1  |                  ^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/usr/local/lib/python3.12/asyncio/tasks.py", line 520, in wait_for
worker-1  |     return await fut
worker-1  |            ^^^^^^^^^
worker-1  |   File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 59, in run
worker-1  |     result = self.fn(*self.args, **self.kwargs)
worker-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 405, in activate
worker-1  |     raise RuntimeError(
worker-1  | RuntimeError: Eviction processed, but 1 tasks remain. Stack traces below:
worker-1  | 
worker-1  | Stack for <Task cancelling name='run (workflow: TaskExecutionWorkflow, id: 067c1696-664c-726a-8000-d6a82280fc51, run: d8fcd064-e206-480a-907a-42c08d41dec3)' coro=<_WorkflowInstanceImpl._run_top_level_workflow_function() running at /app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py:1808> cb=[set.remove()]> (most recent call last):
worker-1  |   File "/usr/local/lib/python3.12/threading.py", line 1032, in _bootstrap
worker-1  |     self._bootstrap_inner()
worker-1  | 
worker-1  |   File "/usr/local/lib/python3.12/threading.py", line 1075, in _bootstrap_inner
worker-1  |     self.run()
worker-1  | 
worker-1  |   File "/usr/local/lib/python3.12/threading.py", line 1012, in run
worker-1  |     self._target(*self._args, **self._kwargs)
worker-1  | 
worker-1  |   File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 93, in _worker
worker-1  |     work_item.run()
worker-1  | 
worker-1  |   File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 59, in run
worker-1  |     result = self.fn(*self.args, **self.kwargs)
worker-1  | 
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 377, in activate
worker-1  |     self._run_once(check_conditions=index == 1 or index == 2)
worker-1  | 
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 1785, in _run_once
worker-1  |     handle._run()
worker-1  | 
worker-1  |   File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run
worker-1  |     self._context.run(self._callback, *self._args)
worker-1  | 
worker-1  |   File "/app/.venv/lib/python3.12/site-packages/temporalio/worker/_workflow_instance.py", line 1808, in _run_top_level_workflow_function
worker-1  |     await coro
worker-1  | 
worker-1  | ||| [SERIALIZE] Time taken: 1.0680327415466309s // Object size: 0.072kb

👟 Reproduction steps

Run the following task:

tools:
- name: get_skin_collection_products
  type: api_call
  api_call:
    method: GET
    url: https://www.tirabeauty.com/ext/plpoffers/application/api/v1.0/collections/skin/items

main:
- tool: get_skin_collection_products
  arguments:
    params:
      filters: false
      page_id: 1
      page_size: 1000

👀 Have you searched previous issues to see if this has been raised before?

  • [x] I checked and didn't find similar issue

HamadaSalhab avatar Feb 28 '25 07:02 HamadaSalhab