feat: tab suggestions

This commit is contained in:
Fabian Freund
2025-07-24 23:47:34 +02:00
parent f0d17e78d7
commit 47151a2ba7
30 changed files with 1293 additions and 180 deletions
@@ -9,13 +9,23 @@ import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart';
final _apiInstance = GeckoMlApi();
class GeckoMlService {
Future<String> getContainerTopic(Set<String> titles, {int maxCount = 8}) {
Future<String> predictDocumentTopic(Set<String> titles, {int maxCount = 10}) {
var selectedTitles = titles.toList();
if (selectedTitles.length > maxCount) {
//TODO: Randomize for now, maybe use clusters later
selectedTitles = (selectedTitles..shuffle()).take(maxCount).toList();
}
return _apiInstance.getContainerTopic(selectedTitles);
return _apiInstance.predictDocumentTopic(selectedTitles);
}
Future<List<List<double>>> generateDocumentEmbeddings(
List<String> documents,
) async {
final embeddings = await _apiInstance.generateDocumentEmbeddings(documents);
return embeddings
.map((values) => (values! as List).cast<double>())
.toList();
}
}
@@ -3968,14 +3968,14 @@ class GeckoMlApi {
final String pigeonVar_messageChannelSuffix;
Future<String> getContainerTopic(List<String> titles) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoMlApi.getContainerTopic$pigeonVar_messageChannelSuffix';
Future<String> predictDocumentTopic(List<String> documents) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoMlApi.predictDocumentTopic$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[titles]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[documents]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
@@ -3995,6 +3995,34 @@ class GeckoMlApi {
return (pigeonVar_replyList[0] as String?)!;
}
}
Future<List<Object?>> generateDocumentEmbeddings(List<String> documents) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoMlApi.generateDocumentEmbeddings$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[documents]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
throw _createConnectionError(pigeonVar_channelName);
} else if (pigeonVar_replyList.length > 1) {
throw PlatformException(
code: pigeonVar_replyList[0]! as String,
message: pigeonVar_replyList[1] as String?,
details: pigeonVar_replyList[2],
);
} else if (pigeonVar_replyList[0] == null) {
throw PlatformException(
code: 'null-error',
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (pigeonVar_replyList[0] as List<Object?>?)!;
}
}
}
class GeckoBrowserExtensionApi {