Use endpoint from AI capability instead of direct call to LLM
This commit is contained in:
+39
@@ -78,8 +78,15 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen
|
|||||||
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_arguments.dart';
|
import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/home/domain/state/auto_sign_in_via_deep_link_state.dart';
|
import 'package:tmail_ui_user/features/home/domain/state/auto_sign_in_via_deep_link_state.dart';
|
||||||
import 'package:tmail_ui_user/features/home/domain/usecases/store_session_interactor.dart';
|
import 'package:tmail_ui_user/features/home/domain/usecases/store_session_interactor.dart';
|
||||||
|
import 'package:scribe/scribe/ai/data/datasource/ai_datasource.dart';
|
||||||
|
import 'package:scribe/scribe/ai/data/datasource_impl/ai_datasource_impl.dart';
|
||||||
|
import 'package:scribe/scribe/ai/data/repository/ai_repository_impl.dart';
|
||||||
|
import 'package:scribe/scribe/ai/domain/repository/ai_scribe_repository.dart';
|
||||||
|
import 'package:scribe/scribe/ai/domain/usecases/generate_ai_text_interactor.dart';
|
||||||
|
import 'package:scribe/scribe/ai/presentation/bindings/ai_scribe_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/identity_creator/domain/state/get_identity_cache_on_web_state.dart';
|
import 'package:tmail_ui_user/features/identity_creator/domain/state/get_identity_cache_on_web_state.dart';
|
||||||
import 'package:tmail_ui_user/features/identity_creator/domain/usecase/get_identity_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/identity_creator/domain/usecase/get_identity_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/exceptions/logout_exception.dart';
|
import 'package:tmail_ui_user/features/login/domain/exceptions/logout_exception.dart';
|
||||||
@@ -818,6 +825,37 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void injectAIScribeBindings(Session? session, AccountId? accountId) {
|
||||||
|
try {
|
||||||
|
if (session == null || accountId == null) return;
|
||||||
|
|
||||||
|
final aiCapability = session.getAICapability(accountId);
|
||||||
|
final scribeEndpoint = aiCapability?.scribeEndpoint;
|
||||||
|
|
||||||
|
// Delete existing AI bindings if they exist
|
||||||
|
if (Get.isRegistered<AIDataSourceImpl>()) {
|
||||||
|
Get.delete<AIDataSourceImpl>(force: true);
|
||||||
|
}
|
||||||
|
if (Get.isRegistered<AIDataSource>()) {
|
||||||
|
Get.delete<AIDataSource>(force: true);
|
||||||
|
}
|
||||||
|
if (Get.isRegistered<AIScribeRepositoryImpl>()) {
|
||||||
|
Get.delete<AIScribeRepositoryImpl>(force: true);
|
||||||
|
}
|
||||||
|
if (Get.isRegistered<AIScribeRepository>()) {
|
||||||
|
Get.delete<AIScribeRepository>(force: true);
|
||||||
|
}
|
||||||
|
if (Get.isRegistered<GenerateAITextInteractor>()) {
|
||||||
|
Get.delete<GenerateAITextInteractor>(force: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reinitialize with the correct endpoint
|
||||||
|
AIScribeBindings(scribeEndpoint: scribeEndpoint).dependencies();
|
||||||
|
} catch (e) {
|
||||||
|
logError('MailboxDashBoardController::injectAIScribeBindings(): $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> injectFCMBindings(Session? session, AccountId? accountId) async {
|
Future<void> injectFCMBindings(Session? session, AccountId? accountId) async {
|
||||||
try {
|
try {
|
||||||
@@ -857,6 +895,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
injectVacationBindings(session, currentAccountId);
|
injectVacationBindings(session, currentAccountId);
|
||||||
injectWebSocket(session, currentAccountId);
|
injectWebSocket(session, currentAccountId);
|
||||||
injectPreferencesBindings();
|
injectPreferencesBindings();
|
||||||
|
injectAIScribeBindings(session, currentAccountId);
|
||||||
if (PlatformInfo.isMobile) {
|
if (PlatformInfo.isMobile) {
|
||||||
injectFCMBindings(session, currentAccountId);
|
injectFCMBindings(session, currentAccountId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:scribe/scribe/ai/data/config/ai_config.dart';
|
|
||||||
import 'package:scribe/scribe/ai/data/datasource/ai_datasource.dart';
|
import 'package:scribe/scribe/ai/data/datasource/ai_datasource.dart';
|
||||||
import 'package:scribe/scribe/ai/data/model/ai_message.dart';
|
import 'package:scribe/scribe/ai/data/model/ai_message.dart';
|
||||||
import 'package:scribe/scribe/ai/data/model/ai_api_request.dart';
|
import 'package:scribe/scribe/ai/data/model/ai_api_request.dart';
|
||||||
@@ -11,10 +10,10 @@ class AIDataSourceImpl implements AIDataSource {
|
|||||||
|
|
||||||
AIDataSourceImpl({
|
AIDataSourceImpl({
|
||||||
required Dio dio,
|
required Dio dio,
|
||||||
|
String? endpoint,
|
||||||
}) : _aiApi = AIApi(
|
}) : _aiApi = AIApi(
|
||||||
dio: dio,
|
dio: dio,
|
||||||
apiKey: AIConfig.aiApiKey,
|
endpoint: endpoint,
|
||||||
baseUrl: AIConfig.aiApiUrl,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -4,26 +4,25 @@ import 'package:scribe/scribe/ai/data/model/ai_api_request.dart';
|
|||||||
|
|
||||||
class AIApi {
|
class AIApi {
|
||||||
final Dio _dio;
|
final Dio _dio;
|
||||||
final String _apiKey;
|
final String? _endpoint;
|
||||||
final String _baseUrl;
|
|
||||||
|
|
||||||
AIApi({
|
AIApi({
|
||||||
required Dio dio,
|
required Dio dio,
|
||||||
required String apiKey,
|
String? endpoint,
|
||||||
required String baseUrl,
|
}) : _dio = dio,
|
||||||
}) : _dio = dio,
|
_endpoint = endpoint;
|
||||||
_apiKey = apiKey,
|
|
||||||
_baseUrl = baseUrl;
|
Future<AIApiResponse> chatCompletion(
|
||||||
|
AIAPIRequest request
|
||||||
|
) async {
|
||||||
|
final url = _endpoint;
|
||||||
|
|
||||||
|
if (url == null) {
|
||||||
|
throw Exception('AI API is not available');
|
||||||
|
}
|
||||||
|
|
||||||
Future<AIApiResponse> chatCompletion(AIAPIRequest request) async {
|
|
||||||
final response = await _dio.post(
|
final response = await _dio.post(
|
||||||
'$_baseUrl/chat/completions',
|
url,
|
||||||
options: Options(
|
|
||||||
headers: {
|
|
||||||
'Authorization': 'Bearer $_apiKey',
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
data: request.toJson(),
|
data: request.toJson(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ import 'package:scribe/scribe/ai/domain/repository/ai_scribe_repository.dart';
|
|||||||
import 'package:scribe/scribe/ai/domain/usecases/generate_ai_text_interactor.dart';
|
import 'package:scribe/scribe/ai/domain/usecases/generate_ai_text_interactor.dart';
|
||||||
|
|
||||||
class AIScribeBindings extends Bindings {
|
class AIScribeBindings extends Bindings {
|
||||||
|
final String? scribeEndpoint;
|
||||||
|
|
||||||
|
AIScribeBindings({this.scribeEndpoint});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dependencies() {
|
void dependencies() {
|
||||||
_bindingsDataSourceImpl();
|
_bindingsDataSourceImpl();
|
||||||
@@ -18,7 +22,8 @@ class AIScribeBindings extends Bindings {
|
|||||||
|
|
||||||
void _bindingsDataSourceImpl() {
|
void _bindingsDataSourceImpl() {
|
||||||
Get.lazyPut<AIDataSourceImpl>(() => AIDataSourceImpl(
|
Get.lazyPut<AIDataSourceImpl>(() => AIDataSourceImpl(
|
||||||
dio: Dio(), // Dedicated Dio instance without authorization interceptors
|
dio: Get.find<Dio>(),
|
||||||
|
endpoint: scribeEndpoint,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user