Mingyu Lei | 5299ac1 | 2024-11-13 02:06:15 | [diff] [blame] | 1 | // Copyright 2024 The Chromium Authors |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef CONTENT_BROWSER_AI_ECHO_AI_LANGUAGE_MODEL_H_ |
| 6 | #define CONTENT_BROWSER_AI_ECHO_AI_LANGUAGE_MODEL_H_ |
| 7 | |
Brad Triebwasser | e163bfa | 2025-04-18 02:22:09 | [diff] [blame] | 8 | #include "base/containers/flat_set.h" |
Mingyu Lei | 5299ac1 | 2024-11-13 02:06:15 | [diff] [blame] | 9 | #include "base/memory/weak_ptr.h" |
| 10 | #include "mojo/public/cpp/bindings/pending_remote.h" |
| 11 | #include "mojo/public/cpp/bindings/remote_set.h" |
| 12 | #include "third_party/blink/public/mojom/ai/ai_language_model.mojom.h" |
| 13 | |
| 14 | namespace content { |
| 15 | |
| 16 | // The implementation of `blink::mojom::AILanguageModel` which only echoes |
| 17 | // back the prompt text used for testing. |
| 18 | class EchoAILanguageModel : public blink::mojom::AILanguageModel { |
| 19 | public: |
Mingyu Lei | 82e0225 | 2025-02-25 16:23:27 | [diff] [blame] | 20 | explicit EchoAILanguageModel( |
Brad Triebwasser | e163bfa | 2025-04-18 02:22:09 | [diff] [blame] | 21 | blink::mojom::AILanguageModelSamplingParamsPtr sampling_params, |
Brad Triebwasser | 666c7c8 | 2025-06-09 22:25:25 | [diff] [blame] | 22 | base::flat_set<blink::mojom::AILanguageModelPromptType> input_types, |
| 23 | uint32_t initial_tokens_size); |
Mingyu Lei | 5299ac1 | 2024-11-13 02:06:15 | [diff] [blame] | 24 | EchoAILanguageModel(const EchoAILanguageModel&) = delete; |
| 25 | EchoAILanguageModel& operator=(const EchoAILanguageModel&) = delete; |
| 26 | |
| 27 | ~EchoAILanguageModel() override; |
| 28 | |
| 29 | // `blink::mojom::AILanguageModel` implementation. |
Brad Triebwasser | 6e1c5b0 | 2025-03-05 22:08:53 | [diff] [blame] | 30 | void Prompt(std::vector<blink::mojom::AILanguageModelPromptPtr> prompts, |
Clark DuVall | 8c0e7f7 | 2025-04-24 22:14:11 | [diff] [blame] | 31 | on_device_model::mojom::ResponseConstraintPtr constraint, |
Mingyu Lei | 5299ac1 | 2024-11-13 02:06:15 | [diff] [blame] | 32 | mojo::PendingRemote<blink::mojom::ModelStreamingResponder> |
| 33 | pending_responder) override; |
Mingyu Lei | 7398d6b | 2025-05-09 06:53:42 | [diff] [blame] | 34 | void Append(std::vector<blink::mojom::AILanguageModelPromptPtr> prompts, |
Clark DuVall | 1e256ac | 2025-05-15 16:24:28 | [diff] [blame] | 35 | mojo::PendingRemote<blink::mojom::ModelStreamingResponder> |
| 36 | pending_responder) override; |
Mingyu Lei | 5299ac1 | 2024-11-13 02:06:15 | [diff] [blame] | 37 | void Fork( |
| 38 | mojo::PendingRemote<blink::mojom::AIManagerCreateLanguageModelClient> |
| 39 | client) override; |
| 40 | void Destroy() override; |
Mingyu Lei | f3b21f9 | 2025-03-25 03:28:29 | [diff] [blame] | 41 | void MeasureInputUsage( |
Clark DuVall | 3e7b2ac | 2025-05-01 18:42:11 | [diff] [blame] | 42 | std::vector<blink::mojom::AILanguageModelPromptPtr> input, |
Mingyu Lei | 8e04acc4 | 2025-05-13 14:34:58 | [diff] [blame] | 43 | MeasureInputUsageCallback callback) override; |
Mingyu Lei | 5299ac1 | 2024-11-13 02:06:15 | [diff] [blame] | 44 | |
| 45 | private: |
| 46 | void DoMockExecution(const std::string& input, |
| 47 | mojo::RemoteSetElementId responder_id); |
| 48 | |
| 49 | bool is_destroyed_ = false; |
| 50 | uint64_t current_tokens_ = 0; |
Mingyu Lei | 82e0225 | 2025-02-25 16:23:27 | [diff] [blame] | 51 | blink::mojom::AILanguageModelSamplingParamsPtr sampling_params_; |
Brad Triebwasser | e163bfa | 2025-04-18 02:22:09 | [diff] [blame] | 52 | // Prompt types supported by the language model in this session. |
| 53 | base::flat_set<blink::mojom::AILanguageModelPromptType> input_types_; |
Mingyu Lei | 82e0225 | 2025-02-25 16:23:27 | [diff] [blame] | 54 | |
Mingyu Lei | 5299ac1 | 2024-11-13 02:06:15 | [diff] [blame] | 55 | mojo::RemoteSet<blink::mojom::ModelStreamingResponder> responder_set_; |
| 56 | |
| 57 | base::WeakPtrFactory<EchoAILanguageModel> weak_ptr_factory_{this}; |
| 58 | }; |
| 59 | |
| 60 | } // namespace content |
| 61 | |
| 62 | #endif // CONTENT_BROWSER_AI_ECHO_AI_LANGUAGE_MODEL_H_ |