diff --git a/ee/config/feature_flags/gitlab_com_derisk/duo_code_review_claude_4_0_rollout.yml b/ee/config/feature_flags/gitlab_com_derisk/duo_code_review_claude_4_0_rollout.yml new file mode 100644 index 0000000000000000000000000000000000000000..6a416d2e974fb19ae2073d4d7a33b13414e440a0 --- /dev/null +++ b/ee/config/feature_flags/gitlab_com_derisk/duo_code_review_claude_4_0_rollout.yml @@ -0,0 +1,10 @@ +--- +name: duo_code_review_claude_4_0_rollout +description: enable +feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/545502 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192920 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/546438 +milestone: '18.1' +group: group::code review +type: gitlab_com_derisk +default_enabled: false diff --git a/ee/lib/gitlab/llm/ai_gateway/completions/review_merge_request.rb b/ee/lib/gitlab/llm/ai_gateway/completions/review_merge_request.rb index 996dd0dfaebdd3e3dab7001ca61d22c1d30b6d54..b9ae5449b42ca04dd5e66d33f45c9f7adc30e41b 100644 --- a/ee/lib/gitlab/llm/ai_gateway/completions/review_merge_request.rb +++ b/ee/lib/gitlab/llm/ai_gateway/completions/review_merge_request.rb @@ -81,7 +81,13 @@ def inputs override :prompt_version def prompt_version - '1.0.0' # Claude 3.7 Sonnet + version = '1.0.0' # Claude 3.7 Sonnet + + if Feature.enabled?(:duo_code_review_claude_4_0_rollout, user) + version = '1.1.0' # Claude 4.0 Sonnet + end + + version end def user diff --git a/ee/spec/lib/gitlab/llm/ai_gateway/completions/review_merge_request_spec.rb b/ee/spec/lib/gitlab/llm/ai_gateway/completions/review_merge_request_spec.rb index 425e20baa0f3fa3b181d360d519eb5f1833a6838..b529c161de40f535ba9f8cda8a450bc45677b2e8 100644 --- a/ee/spec/lib/gitlab/llm/ai_gateway/completions/review_merge_request_spec.rb +++ b/ee/spec/lib/gitlab/llm/ai_gateway/completions/review_merge_request_spec.rb @@ -82,6 +82,8 @@ end before do + stub_feature_flags(duo_code_review_claude_4_0_rollout: false) + allow_next_instance_of( review_prompt_class, mr_title: merge_request.title, @@ -312,6 +314,21 @@ expect(merge_request.notes.non_diff_notes.last.note).to eq(summary_answer) end + context 'when using claude_4_0 for duo code review' do + let(:prompt_version) { '1.1.0' } + + before do + stub_feature_flags(duo_code_review_claude_4_0_rollout: true) + end + + # rubocop:disable RSpec/NoExpectationExample -- allow_next_instance_of Gitlab::Llm::AiGateway::Client + # in before clause will do the check + it 'successfully creates a note' do + completion.execute + end + # rubocop:enable RSpec/NoExpectationExample + end + context 'when draft_notes is empty after mapping DraftNote objects' do let(:summary_response) { nil } let(:combined_review_response) do