createModel method

  1. @override
Future<InferenceModel> createModel({
  1. required ModelType modelType,
  2. int maxTokens = 1024,
  3. PreferredBackend? preferredBackend,
  4. List<int>? loraRanks,
})
override

Creates and returns a new InferenceModel instance.

modelType — model type to create. maxTokens — maximum context length for the model. preferredBackend — backend preference (e.g., CPU, GPU). loraRanks — optional supported LoRA ranks.

Implementation

@override
Future<InferenceModel> createModel({
  required ModelType modelType,
  int maxTokens = 1024,
  PreferredBackend? preferredBackend,
  List<int>? loraRanks,
}) async {
  if (_initCompleter case Completer<InferenceModel> completer) {
    return completer.future;
  }

  final completer = _initCompleter = Completer<InferenceModel>();

  final (
  isModelInstalled,
  isLoraInstalled,
  File? modelFile,
  File? loraFile
  ) = await (
  modelManager.isModelInstalled,
  modelManager.isLoraInstalled,
  modelManager._modelFile,
  modelManager._loraFile,
  ).wait;

  if (!isModelInstalled || modelFile == null) {
    completer.completeError(
      Exception('Gemma Model is not installed yet. Use the `modelManager` to load the model first'),
    );
    return completer.future;
  }

  try {

    await _platformService.createModel(
      maxTokens: maxTokens,
      modelPath: modelFile.path,
      loraRanks: loraRanks ?? supportedLoraRanks,
      preferredBackend: preferredBackend,
    );

    final model = _initializedModel = MobileInferenceModel(
      maxTokens: maxTokens,
      modelType: modelType,
      modelManager: modelManager,
      preferredBackend: preferredBackend,
      supportedLoraRanks: loraRanks ?? supportedLoraRanks,
      onClose: () {
        _initializedModel = null;
        _initCompleter = null;
      },
    );

    completer.complete(model);
    return model;
  } catch (e, st) {
    completer.completeError(e, st);
    Error.throwWithStackTrace(e, st);
  }
}