Prompt API: rename ai.assistant to ai.languageModel

This CL only focus on the user-facing interface renaming, all the
file name, metrics, class name (including the one exposed to JS) will be
updated as follow-up.

Bug: 372186535
Change-Id: I57752e193461d15906d9c6bd4d63af3ade1455c3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5919127
Reviewed-by: Kelvin Jiang <kelvinjiang@chromium.org>
Reviewed-by: Devlin Cronin <rdevlin.cronin@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Mingyu Lei <leimy@chromium.org>
Reviewed-by: Takashi Toyoshima <toyoshim@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1368007}
diff --git a/chrome/browser/extensions/ai_assistant_browsertest.cc b/chrome/browser/extensions/ai_assistant_browsertest.cc
index 6a53c6fd..54f26b9 100644
--- a/chrome/browser/extensions/ai_assistant_browsertest.cc
+++ b/chrome/browser/extensions/ai_assistant_browsertest.cc
@@ -29,8 +29,8 @@
 constexpr char kOriginTrialPublicKeyForTesting[] =
     "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA=";
 
-constexpr char kAIAssistantOriginTrialPermissionsField[] =
-    "\"permissions\":[\"aiAssistantOriginTrial\"],";
+constexpr char kAILanguageModelOriginTrialPermissionsField[] =
+    "\"permissions\":[\"aiLanguageModelOriginTrial\"],";
 
 // The extension origin trial token (expired on 2032-11-26) was generated by
 // ```
@@ -38,7 +38,7 @@
 // chrome-extension://jnapclmfkaejhjkddbmiafekigmcbmma AIPromptAPIForExtension
 // --expire-days 3000
 // ```
-constexpr char kAIAssistantOriginTrialTokensField[] =
+constexpr char kLanguageModelOriginTrialTokensField[] =
     "\"trial_tokens\":[\"A5nDxhrF7Qe4GiLouR1mgL5XKSk4wXA0B/RV2VyQcZj2IkLALdG/"
     "FHrucKbG1TKD8QidNfqBdC07wP8KJaF6EQYAAAB9eyJvcmlnaW4iOiAiY2hyb21lLWV4dGVuc2"
     "lvbjovL2puYXBjbG1ma2Flamhqa2RkYm1pYWZla2lnbWNibW1hIiwgImZlYXR1cmUiOiAiQUlQ"
@@ -74,7 +74,7 @@
           const expectChromeAiOriginTrialAssistant = %s;
           chrome.test.assertEq(
             expectChromeAiOriginTrialAssistant,
-            !!(chrome.aiOriginTrial && chrome.aiOriginTrial.assistant)
+            !!(chrome.aiOriginTrial && chrome.aiOriginTrial.languageModel)
           );
           chrome.test.succeed();
         },
@@ -199,10 +199,10 @@
   std::string GetManifest() {
     return base::StringPrintf(kManifestTemplate,
                               IsExtensionPermissionRequested(GetParam())
-                                  ? kAIAssistantOriginTrialPermissionsField
+                                  ? kAILanguageModelOriginTrialPermissionsField
                                   : "",
                               IsExtensionParticipatingInOriginTrial(GetParam())
-                                  ? kAIAssistantOriginTrialTokensField
+                                  ? kLanguageModelOriginTrialTokensField
                                   : "");
   }
 
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json
index a06406b..53829b8 100644
--- a/chrome/common/extensions/api/_permission_features.json
+++ b/chrome/common/extensions/api/_permission_features.json
@@ -56,7 +56,7 @@
       "5107DE9024C329EEA9C9A72D94C16723790C6422"   // Apps Developer Tool Dev.
     ]
   },
-  "aiAssistantOriginTrial": {
+  "aiLanguageModelOriginTrial": {
     "channel": "trunk",
     "extension_types": [
       "extension"
diff --git a/chrome/common/extensions/permissions/chrome_api_permissions.cc b/chrome/common/extensions/permissions/chrome_api_permissions.cc
index 0e6b4ef..0f1810b 100644
--- a/chrome/common/extensions/permissions/chrome_api_permissions.cc
+++ b/chrome/common/extensions/permissions/chrome_api_permissions.cc
@@ -63,7 +63,8 @@
      APIPermissionInfo::kFlagCannotBeOptional},
     {APIPermissionID::kAccessibilityServicePrivate,
      "accessibilityServicePrivate", APIPermissionInfo::kFlagCannotBeOptional},
-    {APIPermissionID::kAIAssistantOriginTrial, "aiAssistantOriginTrial"},
+    {APIPermissionID::kAILanguageModelOriginTrial,
+     "aiLanguageModelOriginTrial"},
     {APIPermissionID::kBookmark, "bookmarks"},
     {APIPermissionID::kBrailleDisplayPrivate, "brailleDisplayPrivate",
      APIPermissionInfo::kFlagCannotBeOptional},
diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/chrome/common/extensions/permissions/permission_set_unittest.cc
index 8938de6..96c4190e 100644
--- a/chrome/common/extensions/permissions/permission_set_unittest.cc
+++ b/chrome/common/extensions/permissions/permission_set_unittest.cc
@@ -833,7 +833,7 @@
 
   // This API is still in origin trial so we don't want to show a permission
   // prompt.
-  skip.insert(APIPermissionID::kAIAssistantOriginTrial);
+  skip.insert(APIPermissionID::kAILanguageModelOriginTrial);
 
   // These are private.
   skip.insert(APIPermissionID::kAccessibilityPrivate);
diff --git a/extensions/common/mojom/api_permission_id.mojom b/extensions/common/mojom/api_permission_id.mojom
index 368cf91..d189a7d4 100644
--- a/extensions/common/mojom/api_permission_id.mojom
+++ b/extensions/common/mojom/api_permission_id.mojom
@@ -283,7 +283,7 @@
   kOdfsConfigPrivate = 256,
   kChromeOSManagementAudio = 257,
   kChromeOSDiagnosticsNetworkInfoForMlab = 258,
-  kAIAssistantOriginTrial = 259,
+  kAILanguageModelOriginTrial = 259,
   kExperimentalAiData = 260,
 
   // Add new entries at the end of the enum and be sure to update the
diff --git a/extensions/renderer/native_extension_bindings_system.cc b/extensions/renderer/native_extension_bindings_system.cc
index c2f62d1..fa82e12 100644
--- a/extensions/renderer/native_extension_bindings_system.cc
+++ b/extensions/renderer/native_extension_bindings_system.cc
@@ -81,7 +81,7 @@
 constexpr char kBindingsSystemPerContextKey[] = "extension_bindings_system";
 
 constexpr char kStringNameAIOriginTrial[] = "aiOriginTrial";
-constexpr char kStringNameAssistant[] = "assistant";
+constexpr char kStringNameAssistant[] = "languageModel";
 
 // Returns true if the given |api| is a "prefixed" api of the |root_api|; that
 // is, if the api begins with the root.
@@ -1106,14 +1106,15 @@
   v8::HandleScope handle_scope(isolate);
   v8::Local<v8::Context> v8_context = context->v8_context();
 
-  // If the extension has requested for `kAIAssistantOriginTrial`
-  // permission, we will set the `chrome.ai.assistantOriginTrial` as a
-  // mirror of `self.ai.assistant`.
+  // If the extension has requested for `kAILanguageModelOriginTrial`
+  // permission, we will set the `chrome.aiOriginTrial.languageModel` as a
+  // mirror of `self.ai.languageModel`.
   if (!context->extension() ||
       !context->extension()
            ->permissions_data()
            ->active_permissions()
-           .HasAPIPermission(mojom::APIPermissionID::kAIAssistantOriginTrial)) {
+           .HasAPIPermission(
+               mojom::APIPermissionID::kAILanguageModelOriginTrial)) {
     return;
   }
 
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
index 8a2f6bec..c620513 100644
--- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
+++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -4457,7 +4457,7 @@
   kV8AIAssistantCapabilities_DefaultTemperature_AttributeGetter = 5083,
   kV8AIAssistantFactory_Capabilities_Method = 5084,
   kV8AIAssistantFactory_Create_Method = 5085,
-  kV8AI_Assistant_AttributeGetter = 5086,
+  kOBSOLETE_V8AI_Assistant_AttributeGetter = 5086,
   kV8AIAssistant_MaxTokens_AttributeGetter = 5087,
   kV8AIAssistant_TokensSoFar_AttributeGetter = 5088,
   kV8AIAssistant_TokensLeft_AttributeGetter = 5089,
@@ -4490,6 +4490,7 @@
   kV8PerformanceResourceTiming_WorkerCacheLookupStart_AttributeGetter = 5116,
   kV8PerformanceResourceTiming_WorkerMatchedSourceType_AttributeGetter = 5117,
   kV8PerformanceResourceTiming_WorkerFinalSourceType_AttributeGetter = 5118,
+  kV8AI_LanguageModel_AttributeGetter = 5119,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots. Also don't add extra
diff --git a/third_party/blink/public/web/modules/ai/web_ai_assistant.h b/third_party/blink/public/web/modules/ai/web_ai_assistant.h
index e205d229..1b9197e 100644
--- a/third_party/blink/public/web/modules/ai/web_ai_assistant.h
+++ b/third_party/blink/public/web/modules/ai/web_ai_assistant.h
@@ -12,12 +12,12 @@
 
 class BLINK_EXPORT WebAIAssistant {
  public:
-  // Returns the `self.ai.assistant` value even if it's not generated through
-  // the binding (i.e. the runtime enabled feature controlling the interface is
-  // disabled).
-  // This method is used for creating the `chrome.aiOriginTrial.assistant` for
-  // extension, see `NativeExtensionBindingsSystem::UpdateBindingsForPromptAPI`
-  // for more information.
+  // Returns the `self.ai.languageModel` value even if it's not generated
+  // through the binding (i.e. the runtime enabled feature controlling the
+  // interface is disabled). This method is used for creating the
+  // `chrome.aiOriginTrial.languageModel` for extension, see
+  // `NativeExtensionBindingsSystem::UpdateBindingsForPromptAPI` for more
+  // information.
   static v8::Local<v8::Value> GetAIAssistantFactory(
       v8::Local<v8::Context> v8_context,
       v8::Isolate* isolate);
diff --git a/third_party/blink/renderer/modules/ai/ai.cc b/third_party/blink/renderer/modules/ai/ai.cc
index bf7d140..56ae92f 100644
--- a/third_party/blink/renderer/modules/ai/ai.cc
+++ b/third_party/blink/renderer/modules/ai/ai.cc
@@ -47,7 +47,7 @@
   return task_runner_;
 }
 
-AIAssistantFactory* AI::assistant() {
+AIAssistantFactory* AI::languageModel() {
   if (!ai_assistant_factory_) {
     ai_assistant_factory_ = MakeGarbageCollected<AIAssistantFactory>(this);
   }
diff --git a/third_party/blink/renderer/modules/ai/ai.h b/third_party/blink/renderer/modules/ai/ai.h
index d556571..de91b9c 100644
--- a/third_party/blink/renderer/modules/ai/ai.h
+++ b/third_party/blink/renderer/modules/ai/ai.h
@@ -32,7 +32,7 @@
   void Trace(Visitor* visitor) const override;
 
   // model_manager.idl implementation.
-  AIAssistantFactory* assistant();
+  AIAssistantFactory* languageModel();
   AISummarizerFactory* summarizer();
   AIRewriterFactory* rewriter();
   AIWriterFactory* writer();
diff --git a/third_party/blink/renderer/modules/ai/ai.idl b/third_party/blink/renderer/modules/ai/ai.idl
index 790cf71..6625b0e7 100644
--- a/third_party/blink/renderer/modules/ai/ai.idl
+++ b/third_party/blink/renderer/modules/ai/ai.idl
@@ -19,7 +19,7 @@
     Measure,
     RuntimeEnabled=AIPromptAPI
   ]
-  readonly attribute AIAssistantFactory assistant;
+  readonly attribute AIAssistantFactory languageModel;
   [
     Measure,
     RuntimeEnabled=AISummarizationAPI
diff --git a/third_party/blink/renderer/modules/exported/web_ai_assistant.cc b/third_party/blink/renderer/modules/exported/web_ai_assistant.cc
index e46c268..8df81d2 100644
--- a/third_party/blink/renderer/modules/exported/web_ai_assistant.cc
+++ b/third_party/blink/renderer/modules/exported/web_ai_assistant.cc
@@ -16,7 +16,8 @@
     v8::Local<v8::Context> v8_context,
     v8::Isolate* isolate) {
   ExecutionContext* execution_context = ExecutionContext::From(v8_context);
-  AIAssistantFactory* assistant = DOMAI::ai(*execution_context)->assistant();
+  AIAssistantFactory* assistant =
+      DOMAI::ai(*execution_context)->languageModel();
   return assistant->ToV8(ScriptState::From(isolate, v8_context));
 }
 
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index 5e574cd9..67703a50 100644
--- a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -1,8 +1,8 @@
 [INTERFACES]
 interface AI
     attribute @@toStringTag
-    getter assistant
     getter languageDetector
+    getter languageModel
     getter rewriter
     getter summarizer
     getter writer
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
index 9841bb7..57a6e18e 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -6,8 +6,8 @@
 [Worker] [INTERFACES]
 [Worker] interface AI
 [Worker]     attribute @@toStringTag
-[Worker]     getter assistant
 [Worker]     getter languageDetector
+[Worker]     getter languageModel
 [Worker]     getter rewriter
 [Worker]     getter summarizer
 [Worker]     getter writer
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 1281141..afe2156 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -5,8 +5,8 @@
 [INTERFACES]
 interface AI
     attribute @@toStringTag
-    getter assistant
     getter languageDetector
+    getter languageModel
     getter rewriter
     getter summarizer
     getter writer
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
index 6344cac..e982c5a1 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -6,8 +6,8 @@
 [Worker] [INTERFACES]
 [Worker] interface AI
 [Worker]     attribute @@toStringTag
-[Worker]     getter assistant
 [Worker]     getter languageDetector
+[Worker]     getter languageModel
 [Worker]     getter rewriter
 [Worker]     getter summarizer
 [Worker]     getter writer
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-abort.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-abort.any.js
index 0ea9815..533aae3 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-abort.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-abort.any.js
@@ -3,14 +3,14 @@
 
 promise_test(async (t) => {
   const controller = new AbortController();
-  const createPromise = ai.assistant.create({ signal: controller.signal });
+  const createPromise = ai.languageModel.create({ signal: controller.signal });
   controller.abort();
   await promise_rejects_dom(t, 'AbortError', createPromise);
 }, "Aborting AIAssistantFactory.create()");
 
 promise_test(async (t) => {
   const controller = new AbortController();
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
   const clonePromise = session.clone({ signal: controller.signal });
   controller.abort();
   await promise_rejects_dom(t, 'AbortError', clonePromise);
@@ -18,7 +18,7 @@
 
 promise_test(async (t) => {
   const controller = new AbortController();
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
   const promptPromise = session.prompt(
     "Write a poem", { signal: controller.signal }
   );
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-clone.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-clone.any.js
index 930573f4..10d39681 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-clone.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-clone.any.js
@@ -6,11 +6,11 @@
   // Make sure the prompt api is enabled.
   assert_true(!!ai);
   // Make sure the session could be created.
-  const capabilities = await ai.assistant.capabilities();
+  const capabilities = await ai.languageModel.capabilities();
   const status = capabilities.available;
   assert_true(status === 'readily');
   // Start a new session and test it.
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
   let result = await testSession(session);
   assert_true(result.success, result.error);
 
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-count-prompt-tokens.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-count-prompt-tokens.any.js
index 4e1d0a1..91b6199 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-count-prompt-tokens.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-count-prompt-tokens.any.js
@@ -4,11 +4,11 @@
   // Make sure the prompt api is enabled.
   assert_true(!!ai);
   // Make sure the session could be created.
-  const capabilities = await ai.assistant.capabilities();
+  const capabilities = await ai.languageModel.capabilities();
   const status = capabilities.available;
   assert_true(status === 'readily');
   // Start a new session.
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
 
   // Test the countPromptTokens() API.
   let result = await session.countPromptTokens("This is a prompt.");
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-destroy.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-destroy.any.js
index 8833611..a4eca46 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-destroy.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-destroy.any.js
@@ -4,11 +4,11 @@
   // Make sure the prompt api is enabled.
   assert_true(!!ai);
   // Make sure the session could be created.
-  const capabilities = await ai.assistant.capabilities();
+  const capabilities = await ai.languageModel.capabilities();
   const status = capabilities.available;
   assert_true(status === 'readily');
   // Start a new session.
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
 
   // Calling `session.destroy()` immediately after `session.prompt()` will
   // trigger the "The model execution session has been destroyed." exception.
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-from-detached-iframe.window.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-from-detached-iframe.window.js
index 0066572..959f8d0 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-from-detached-iframe.window.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-from-detached-iframe.window.js
@@ -7,14 +7,14 @@
   let iframe = document.createElement("iframe");
   document.childNodes[document.childNodes.length - 1].appendChild(iframe);
   let iframeWindow = iframe.contentWindow;
-  iframeWindow.assistant = iframeWindow.ai.assistant;
+  iframeWindow.languageModel = iframeWindow.ai.languageModel;
   let iframeDOMException = iframeWindow.DOMException;
   // Detach the iframe.
   iframe.remove();
-  // Calling `ai.assistant.capabilities()` from an invalid script state will trigger
+  // Calling `ai.languageModel.capabilities()` from an invalid script state will trigger
   // the "The execution context is not valid." exception.
   await promise_rejects_dom(
-    t, 'InvalidStateError', iframeDOMException, iframeWindow.assistant.capabilities(),
+    t, 'InvalidStateError', iframeDOMException, iframeWindow.languageModel.capabilities(),
     "The promise should be rejected with InvalidStateError if the execution context is invalid."
   );
 });
\ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-context-destroyed.window.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-context-destroyed.window.js
index 3061120..4deb1e5 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-context-destroyed.window.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-context-destroyed.window.js
@@ -7,7 +7,7 @@
   const iframe = document.createElement('iframe');
   document.childNodes[document.childNodes.length - 1].appendChild(iframe);
 
-  const session = await iframe.contentWindow.ai.assistant.create();
+  const session = await iframe.contentWindow.ai.languageModel.create();
   session.prompt('hello');
   // Detach the iframe.
   iframe.remove();
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-gc.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-gc.any.js
index 7192fdc..c3fdfe6 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-gc.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-gc.any.js
@@ -5,11 +5,11 @@
   // Make sure the prompt api is enabled.
   assert_true(!!ai);
   // Make sure the session could be created.
-  const capabilities = await ai.assistant.capabilities();
+  const capabilities = await ai.languageModel.capabilities();
   const status = capabilities.available;
   assert_true(status === 'readily');
   // Start a new session.
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
   // Test the prompt API.
   const promptPromise = session.prompt('hello');
   // Run GC.
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming-gc.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming-gc.any.js
index 551b57ba..741c1a7 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming-gc.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming-gc.any.js
@@ -5,11 +5,11 @@
   // Make sure the prompt api is enabled.
   assert_true(!!ai);
   // Make sure the session could be created.
-  const capabilities = await ai.assistant.capabilities();
+  const capabilities = await ai.languageModel.capabilities();
   const status = capabilities.available;
   assert_true(status === 'readily');
   // Start a new session.
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
   // Test the streaming prompt API.
   const streamingResponse = session.promptStreaming("What is 1+2?");
   // Run GC.
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming.any.js
index abbdcca..e70d1a6f 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt-streaming.any.js
@@ -5,11 +5,11 @@
   // Make sure the prompt api is enabled.
   assert_true(!!ai);
   // Make sure the session could be created.
-  const capabilities = await ai.assistant.capabilities();
+  const capabilities = await ai.languageModel.capabilities();
   const status = capabilities.available;
   assert_true(status === 'readily');
   // Start a new session.
-  const session = await ai.assistant.create();
+  const session = await ai.languageModel.create();
   // Test the streaming prompt API.
   const streamingResponse = session.promptStreaming("What is 1+2?");
   assert_true(Object.prototype.toString.call(streamingResponse) === "[object ReadableStream]");
diff --git a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt.any.js b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt.any.js
index 9ae50e3..3dedb9c4 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt.any.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/assistant-api-prompt.any.js
@@ -12,7 +12,7 @@
   // Make sure the prompt api is enabled.
   assert_true(!!ai);
   // Make sure the session could be created.
-  const capabilities = await ai.assistant.capabilities();
+  const capabilities = await ai.languageModel.capabilities();
   const status = capabilities.available;
   assert_true(status === 'readily');
 
@@ -20,30 +20,30 @@
   let result;
 
   // Create a new session with no option.
-  session = await ai.assistant.create();
+  session = await ai.languageModel.create();
   assert_true(!!session);
 
   // Create a new session with topK and temperature.
-  session = await ai.assistant.create({topK: 3, temperature: 0.6});
+  session = await ai.languageModel.create({ topK: 3, temperature: 0.6 });
   assert_true(!!session);
 
   // Create a new session with only topK or temperature, it should fail.
-  result = ai.assistant.create({topK: 3});
+  result = ai.languageModel.create({ topK: 3 });
   await promise_rejects_dom(
       t, 'NotSupportedError', result,
       'Initializing a new session must either specify both topK and temperature, or neither of them.');
 
-  result = ai.assistant.create({temperature: 0.5});
+  result = ai.languageModel.create({ temperature: 0.5 });
   await promise_rejects_dom(
       t, 'NotSupportedError', result,
       'Initializing a new session must either specify both topK and temperature, or neither of them.');
 
   // Create a new session with system prompt.
-  session = await ai.assistant.create({systemPrompt: 'you are a robot'});
+  session = await ai.languageModel.create({ systemPrompt: 'you are a robot' });
   assert_true(!!session);
 
   // Create a new session with initial prompts.
-  session = await ai.assistant.create({
+  session = await ai.languageModel.create({
     initialPrompts: [
       {role: 'system', content: 'you are a robot'},
       {role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'}
@@ -52,7 +52,7 @@
   assert_true(!!session);
 
   // Create a new session with initial prompts without system role.
-  session = await ai.assistant.create({
+  session = await ai.languageModel.create({
     initialPrompts: [
       {role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'}
     ]
@@ -61,7 +61,7 @@
 
   // Create a new session with initial prompts with system role not placing as
   // the first element.
-  result = ai.assistant.create({
+  result = ai.languageModel.create({
     initialPrompts: [
       {role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'},
       {role: 'system', content: 'you are a robot'}
@@ -71,7 +71,7 @@
 
   // Create a new session with both system prompt and initial prompts, it should
   // fail.
-  result = ai.assistant.create({
+  result = ai.languageModel.create({
     systemPrompt: 'you are a robot',
     initialPrompts: [
       {role: 'system', content: 'you are a robot'},
diff --git a/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js b/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js
index da2a1b5..a79619f 100644
--- a/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js
+++ b/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js
@@ -64,7 +64,7 @@
   }
 
   try {
-    const capabilities = await ai.assistant.capabilities();
+    const capabilities = await ai.languageModel.capabilities();
     const status = capabilities.available;
     if (status !== "readily") {
       return {
@@ -73,7 +73,7 @@
       };
     }
 
-    const session = await ai.assistant.create({
+    const session = await ai.languageModel.create({
       topK: 3,
       temperature: 0.8,
       systemPrompt: "Let's talk about Mauritius."
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 0e88623..cc56761e 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -10905,7 +10905,7 @@
       label="V8AIAssistantCapabilities_DefaultTemperature_AttributeGetter"/>
   <int value="5084" label="V8AIAssistantFactory_Capabilities_Method"/>
   <int value="5085" label="V8AIAssistantFactory_Create_Method"/>
-  <int value="5086" label="V8AI_Assistant_AttributeGetter"/>
+  <int value="5086" label="OBSOLETE_V8AI_Assistant_AttributeGetter"/>
   <int value="5087" label="V8AIAssistant_MaxTokens_AttributeGetter"/>
   <int value="5088" label="V8AIAssistant_TokensSoFar_AttributeGetter"/>
   <int value="5089" label="V8AIAssistant_TokensLeft_AttributeGetter"/>
@@ -10946,6 +10946,7 @@
       label="V8PerformanceResourceTiming_WorkerMatchedSourceType_AttributeGetter"/>
   <int value="5118"
       label="V8PerformanceResourceTiming_WorkerFinalSourceType_AttributeGetter"/>
+  <int value="5119" label="V8AI_LanguageModel_AttributeGetter"/>
 </enum>
 
 <!-- LINT.ThenChange(//third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom:WebFeature) -->
diff --git a/tools/metrics/histograms/metadata/extensions/enums.xml b/tools/metrics/histograms/metadata/extensions/enums.xml
index 8066aad..dbdc0f6 100644
--- a/tools/metrics/histograms/metadata/extensions/enums.xml
+++ b/tools/metrics/histograms/metadata/extensions/enums.xml
@@ -3150,7 +3150,7 @@
   <int value="256" label="kOdfsConfigPrivate"/>
   <int value="257" label="kChromeOSManagementAudio"/>
   <int value="258" label="kChromeOSDiagnosticsNetworkInfoForMlab"/>
-  <int value="259" label="kAIAssistantOriginTrial"/>
+  <int value="259" label="kAILanguageModelOriginTrial"/>
   <int value="260" label="kExperimentalAiData"/>
 </enum>