embedding method

Future<List<double>> embedding(
  1. String text, {
  2. String mode = "local",
})

Implementation

Future<List<double>> embedding(String text, {String mode = "local"}) async {
  final startTime = DateTime.now();

  List<double>? result;
  Exception? lastError;

  if (mode == "remote") {
    result = await _handleRemoteEmbedding(text);
  } else if (mode == "local") {
    result = await _handleLocalEmbedding(text);
  } else if (mode == "localfirst") {
    try {
      result = await _handleLocalEmbedding(text);
    } catch (e) {
      lastError = e is Exception ? e : Exception(e.toString());
      try {
        result = await _handleRemoteEmbedding(text);
      } catch (remoteError) {
        throw lastError;
      }
    }
  } else if (mode == "remotefirst") {
    try {
      result = await _handleRemoteEmbedding(text);
    } catch (e) {
      lastError = e is Exception ? e : Exception(e.toString());
      try {
        result = await _handleLocalEmbedding(text);
      } catch (localError) {
        throw lastError;
      }
    }
  } else {
    throw ArgumentError('Invalid mode: $mode. Must be "local", "remote", "localfirst", or "remotefirst"');
  }

  if (_initParams != null) {
    final endTime = DateTime.now();
    final totalTime = endTime.difference(startTime).inMilliseconds;

    CactusTelemetry.track({
      'event': 'embedding',
      'embedding_time': totalTime,
      'mode': mode,
    }, _initParams!);
  }

  return result;
}