embedding method
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;
}