diff --git a/polygerrit-ui/app/api/suggestions.ts b/polygerrit-ui/app/api/suggestions.ts
index 5dedad4..9883db5 100644
--- a/polygerrit-ui/app/api/suggestions.ts
+++ b/polygerrit-ui/app/api/suggestions.ts
@@ -28,6 +28,10 @@
    * - ... user types a comment draft
    */
   suggestCode(commentData: SuggestCodeRequest): Promise<SuggestCodeResponse>;
+  /**
+   * List of supported file extensions. If undefined, all file extensions supported.
+   */
+  supportedFileExtensions?: string[];
 }
 
 export declare interface SuggestCodeResponse {
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
index 5dea952..7a8779d 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -75,10 +75,11 @@
 } from '../gr-comment-model/gr-comment-model';
 import {formStyles} from '../../../styles/form-styles';
 import {Interaction} from '../../../constants/reporting';
-import {Suggestion} from '../../../api/suggestions';
+import {Suggestion, SuggestionsProvider} from '../../../api/suggestions';
 import {when} from 'lit/directives/when.js';
 import {getDocUrl} from '../../../utils/url-util';
 import {configModelToken} from '../../../models/config/config-model';
+import {getFileExtension} from '../../../utils/file-util';
 
 // visible for testing
 export const AUTO_SAVE_DEBOUNCE_DELAY_MS = 2000;
@@ -217,6 +218,9 @@
   generatedSuggestionId?: string;
 
   @state()
+  suggestionsProvider?: SuggestionsProvider;
+
+  @state()
   suggestionLoading = false;
 
   @property({type: Boolean, attribute: 'show-patchset'})
@@ -369,6 +373,18 @@
     }
   }
 
+  override connectedCallback() {
+    super.connectedCallback();
+    this.getPluginLoader()
+      .awaitPluginsLoaded()
+      .then(() => {
+        const suggestionsPlugins =
+          this.getPluginLoader().pluginsModel.getState().suggestionsPlugins;
+        // We currently support results from only 1 provider.
+        this.suggestionsProvider = suggestionsPlugins?.[0]?.provider;
+      });
+  }
+
   override disconnectedCallback() {
     // Clean up emoji dropdown.
     if (this.textarea) this.textarea.closeDropdown();
@@ -944,11 +960,17 @@
   private showGeneratedSuggestion() {
     return (
       this.flagsService.isEnabled(KnownExperimentId.ML_SUGGESTED_EDIT) &&
+      this.suggestionsProvider &&
       this.editing &&
       !this.permanentEditingMode &&
       this.comment &&
+      this.comment.path &&
       this.comment.path !== SpecialFilePath.PATCHSET_LEVEL_COMMENTS &&
       this.comment.path !== SpecialFilePath.COMMIT_MESSAGE &&
+      (!this.suggestionsProvider.supportedFileExtensions ||
+        this.suggestionsProvider.supportedFileExtensions.includes(
+          getFileExtension(this.comment.path)
+        )) &&
       this.comment === this.comments?.[0] && // Is first comment
       (this.comment.range || this.comment.line) && // Disabled for File comments
       !hasUserSuggestion(this.comment)
@@ -1036,10 +1058,9 @@
   }
 
   private async generateSuggestEdit() {
-    const suggestionsPlugins =
-      this.getPluginLoader().pluginsModel.getState().suggestionsPlugins;
-    if (suggestionsPlugins.length === 0) return;
+    const suggestionsProvider = this.suggestionsProvider;
     if (
+      !suggestionsProvider ||
       !this.showGeneratedSuggestion() ||
       !this.changeNum ||
       !this.comment ||
@@ -1053,16 +1074,14 @@
       uuid: this.generatedSuggestionId,
     });
     this.suggestionLoading = true;
-    const suggestionResponse = await suggestionsPlugins[0].provider.suggestCode(
-      {
-        prompt: this.messageText,
-        changeNumber: this.changeNum,
-        patchsetNumber: this.comment?.patch_set,
-        filePath: this.comment.path,
-        range: this.comment.range,
-        lineNumber: this.comment.line,
-      }
-    );
+    const suggestionResponse = await suggestionsProvider.suggestCode({
+      prompt: this.messageText,
+      changeNumber: this.changeNum,
+      patchsetNumber: this.comment?.patch_set,
+      filePath: this.comment.path,
+      range: this.comment.range,
+      lineNumber: this.comment.line,
+    });
     this.suggestionLoading = false;
     // TODO(milutin): The suggestionResponse can contain multiple suggestion
     // options. We pick the first one for now. In future we shouldn't ignore
diff --git a/polygerrit-ui/app/utils/file-util.ts b/polygerrit-ui/app/utils/file-util.ts
index 246ac20..a82ce10 100644
--- a/polygerrit-ui/app/utils/file-util.ts
+++ b/polygerrit-ui/app/utils/file-util.ts
@@ -43,3 +43,11 @@
   }
   return input;
 }
+
+export function getFileExtension(fileName: string): string {
+  const index = fileName.lastIndexOf('.');
+  if (index === -1) {
+    return '';
+  }
+  return fileName.substring(index + 1);
+}
diff --git a/polygerrit-ui/app/utils/file-util_test.ts b/polygerrit-ui/app/utils/file-util_test.ts
index aeab026..f725041 100644
--- a/polygerrit-ui/app/utils/file-util_test.ts
+++ b/polygerrit-ui/app/utils/file-util_test.ts
@@ -3,9 +3,14 @@
  * Copyright 2022 Google LLC
  * SPDX-License-Identifier: Apache-2.0
  */
-import {assert} from '@open-wc/testing';
 import '../test/common-test-setup';
-import {expandFileMode, FileMode, fileModeToString} from './file-util';
+import {assert} from '@open-wc/testing';
+import {
+  expandFileMode,
+  FileMode,
+  fileModeToString,
+  getFileExtension,
+} from './file-util';
 
 suite('file-util tests', () => {
   test('fileModeToString', () => {
@@ -35,4 +40,15 @@
       ['old mode regular (100644)', 'new mode executable (100755)']
     );
   });
+
+  suite('getFileExtension', () => {
+    test('returns an empty string when the file name does not have an extension', () => {
+      assert.equal(getFileExtension('my_file'), '');
+    });
+    test('returns the extension when the file name has an extension', () => {
+      assert.equal(getFileExtension('my_file.txt'), 'txt');
+      assert.equal(getFileExtension('folder/my_file.java'), 'java');
+      assert.equal(getFileExtension('.hidden_file.ts'), 'ts');
+    });
+  });
 });
