Skip to content

Commit 77f6767

Browse files
committed
fix
1 parent d6d6616 commit 77f6767

File tree

4 files changed

+33
-6
lines changed

4 files changed

+33
-6
lines changed

src/sentry/tasks/seer/night_shift/agentic_triage.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ class _TriageVerdict(pydantic.BaseModel):
2929
class _TriageResponse(pydantic.BaseModel):
3030
verdicts: list[_TriageVerdict]
3131

32+
@pydantic.validator("verdicts")
33+
def filter_skips(cls, v: list[_TriageVerdict]) -> list[_TriageVerdict]:
34+
return [verdict for verdict in v if verdict.action != TriageAction.SKIP]
35+
3236

3337
def agentic_triage_strategy(
3438
projects: Sequence[Project],
@@ -87,7 +91,7 @@ def _triage_candidates(
8791
)
8892
return []
8993

90-
triage_response: _TriageResponse = _TriageResponse.model_validate_json(content)
94+
triage_response = _TriageResponse.parse_raw(content)
9195
except Exception:
9296
logger.exception(
9397
"night_shift.triage_request_error",

src/sentry/tasks/seer/night_shift/cron.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from sentry.seer.autofix.constants import AutofixAutomationTuningSettings
1414
from sentry.seer.models.project_repository import SeerProjectRepository
1515
from sentry.tasks.base import instrumented_task
16-
from sentry.tasks.seer.night_shift.simple_triage import fixability_score_strategy
16+
from sentry.tasks.seer.night_shift.agentic_triage import agentic_triage_strategy
1717
from sentry.taskworker.namespaces import seer_tasks
1818
from sentry.utils.iterators import chunked
1919
from sentry.utils.query import RangeQuerySetWrapper
@@ -98,7 +98,7 @@ def run_night_shift_for_org(organization_id: int) -> None:
9898
)
9999
return
100100

101-
candidates = fixability_score_strategy(eligible_projects)
101+
candidates = agentic_triage_strategy(eligible_projects, organization)
102102

103103
logger.info(
104104
"night_shift.candidates_selected",

src/sentry/tasks/seer/night_shift/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
class TriageAction(enum.StrEnum):
1010
AUTOFIX = "autofix"
1111
ROOT_CAUSE_ONLY = "root_cause_only"
12+
SKIP = "skip"
1213

1314

1415
@dataclass

tests/sentry/tasks/seer/test_night_shift.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from unittest.mock import patch
1+
from unittest.mock import MagicMock, patch
22

33
from django.utils import timezone
44

@@ -14,6 +14,16 @@
1414
from sentry.testutils.cases import SnubaTestCase, TestCase
1515
from sentry.testutils.helpers.datetime import before_now
1616
from sentry.testutils.pytest.fixtures import django_db_all
17+
from sentry.utils import json
18+
19+
20+
def _mock_llm_response(group_ids: list[int], action: str = "autofix") -> MagicMock:
21+
verdicts = [{"group_id": gid, "action": action, "reason": "test"} for gid in group_ids]
22+
content = json.dumps({"verdicts": verdicts})
23+
response = MagicMock()
24+
response.status = 200
25+
response.data = json.dumps({"content": content}).encode()
26+
return response
1727

1828

1929
@django_db_all
@@ -152,7 +162,13 @@ def test_selects_candidates_and_skips_triggered(self) -> None:
152162
seer_autofix_last_triggered=timezone.now(),
153163
)
154164

155-
with patch("sentry.tasks.seer.night_shift.cron.logger") as mock_logger:
165+
with (
166+
patch(
167+
"sentry.tasks.seer.night_shift.agentic_triage.make_llm_generate_request",
168+
return_value=_mock_llm_response([high_fix.id, low_fix.id]),
169+
),
170+
patch("sentry.tasks.seer.night_shift.cron.logger") as mock_logger,
171+
):
156172
run_night_shift_for_org(org.id)
157173

158174
call_extra = mock_logger.info.call_args.kwargs["extra"]
@@ -175,7 +191,13 @@ def test_global_ranking_across_projects(self) -> None:
175191
project_b, "high-group", seer_fixability_score=0.95
176192
)
177193

178-
with patch("sentry.tasks.seer.night_shift.cron.logger") as mock_logger:
194+
with (
195+
patch(
196+
"sentry.tasks.seer.night_shift.agentic_triage.make_llm_generate_request",
197+
return_value=_mock_llm_response([high_group.id, low_group.id]),
198+
),
199+
patch("sentry.tasks.seer.night_shift.cron.logger") as mock_logger,
200+
):
179201
run_night_shift_for_org(org.id)
180202

181203
candidates = mock_logger.info.call_args.kwargs["extra"]["candidates"]

0 commit comments

Comments
 (0)