add call to language detection after send without IGC
This commit is contained in:
parent
bdeb3d3b8f
commit
83b30dc084
7 changed files with 37 additions and 51 deletions
|
|
@ -3128,7 +3128,7 @@
|
|||
"maybeLater": "Maybe Later",
|
||||
"mainMenu": "Main Menu",
|
||||
"toggleImmersionMode": "Immersion Mode",
|
||||
"toggleImmersionModeDesc": "When enabled, all messages are displayed in your target language and you can click the message to access definitions and translations.",
|
||||
"toggleImmersionModeDesc": "When enabled, all messages are displayed in your target language. This setting is most useful in language exchanges.",
|
||||
"itToggleDescription": "This language learning tool will identify words in your base language and help you translate them to your target language. Though rare, the AI can make translation errors.",
|
||||
"igcToggleDescription": "This language learning tool will identify common spelling, grammar and punctuation errors in your message and suggest corrections. Though rare, the AI can make correction errors.",
|
||||
"sendOnEnterDescription": "Turn this off to be able to add line spaces in messages. When the toggle is off on the browser app, you can press Shift + Enter to start a new line. When the toggle is off on mobile apps, just Enter will start a new line.",
|
||||
|
|
|
|||
|
|
@ -3281,7 +3281,7 @@
|
|||
"generateVocabulary": "Generar vocabulario basado en el título y la descripción",
|
||||
"generatePrompts": "Generar preguntas basado en el título y la descripción",
|
||||
"toggleImmersionMode": "Modo de inmersión",
|
||||
"toggleImmersionModeDesc": "Cuando está habilitado, todos los mensajes se muestran en su idioma de destino y puede hacer clic en el mensaje para acceder a definiciones y traducciones.",
|
||||
"toggleImmersionModeDesc": "Cuando está habilitado, todos los mensajes se muestran en su idioma de destino. Esta configuración es más útil en intercambios de idiomas.",
|
||||
"subscribe": "Subscríbase",
|
||||
"getAccess": "Activar herramientas",
|
||||
"subscriptionDesc": "¡Enviar y recibir mensajes es gratis! Suscríbase para aceder a la traducción interactiva, la revisión gramatical y el análisis de aprendizaje.",
|
||||
|
|
|
|||
|
|
@ -199,18 +199,8 @@ class MessageContent extends StatelessWidget {
|
|||
case MessageTypes.Notice:
|
||||
case MessageTypes.Emote:
|
||||
if (AppConfig.renderHtml &&
|
||||
!event.redacted &&
|
||||
event.isRichMessage
|
||||
// #Pangea
|
||||
&&
|
||||
!(pangeaMessageEvent?.showRichText(
|
||||
selected,
|
||||
isOverlay: isOverlay,
|
||||
highlighted: toolbarController?.highlighted ?? false,
|
||||
) ??
|
||||
false)
|
||||
// Pangea#
|
||||
) {
|
||||
!event.redacted &&
|
||||
event.isRichMessage) {
|
||||
var html = event.formattedText;
|
||||
if (event.messageType == MessageTypes.Emote) {
|
||||
html = '* $html';
|
||||
|
|
@ -306,12 +296,7 @@ class MessageContent extends StatelessWidget {
|
|||
decoration: event.redacted ? TextDecoration.lineThrough : null,
|
||||
height: 1.3,
|
||||
);
|
||||
if (pangeaMessageEvent?.showRichText(
|
||||
selected,
|
||||
isOverlay: isOverlay,
|
||||
highlighted: toolbarController?.highlighted ?? false,
|
||||
) ??
|
||||
false) {
|
||||
if (immersionMode && pangeaMessageEvent != null) {
|
||||
return PangeaRichText(
|
||||
style: messageTextStyle,
|
||||
pangeaMessageEvent: pangeaMessageEvent!,
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import 'package:fluffychat/pangea/enum/edit_type.dart';
|
|||
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/models/class_model.dart';
|
||||
import 'package:fluffychat/pangea/models/it_step.dart';
|
||||
import 'package:fluffychat/pangea/models/language_detection_model.dart';
|
||||
import 'package:fluffychat/pangea/models/representation_content_model.dart';
|
||||
import 'package:fluffychat/pangea/models/tokens_event_content_model.dart';
|
||||
import 'package:fluffychat/pangea/utils/any_state_holder.dart';
|
||||
|
|
@ -93,7 +94,7 @@ class Choreographer {
|
|||
}
|
||||
}
|
||||
|
||||
void _sendWithIGC(BuildContext context) {
|
||||
Future<void> _sendWithIGC(BuildContext context) async {
|
||||
if (igc.canSendMessage) {
|
||||
final PangeaRepresentation? originalWritten =
|
||||
choreoRecord.includedIT && itController.sourceText != null
|
||||
|
|
@ -105,7 +106,6 @@ class Choreographer {
|
|||
)
|
||||
: null;
|
||||
|
||||
// PTODO - just put this in original message event
|
||||
final PangeaRepresentation originalSent = PangeaRepresentation(
|
||||
langCode: langCodeOfCurrentText ?? LanguageKeys.unknownLanguage,
|
||||
text: currentText,
|
||||
|
|
@ -115,6 +115,22 @@ class Choreographer {
|
|||
final ChoreoRecord? applicableChoreo =
|
||||
isITandIGCEnabled && igc.igcTextData != null ? choreoRecord : null;
|
||||
|
||||
// if the message has not been processed to determine its language
|
||||
// then run it through the language detection endpoint. If the detection
|
||||
// confidence is high enough, use that language code as the message's language
|
||||
// to save that pangea representation
|
||||
if (applicableChoreo == null) {
|
||||
final resp = await pangeaController.languageDetection.detectLanguage(
|
||||
currentText,
|
||||
pangeaController.languageController.userL2?.langCode,
|
||||
pangeaController.languageController.userL1?.langCode,
|
||||
);
|
||||
final LanguageDetection? bestDetection = resp.bestDetection();
|
||||
if (bestDetection != null) {
|
||||
originalSent.langCode = bestDetection.langCode;
|
||||
}
|
||||
}
|
||||
|
||||
final UseType useType = useTypeCalculator(applicableChoreo);
|
||||
debugPrint("use type in choreographer $useType");
|
||||
|
||||
|
|
|
|||
|
|
@ -82,10 +82,12 @@ class LanguageDetectionResponse {
|
|||
|
||||
final double _confidenceThreshold = 0.95;
|
||||
|
||||
LanguageDetection? get thresholdedDetection =>
|
||||
(_bestDetection?.confidence ?? 0) >= _confidenceThreshold
|
||||
? _bestDetection!
|
||||
: null;
|
||||
LanguageDetection? bestDetection({double? threshold}) {
|
||||
threshold ??= _confidenceThreshold;
|
||||
return (_bestDetection?.confidence ?? 0) >= _confidenceThreshold
|
||||
? _bestDetection!
|
||||
: null;
|
||||
}
|
||||
}
|
||||
|
||||
class _LanguageDetectionCacheItem {
|
||||
|
|
|
|||
|
|
@ -8,8 +8,14 @@ class LocalSettings {
|
|||
_pangeaController = pangeaController;
|
||||
}
|
||||
|
||||
bool userLanguageToolSetting(ToolSetting setting) =>
|
||||
_pangeaController.pStoreService.read(setting.toString()) ?? true;
|
||||
bool userLanguageToolSetting(ToolSetting setting) {
|
||||
final profileSetting =
|
||||
_pangeaController.pStoreService.read(setting.toString());
|
||||
if (profileSetting != null) {
|
||||
return profileSetting;
|
||||
}
|
||||
return setting == ToolSetting.immersionMode ? false : true;
|
||||
}
|
||||
|
||||
// bool get userEnableIT =>
|
||||
// _pangeaController.pStoreService.read(ToolSetting.interactiveTranslator.toString()) ?? true;
|
||||
|
|
|
|||
|
|
@ -80,29 +80,6 @@ class PangeaMessageEvent {
|
|||
return _latestEdit;
|
||||
}
|
||||
|
||||
bool showRichText(
|
||||
bool selected, {
|
||||
bool highlighted = false,
|
||||
bool isOverlay = false,
|
||||
}) {
|
||||
if (!_isValidPangeaMessageEvent) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ([EventStatus.error, EventStatus.sending].contains(_event.status)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isOverlay) return true;
|
||||
|
||||
// if ownMessage, don't show rich text if not selected or highlighted
|
||||
// and don't show is the message is not an overlay
|
||||
if (ownMessage && ((!selected && !highlighted) || !isOverlay)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Future<PangeaAudioFile> getMatrixAudioFile(
|
||||
String langCode,
|
||||
BuildContext context,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue