diff --git a/src/sentry/api/endpoints/trace_explorer_ai_query.py b/src/sentry/api/endpoints/trace_explorer_ai_query.py index 600cb2a12950e5..963957e209f252 100644 --- a/src/sentry/api/endpoints/trace_explorer_ai_query.py +++ b/src/sentry/api/endpoints/trace_explorer_ai_query.py @@ -14,6 +14,7 @@ from sentry.api.api_publish_status import ApiPublishStatus from sentry.api.base import region_silo_endpoint from sentry.api.bases import OrganizationEndpoint +from sentry.api.endpoints.trace_explorer_ai_setup import OrganizationTraceExplorerAIPermission from sentry.models.organization import Organization from sentry.seer.seer_setup import get_seer_org_acknowledgement, get_seer_user_acknowledgement from sentry.seer.signed_seer_api import sign_with_seer_secret @@ -58,6 +59,8 @@ class TraceExplorerAIQuery(OrganizationEndpoint): } owner = ApiOwner.ML_AI + permission_classes = (OrganizationTraceExplorerAIPermission,) + @staticmethod def post(request: Request, organization: Organization) -> Response: """ diff --git a/src/sentry/api/endpoints/trace_explorer_ai_setup.py b/src/sentry/api/endpoints/trace_explorer_ai_setup.py index f099a722ce0bb7..659fff4b9ce0cd 100644 --- a/src/sentry/api/endpoints/trace_explorer_ai_setup.py +++ b/src/sentry/api/endpoints/trace_explorer_ai_setup.py @@ -13,6 +13,7 @@ from sentry.api.api_publish_status import ApiPublishStatus from sentry.api.base import region_silo_endpoint from sentry.api.bases import OrganizationEndpoint +from sentry.api.bases.organization import OrganizationPermission from sentry.models.organization import Organization from sentry.seer.seer_setup import get_seer_org_acknowledgement, get_seer_user_acknowledgement from sentry.seer.signed_seer_api import sign_with_seer_secret @@ -22,6 +23,12 @@ from rest_framework.request import Request +class OrganizationTraceExplorerAIPermission(OrganizationPermission): + scope_map = { + "POST": ["org:read"], + } + + def fire_setup_request(org_id: int, project_ids: list[int]) -> None: """ Sends a request to seer to create the initial cached prompt / setup the AI models @@ -55,6 +62,8 @@ class TraceExplorerAISetup(OrganizationEndpoint): } owner = ApiOwner.ML_AI + permission_classes = (OrganizationTraceExplorerAIPermission,) + @staticmethod def post(request: Request, organization: Organization) -> Response: """