// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/browser/ai/echo_ai_writer.h"

#include <optional>

#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/ai/model_streaming_responder.mojom.h"

namespace content {

void EchoAIWriter::Write(
    const std::string& input,
    const std::optional<std::string>& context,
    mojo::PendingRemote<blink::mojom::ModelStreamingResponder>
        pending_responder) {
  mojo::Remote<blink::mojom::ModelStreamingResponder> responder(
      std::move(pending_responder));
  responder->OnStreaming("Model not available in Chromium\n" + input);
  responder->OnCompletion(/*context_info=*/nullptr);
}

void EchoAIWriter::MeasureUsage(const std::string& input,
                                const std::string& context,
                                MeasureUsageCallback callback) {
  std::move(callback).Run(input.size() + context.size());
}

}  // namespace content
