Skip to content

Commit 17f21ec

Browse files
authored
feat(explorer): add artifacts to client (#102900)
Adds support for devs to pass in a pydantic model as an artifact schema to the client, and to read the generated artifact back. Also refactors the client into a class to make managing all this easier. Requries getsentry/seer#3945
1 parent bfe2c8e commit 17f21ec

File tree

7 files changed

+540
-486
lines changed

7 files changed

+540
-486
lines changed

src/sentry/seer/endpoints/organization_seer_explorer_chat.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import logging
44

55
from rest_framework import serializers
6+
from rest_framework.exceptions import PermissionDenied
67
from rest_framework.request import Request
78
from rest_framework.response import Response
89

@@ -12,7 +13,8 @@
1213
from sentry.api.bases.organization import OrganizationEndpoint, OrganizationPermission
1314
from sentry.models.organization import Organization
1415
from sentry.ratelimits.config import RateLimitConfig
15-
from sentry.seer.explorer.client import continue_seer_run, get_seer_run, start_seer_run
16+
from sentry.seer.explorer.client import SeerExplorerClient
17+
from sentry.seer.models import SeerPermissionError
1618
from sentry.types.ratelimit import RateLimit, RateLimitCategory
1719

1820
logger = logging.getLogger(__name__)
@@ -77,8 +79,11 @@ def get(
7779
return Response({"session": None}, status=404)
7880

7981
try:
80-
state = get_seer_run(run_id=int(run_id), organization=organization, user=request.user)
82+
client = SeerExplorerClient(organization, request.user)
83+
state = client.get_run(run_id=int(run_id))
8184
return Response({"session": state.dict()})
85+
except SeerPermissionError as e:
86+
raise PermissionDenied(e.message) from e
8287
except ValueError:
8388
return Response({"session": None}, status=404)
8489

@@ -106,23 +111,22 @@ def post(
106111
insert_index = validated_data.get("insert_index")
107112
on_page_context = validated_data.get("on_page_context")
108113

109-
# Use client to start or continue run
110-
if run_id:
111-
# Continue existing conversation
112-
result_run_id = continue_seer_run(
113-
run_id=int(run_id),
114-
organization=organization,
115-
prompt=query,
116-
user=request.user,
117-
insert_index=insert_index,
118-
on_page_context=on_page_context,
119-
)
120-
else:
121-
# Start new conversation
122-
result_run_id = start_seer_run(
123-
organization=organization,
124-
prompt=query,
125-
user=request.user,
126-
on_page_context=on_page_context,
127-
)
128-
return Response({"run_id": result_run_id})
114+
try:
115+
client = SeerExplorerClient(organization, request.user)
116+
if run_id:
117+
# Continue existing conversation
118+
result_run_id = client.continue_run(
119+
run_id=int(run_id),
120+
prompt=query,
121+
insert_index=insert_index,
122+
on_page_context=on_page_context,
123+
)
124+
else:
125+
# Start new conversation
126+
result_run_id = client.start_run(
127+
prompt=query,
128+
on_page_context=on_page_context,
129+
)
130+
return Response({"run_id": result_run_id})
131+
except SeerPermissionError as e:
132+
raise PermissionDenied(e.message) from e

src/sentry/seer/endpoints/organization_seer_explorer_runs.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from sentry.api.bases.organization import OrganizationEndpoint, OrganizationPermission
1414
from sentry.api.paginator import GenericOffsetPaginator
1515
from sentry.models.organization import Organization
16-
from sentry.seer.explorer.client import get_seer_runs
16+
from sentry.seer.explorer.client import SeerExplorerClient
1717
from sentry.seer.models import SeerPermissionError
1818

1919
logger = logging.getLogger(__name__)
@@ -48,9 +48,8 @@ def get(self, request: Request, organization: Organization) -> Response:
4848

4949
def _make_seer_runs_request(offset: int, limit: int) -> dict[str, Any]:
5050
try:
51-
runs = get_seer_runs(
52-
organization=organization,
53-
user=request.user,
51+
client = SeerExplorerClient(organization, request.user)
52+
runs = client.get_runs(
5453
category_key=category_key,
5554
category_value=category_value,
5655
offset=offset,

0 commit comments

Comments
 (0)