generateEmbeddings method

  1. @override
Future<List<List<double>>> generateEmbeddings(
  1. List<String> texts, {
  2. TaskType taskType = TaskType.retrievalQuery,
})
override

Generate embedding vectors for multiple texts.

taskType controls the prefix applied before embedding.

Implementation

@override
Future<List<List<double>>> generateEmbeddings(
  List<String> texts, {
  TaskType taskType = TaskType.retrievalQuery,
}) async {
  _assertNotClosed();
  if (taskType == TaskType.retrievalDocument) {
    final results = <List<double>>[];
    for (final text in texts) {
      results.add(await _platformService.generateDocumentEmbeddingFromModel(text));
    }
    return results;
  }
  final result = await _platformService.generateEmbeddingsFromModel(texts);
  // Deep cast: platform channel returns List<Object?> with inner List<Object?>
  try {
    return result.map((inner) => (inner as List).cast<double>()).toList();
  } catch (e) {
    throw StateError(
      'Failed to cast embeddings from platform channel. '
      'Expected List<List<double>>, got: ${result.runtimeType}. Error: $e',
    );
  }
}