added language detection controller, edited README, and removed some old code
parent
7e7c8810c8
commit
aea0c9ccec
@ -1,24 +0,0 @@
|
||||
import 'package:fluffychat/pangea/choreographer/controllers/it_controller.dart';
|
||||
|
||||
class MlController {
|
||||
final ITController controller;
|
||||
MlController(this.controller);
|
||||
|
||||
// sendPayloads(String message, String messageId) async {
|
||||
// final MessageServiceModel serviceModel = MessageServiceModel(
|
||||
// classId: controller.state!.classId,
|
||||
// roomId: controller.state!.roomId,
|
||||
// message: message.toString(),
|
||||
// messageId: messageId.toString(),
|
||||
// payloadIds: controller.state!.payLoadIds,
|
||||
// userId: controller.state!.userId!,
|
||||
// l1Lang: controller.state!.sourceLangCode,
|
||||
// l2Lang: controller.state!.targetLangCode!,
|
||||
// );
|
||||
// try {
|
||||
// await MessageServiceRepo.sendPayloads(serviceModel);
|
||||
// } catch (err) {
|
||||
// debugPrint('$err in sendPayloads');
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@ -0,0 +1,122 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:fluffychat/pangea/config/environment.dart';
|
||||
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
|
||||
import 'package:fluffychat/pangea/network/urls.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import '../network/requests.dart';
|
||||
|
||||
class LanguageDetectionRequest {
|
||||
String fullText;
|
||||
String userL1;
|
||||
String userL2;
|
||||
|
||||
LanguageDetectionRequest({
|
||||
required this.fullText,
|
||||
this.userL1 = "",
|
||||
required this.userL2,
|
||||
});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'full_text': fullText,
|
||||
'user_l1': userL1,
|
||||
'user_l2': userL2,
|
||||
};
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
return other is LanguageDetectionRequest &&
|
||||
other.fullText == fullText &&
|
||||
other.userL1 == userL1 &&
|
||||
other.userL2 == userL2;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => fullText.hashCode ^ userL1.hashCode ^ userL2.hashCode;
|
||||
}
|
||||
|
||||
class LanguageDetectionResponse {
|
||||
List<Map<String, dynamic>> detections;
|
||||
String fullText;
|
||||
|
||||
LanguageDetectionResponse({
|
||||
required this.detections,
|
||||
required this.fullText,
|
||||
});
|
||||
|
||||
factory LanguageDetectionResponse.fromJson(Map<String, dynamic> json) {
|
||||
return LanguageDetectionResponse(
|
||||
detections: List<Map<String, dynamic>>.from(json['detections']),
|
||||
fullText: json['full_text'],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _LanguageDetectionCacheItem {
|
||||
Future<LanguageDetectionResponse> data;
|
||||
|
||||
_LanguageDetectionCacheItem({
|
||||
required this.data,
|
||||
});
|
||||
}
|
||||
|
||||
class LanguageDetectionController {
|
||||
static final Map<LanguageDetectionRequest, _LanguageDetectionCacheItem>
|
||||
_cache = {};
|
||||
late final PangeaController _pangeaController;
|
||||
Timer? _cacheClearTimer;
|
||||
|
||||
LanguageDetectionController(PangeaController pangeaController) {
|
||||
_pangeaController = pangeaController;
|
||||
_initializeCacheClearing();
|
||||
}
|
||||
|
||||
void _initializeCacheClearing() {
|
||||
const duration = Duration(minutes: 15); // Adjust the duration as needed
|
||||
_cacheClearTimer = Timer.periodic(duration, (Timer t) => _clearCache());
|
||||
}
|
||||
|
||||
void _clearCache() {
|
||||
_cache.clear();
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
_cacheClearTimer?.cancel();
|
||||
}
|
||||
|
||||
Future<LanguageDetectionResponse> get(
|
||||
LanguageDetectionRequest params,
|
||||
) async {
|
||||
if (_cache.containsKey(params)) {
|
||||
return _cache[params]!.data;
|
||||
} else {
|
||||
final Future<LanguageDetectionResponse> response = _fetchResponse(
|
||||
await _pangeaController.userController.accessToken,
|
||||
params,
|
||||
);
|
||||
_cache[params] = _LanguageDetectionCacheItem(data: response);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<LanguageDetectionResponse> _fetchResponse(
|
||||
String accessToken,
|
||||
LanguageDetectionRequest params,
|
||||
) async {
|
||||
final Requests request = Requests(
|
||||
choreoApiKey: Environment.choreoApi,
|
||||
accessToken: accessToken,
|
||||
);
|
||||
|
||||
final http.Response res = await request.post(
|
||||
url: PApiUrls.languageDetection,
|
||||
body: params.toJson(),
|
||||
);
|
||||
|
||||
final Map<String, dynamic> json = jsonDecode(res.body);
|
||||
return LanguageDetectionResponse.fromJson(json);
|
||||
}
|
||||
}
|
||||
@ -1,55 +0,0 @@
|
||||
import '../config/environment.dart';
|
||||
import '../network/requests.dart';
|
||||
import '../network/urls.dart';
|
||||
|
||||
class MessageServiceRepo {
|
||||
static Future<void> sendPayloads(
|
||||
MessageServiceModel serviceModel,
|
||||
String messageId,
|
||||
) async {
|
||||
final Requests req = Requests(
|
||||
baseUrl: Environment.choreoApi,
|
||||
choreoApiKey: Environment.choreoApiKey,
|
||||
);
|
||||
|
||||
final json = serviceModel.toJson();
|
||||
json["msg_id"] = messageId;
|
||||
|
||||
await req.post(url: PApiUrls.messageService, body: json);
|
||||
}
|
||||
}
|
||||
|
||||
class MessageServiceModel {
|
||||
List<int> payloadIds;
|
||||
String? messageId;
|
||||
String message;
|
||||
String userId;
|
||||
String roomId;
|
||||
String? classId;
|
||||
String? l1Lang;
|
||||
String l2Lang;
|
||||
|
||||
MessageServiceModel({
|
||||
required this.payloadIds,
|
||||
required this.messageId,
|
||||
required this.message,
|
||||
required this.userId,
|
||||
required this.roomId,
|
||||
required this.classId,
|
||||
required this.l1Lang,
|
||||
required this.l2Lang,
|
||||
});
|
||||
|
||||
toJson() {
|
||||
return {
|
||||
'payload_ids': payloadIds,
|
||||
'msg_id': messageId,
|
||||
'message': message,
|
||||
'user_id': userId,
|
||||
'room_id': roomId,
|
||||
'class_id': classId,
|
||||
'l1_lang': l1Lang,
|
||||
'l2_lang': l2Lang,
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue