Skip to content

Commit 154b1e1

Browse files
andreisavuclaude
andcommitted
Move deadline from static config to per-request on dispatch
The AgentLoopConfig.deadline was a fixed absolute timestamp created once at process start, causing all requests after 1 minute to fail with "Deadline expired before SDK invocation". Move deadline creation to dispatch time so each request gets a fresh 1-minute window. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 4b2bbe3 commit 154b1e1

3 files changed

Lines changed: 10 additions & 12 deletions

File tree

src/trivia_agent/agent_loop.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616
import sys
1717
from collections.abc import Sequence
1818
from dataclasses import field
19-
from datetime import UTC, datetime, timedelta
2019
from pathlib import Path
2120
from typing import TYPE_CHECKING, TextIO
2221

2322
from weakincentives import FrozenDataclass, Prompt
2423
from weakincentives.adapters import ProviderAdapter
2524
from weakincentives.adapters.claude_agent_sdk import ClaudeAgentWorkspaceSection, HostMount
26-
from weakincentives.deadlines import Deadline
2725
from weakincentives.debug.bundle import BundleConfig
2826
from weakincentives.prompt import PromptTemplate
2927
from weakincentives.prompt.overrides import LocalPromptOverridesStore, PromptOverridesStore
@@ -57,9 +55,6 @@
5755
if TYPE_CHECKING:
5856
from weakincentives.evals import Experiment
5957

60-
# Default deadline duration for agent execution (1 minute)
61-
DEFAULT_DEADLINE_DURATION = timedelta(minutes=1)
62-
6358
# Default workspace seed directory
6459
DEFAULT_WORKSPACE_DIR = Path(__file__).parent.parent.parent / "workspace"
6560

@@ -483,10 +478,8 @@ def main(
483478
err.write(f"Failed to connect to Redis: {e}\n")
484479
return 1
485480

486-
# Configure AgentLoop with deadline and optional debug bundles
487-
default_deadline = Deadline(expires_at=datetime.now(UTC) + DEFAULT_DEADLINE_DURATION)
481+
# Configure AgentLoop with optional debug bundles
488482
config = AgentLoopConfig(
489-
deadline=default_deadline,
490483
debug_bundle=(
491484
BundleConfig(target=settings.debug_bundles_dir) if settings.debug_bundles_dir else None
492485
),

src/trivia_agent/dispatch.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@
3535
import time
3636
from collections.abc import Callable, Sequence
3737
from dataclasses import field
38+
from datetime import UTC, datetime, timedelta
3839
from typing import TextIO
3940
from uuid import uuid4
4041

4142
from redis import Redis
4243
from weakincentives import FrozenDataclass
44+
from weakincentives.deadlines import Deadline
4345
from weakincentives.evals import EvalRequest, EvalResult, Experiment, Sample
4446
from weakincentives.runtime import AgentLoopRequest, AgentLoopResult
4547
from weakincentives.runtime.mailbox import Mailbox, ReceiptHandleExpiredError
@@ -62,6 +64,9 @@
6264
DEFAULT_WAIT_TIME_SECONDS = 5
6365
REPLY_QUEUE_PREFIX = "qa:replies"
6466

67+
# Default deadline duration for agent execution
68+
DEFAULT_DEADLINE_DURATION = timedelta(minutes=1)
69+
6570

6671
@FrozenDataclass()
6772
class DispatchRuntime:
@@ -399,8 +404,9 @@ def main(
399404
eval_results.close()
400405
client.close()
401406

402-
# Submit as regular request
403-
main_request = AgentLoopRequest(request=request)
407+
# Submit as regular request with per-request deadline
408+
deadline = Deadline(expires_at=datetime.now(UTC) + DEFAULT_DEADLINE_DURATION)
409+
main_request = AgentLoopRequest(request=request, deadline=deadline)
404410

405411
if args.no_wait:
406412
# Just submit and exit

tests/trivia_agent/test_agent_loop.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,10 +440,9 @@ def test_no_debug_bundle_config_when_dir_not_set(
440440

441441
assert result == 0
442442
call_kwargs = mock_qa_loop.call_args.kwargs
443-
# Config is always set now (has deadline), but debug_bundle should be None
444443
assert call_kwargs.get("config") is not None
445444
assert call_kwargs["config"].debug_bundle is None
446-
assert call_kwargs["config"].deadline is not None
445+
assert call_kwargs["config"].deadline is None
447446

448447
def test_prompt_overrides_store_when_dir_set(
449448
self,

0 commit comments

Comments
 (0)