From 397e3d8c6e6177b10b62d5507177ac2edb8e0155 Mon Sep 17 00:00:00 2001
From: Marc Shaw <mshaw@gitlab.com>
Date: Mon, 8 Apr 2024 17:41:15 +0000
Subject: [PATCH] Remove the backend changes for automatic diff summary

MR: gitlab.com/gitlab-org/gitlab/-/merge_requests/148122

Changelog: removed
---
 .../rspec/before_all_role_assignment.yml      |   2 -
 .rubocop_todo/rspec/named_subject.yml         |   2 -
 .../style/inline_disable_annotation.yml       |   3 -
 doc/api/graphql/reference/index.md            |  40 ----
 .../queries/summary_notes.query.graphql       |  32 ----
 ee/app/graphql/ee/types/merge_request_type.rb |  10 -
 .../graphql/types/merge_request_diff_type.rb  |   5 -
 .../merge_requests/diff_llm_summary_type.rb   |  37 ----
 ee/app/helpers/ee/merge_requests_helper.rb    |  12 --
 ee/app/helpers/ee/todos_helper.rb             |  10 -
 ee/app/models/ee/merge_request.rb             |   7 -
 ee/app/models/ee/merge_request_diff.rb        |  17 --
 .../models/merge_request/diff_llm_summary.rb  |   2 +-
 ee/app/policies/ee/merge_request_policy.rb    |  22 ---
 .../merge_request/diff_llm_summary_policy.rb  |   7 -
 ee/app/services/ee/notification_service.rb    |  12 --
 .../merge_requests/summarize_diff_service.rb  |  90 ---------
 .../llm/summarize_merge_request_service.rb    |  21 ---
 ee/app/views/notify/_diff_summary.html.haml   |   8 -
 ee/app/views/notify/_diff_summary.text.erb    |  14 --
 .../summarize_diff_automatically.yml          |   8 -
 ee/lib/gitlab/duo/developments/setup.rb       |   1 -
 ee/lib/gitlab/llm/completions_factory.rb      |   5 -
 ee/lib/gitlab/llm/stage_check.rb              |   1 -
 .../llm/templates/summarize_merge_request.rb  |  62 ------
 .../completions/summarize_merge_request.rb    |  60 ------
 ee/spec/factories/ai_messages.rb              |   4 -
 .../ee/types/merge_request_type_spec.rb       |   1 -
 .../types/merge_request_diff_type_spec.rb     |   1 -
 .../diff_llm_summary_type_spec.rb             |  19 --
 .../helpers/ee/merge_requests_helper_spec.rb  |  31 ---
 ee/spec/helpers/ee/todos_helper_spec.rb       |  38 ----
 .../templates/summarize_merge_request_spec.rb |  69 -------
 .../summarize_merge_request_spec.rb           | 176 ------------------
 ee/spec/mailers/notify_spec.rb                |  44 -----
 ee/spec/models/ee/merge_request_diff_spec.rb  |  60 ------
 .../merge_request/diff_llm_summary_spec.rb    |  18 --
 ee/spec/models/merge_request_spec.rb          |  15 --
 .../diff_llm_summary_policy_spec.rb           |  26 ---
 ee/spec/policies/merge_request_policy_spec.rb |  82 --------
 .../api/graphql/project/merge_request_spec.rb |  74 +-------
 .../services/ee/notification_service_spec.rb  |  34 ----
 .../summarize_diff_service_spec.rb            | 151 ---------------
 .../summarize_merge_request_service_spec.rb   |  51 -----
 .../merge_requests_diff_llm_summary.rb        |  10 -
 45 files changed, 4 insertions(+), 1390 deletions(-)
 delete mode 100644 ee/app/assets/javascripts/merge_requests/queries/summary_notes.query.graphql
 delete mode 100644 ee/app/graphql/types/merge_requests/diff_llm_summary_type.rb
 delete mode 100644 ee/app/policies/merge_request/diff_llm_summary_policy.rb
 delete mode 100644 ee/app/services/llm/merge_requests/summarize_diff_service.rb
 delete mode 100644 ee/app/services/llm/summarize_merge_request_service.rb
 delete mode 100644 ee/app/views/notify/_diff_summary.html.haml
 delete mode 100644 ee/app/views/notify/_diff_summary.text.erb
 delete mode 100644 ee/config/feature_flags/development/summarize_diff_automatically.yml
 delete mode 100644 ee/lib/gitlab/llm/templates/summarize_merge_request.rb
 delete mode 100644 ee/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request.rb
 delete mode 100644 ee/spec/graphql/types/merge_requests/diff_llm_summary_type_spec.rb
 delete mode 100644 ee/spec/lib/gitlab/llm/templates/summarize_merge_request_spec.rb
 delete mode 100644 ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request_spec.rb
 delete mode 100644 ee/spec/models/merge_request/diff_llm_summary_spec.rb
 delete mode 100644 ee/spec/policies/merge_request/diff_llm_summary_policy_spec.rb
 delete mode 100644 ee/spec/services/llm/merge_requests/summarize_diff_service_spec.rb
 delete mode 100644 ee/spec/services/llm/summarize_merge_request_service_spec.rb
 delete mode 100644 spec/factories/merge_requests_diff_llm_summary.rb

diff --git a/.rubocop_todo/rspec/before_all_role_assignment.yml b/.rubocop_todo/rspec/before_all_role_assignment.yml
index 7974bb3abb5ac..20ec3996b0795 100644
--- a/.rubocop_todo/rspec/before_all_role_assignment.yml
+++ b/.rubocop_todo/rspec/before_all_role_assignment.yml
@@ -332,7 +332,6 @@ RSpec/BeforeAllRoleAssignment:
     - 'ee/spec/policies/incident_management/oncall_schedule_policy_spec.rb'
     - 'ee/spec/policies/incident_management/oncall_shift_policy_spec.rb'
     - 'ee/spec/policies/issue_policy_spec.rb'
-    - 'ee/spec/policies/merge_request/diff_llm_summary_policy_spec.rb'
     - 'ee/spec/policies/merge_request_policy_spec.rb'
     - 'ee/spec/policies/merge_requests/external_status_check_policy_spec.rb'
     - 'ee/spec/policies/packages/policies/project_policy_spec.rb'
@@ -672,7 +671,6 @@ RSpec/BeforeAllRoleAssignment:
     - 'ee/spec/services/llm/generate_description_service_spec.rb'
     - 'ee/spec/services/llm/generate_summary_service_spec.rb'
     - 'ee/spec/services/llm/git_command_service_spec.rb'
-    - 'ee/spec/services/llm/merge_requests/summarize_diff_service_spec.rb'
     - 'ee/spec/services/llm/merge_requests/summarize_review_service_spec.rb'
     - 'ee/spec/services/members/activate_service_spec.rb'
     - 'ee/spec/services/merge_trains/create_pipeline_service_spec.rb'
diff --git a/.rubocop_todo/rspec/named_subject.yml b/.rubocop_todo/rspec/named_subject.yml
index bcab28ed9f29b..51a5fad326665 100644
--- a/.rubocop_todo/rspec/named_subject.yml
+++ b/.rubocop_todo/rspec/named_subject.yml
@@ -468,13 +468,11 @@ RSpec/NamedSubject:
     - 'ee/spec/lib/gitlab/llm/templates/explain_vulnerability_spec.rb'
     - 'ee/spec/lib/gitlab/llm/templates/fill_in_merge_request_template_spec.rb'
     - 'ee/spec/lib/gitlab/llm/templates/generate_commit_message_spec.rb'
-    - 'ee/spec/lib/gitlab/llm/templates/summarize_merge_request_spec.rb'
     - 'ee/spec/lib/gitlab/llm/templates/summarize_review_spec.rb'
     - 'ee/spec/lib/gitlab/llm/templates/summarize_submitted_review_spec.rb'
     - 'ee/spec/lib/gitlab/llm/vertex_ai/completions/analyze_ci_job_failure_spec.rb'
     - 'ee/spec/lib/gitlab/llm/vertex_ai/completions/fill_in_merge_request_template_spec.rb'
     - 'ee/spec/lib/gitlab/llm/vertex_ai/completions/generate_commit_message_spec.rb'
-    - 'ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request_spec.rb'
     - 'ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_review_spec.rb'
     - 'ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_submitted_review_spec.rb'
     - 'ee/spec/lib/gitlab/llm/vertex_ai/model_configurations/base_spec.rb'
diff --git a/.rubocop_todo/style/inline_disable_annotation.yml b/.rubocop_todo/style/inline_disable_annotation.yml
index 477d50e61d6d0..f4f422e072b22 100644
--- a/.rubocop_todo/style/inline_disable_annotation.yml
+++ b/.rubocop_todo/style/inline_disable_annotation.yml
@@ -1427,7 +1427,6 @@ Style/InlineDisableAnnotation:
     - 'ee/app/models/iteration.rb'
     - 'ee/app/models/license.rb'
     - 'ee/app/models/members/member_role.rb'
-    - 'ee/app/models/merge_request/diff_llm_summary.rb'
     - 'ee/app/models/merge_request/predictions.rb'
     - 'ee/app/models/merge_request/review_llm_summary.rb'
     - 'ee/app/models/merge_requests/compliance_violation.rb'
@@ -1441,7 +1440,6 @@ Style/InlineDisableAnnotation:
     - 'ee/app/models/search/namespace_index_assignment.rb'
     - 'ee/app/models/security/training.rb'
     - 'ee/app/models/vulnerabilities/finding.rb'
-    - 'ee/app/policies/merge_request/diff_llm_summary_policy.rb'
     - 'ee/app/policies/merge_request/review_llm_summary_policy.rb'
     - 'ee/app/policies/merge_request_diff_policy.rb'
     - 'ee/app/policies/path_lock_policy.rb'
@@ -1869,7 +1867,6 @@ Style/InlineDisableAnnotation:
     - 'ee/lib/gitlab/llm/chat_storage.rb'
     - 'ee/lib/gitlab/llm/open_ai/client.rb'
     - 'ee/lib/gitlab/llm/templates/explain_vulnerability.rb'
-    - 'ee/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request.rb'
     - 'ee/lib/gitlab/llm/vertex_ai/completions/summarize_submitted_review.rb'
     - 'ee/lib/gitlab/middleware/ip_restrictor.rb'
     - 'ee/lib/gitlab/path_locks_finder.rb'
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index efd7353e506ab..e656953213183 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -12358,29 +12358,6 @@ The edge type for [`MergeRequestDiff`](#mergerequestdiff).
 | <a id="mergerequestdiffedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
 | <a id="mergerequestdiffedgenode"></a>`node` | [`MergeRequestDiff`](#mergerequestdiff) | The item at the end of the edge. |
 
-#### `MergeRequestDiffLlmSummaryConnection`
-
-The connection type for [`MergeRequestDiffLlmSummary`](#mergerequestdiffllmsummary).
-
-##### Fields
-
-| Name | Type | Description |
-| ---- | ---- | ----------- |
-| <a id="mergerequestdiffllmsummaryconnectionedges"></a>`edges` | [`[MergeRequestDiffLlmSummaryEdge]`](#mergerequestdiffllmsummaryedge) | A list of edges. |
-| <a id="mergerequestdiffllmsummaryconnectionnodes"></a>`nodes` | [`[MergeRequestDiffLlmSummary]`](#mergerequestdiffllmsummary) | A list of nodes. |
-| <a id="mergerequestdiffllmsummaryconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
-
-#### `MergeRequestDiffLlmSummaryEdge`
-
-The edge type for [`MergeRequestDiffLlmSummary`](#mergerequestdiffllmsummary).
-
-##### Fields
-
-| Name | Type | Description |
-| ---- | ---- | ----------- |
-| <a id="mergerequestdiffllmsummaryedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
-| <a id="mergerequestdiffllmsummaryedgenode"></a>`node` | [`MergeRequestDiffLlmSummary`](#mergerequestdiffllmsummary) | The item at the end of the edge. |
-
 #### `MergeRequestDiffRegistryConnection`
 
 The connection type for [`MergeRequestDiffRegistry`](#mergerequestdiffregistry).
@@ -22662,7 +22639,6 @@ Defines which user roles, users, or groups can merge into a protected branch.
 | <a id="mergerequestdescriptionhtml"></a>`descriptionHtml` | [`String`](#string) | GitLab Flavored Markdown rendering of `description`. |
 | <a id="mergerequestdetailedmergestatus"></a>`detailedMergeStatus` | [`DetailedMergeStatus`](#detailedmergestatus) | Detailed merge status of the merge request. |
 | <a id="mergerequestdiffheadsha"></a>`diffHeadSha` | [`String`](#string) | Diff head SHA of the merge request. |
-| <a id="mergerequestdiffllmsummaries"></a>`diffLlmSummaries` **{warning-solid}** | [`MergeRequestDiffLlmSummaryConnection`](#mergerequestdiffllmsummaryconnection) | **Introduced** in GitLab 16.1. **Status**: Experiment. Diff summaries generated by AI. |
 | <a id="mergerequestdiffrefs"></a>`diffRefs` | [`DiffRefs`](#diffrefs) | References of the base SHA, the head SHA, and the start SHA for this merge request. |
 | <a id="mergerequestdiffstatssummary"></a>`diffStatsSummary` | [`DiffStatsSummary`](#diffstatssummary) | Summary of which files were changed in this merge request. |
 | <a id="mergerequestdiscussionlocked"></a>`discussionLocked` | [`Boolean!`](#boolean) | Indicates if comments on the merge request are locked to members only. |
@@ -23458,25 +23434,9 @@ A diff version of a merge request.
 | Name | Type | Description |
 | ---- | ---- | ----------- |
 | <a id="mergerequestdiffcreatedat"></a>`createdAt` | [`Time!`](#time) | Timestamp of when the diff was created. |
-| <a id="mergerequestdiffdiffllmsummary"></a>`diffLlmSummary` | [`MergeRequestDiffLlmSummary`](#mergerequestdiffllmsummary) | Diff summary generated by AI. |
 | <a id="mergerequestdiffreviewllmsummaries"></a>`reviewLlmSummaries` | [`MergeRequestReviewLlmSummaryConnection`](#mergerequestreviewllmsummaryconnection) | Review summaries generated by AI. (see [Connections](#connections)) |
 | <a id="mergerequestdiffupdatedat"></a>`updatedAt` | [`Time!`](#time) | Timestamp of when the diff was updated. |
 
-### `MergeRequestDiffLlmSummary`
-
-A diff summary generated by AI.
-
-#### Fields
-
-| Name | Type | Description |
-| ---- | ---- | ----------- |
-| <a id="mergerequestdiffllmsummarycontent"></a>`content` | [`String!`](#string) | Content of the diff summary. |
-| <a id="mergerequestdiffllmsummarycreatedat"></a>`createdAt` | [`Time!`](#time) | Timestamp of when the diff summary was created. |
-| <a id="mergerequestdiffllmsummarymergerequestdiffid"></a>`mergeRequestDiffId` | [`ID!`](#id) | ID of the Merge Request diff associated with the diff summary. |
-| <a id="mergerequestdiffllmsummaryprovider"></a>`provider` | [`String!`](#string) | AI provider that generated the summary. |
-| <a id="mergerequestdiffllmsummaryupdatedat"></a>`updatedAt` | [`Time!`](#time) | Timestamp of when the diff summary was updated. |
-| <a id="mergerequestdiffllmsummaryuser"></a>`user` | [`UserCore`](#usercore) | User associated with the diff summary. |
-
 ### `MergeRequestDiffRegistry`
 
 Represents the Geo sync and verification state of a Merge Request diff.
diff --git a/ee/app/assets/javascripts/merge_requests/queries/summary_notes.query.graphql b/ee/app/assets/javascripts/merge_requests/queries/summary_notes.query.graphql
deleted file mode 100644
index ceb3b7e855651..0000000000000
--- a/ee/app/assets/javascripts/merge_requests/queries/summary_notes.query.graphql
+++ /dev/null
@@ -1,32 +0,0 @@
-#import "~/graphql_shared/fragments/user.fragment.graphql"
-
-query summaryNotes($projectPath: ID!, $iid: String!, $after: String!) {
-  project(fullPath: $projectPath) {
-    id
-    mergeRequest(iid: $iid) {
-      id
-      mergeRequestDiffs(after: $after) {
-        pageInfo {
-          endCursor
-          hasNextPage
-        }
-        nodes {
-          diffLlmSummary {
-            content
-            createdAt
-          }
-          reviewLlmSummaries {
-            nodes {
-              reviewer {
-                ...User
-                webUrl
-              }
-              contentHtml
-              createdAt
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/ee/app/graphql/ee/types/merge_request_type.rb b/ee/app/graphql/ee/types/merge_request_type.rb
index 031fc9f2f5e44..47e6961132336 100644
--- a/ee/app/graphql/ee/types/merge_request_type.rb
+++ b/ee/app/graphql/ee/types/merge_request_type.rb
@@ -39,11 +39,6 @@ module MergeRequestType
                        ' This flag is disabled by default and only available on GitLab.com' \
                        ' because the feature is experimental and is subject to change without notice.'
 
-        field :diff_llm_summaries, ::Types::MergeRequests::DiffLlmSummaryType.connection_type,
-          null: true,
-          alpha: { milestone: '16.1' },
-          description: 'Diff summaries generated by AI'
-
         field :blocking_merge_requests, ::Types::MergeRequests::BlockingMergeRequestsType,
           null: true,
           alpha: { milestone: '16.5' },
@@ -87,15 +82,10 @@ def merge_request_diffs(lookahead:)
         # which can result to N+1.
         includes = [:merge_request]
 
-        selects_diff_llm_summary =
-          lookahead.selection(:nodes).selects?(:diff_llm_summary) ||
-          lookahead.selection(:edges).selection(:node).selects?(:diff_llm_summary)
-
         selects_review_llm_summaries =
           lookahead.selection(:nodes).selects?(:review_llm_summaries) ||
           lookahead.selection(:edges).selection(:node).selects?(:review_llm_summaries)
 
-        includes << [merge_request_diff_llm_summary: [:merge_request_diff, :user]] if selects_diff_llm_summary
         includes << [merge_request_review_llm_summaries: [:user, { review: [:author] }]] if selects_review_llm_summaries
 
         object.merge_request_diffs.includes(includes)
diff --git a/ee/app/graphql/types/merge_request_diff_type.rb b/ee/app/graphql/types/merge_request_diff_type.rb
index 85bae3a97834a..248c5740fbc9b 100644
--- a/ee/app/graphql/types/merge_request_diff_type.rb
+++ b/ee/app/graphql/types/merge_request_diff_type.rb
@@ -7,11 +7,6 @@ class MergeRequestDiffType < ::Types::BaseObject
 
     authorize :read_merge_request
 
-    field :diff_llm_summary, ::Types::MergeRequests::DiffLlmSummaryType,
-      null: true,
-      method: :merge_request_diff_llm_summary,
-      description: 'Diff summary generated by AI.'
-
     field :review_llm_summaries, ::Types::MergeRequests::ReviewLlmSummaryType.connection_type,
       null: true,
       method: :merge_request_review_llm_summaries,
diff --git a/ee/app/graphql/types/merge_requests/diff_llm_summary_type.rb b/ee/app/graphql/types/merge_requests/diff_llm_summary_type.rb
deleted file mode 100644
index c2e6063eda081..0000000000000
--- a/ee/app/graphql/types/merge_requests/diff_llm_summary_type.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-module Types
-  module MergeRequests
-    class DiffLlmSummaryType < ::Types::BaseObject
-      graphql_name 'MergeRequestDiffLlmSummary'
-      description 'A diff summary generated by AI.'
-
-      authorize :read_merge_request
-
-      field :merge_request_diff_id,
-        GraphQL::Types::ID,
-        null: false,
-        description: 'ID of the Merge Request diff associated with the diff summary.'
-
-      field :user, Types::UserType,
-        null: true,
-        description: 'User associated with the diff summary.'
-
-      field :provider, GraphQL::Types::String,
-        null: false,
-        description: 'AI provider that generated the summary.'
-
-      field :content, GraphQL::Types::String,
-        null: false,
-        description: 'Content of the diff summary.'
-
-      field :created_at, Types::TimeType,
-        null: false,
-        description: 'Timestamp of when the diff summary was created.'
-
-      field :updated_at, Types::TimeType,
-        null: false,
-        description: 'Timestamp of when the diff summary was updated.'
-    end
-  end
-end
diff --git a/ee/app/helpers/ee/merge_requests_helper.rb b/ee/app/helpers/ee/merge_requests_helper.rb
index b71f2290dd0cb..5e12e3c3b3e7b 100644
--- a/ee/app/helpers/ee/merge_requests_helper.rb
+++ b/ee/app/helpers/ee/merge_requests_helper.rb
@@ -39,23 +39,11 @@ def mr_compare_form_data(user, merge_request)
       super.merge({ target_branch_finder_path: target_branch_finder_path })
     end
 
-    def summarize_llm_enabled?(project)
-      ::Llm::MergeRequests::SummarizeDiffService.enabled?(group: project.root_ancestor)
-    end
-
     override :review_bar_data
     def review_bar_data(merge_request, user)
       super.merge({ can_summarize: Ability.allowed?(user, :summarize_draft_code_review, merge_request).to_s })
     end
 
-    def diff_llm_summary(merge_request)
-      merge_request.latest_merge_request_diff&.merge_request_diff_llm_summary
-    end
-
-    def truncated_diff_llm_summary(merge_request)
-      diff_llm_summary(merge_request).content.truncate(250)
-    end
-
     def review_llm_summary_allowed?(merge_request, user)
       Ability.allowed?(user, :summarize_submitted_review, merge_request)
     end
diff --git a/ee/app/helpers/ee/todos_helper.rb b/ee/app/helpers/ee/todos_helper.rb
index ef1dec50176b5..00bfefe1dc506 100644
--- a/ee/app/helpers/ee/todos_helper.rb
+++ b/ee/app/helpers/ee/todos_helper.rb
@@ -19,16 +19,6 @@ def show_todo_state?(todo)
       super || (todo.target.is_a?(Epic) && todo.target.state == 'closed')
     end
 
-    override :todo_target_path_anchor
-    def todo_target_path_anchor(todo)
-      if todo.review_requested? && summarize_llm_enabled?(todo.target.project) &&
-          diff_llm_summary(todo.target).present?
-        return "diff-summary"
-      end
-
-      super
-    end
-
     override :todo_action_name
     def todo_action_name(todo)
       return s_('Todos|have been added as an approver') if todo.action == ::Todo::ADDED_APPROVER
diff --git a/ee/app/models/ee/merge_request.rb b/ee/app/models/ee/merge_request.rb
index 4c5ba68dcd1d9..a487452968688 100644
--- a/ee/app/models/ee/merge_request.rb
+++ b/ee/app/models/ee/merge_request.rb
@@ -477,13 +477,6 @@ def rebase_commit_is_different?(newrev)
       rebase_commit_sha != newrev
     end
 
-    def diff_llm_summaries
-      ::MergeRequest::DiffLlmSummary
-        .includes(:user, merge_request_diff: [:merge_request])
-        .where(merge_request_diff_id: merge_request_diffs.recent)
-        .order(created_at: :desc)
-    end
-
     def merge_train
       target_project.merge_train_for(target_branch)
     end
diff --git a/ee/app/models/ee/merge_request_diff.rb b/ee/app/models/ee/merge_request_diff.rb
index 61e311c2fe391..02913d783b8ce 100644
--- a/ee/app/models/ee/merge_request_diff.rb
+++ b/ee/app/models/ee/merge_request_diff.rb
@@ -16,13 +16,10 @@ module MergeRequestDiff
       with_replicator ::Geo::MergeRequestDiffReplicator
 
       has_one :merge_request_diff_detail, autosave: false, inverse_of: :merge_request_diff
-      has_one :merge_request_diff_llm_summary, class_name: 'MergeRequest::DiffLlmSummary'
       has_many :merge_request_review_llm_summaries, class_name: 'MergeRequest::ReviewLlmSummary'
 
       after_save :save_verification_details
 
-      after_create_commit :prepare_diff_summary, unless: :importing?
-
       scope :has_external_diffs, -> { with_files.where(stored_externally: true) }
       scope :project_id_in, ->(ids) { where(merge_request_id: ::MergeRequest.where(target_project_id: ids)) }
       scope :available_replicables, -> { has_external_diffs }
@@ -34,20 +31,6 @@ module MergeRequestDiff
       def verification_state_object
         merge_request_diff_detail
       end
-
-      def prepare_diff_summary
-        return unless ::Feature.enabled?(:summarize_diff_automatically, project)
-        return if merge_head?
-        return if empty?
-
-        Llm::SummarizeMergeRequestService
-          .new(
-            merge_request.author,
-            merge_request,
-            diff_id: id
-          )
-          .execute
-      end
     end
 
     class_methods do
diff --git a/ee/app/models/merge_request/diff_llm_summary.rb b/ee/app/models/merge_request/diff_llm_summary.rb
index 5b3d368d0a1d0..7a1f28b60fafe 100644
--- a/ee/app/models/merge_request/diff_llm_summary.rb
+++ b/ee/app/models/merge_request/diff_llm_summary.rb
@@ -1,4 +1,4 @@
-# rubocop:disable Style/ClassAndModuleChildren
+# rubocop:disable Style/ClassAndModuleChildren -- Will be removed when removing the table
 # frozen_string_literal: true
 
 class MergeRequest::DiffLlmSummary < ApplicationRecord
diff --git a/ee/app/policies/ee/merge_request_policy.rb b/ee/app/policies/ee/merge_request_policy.rb
index 15dc79e26125f..e5e1f2e1feb51 100644
--- a/ee/app/policies/ee/merge_request_policy.rb
+++ b/ee/app/policies/ee/merge_request_policy.rb
@@ -66,16 +66,6 @@ module MergeRequestPolicy
         subject&.project&.custom_roles_enabled?
       end
 
-      with_scope :subject
-      condition(:summarize_merge_request_enabled) do
-        ::Feature.enabled?(:summarize_diff_automatically, subject.project) &&
-          subject.project.licensed_feature_available?(:summarize_mr_changes) &&
-          ::Gitlab::Llm::FeatureAuthorizer.new(
-            container: subject.project,
-            feature_name: :summarize_diff
-          ).allowed?
-      end
-
       def read_only?
         @subject.target_project&.namespace&.read_only?
       end
@@ -121,18 +111,6 @@ def group_access?(protected_branch)
         enable :approve_merge_request
       end
 
-      rule { can?(:read_merge_request) }.policy do
-        enable :generate_diff_summary
-      end
-
-      rule { llm_bot }.policy do
-        enable :generate_diff_summary
-      end
-
-      rule do
-        summarize_merge_request_enabled & can?(:generate_diff_summary)
-      end.enable :summarize_merge_request
-
       rule do
         summarize_draft_code_review_enabled & can?(:read_merge_request)
       end.enable :summarize_draft_code_review
diff --git a/ee/app/policies/merge_request/diff_llm_summary_policy.rb b/ee/app/policies/merge_request/diff_llm_summary_policy.rb
deleted file mode 100644
index fae200fdf8a08..0000000000000
--- a/ee/app/policies/merge_request/diff_llm_summary_policy.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# frozen_string_literal: true
-
-# rubocop:disable Style/ClassAndModuleChildren
-class MergeRequest::DiffLlmSummaryPolicy < BasePolicy
-  delegate { @subject.merge_request_diff.project }
-end
-# rubocop:enable Style/ClassAndModuleChildren
diff --git a/ee/app/services/ee/notification_service.rb b/ee/app/services/ee/notification_service.rb
index 6041e9f25d46c..0bec999a35928 100644
--- a/ee/app/services/ee/notification_service.rb
+++ b/ee/app/services/ee/notification_service.rb
@@ -187,17 +187,5 @@ def new_review_deliver_options(review)
 
       options
     end
-
-    override :review_request_deliver_options
-    def review_request_deliver_options(project)
-      summary_diff_enabled = ::Llm::MergeRequests::SummarizeDiffService.enabled?(group: project.root_ancestor)
-
-      # NOTE: delay the email delivery to allow some time for the summary to be generated by AI
-      if summary_diff_enabled
-        super.merge(wait: 2.minutes)
-      else
-        super
-      end
-    end
   end
 end
diff --git a/ee/app/services/llm/merge_requests/summarize_diff_service.rb b/ee/app/services/llm/merge_requests/summarize_diff_service.rb
deleted file mode 100644
index 3c695444d4947..0000000000000
--- a/ee/app/services/llm/merge_requests/summarize_diff_service.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-# frozen_string_literal: true
-
-# TODO: This service is deprecated and will be removed in the future in
-# https://gitlab.com/gitlab-org/gitlab/-/issues/423210.
-module Llm
-  module MergeRequests
-    class SummarizeDiffService
-      TRACKING_CONTEXT = { action: 'summarize_diff' }.freeze
-
-      def initialize(title:, user:, diff:)
-        @title = title
-        @user = user
-        @diff = diff
-      end
-
-      def execute
-        return unless self.class.enabled?(group: diff.merge_request.project.root_ancestor) &&
-          user.can?(:generate_diff_summary, diff.merge_request)
-
-        response_modifier.new(response).response_body.presence
-      end
-
-      def self.enabled?(group:)
-        ::Feature.enabled?(:ai_global_switch, type: :ops) &&
-          Gitlab::Llm::StageCheck.available?(group, :summarize_diff) &&
-          ::License.feature_available?(:summarize_mr_changes)
-      end
-
-      private
-
-      attr_reader :title, :user, :diff
-
-      def prompt
-        <<~PROMPT
-          You are a code assistant, developed to help summarize code in non-technical terms.
-
-          ```
-          #{extracted_diff}
-          ```
-
-          The code above, enclosed by three ticks, is the code diff of a merge request. The merge request's
-          title is: '#{title}'
-
-          Write a summary of the changes in couple sentences, the way an expert engineer would summarize the
-          changes using simple - generally non-technical - terms.
-
-          You MUST ensure that it is no longer than 1800 characters. A character is considered anything, not only
-          letters.
-        PROMPT
-      end
-
-      def summary_message
-        prompt
-      end
-
-      def diff_output(old_path, new_path, diff)
-        <<~DIFF
-          --- #{old_path}
-          +++ #{new_path}
-          #{diff}
-        DIFF
-      end
-
-      def extracted_diff
-        # Each diff string starts with information about the lines changed,
-        #   bracketed by @@. Removing this saves us tokens.
-        #
-        # Ex: @@ -0,0 +1,58 @@\n+# frozen_string_literal: true\n+\n+module MergeRequests\n+
-        #
-        diff.raw_diffs.to_a.map do |diff|
-          next unless diff.diff.encoding == Encoding::UTF_8
-
-          diff_output(diff.old_path, diff.new_path, diff.diff.sub(Gitlab::Regex.git_diff_prefix, ""))
-        end.join.truncate_words(750)
-      end
-
-      def response_modifier
-        ::Gitlab::Llm::VertexAi::ResponseModifiers::Predictions
-      end
-
-      def response
-        Gitlab::Llm::VertexAi::Client.new(user, tracking_context: TRACKING_CONTEXT)
-          .text(content: summary_message)
-      end
-    end
-  end
-end
-
-# Added for JiHu
-Llm::MergeRequests::SummarizeDiffService.prepend_mod
diff --git a/ee/app/services/llm/summarize_merge_request_service.rb b/ee/app/services/llm/summarize_merge_request_service.rb
deleted file mode 100644
index fb79915729cd4..0000000000000
--- a/ee/app/services/llm/summarize_merge_request_service.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-module Llm
-  class SummarizeMergeRequestService < ::Llm::BaseService
-    private
-
-    def ai_action
-      :summarize_merge_request
-    end
-
-    def perform
-      schedule_completion_worker
-    end
-
-    def valid?
-      super &&
-        resource.to_ability_name == "merge_request" &&
-        Ability.allowed?(user, :summarize_merge_request, resource)
-    end
-  end
-end
diff --git a/ee/app/views/notify/_diff_summary.html.haml b/ee/app/views/notify/_diff_summary.html.haml
deleted file mode 100644
index ff3a242684e05..0000000000000
--- a/ee/app/views/notify/_diff_summary.html.haml
+++ /dev/null
@@ -1,8 +0,0 @@
-- if summarize_llm_enabled?(@merge_request.project)
-  - diff_llm_summary = diff_llm_summary(@merge_request)
-  - if diff_llm_summary.present?
-    .md{ style: 'border-bottom:1px solid #ededed; padding-bottom: 1em; padding-top: 1em;' }
-      %h4= _('Summary')
-      = markdown(diff_llm_summary.content, pipeline: :email)
-      %p{ style: 'color: #737278;' }
-        = _('Summary generated by AI (Experiment)')
diff --git a/ee/app/views/notify/_diff_summary.text.erb b/ee/app/views/notify/_diff_summary.text.erb
deleted file mode 100644
index 2b8e6c5f539e2..0000000000000
--- a/ee/app/views/notify/_diff_summary.text.erb
+++ /dev/null
@@ -1,14 +0,0 @@
-<% if summarize_llm_enabled?(@merge_request.project) -%>
-<% diff_llm_summary = diff_llm_summary(@merge_request) -%>
-<% if diff_llm_summary.present? -%>
-
---
-
-Summary
-
-<%= diff_llm_summary.content %>
-
-<%= _('Summary generated by AI (Experiment)') -%>
-
-<% end -%>
-<% end -%>
diff --git a/ee/config/feature_flags/development/summarize_diff_automatically.yml b/ee/config/feature_flags/development/summarize_diff_automatically.yml
deleted file mode 100644
index 416dfe337bdf1..0000000000000
--- a/ee/config/feature_flags/development/summarize_diff_automatically.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: summarize_diff_automatically
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118812
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/409135
-milestone: '16.1'
-type: development
-group: group::code review
-default_enabled: false
diff --git a/ee/lib/gitlab/duo/developments/setup.rb b/ee/lib/gitlab/duo/developments/setup.rb
index bcd8d63e12e47..6de7f08a426fb 100644
--- a/ee/lib/gitlab/duo/developments/setup.rb
+++ b/ee/lib/gitlab/duo/developments/setup.rb
@@ -67,7 +67,6 @@ def ensure_feature_flags
 
           ::Feature.enable(:ai_global_switch)
           ::Feature.enable(:ai_duo_chat_switch)
-          ::Feature.enable(:summarize_diff_automatically)
           ::Feature.enable(:summarize_my_code_review)
           ::Feature.enable(:automatically_summarize_mr_review)
           ::Feature.enable(:fill_in_mr_template)
diff --git a/ee/lib/gitlab/llm/completions_factory.rb b/ee/lib/gitlab/llm/completions_factory.rb
index a4b3eb34016ee..496f423ae8c9c 100644
--- a/ee/lib/gitlab/llm/completions_factory.rb
+++ b/ee/lib/gitlab/llm/completions_factory.rb
@@ -59,11 +59,6 @@ class CompletionsFactory
           prompt_class: ::Gitlab::Llm::Templates::SummarizeSubmittedReview,
           feature_category: :code_review_workflow
         },
-        summarize_merge_request: {
-          service_class: ::Gitlab::Llm::VertexAi::Completions::SummarizeMergeRequest,
-          prompt_class: ::Gitlab::Llm::Templates::SummarizeMergeRequest,
-          feature_category: :code_review_workflow
-        },
         summarize_new_merge_request: {
           service_class: ::Gitlab::Llm::VertexAi::Completions::SummarizeNewMergeRequest,
           prompt_class: ::Gitlab::Llm::Templates::SummarizeNewMergeRequest,
diff --git a/ee/lib/gitlab/llm/stage_check.rb b/ee/lib/gitlab/llm/stage_check.rb
index 486106de6c0f3..f83c028ee9f11 100644
--- a/ee/lib/gitlab/llm/stage_check.rb
+++ b/ee/lib/gitlab/llm/stage_check.rb
@@ -9,7 +9,6 @@ class StageCheck
         :summarize_my_mr_code_review,
         :explain_code,
         :generate_description,
-        :summarize_diff,
         :explain_vulnerability,
         :resolve_vulnerability,
         :generate_commit_message,
diff --git a/ee/lib/gitlab/llm/templates/summarize_merge_request.rb b/ee/lib/gitlab/llm/templates/summarize_merge_request.rb
deleted file mode 100644
index 8a3770c14aa6a..0000000000000
--- a/ee/lib/gitlab/llm/templates/summarize_merge_request.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module Llm
-    module Templates
-      class SummarizeMergeRequest
-        include Gitlab::Utils::StrongMemoize
-
-        def initialize(merge_request, mr_diff)
-          @merge_request = merge_request
-          @mr_diff = mr_diff
-        end
-
-        def to_prompt
-          return if extracted_diff.blank?
-
-          <<~PROMPT
-            You are a code assistant, developed to help summarize code in non-technical terms.
-
-            ```
-            #{extracted_diff}
-            ```
-
-            The code above, enclosed by three ticks, is the code diff of a merge request.
-
-            Write a summary of the changes in couple sentences, the way an expert engineer would summarize the
-            changes using simple - generally non-technical - terms.
-
-            You MUST ensure that it is no longer than 1800 characters. A character is considered anything, not only
-            letters.
-          PROMPT
-        end
-
-        private
-
-        attr_reader :merge_request, :mr_diff
-
-        def extracted_diff
-          # Each diff string starts with information about the lines changed,
-          #   bracketed by @@. Removing this saves us tokens.
-          #
-          # Ex: @@ -0,0 +1,58 @@\n+# frozen_string_literal: true\n+\n+module MergeRequests\n+
-          #
-          mr_diff.raw_diffs.to_a.map do |diff|
-            next if diff.diff.encoding != Encoding::UTF_8 || diff.has_binary_notice?
-
-            diff_output(diff.old_path, diff.new_path, diff.diff.sub(Gitlab::Regex.git_diff_prefix, ""))
-          end.join.truncate_words(750)
-        end
-        strong_memoize_attr :extracted_diff
-
-        def diff_output(old_path, new_path, diff)
-          <<~DIFF
-            --- #{old_path}
-            +++ #{new_path}
-            #{diff}
-          DIFF
-        end
-      end
-    end
-  end
-end
diff --git a/ee/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request.rb b/ee/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request.rb
deleted file mode 100644
index 3cd29a477b563..0000000000000
--- a/ee/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module Llm
-    module VertexAi
-      module Completions
-        class SummarizeMergeRequest < Gitlab::Llm::Completions::Base
-          # rubocop:disable CodeReuse/ActiveRecord
-          def execute
-            mr_diff = merge_request.merge_request_diffs.find_by(id: options[:diff_id])
-
-            return unless mr_diff.present?
-
-            prompt = generate_prompt(merge_request, mr_diff)
-
-            return unless prompt.present?
-
-            response = response_for(user, prompt)
-            response_modifier = ::Gitlab::Llm::VertexAi::ResponseModifiers::Predictions.new(response)
-
-            store_response(response_modifier, mr_diff)
-          end
-          # rubocop:enable CodeReuse/ActiveRecord
-
-          private
-
-          def merge_request
-            resource
-          end
-
-          def generate_prompt(merge_request, mr_diff)
-            ai_prompt_class.new(merge_request, mr_diff).to_prompt
-          end
-
-          def response_for(user, prompt)
-            ::Gitlab::Llm::VertexAi::Client
-              .new(user, tracking_context: tracking_context)
-              .text(
-                content: prompt,
-                parameters: ::Gitlab::Llm::VertexAi::Configuration.payload_parameters(temperature: 0)
-              )
-          end
-
-          def store_response(response_modifier, mr_diff)
-            return if response_modifier.errors.any? || response_modifier.response_body.blank?
-
-            summary = MergeRequest::DiffLlmSummary.new(
-              merge_request_diff: mr_diff,
-              content: response_modifier.response_body,
-              provider: MergeRequest::DiffLlmSummary.providers[:vertex_ai]
-            )
-
-            summary.save! if summary.valid?
-            summary
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/ee/spec/factories/ai_messages.rb b/ee/spec/factories/ai_messages.rb
index 27fbf2c850ba1..68cfde86fce39 100644
--- a/ee/spec/factories/ai_messages.rb
+++ b/ee/spec/factories/ai_messages.rb
@@ -69,10 +69,6 @@
       ai_action { :generate_commit_message }
     end
 
-    trait :summarize_merge_request do
-      ai_action { :summarize_merge_request }
-    end
-
     trait :summarize_review do
       ai_action { :summarize_review }
     end
diff --git a/ee/spec/graphql/ee/types/merge_request_type_spec.rb b/ee/spec/graphql/ee/types/merge_request_type_spec.rb
index f8722f64c10dc..9200fbeba1069 100644
--- a/ee/spec/graphql/ee/types/merge_request_type_spec.rb
+++ b/ee/spec/graphql/ee/types/merge_request_type_spec.rb
@@ -11,7 +11,6 @@
   it { expect(described_class).to have_graphql_field(:has_security_reports, calls_gitaly?: true) }
   it { expect(described_class).to have_graphql_field(:security_reports_up_to_date_on_target_branch, calls_gitaly?: true) }
   it { expect(described_class).to have_graphql_field(:suggested_reviewers) }
-  it { expect(described_class).to have_graphql_field(:diff_llm_summaries) }
   it { expect(described_class).to have_graphql_field(:blocking_merge_requests) }
   it { expect(described_class).to have_graphql_field(:merge_request_diffs) }
 
diff --git a/ee/spec/graphql/types/merge_request_diff_type_spec.rb b/ee/spec/graphql/types/merge_request_diff_type_spec.rb
index 6564cf23ee095..d7f6b979695e3 100644
--- a/ee/spec/graphql/types/merge_request_diff_type_spec.rb
+++ b/ee/spec/graphql/types/merge_request_diff_type_spec.rb
@@ -5,7 +5,6 @@
 RSpec.describe GitlabSchema.types['MergeRequestDiff'], feature_category: :code_review_workflow do
   let(:fields) do
     %i[
-      diff_llm_summary
       review_llm_summaries
       created_at
       updated_at
diff --git a/ee/spec/graphql/types/merge_requests/diff_llm_summary_type_spec.rb b/ee/spec/graphql/types/merge_requests/diff_llm_summary_type_spec.rb
deleted file mode 100644
index 27639444e38fe..0000000000000
--- a/ee/spec/graphql/types/merge_requests/diff_llm_summary_type_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe GitlabSchema.types['MergeRequestDiffLlmSummary'], feature_category: :code_review_workflow do
-  let(:fields) do
-    %i[
-      user
-      merge_request_diff_id
-      provider
-      content
-      created_at
-      updated_at
-    ]
-  end
-
-  it { expect(described_class).to have_graphql_fields(fields) }
-  it { expect(described_class).to require_graphql_authorizations(:read_merge_request) }
-end
diff --git a/ee/spec/helpers/ee/merge_requests_helper_spec.rb b/ee/spec/helpers/ee/merge_requests_helper_spec.rb
index 66f84840019f0..ffdfeb2cee10a 100644
--- a/ee/spec/helpers/ee/merge_requests_helper_spec.rb
+++ b/ee/spec/helpers/ee/merge_requests_helper_spec.rb
@@ -100,37 +100,6 @@
     end
   end
 
-  describe '#summarize_llm_enabled?' do
-    let_it_be(:user) { build_stubbed(:user) }
-    let_it_be(:group) { build_stubbed(:group) }
-    let_it_be(:project) { build_stubbed(:project, namespace: group) }
-
-    it 'calls Llm::MergeRequests::SummarizeDiffService enabled? method' do
-      expect(Llm::MergeRequests::SummarizeDiffService).to receive(:enabled?).with(group: group)
-
-      summarize_llm_enabled?(project)
-    end
-  end
-
-  describe '#diff_llm_summary' do
-    let(:merge_request) { instance_double('MergeRequest') }
-    let(:summary) { instance_double('MergeRequestDiff', merge_request_diff_llm_summary: 'summary') }
-
-    before do
-      allow(merge_request).to receive(:latest_merge_request_diff).and_return(summary)
-    end
-
-    context 'when merge request has summary' do
-      it { expect(helper.diff_llm_summary(merge_request)).to eq('summary') }
-    end
-
-    context 'when merge request has does not have summary' do
-      let(:summary) { nil }
-
-      it { expect(helper.diff_llm_summary(merge_request)).to eq(nil) }
-    end
-  end
-
   describe '#review_llm_summary_allowed?' do
     let(:user) { build_stubbed(:user) }
     let(:merge_request) { build_stubbed(:merge_request) }
diff --git a/ee/spec/helpers/ee/todos_helper_spec.rb b/ee/spec/helpers/ee/todos_helper_spec.rb
index 7fed2b8c09fab..7f1cdccd11522 100644
--- a/ee/spec/helpers/ee/todos_helper_spec.rb
+++ b/ee/spec/helpers/ee/todos_helper_spec.rb
@@ -165,44 +165,6 @@
 
       it { expect(helper.todo_target_path_anchor(todo)).to eq(nil) }
     end
-
-    describe 'with a review requested todo' do
-      let_it_be(:todo) do
-        create(:todo,
-          :review_requested,
-          user: user,
-          project: project,
-          target: merge_request,
-          author: author)
-      end
-
-      context 'when the summarize LLM feature is disabled' do
-        before do
-          allow(::Llm::MergeRequests::SummarizeDiffService).to receive(:enabled?).and_return(false)
-        end
-
-        it { expect(helper.todo_target_path_anchor(todo)).to eq(nil) }
-      end
-
-      context 'when the summarize LLM feature is enabled' do
-        let(:summary) { instance_double('MergeRequestDiff', merge_request_diff_llm_summary: 'summary') }
-
-        before do
-          allow(merge_request).to receive(:latest_merge_request_diff).and_return(summary)
-          allow(::Llm::MergeRequests::SummarizeDiffService).to receive(:enabled?).and_return(true)
-        end
-
-        context 'without llm summary' do
-          let(:summary) { instance_double('MergeRequestDiff', merge_request_diff_llm_summary: nil) }
-
-          it { expect(helper.todo_target_path_anchor(todo)).to eq(nil) }
-        end
-
-        context 'with llm summary' do
-          it { expect(helper.todo_target_path_anchor(todo)).to eq('diff-summary') }
-        end
-      end
-    end
   end
 
   describe '#todo_action_name' do
diff --git a/ee/spec/lib/gitlab/llm/templates/summarize_merge_request_spec.rb b/ee/spec/lib/gitlab/llm/templates/summarize_merge_request_spec.rb
deleted file mode 100644
index 5c455dafbc401..0000000000000
--- a/ee/spec/lib/gitlab/llm/templates/summarize_merge_request_spec.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Llm::Templates::SummarizeMergeRequest, feature_category: :code_review_workflow do
-  let_it_be(:project) { create(:project, :repository) }
-
-  let(:merge_request) do
-    create(
-      :merge_request,
-      source_branch: source_branch,
-      target_branch: 'master',
-      source_project: project,
-      target_project: project
-    )
-  end
-
-  let(:mr_diff) { merge_request.merge_request_diff }
-  let(:source_branch) { 'feature' }
-
-  subject { described_class.new(merge_request, mr_diff) }
-
-  describe '#to_prompt' do
-    it 'includes raw diff' do
-      expect(subject.to_prompt)
-        .to include("+class Feature\n+  def foo\n+    puts 'bar'\n+  end\n+end")
-    end
-
-    context 'when a diff contains the binary notice' do
-      let(:source_branch) { 'signed-commits' }
-
-      it 'does not contain the binary diff' do
-        mr_diff.raw_diffs.to_a[0].diff = "@@ -0,0 +1 @@hellothere\n+🌚\n"
-
-        binary_message = Gitlab::Git::Diff.binary_message('a', 'b')
-        binary_notice = binary_message
-        mr_diff.raw_diffs.to_a[1].diff = binary_notice
-
-        expect(subject.to_prompt).to include("hellothere")
-        expect(subject.to_prompt).not_to include(binary_message)
-      end
-    end
-
-    context 'when a diff is not encoded with UTF-8' do
-      let(:source_branch) { 'signed-commits' }
-
-      it 'does not raise any error and not contain the non-UTF diff' do
-        mr_diff.raw_diffs.to_a[0].diff = "@@ -0,0 +1 @@hellothere\n+🌚\n"
-
-        non_utf_diff = "@@ -1 +1 @@\n-This should not be in the prompt\n+#{(0..255).map(&:chr).join}\n"
-        mr_diff.raw_diffs.to_a[1].diff = non_utf_diff
-
-        expect { subject.to_prompt }.not_to raise_error
-        expect(subject.to_prompt).to include("hellothere")
-        expect(subject.to_prompt).not_to include("This should not be in the prompt")
-      end
-    end
-
-    context 'when extracted diff is blank' do
-      before do
-        allow(mr_diff).to receive(:raw_diffs).and_return([])
-      end
-
-      it 'returns nil' do
-        expect(subject.to_prompt).to be_nil
-      end
-    end
-  end
-end
diff --git a/ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request_spec.rb b/ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request_spec.rb
deleted file mode 100644
index 3ea8b02f5b926..0000000000000
--- a/ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_merge_request_spec.rb
+++ /dev/null
@@ -1,176 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Llm::VertexAi::Completions::SummarizeMergeRequest, feature_category: :code_review_workflow do
-  let_it_be(:project) { create(:project, :repository) }
-  let_it_be(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
-  let_it_be(:mr_diff) { merge_request.merge_request_diff }
-  let_it_be(:user) { merge_request.author }
-
-  let(:prompt_class) { Gitlab::Llm::Templates::SummarizeMergeRequest }
-  let(:diff_id) { mr_diff.id }
-  let(:tracking_context) { { action: :summarize_merge_request, request_id: 'uuid' } }
-  let(:options) do
-    {
-      diff_id: diff_id,
-      action: :summarize_merge_request
-    }
-  end
-
-  let(:prompt_message) do
-    build(:ai_message, :summarize_merge_request, user: user, resource: merge_request, request_id: 'uuid')
-  end
-
-  subject { described_class.new(prompt_message, prompt_class, options) }
-
-  describe '#execute' do
-    let(:prompt) { "This is a prompt." }
-
-    let(:payload_parameters) do
-      {
-        temperature: 0,
-        maxOutputTokens: 1024,
-        topK: 40,
-        topP: 0.95
-      }
-    end
-
-    before do
-      allow_next_instance_of(prompt_class) do |template|
-        allow(template).to receive(:to_prompt).and_return(prompt)
-      end
-
-      allow(::Gitlab::Llm::VertexAi::Configuration)
-        .to receive(:payload_parameters)
-        .with(temperature: 0)
-        .and_return(payload_parameters)
-    end
-
-    context 'when specific diff_id does not exist' do
-      let(:diff_id) { mr_diff.id + 1 }
-
-      it 'does not make a request to AI provider' do
-        expect(Gitlab::Llm::VertexAi::Client).not_to receive(:new)
-
-        subject.execute
-      end
-    end
-
-    context 'when generated prompt is nil' do
-      let(:prompt) { nil }
-
-      it 'does not make a request to AI provider' do
-        expect(Gitlab::Llm::VertexAi::Client).not_to receive(:new)
-
-        subject.execute
-      end
-    end
-
-    context 'when the text client returns a successful response' do
-      let(:example_answer) { 'Summary generated by AI' }
-      let(:example_response) do
-        {
-          "predictions" => [
-            {
-              "candidates" => [
-                {
-                  "author" => "",
-                  "content" => example_answer
-                }
-              ],
-              "safetyAttributes" => {
-                "categories" => ["Violent"],
-                "scores" => [0.4000000059604645],
-                "blocked" => false
-              }
-            }
-          ]
-        }
-      end
-
-      before do
-        allow_next_instance_of(Gitlab::Llm::VertexAi::Client, user, tracking_context: tracking_context) do |client|
-          allow(client)
-            .to receive(:text)
-            .with(content: prompt, parameters: payload_parameters)
-            .and_return(example_response.to_json)
-        end
-      end
-
-      it 'stores the content from the AI response' do
-        expect { subject.execute }
-          .to change { ::MergeRequest::DiffLlmSummary.count }
-          .by(1)
-
-        diff_llm_summary = mr_diff.merge_request_diff_llm_summary
-
-        aggregate_failures do
-          expect(diff_llm_summary.merge_request_diff).to eq(mr_diff)
-          expect(diff_llm_summary.provider).to eq('vertex_ai')
-          expect(diff_llm_summary.content).to eq('Summary generated by AI')
-        end
-      end
-
-      context 'when the AI response is too big' do
-        let(:example_answer) { "i" * 3000 }
-
-        it 'does not store the content' do
-          expect { subject.execute }
-            .not_to change { ::MergeRequest::DiffLlmSummary.count }
-        end
-
-        it 'returns unsaved Active Record object' do
-          response = subject.execute
-
-          expect(response).to be_a(MergeRequest::DiffLlmSummary)
-          expect(response).not_to be_persisted
-        end
-
-        it 'does not raise an error' do
-          expect { subject.execute }
-            .not_to raise_error
-        end
-      end
-    end
-
-    context 'when the text client returns an unsuccessful response' do
-      let(:error) { { error: { message: 'Error' } } }
-
-      before do
-        allow_next_instance_of(Gitlab::Llm::VertexAi::Client, user, tracking_context: tracking_context) do |client|
-          allow(client)
-            .to receive(:text)
-            .with(content: prompt, parameters: payload_parameters)
-            .and_return(error.to_json)
-        end
-      end
-
-      it 'does not store the content' do
-        expect { subject.execute }
-          .not_to change { ::MergeRequest::DiffLlmSummary.count }
-      end
-    end
-
-    context 'when the AI response is empty' do
-      before do
-        allow_next_instance_of(Gitlab::Llm::VertexAi::Client, user, tracking_context: tracking_context) do |client|
-          allow(client)
-            .to receive(:text)
-            .with(content: prompt, parameters: payload_parameters)
-            .and_return({})
-        end
-      end
-
-      it 'does not store the content' do
-        expect { subject.execute }
-          .not_to change { ::MergeRequest::DiffLlmSummary.count }
-      end
-
-      it 'does not raise an error' do
-        expect { subject.execute }
-          .not_to raise_error
-      end
-    end
-  end
-end
diff --git a/ee/spec/mailers/notify_spec.rb b/ee/spec/mailers/notify_spec.rb
index 2a79caf48fc14..5982751736a73 100644
--- a/ee/spec/mailers/notify_spec.rb
+++ b/ee/spec/mailers/notify_spec.rb
@@ -223,50 +223,6 @@
         end
       end
     end
-
-    context 'for merge request with reviewer' do
-      describe 'merge request diff summary' do
-        let_it_be(:merge_request_diff) { create(:merge_request_diff, merge_request: merge_request) }
-        let_it_be(:recipient) { create(:user) }
-
-        subject { described_class.request_review_merge_request_email(recipient.id, merge_request.id, merge_request.author_id) }
-
-        before do
-          allow(::Llm::MergeRequests::SummarizeDiffService).to receive(:enabled?).and_return(summarize_diff_service_enabled)
-        end
-
-        context 'when merge_request_diff_llm_summary exists' do
-          let_it_be(:merge_request_diff_llm_summary) { create(:merge_request_diff_llm_summary, merge_request_diff: merge_request_diff) }
-
-          context 'when SummarizeDiffService is disabled' do
-            let(:summarize_diff_service_enabled) { false }
-
-            it 'does not include diff summary' do
-              expect(subject.text_part.body.raw_source).not_to include(merge_request_diff_llm_summary.content)
-            end
-          end
-
-          context 'when SummarizeDiffService is enabled' do
-            let(:summarize_diff_service_enabled) { true }
-
-            it 'includes diff summary' do
-              expect(subject.text_part.body.raw_source).to include(merge_request_diff_llm_summary.content)
-              expect(subject.text_part.body.raw_source).to include('Summary generated by AI (Experiment)')
-            end
-          end
-        end
-
-        context 'when merge_request_diff_llm_summary is empty' do
-          context 'when SummarizeDiffService is enabled' do
-            let(:summarize_diff_service_enabled) { true }
-
-            it 'does not include diff summary' do
-              expect(subject.text_part.body.raw_source).not_to include('Summary generated by AI (Experiment)')
-            end
-          end
-        end
-      end
-    end
   end
 
   context 'for a group' do
diff --git a/ee/spec/models/ee/merge_request_diff_spec.rb b/ee/spec/models/ee/merge_request_diff_spec.rb
index d8549e75a3103..a3bca4dc0942a 100644
--- a/ee/spec/models/ee/merge_request_diff_spec.rb
+++ b/ee/spec/models/ee/merge_request_diff_spec.rb
@@ -70,66 +70,6 @@
     end
   end
 
-  describe 'prepare_diff_summary' do
-    let_it_be(:merge_request) { create(:merge_request, :skip_diff_creation, target_project: project, source_project: project) }
-
-    let(:diff_with_commits) do
-      create(
-        :merge_request_diff,
-        merge_request: merge_request,
-        start_commit_sha: merge_request.target_branch_sha,
-        head_commit_sha: merge_request.source_branch_sha
-      )
-    end
-
-    before do
-      stub_licensed_features(summarize_mr_changes: true)
-    end
-
-    it 'executes Llm::SummarizeMergeRequestService' do
-      expect_next_instance_of(
-        ::Llm::SummarizeMergeRequestService,
-        merge_request.author,
-        merge_request,
-        diff_id: kind_of(Numeric)
-      ) do |svc|
-        expect(svc).to receive(:execute)
-      end
-
-      diff_with_commits
-    end
-
-    context 'when diff is empty' do
-      it 'does not execute Llm::SummarizeMergeRequestService' do
-        expect(Llm::SummarizeMergeRequestService).not_to receive(:new)
-
-        create(:merge_request_diff, merge_request: merge_request, state: :empty)
-      end
-    end
-
-    context 'when summarize_diff_automatically feature flag is off' do
-      before do
-        stub_feature_flags(summarize_diff_automatically: false)
-      end
-
-      it 'does not call Llm::SummarizeMergeRequestService' do
-        expect(::Llm::SummarizeMergeRequestService).not_to receive(:new)
-
-        diff_with_commits
-      end
-    end
-
-    context 'when the diff is not merge_head' do
-      let(:diff_with_commits) { create(:merge_request_diff, :merge_head) }
-
-      it 'does not call Llm::SummarizeMergeRequestService' do
-        expect(::Llm::SummarizeMergeRequestService).not_to receive(:new)
-
-        diff_with_commits
-      end
-    end
-  end
-
   describe '.search' do
     let_it_be(:merge_request_diff1) { create(:merge_request_diff) }
     let_it_be(:merge_request_diff2) { create(:merge_request_diff) }
diff --git a/ee/spec/models/merge_request/diff_llm_summary_spec.rb b/ee/spec/models/merge_request/diff_llm_summary_spec.rb
deleted file mode 100644
index 860457add62b0..0000000000000
--- a/ee/spec/models/merge_request/diff_llm_summary_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe ::MergeRequest::DiffLlmSummary, feature_category: :code_review_workflow do
-  let_it_be_with_reload(:project) { create(:project, :repository) }
-
-  subject(:merge_request_diff_llm_summary) { build(:merge_request_diff_llm_summary) }
-
-  describe 'associations' do
-    it { is_expected.to belong_to(:merge_request_diff) }
-    it { is_expected.to belong_to(:user).optional }
-    it { is_expected.to validate_uniqueness_of(:merge_request_diff_id) }
-    it { is_expected.to validate_presence_of(:content) }
-    it { is_expected.to validate_length_of(:content).is_at_most(2056) }
-    it { is_expected.to validate_presence_of(:provider) }
-  end
-end
diff --git a/ee/spec/models/merge_request_spec.rb b/ee/spec/models/merge_request_spec.rb
index 72df502e51953..98ec2bd2b14f1 100644
--- a/ee/spec/models/merge_request_spec.rb
+++ b/ee/spec/models/merge_request_spec.rb
@@ -2081,21 +2081,6 @@ def create_mr(metrics_data = {})
     end
   end
 
-  describe '#diff_llm_summaries' do
-    let(:merge_request) { create(:merge_request) }
-    let!(:mr_diff_1) { create(:merge_request_diff, merge_request: merge_request) }
-    let!(:mr_diff_2) { create(:merge_request_diff, merge_request: merge_request) }
-    let!(:mr_diff_3) { create(:merge_request_diff, merge_request: merge_request) }
-    let!(:other_mr_diff) { create(:merge_request_diff) }
-    let!(:mr_diff_summary_1) { create(:merge_request_diff_llm_summary, merge_request_diff: mr_diff_1) }
-    let!(:mr_diff_summary_3) { create(:merge_request_diff_llm_summary, merge_request_diff: mr_diff_3) }
-    let!(:other_mr_diff_summary) { create(:merge_request_diff_llm_summary, merge_request_diff: other_mr_diff) }
-
-    it 'returns recent MergeRequest::DiffLlmSummary records associated to merge request diffs' do
-      expect(merge_request.diff_llm_summaries).to eq([mr_diff_summary_3, mr_diff_summary_1])
-    end
-  end
-
   describe '#merge_train' do
     subject { merge_request.merge_train }
 
diff --git a/ee/spec/policies/merge_request/diff_llm_summary_policy_spec.rb b/ee/spec/policies/merge_request/diff_llm_summary_policy_spec.rb
deleted file mode 100644
index 16258c2c3073f..0000000000000
--- a/ee/spec/policies/merge_request/diff_llm_summary_policy_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe MergeRequest::DiffLlmSummaryPolicy, feature_category: :code_review_workflow do
-  let_it_be_with_reload(:project) { create(:project) }
-  let_it_be(:user) { create(:user) }
-  let_it_be(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
-  let_it_be(:mr_diff_summary) do
-    create(:merge_request_diff_llm_summary, merge_request_diff: merge_request.merge_request_diff)
-  end
-
-  subject(:policy) { described_class.new(user, mr_diff_summary) }
-
-  context 'when user is not permitted to read merge request' do
-    it { is_expected.to be_disallowed(:read_merge_request) }
-  end
-
-  context 'when user is permitted to read merge request' do
-    before do
-      project.add_developer(user)
-    end
-
-    it { is_expected.to be_allowed(:read_merge_request) }
-  end
-end
diff --git a/ee/spec/policies/merge_request_policy_spec.rb b/ee/spec/policies/merge_request_policy_spec.rb
index 875755f5bda0e..67b1dd37a05ad 100644
--- a/ee/spec/policies/merge_request_policy_spec.rb
+++ b/ee/spec/policies/merge_request_policy_spec.rb
@@ -506,86 +506,4 @@ def policy_for(user)
       end
     end
   end
-
-  describe 'when enabling generate diff summary permission' do
-    let_it_be(:project) { create(:project) }
-    let_it_be(:user) { create(:user) }
-
-    context 'when can read_merge_request' do
-      before do
-        project.add_developer(user)
-      end
-
-      it 'allows to generate_diff_summary' do
-        expect(policy_for(user)).to be_allowed(:generate_diff_summary)
-      end
-    end
-
-    context 'when can not read_merge_request' do
-      it 'does not allow to generate_diff_summary' do
-        expect(policy_for(user)).not_to be_allowed(:generate_diff_summary)
-      end
-
-      context 'and when is the LLM bot' do
-        let(:user) { create(:user, :llm_bot) }
-
-        it 'allows to generate_diff_summary' do
-          expect(policy_for(user)).to be_allowed(:generate_diff_summary)
-        end
-      end
-    end
-  end
-
-  describe 'summarize_merge_request policy' do
-    let_it_be(:project) { create(:project) }
-    let_it_be(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
-    let_it_be(:current_user) { developer }
-
-    let(:authorizer) { instance_double(::Gitlab::Llm::FeatureAuthorizer) }
-
-    subject { described_class.new(current_user, merge_request) }
-
-    before do
-      stub_licensed_features(summarize_mr_changes: true)
-      allow(::Gitlab::Llm::FeatureAuthorizer).to receive(:new).and_return(authorizer)
-    end
-
-    context "when feature is authorized" do
-      before do
-        allow(authorizer).to receive(:allowed?).and_return(true)
-      end
-
-      it { is_expected.to be_allowed(:summarize_merge_request) }
-
-      context 'when summarize_diff_automatically feature flag is disabled' do
-        before do
-          stub_feature_flags(summarize_diff_automatically: false)
-        end
-
-        it { is_expected.to be_disallowed(:summarize_merge_request) }
-      end
-
-      context 'when license is not set' do
-        before do
-          stub_licensed_features(summarize_mr_changes: false)
-        end
-
-        it { is_expected.to be_disallowed(:summarize_merge_request) }
-      end
-
-      context 'when user cannot generate_diff_summary' do
-        let(:current_user) { guest }
-
-        it { is_expected.to be_disallowed(:summarize_merge_request) }
-      end
-    end
-
-    context "when feature is not authorized" do
-      before do
-        allow(authorizer).to receive(:allowed?).and_return(false)
-      end
-
-      it { is_expected.to be_disallowed(:summarize_draft_code_review) }
-    end
-  end
 end
diff --git a/ee/spec/requests/api/graphql/project/merge_request_spec.rb b/ee/spec/requests/api/graphql/project/merge_request_spec.rb
index 13f932afde9e4..bde6d98b7bf62 100644
--- a/ee/spec/requests/api/graphql/project/merge_request_spec.rb
+++ b/ee/spec/requests/api/graphql/project/merge_request_spec.rb
@@ -88,60 +88,11 @@
     end
   end
 
-  describe 'diffLlmSummaries' do
-    let(:mr_fields) { "diffLlmSummaries { nodes { mergeRequestDiffId content } }" }
-
-    context 'when there are MergeRequest::DiffLlmSummary records associated to MR' do
-      let!(:mr_diff_1) { create(:merge_request_diff, merge_request: merge_request) }
-      let!(:mr_diff_2) { create(:merge_request_diff, merge_request: merge_request) }
-      let!(:mr_diff_summary_1) { create(:merge_request_diff_llm_summary, merge_request_diff: mr_diff_1) }
-      let!(:mr_diff_summary_2) { create(:merge_request_diff_llm_summary, merge_request_diff: mr_diff_2) }
-
-      it 'returns the diff summaries' do
-        post_graphql(query, current_user: current_user)
-
-        expect(merge_request_graphql_data).to eq({
-          'diffLlmSummaries' => {
-            'nodes' => [
-              {
-                'mergeRequestDiffId' => mr_diff_2.id.to_s,
-                'content' => mr_diff_summary_2.content
-              },
-              {
-                'mergeRequestDiffId' => mr_diff_1.id.to_s,
-                'content' => mr_diff_summary_1.content
-              }
-            ]
-          }
-        })
-      end
-    end
-
-    context 'when there are no MergeRequest::DiffLlmSummary records associated to MR' do
-      it 'returns empty nodes' do
-        post_graphql(query, current_user: current_user)
-
-        expect(merge_request_graphql_data).to eq({
-          'diffLlmSummaries' => {
-            'nodes' => []
-          }
-        })
-      end
-    end
-  end
-
   describe 'mergeRequestDiffs' do
     let(:mr_fields) do
       <<-GQL
       mergeRequestDiffs {
         nodes {
-          diffLlmSummary {
-            mergeRequestDiffId
-            content
-            user {
-              id
-            }
-          }
           reviewLlmSummaries {
             nodes {
               mergeRequestDiffId
@@ -163,26 +114,17 @@
     let_it_be(:mr_diff_1) { create(:merge_request_diff, merge_request: merge_request) }
     let_it_be(:mr_diff_2) { create(:merge_request_diff, merge_request: merge_request) }
 
-    context 'when there are diff and review summaries associated to MR diffs' do
-      let_it_be(:mr_diff_summary_1) { create(:merge_request_diff_llm_summary, merge_request_diff: mr_diff_1) }
-      let_it_be(:mr_diff_summary_2) { create(:merge_request_diff_llm_summary, merge_request_diff: mr_diff_2) }
+    context 'when there are review summaries associated to MR diffs' do
       let_it_be(:mr_review_summary_1) { create(:merge_request_review_llm_summary, merge_request_diff: mr_diff_1) }
       let_it_be(:mr_review_summary_2) { create(:merge_request_review_llm_summary, merge_request_diff: mr_diff_2) }
 
-      it 'returns the diff and review summaries' do
+      it 'returns the review summaries' do
         post_graphql(query, current_user: current_user)
 
         expect(merge_request_graphql_data).to eq({
           'mergeRequestDiffs' => {
             'nodes' => [
               {
-                'diffLlmSummary' => {
-                  'mergeRequestDiffId' => mr_diff_2.id.to_s,
-                  'content' => mr_diff_summary_2.content,
-                  'user' => {
-                    'id' => mr_diff_summary_2.user.to_gid.to_s
-                  }
-                },
                 'reviewLlmSummaries' => {
                   'nodes' => [
                     {
@@ -199,13 +141,6 @@
                 }
               },
               {
-                'diffLlmSummary' => {
-                  'mergeRequestDiffId' => mr_diff_1.id.to_s,
-                  'content' => mr_diff_summary_1.content,
-                  'user' => {
-                    'id' => mr_diff_summary_1.user.to_gid.to_s
-                  }
-                },
                 'reviewLlmSummaries' => {
                   'nodes' => [
                     {
@@ -236,7 +171,6 @@
         expect_graphql_errors_to_be_empty
 
         mr_diff_3 = create(:merge_request_diff, merge_request: merge_request)
-        create(:merge_request_diff_llm_summary, merge_request_diff: mr_diff_3)
         create(:merge_request_review_llm_summary, merge_request_diff: mr_diff_3)
 
         expect { post_graphql(query, current_user: current_user) }.not_to exceed_all_query_limit(control)
@@ -244,7 +178,7 @@
       end
     end
 
-    context 'when there are no diff and review summaries associated to MR diffs' do
+    context 'when there are no review summaries associated to MR diffs' do
       it 'returns empty nodes' do
         post_graphql(query, current_user: current_user)
 
@@ -252,11 +186,9 @@
           'mergeRequestDiffs' => {
             'nodes' => [
               {
-                'diffLlmSummary' => nil,
                 'reviewLlmSummaries' => { 'nodes' => [] }
               },
               {
-                'diffLlmSummary' => nil,
                 'reviewLlmSummaries' => { 'nodes' => [] }
               }
             ]
diff --git a/ee/spec/services/ee/notification_service_spec.rb b/ee/spec/services/ee/notification_service_spec.rb
index f8f2eab5f1eed..c3dec4b50ecf4 100644
--- a/ee/spec/services/ee/notification_service_spec.rb
+++ b/ee/spec/services/ee/notification_service_spec.rb
@@ -912,40 +912,6 @@ def add_users_with_subscription(project, issuable)
       # Make the watcher a subscriber to detect dupes
       issuable.subscriptions.create!(user: @watcher_and_subscriber, project: project, subscribed: true)
     end
-
-    describe '#review_requested_of_merge_request' do
-      let_it_be(:reviewer) { create(:user) }
-
-      let(:merge_request) { create(:merge_request, source_project: project, reviewers: [reviewer]) }
-      let(:current_user) { merge_request.author }
-      let(:mailer) { double }
-
-      before do
-        allow(::Llm::MergeRequests::SummarizeDiffService).to receive(:enabled?).and_return(summarize_diff_service_enabled)
-        allow(Notify).to receive(:request_review_merge_request_email)
-          .with(Integer, Integer, Integer, String).and_return(mailer)
-      end
-
-      context 'when SummarizeDiffService is disabled' do
-        let(:summarize_diff_service_enabled) { false }
-
-        it 'does not call the summarize worker' do
-          expect(mailer).to receive(:deliver_later).with({})
-
-          notification.review_requested_of_merge_request(merge_request, current_user, reviewer)
-        end
-      end
-
-      context 'when SummarizeDiffService is enabled' do
-        let(:summarize_diff_service_enabled) { true }
-
-        it 'does not call the summarize worker' do
-          expect(mailer).to receive(:deliver_later).with({ wait: 2.minutes })
-
-          notification.review_requested_of_merge_request(merge_request, current_user, reviewer)
-        end
-      end
-    end
   end
 
   context 'IncidentManagement' do
diff --git a/ee/spec/services/llm/merge_requests/summarize_diff_service_spec.rb b/ee/spec/services/llm/merge_requests/summarize_diff_service_spec.rb
deleted file mode 100644
index 6e73af88fe701..0000000000000
--- a/ee/spec/services/llm/merge_requests/summarize_diff_service_spec.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Llm::MergeRequests::SummarizeDiffService, feature_category: :code_review_workflow do
-  let_it_be(:user)          { create(:user) }
-  let_it_be(:project)       { create(:project, :with_namespace_settings, :repository, :public) }
-  let_it_be(:merge_request) { create(:merge_request, source_project: project) }
-
-  let_it_be(:merge_request_2) { create(:merge_request) }
-  let_it_be(:project_2)       { merge_request_2.project }
-
-  let_it_be(:example_answer) { "This merge request includes changes to limit the transfer..." }
-  let_it_be(:example_response) do
-    {
-      "predictions" => [
-        {
-          "candidates" => [
-            {
-              "author" => "",
-              "content" => example_answer
-            }
-          ],
-          "safetyAttributes" => {
-            "categories" => ["Violent"],
-            "scores" => [0.4000000059604645],
-            "blocked" => false
-          }
-        }
-      ],
-      "deployedModelId" => "1",
-      "model" => "projects/1/locations/us-central1/models/text-bison",
-      "modelDisplayName" => "text-bison",
-      "modelVersionId" => "1"
-    }
-  end
-
-  let(:tracking_context) { { action: 'summarize_diff' } }
-  let(:response_double) { example_response.to_json }
-  let(:errored_response_double) { { error: "true" }.to_json }
-
-  subject(:service) do
-    described_class.new(title: merge_request.title, user: user, diff:
-                                          merge_request.merge_request_diff)
-  end
-
-  describe "#execute" do
-    before do
-      project.add_developer(user)
-      stub_licensed_features(summarize_mr_changes: true, ai_features: true)
-
-      merge_request.project.namespace.namespace_settings.update_attribute(:experiment_features_enabled, true)
-    end
-
-    context "when the user does not have read access to the MR" do
-      it "returns without attempting to summarize" do
-        secondary_service = described_class.new(title: merge_request_2.title, user: user, diff:
-                                          merge_request_2.merge_request_diff)
-
-        expect(secondary_service).not_to receive(:llm_client)
-        expect(secondary_service.execute).to be_nil
-      end
-    end
-
-    context "when the feature is not enabled" do
-      context 'when the ai_global_switch flag is false' do
-        before do
-          stub_feature_flags(ai_global_switch: false)
-        end
-
-        it "returns without attempting to summarize" do
-          expect(service).not_to receive(:llm_client)
-
-          service.execute
-        end
-      end
-
-      context 'when summarize_mr_change feature not avaliable' do
-        before do
-          stub_licensed_features(summarize_mr_changes: false)
-        end
-
-        it "returns without attempting to summarize" do
-          expect(service).not_to receive(:llm_client)
-
-          service.execute
-        end
-      end
-
-      context 'when the project experiment_features_allowed is false' do
-        before do
-          merge_request.project.namespace.namespace_settings.update_attribute(:experiment_features_enabled, false)
-        end
-
-        it "returns without attempting to summarize" do
-          expect(service).not_to receive(:llm_client)
-
-          service.execute
-        end
-      end
-    end
-
-    context "when Gitlab::Llm::VertexAi::Client.text returns a typical response" do
-      before do
-        allow_next_instance_of(Gitlab::Llm::VertexAi::Client, user, tracking_context: tracking_context) do |llm_client|
-          allow(llm_client).to receive(:text).and_return(response_double)
-        end
-      end
-
-      it "returns the content field from the VertexAI response" do
-        expect(service.execute).to eq(example_answer)
-      end
-    end
-
-    context "when Gitlab::Llm::VertexAi::Client.text returns an unsuccessful response" do
-      before do
-        allow_next_instance_of(Gitlab::Llm::VertexAi::Client, user, tracking_context: tracking_context) do |llm_client|
-          allow(llm_client).to receive(:text).and_return(errored_response_double)
-        end
-      end
-
-      it "returns nil" do
-        expect(service.execute).to be_nil
-      end
-    end
-
-    context "when Gitlab::Llm::VertexAi::Client.text returns an nil response" do
-      before do
-        allow_next_instance_of(Gitlab::Llm::VertexAi::Client, user, tracking_context: tracking_context) do |llm_client|
-          allow(llm_client).to receive(:text).and_return(nil)
-        end
-      end
-
-      it "returns nil" do
-        expect(service.execute).to be_nil
-      end
-    end
-
-    context "when Gitlab::Llm::VertexAi::Client.text returns a response without parsed_response" do
-      before do
-        allow_next_instance_of(Gitlab::Llm::VertexAi::Client, user, tracking_context: tracking_context) do |llm_client|
-          allow(llm_client).to receive(:text).and_return({ message: "Foo" }.to_json)
-        end
-      end
-
-      it "returns nil" do
-        expect(service.execute).to be_nil
-      end
-    end
-  end
-end
diff --git a/ee/spec/services/llm/summarize_merge_request_service_spec.rb b/ee/spec/services/llm/summarize_merge_request_service_spec.rb
deleted file mode 100644
index 9493e1e5d13a1..0000000000000
--- a/ee/spec/services/llm/summarize_merge_request_service_spec.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Llm::SummarizeMergeRequestService, :saas, feature_category: :code_review_workflow do
-  let_it_be(:user) { create(:user) }
-  let_it_be_with_reload(:group) { create(:group_with_plan, plan: :ultimate_plan) }
-  let_it_be(:project) { create(:project, :public, group: group) }
-  let_it_be(:resource) { create(:merge_request, source_project: project, target_project: project, author: user) }
-
-  let(:summarize_merge_request_enabled) { true }
-  let(:current_user) { user }
-  let(:options) { {} }
-
-  describe '#perform' do
-    include_context 'with ai features enabled for group'
-
-    let(:action_name) { :summarize_merge_request }
-    let(:content) { 'Summarize merge request' }
-
-    before_all do
-      group.add_guest(user)
-    end
-
-    before do
-      allow(Ability).to receive(:allowed?).and_call_original
-      allow(Ability)
-        .to receive(:allowed?)
-        .with(user, :summarize_merge_request, resource)
-        .and_return(summarize_merge_request_enabled)
-    end
-
-    subject { described_class.new(current_user, resource, options).execute }
-
-    it_behaves_like 'schedules completion worker' do
-      subject { described_class.new(current_user, resource, options) }
-    end
-
-    context 'when resource is not a merge_request' do
-      let(:resource) { create(:epic, group: group) }
-
-      it { is_expected.to be_error.and have_attributes(message: eq(described_class::INVALID_MESSAGE)) }
-    end
-
-    context 'when user has no ability to summarize_merge_request' do
-      let(:summarize_merge_request_enabled) { false }
-
-      it { is_expected.to be_error.and have_attributes(message: eq(described_class::INVALID_MESSAGE)) }
-    end
-  end
-end
diff --git a/spec/factories/merge_requests_diff_llm_summary.rb b/spec/factories/merge_requests_diff_llm_summary.rb
deleted file mode 100644
index fc67f8442caf5..0000000000000
--- a/spec/factories/merge_requests_diff_llm_summary.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-FactoryBot.define do
-  factory :merge_request_diff_llm_summary, class: 'MergeRequest::DiffLlmSummary' do
-    association :user, factory: :user
-    association :merge_request_diff, factory: :merge_request_diff
-    provider { 0 }
-    content { FFaker::Lorem.sentence }
-  end
-end
-- 
GitLab