Skip to content
Open
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
add55a0
feat(ui): Add LLM issue detection toggle to performance settings
roggenkemper Apr 10, 2026
df0eec1
feat(ui): Add per-type toggles for AI detected issue categories
roggenkemper Apr 15, 2026
caf5648
ref(ai-issues): Rename llm_issue_detection to ai_issue_detection in f…
roggenkemper Apr 15, 2026
46291d3
fix(issue-detection): Use 'AI Issue Detection' label instead of LLM V…
roggenkemper Apr 15, 2026
a474637
feat(issue-detection): Add help text to AI detection sub-type toggles
roggenkemper Apr 15, 2026
719651f
fix(issue-detection): Fix parent toggle rendering and remove General …
roggenkemper Apr 15, 2026
527d7e3
fix(issue-detection): Fix parent toggle rendering and clean up help text
roggenkemper Apr 15, 2026
5f99a46
fix(issue-detection): Add visibility flag to all AI detection fields
roggenkemper Apr 15, 2026
6b52a55
Merge remote-tracking branch 'origin/master' into roggenkemper/feat/l…
roggenkemper Apr 15, 2026
cfdc491
update feature flag
roggenkemper Apr 15, 2026
6ad38fc
fix(issue-detection): Custom help text for AI detection parent toggle
roggenkemper Apr 15, 2026
9e98040
fix(issue-detection): Wrap AI Issue Detection title in t() for i18n
roggenkemper Apr 15, 2026
2ff25d2
ref(issue-detection): Use IssueTitle.AI_DETECTED_GENERAL for section …
roggenkemper Apr 15, 2026
1a75c5f
ref(issue-detection): Replace LLM_DETECTED_EXPERIMENTAL_V2 with AI_DE…
roggenkemper Apr 15, 2026
de128b9
fix(issue-detection): Use 'AI Issue Detection' for parent toggle label
roggenkemper Apr 15, 2026
bea0ec7
fix(issue-detection): Change section title to 'AI Detected'
roggenkemper Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,13 @@ enum DetectorConfigAdmin {
FUNCTION_DURATION_REGRESSION_ENABLED = 'function_duration_regression_detection_enabled',
DB_QUERY_INJECTION_ENABLED = 'db_query_injection_detection_enabled',
WEB_VITALS_ENABLED = 'web_vitals_detection_enabled',
AI_ISSUE_DETECTION_ENABLED = 'ai_issue_detection_enabled',
AI_DETECTED_HTTP_ENABLED = 'ai_detected_http_enabled',
AI_DETECTED_DB_ENABLED = 'ai_detected_db_enabled',
AI_DETECTED_RUNTIME_PERFORMANCE_ENABLED = 'ai_detected_runtime_performance_enabled',
AI_DETECTED_SECURITY_ENABLED = 'ai_detected_security_enabled',
AI_DETECTED_CODE_HEALTH_ENABLED = 'ai_detected_code_health_enabled',
AI_DETECTED_GENERAL_ENABLED = 'ai_detected_general_enabled',
Comment thread
roggenkemper marked this conversation as resolved.
}

export enum DetectorConfigCustomer {
Expand Down Expand Up @@ -193,6 +200,9 @@ export function ProjectPerformance() {
});

const hasWebVitalsSeerSuggestions = useHasSeerWebVitalsSuggestions(project);
const hasAIIssueDetection =
organization.features.includes('gen-ai-features') &&
organization.features.includes('ai-issue-detection');

const {
data: threshold,
Expand Down Expand Up @@ -590,6 +600,24 @@ export function ProjectPerformance() {
},
visible: hasWebVitalsSeerSuggestions,
},
[IssueTitle.AI_DETECTED_GENERAL]: {
name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED,
type: 'boolean',
label: IssueTitle.AI_DETECTED_GENERAL,
Comment thread
roggenkemper marked this conversation as resolved.
help: t('Controls whether or not Sentry runs AI issue detection on your traces.'),
defaultValue: true,
onChange: value => {
setApiQueryData<ProjectPerformanceSettings>(
queryClient,
getPerformanceIssueSettingsQueryKey(organization.slug, projectSlug),
data => ({
...data!,
ai_issue_detection_enabled: value,
})
);
},
visible: hasAIIssueDetection,
},
Comment thread
roggenkemper marked this conversation as resolved.
};

const performanceRegressionAdminFields: Field[] = [
Expand Down Expand Up @@ -1022,6 +1050,77 @@ export function ProjectPerformance() {
],
initiallyCollapsed: issueType !== IssueType.WEB_VITALS,
},
{
title: IssueTitle.AI_DETECTED_GENERAL,
fields: [
{
name: DetectorConfigAdmin.AI_DETECTED_HTTP_ENABLED,
type: 'boolean' as const,
label: t('HTTP Issues'),
help: t('Allow HTTP issues to be created'),
defaultValue: true,
disabled: !(
hasAccess &&
performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED]
),
disabledReason,
visible: hasAIIssueDetection,
},
{
name: DetectorConfigAdmin.AI_DETECTED_DB_ENABLED,
type: 'boolean' as const,
label: t('Database Issues'),
help: t('Allow database issues to be created'),
defaultValue: true,
disabled: !(
hasAccess &&
performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED]
),
disabledReason,
visible: hasAIIssueDetection,
},
{
name: DetectorConfigAdmin.AI_DETECTED_RUNTIME_PERFORMANCE_ENABLED,
type: 'boolean' as const,
label: t('Runtime Performance Issues'),
help: t('Allow runtime performance issues to be created'),
defaultValue: true,
disabled: !(
hasAccess &&
performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED]
),
disabledReason,
visible: hasAIIssueDetection,
},
{
name: DetectorConfigAdmin.AI_DETECTED_SECURITY_ENABLED,
type: 'boolean' as const,
label: t('Security Issues'),
help: t('Allow security issues to be created'),
defaultValue: true,
disabled: !(
hasAccess &&
performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED]
),
disabledReason,
visible: hasAIIssueDetection,
},
{
name: DetectorConfigAdmin.AI_DETECTED_CODE_HEALTH_ENABLED,
type: 'boolean' as const,
label: t('Code Health Issues'),
help: t('Allow code health issues to be created'),
defaultValue: true,
disabled: !(
hasAccess &&
performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED]
),
disabledReason,
visible: hasAIIssueDetection,
},
],
initiallyCollapsed: issueType !== IssueType.AI_DETECTED_GENERAL,
},
];

// If the organization can manage detectors, add the admin field to the existing settings
Expand All @@ -1034,10 +1133,10 @@ export function ProjectPerformance() {
...fieldGroup,
fields: [
{
...manageField,
help: t(
'Controls whether or not Sentry should detect this type of issue.'
),
...manageField,
disabled: !hasAccess,
disabledReason: t('You do not have permission to manage detectors.'),
},
Expand Down
Loading