From d8760842c11e6439d6acf9c77c5d75bf8268886e Mon Sep 17 00:00:00 2001
From: Kinshuk Singh <kinsingh@gitlab.com>
Date: Mon, 3 Mar 2025 16:35:37 -0500
Subject: [PATCH] Add feature flag for summarize code review model upgrade

relates to upgrading Claude model to 3.7 Sonnet
---
 ...ummarize_code_review_claude_3_7_sonnet.yml |  9 +++++++
 .../completions/summarize_review.rb           |  5 ++++
 .../completions/summarize_review_spec.rb      | 26 +++++++++++++++++++
 3 files changed, 40 insertions(+)
 create mode 100644 config/feature_flags/beta/summarize_code_review_claude_3_7_sonnet.yml

diff --git a/config/feature_flags/beta/summarize_code_review_claude_3_7_sonnet.yml b/config/feature_flags/beta/summarize_code_review_claude_3_7_sonnet.yml
new file mode 100644
index 000000000000..ce72952ee4a6
--- /dev/null
+++ b/config/feature_flags/beta/summarize_code_review_claude_3_7_sonnet.yml
@@ -0,0 +1,9 @@
+---
+name: summarize_code_review_claude_3_7_sonnet
+feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/521383
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/183213
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/522987
+milestone: '17.10'
+group: group::code review
+type: beta
+default_enabled: false
diff --git a/ee/lib/gitlab/llm/ai_gateway/completions/summarize_review.rb b/ee/lib/gitlab/llm/ai_gateway/completions/summarize_review.rb
index 6443100881cb..a41cda567e60 100644
--- a/ee/lib/gitlab/llm/ai_gateway/completions/summarize_review.rb
+++ b/ee/lib/gitlab/llm/ai_gateway/completions/summarize_review.rb
@@ -46,6 +46,11 @@ def valid?
             super && draft_notes.any?
           end
 
+          override :prompt_version
+          def prompt_version
+            '2.0.0' if Feature.enabled?(:summarize_code_review_claude_3_7_sonnet, user)
+          end
+
           def draft_notes_content
             content = []
 
diff --git a/ee/spec/lib/gitlab/llm/ai_gateway/completions/summarize_review_spec.rb b/ee/spec/lib/gitlab/llm/ai_gateway/completions/summarize_review_spec.rb
index 2de5da214ea3..cd6b04e9076e 100644
--- a/ee/spec/lib/gitlab/llm/ai_gateway/completions/summarize_review_spec.rb
+++ b/ee/spec/lib/gitlab/llm/ai_gateway/completions/summarize_review_spec.rb
@@ -17,6 +17,10 @@
   subject(:summarize_review) { described_class.new(prompt_message, prompt_class, options).execute }
 
   describe '#execute' do
+    before do
+      stub_feature_flags(summarize_code_review_claude_3_7_sonnet: false)
+    end
+
     context 'when there are no draft notes authored by user' do
       it 'does not make AI request' do
         expect(Gitlab::Llm::AiGateway::Client).not_to receive(:new)
@@ -70,6 +74,28 @@
 
         it_behaves_like 'summarize review'
       end
+
+      context 'with feature flag enabled' do
+        let(:draft_notes_content) { "Comment: #{draft_note_by_current_user.note}\n" }
+
+        before do
+          stub_feature_flags(summarize_code_review_claude_3_7_sonnet: true)
+        end
+
+        it 'includes prompt_version in the request' do
+          expect_next_instance_of(Gitlab::Llm::AiGateway::Client) do |client|
+            expect(client)
+              .to receive(:complete)
+              .with(
+                url: "#{Gitlab::AiGateway.url}/v1/prompts/summarize_review",
+                body: { 'inputs' => { draft_notes_content: draft_notes_content }, 'prompt_version' => '2.0.0' }
+              )
+              .and_return(example_response)
+          end
+
+          summarize_review
+        end
+      end
     end
   end
 end
-- 
GitLab