Aari ff0a6768c2
feat(subagents): add unified capacity and durable batch execution (#4998)
* feat(subagents): add capacity controls and durable batches

* fix(helm): sync subagent config schema version

* fix(subagents): preserve batch history without worker

* fix(subagents): support explicit factory runtimes

* fix: address durable batch review findings
2026-08-25 07:49:38 +08:00

50 lines
1.3 KiB
Python

"""Process-local bridge from harness tools to the Gateway batch service."""
from __future__ import annotations
import threading
from dataclasses import dataclass
from typing import Any, Protocol
@dataclass(frozen=True)
class BatchSubmitRequest:
user_id: str
thread_id: str
run_id: str | None
tool_call_id: str
submission_key: str
title: str
subagent_type: str
items: list[dict[str, str]]
max_live_items: int | None
max_running_items: int | None
execution_spec: dict[str, Any]
class SubagentBatchSubmitter(Protocol):
async def submit(self, request: BatchSubmitRequest) -> dict[str, Any]: ...
async def get_batch(self, *, batch_id: str, user_id: str) -> dict[str, Any] | None: ...
async def cancel_batch(self, *, batch_id: str, user_id: str) -> dict[str, Any] | None: ...
_submitter: SubagentBatchSubmitter | None = None
_lock = threading.Lock()
def set_subagent_batch_submitter(submitter: SubagentBatchSubmitter | None) -> None:
global _submitter
with _lock:
_submitter = submitter
def get_subagent_batch_submitter() -> SubagentBatchSubmitter | None:
with _lock:
return _submitter
def is_subagent_batch_runtime_available() -> bool:
return get_subagent_batch_submitter() is not None