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 0000000000000000000000000000000000000000..ce72952ee4a61c30ed9ef37a40b6b628ccc29dbc --- /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 6443100881cb973e043174b47f259bbfdd8ef85d..a41cda567e606774eb370b0ed51b234dc8a68b72 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 2de5da214ea323a2fa51411aef27d796efc61bee..cd6b04e9076e6efec8cb9eb5b58dcf427d869bdf 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