blob: cb10ac9e2dc211c67eff26c61e981bc685670cec [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Next MinVersion: 5
// Top-level API of the Machine Learning Service: loading models for inference.
// NOTE: This mojom exists in two places and must be kept in sync:
// Chromium: //chromeos/services/machine_learning/public/mojom/
// Chrome OS: src/platform2/ml/mojom/
// Note: Other repos downstream of Chromium might also use this mojom.
// Example: A backwards-compatible mojom change (and corresponding
// implementation change) can be made in Chrome OS first, then replicated to the
// clients (Chromium, other downstream repos) later.
// Use //chromeos/services/machine_learning/public/mojom/roll_mojoms.sh to help
// replicate Chrome OS-side changes over to Chromium.
module chromeos.machine_learning.mojom;
// NOTE: The base directory for 'import' statements is expected to differ
// between Chromium and Chrome OS versions of this file.
import "ml/mojom/document_scanner.mojom";
import "ml/mojom/grammar_checker.mojom";
import "ml/mojom/handwriting_recognizer.mojom";
import "ml/mojom/model.mojom";
import "ml/mojom/soda.mojom";
import "ml/mojom/text_classifier.mojom";
import "ml/mojom/text_suggester.mojom";
import "ml/mojom/web_platform_handwriting.mojom";
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
[Stable, Extensible]
enum LoadModelResult {
OK = 0,
MODEL_SPEC_ERROR = 1,
LOAD_MODEL_ERROR = 2,
FEATURE_NOT_SUPPORTED_ERROR = 3,
LANGUAGE_NOT_SUPPORTED_ERROR = 4,
};
// Top-level interface between Chromium browser process and the ML Service
// daemon.
// Next ordinal: 11
[Stable, Uuid="9e5e4750-40cc-4eda-ac09-3457d06a45ab"]
interface MachineLearningService {
// Binds another pipe to this instance.
Clone@5(pending_receiver<MachineLearningService> receiver);
// The BuiltinModelId inside BuiltinModelSpec is used to specify the model to
// be loaded.
LoadBuiltinModel@0(BuiltinModelSpec spec, pending_receiver<Model> receiver)
=> (LoadModelResult result);
// The FlatbufferModelSpec contains both of the flatbuffer content and the
// metadata.
LoadFlatBufferModel@1(FlatBufferModelSpec spec,
pending_receiver<Model> receiver)
=> (LoadModelResult result);
// Create a new TextClassifier.
LoadTextClassifier@2(pending_receiver<TextClassifier> receiver)
=> (LoadModelResult result);
// Create and initialize a handwriting recognizer with given `spec`.
LoadHandwritingModel@3(
HandwritingRecognizerSpec spec,
pending_receiver<HandwritingRecognizer> receiver)
=> (LoadHandwritingModelResult result);
// Will be deprecated soon.
LoadHandwritingModelWithSpec@4(
HandwritingRecognizerSpec spec,
pending_receiver<HandwritingRecognizer> receiver)
=> (LoadModelResult result);
// Create and initialize a speech recognizer with given `config`.
LoadSpeechRecognizer@6(SodaConfig config,
pending_remote<SodaClient> soda_client,
pending_receiver<SodaRecognizer> soda_recognizer)
=> (LoadModelResult result);
// Create and initialize a grammar checker.
LoadGrammarChecker@7(pending_receiver<GrammarChecker> receiver)
=> (LoadModelResult result);
// Create and initialize a text suggester.
[MinVersion=2] LoadTextSuggester@8(
pending_receiver<TextSuggester> receiver,
[MinVersion=3] TextSuggesterSpec? spec)
=> (LoadModelResult result);
// Create a handwriting recognizer for web platform API.
// This API shares the same HWR engine with `LoadHandwritingModel` and
// `LoadHandwritingModelWithSpec` but with a different interface. This API is
// as identical to the Web Platform HWR API as possible so that we do not
// need to convert the input/output in the browser process. This is required
// for security reasons.
[MinVersion=1] LoadWebPlatformHandwritingModel@9(
chromeos.machine_learning.web_platform.mojom.HandwritingModelConstraint
constraint,
pending_receiver<
chromeos.machine_learning.web_platform.mojom.HandwritingRecognizer>
receiver)
=> (LoadHandwritingModelResult result);
// Create and initialize a document scanner.
[MinVersion=4] LoadDocumentScanner@10(
pending_receiver<DocumentScanner> receiver)
=> (LoadModelResult result);
};