You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
2.1 KiB

import 'package:get/get.dart';
import '../../../data/services/bailian_multimodal_service.dart';
import '../../emai/controllers/emai_controller.dart';
/// EaiCar 车载助手的依赖装配。
///
/// 复用 EMAI 那套对话 UI 与控制器,只把「连哪个百炼应用」换掉:
/// 这里 put 一个带 EaiCar 专属 app_id 的 [BailianMultimodalService],
/// 再用它构造一个同 tag 的 [EmaiController]。
///
/// ⚠️ **两者都必须带 tag**:不带 tag 会覆盖掉全局那个 EMAI 用的实例,
/// 表现为退出车载助手后 EMAI 也连到了车载的应用上。
/// `EmaiView(controllerTag: kEaiCarTag)` 靠同一个 tag 取到这里的控制器。
///
/// ⚠️ **service 必须是独立实例**,不能 `Get.find` 全局那个:
/// `BailianMultimodalService.start()` 第一件事就是 `stop()`,共用会让两个 agent
/// 互相把对方的会话掐掉,下行音频还会串到对方的播放器上。
class EaiCarChatBinding extends Bindings {
@override
void dependencies() {
if (!Get.isRegistered<BailianMultimodalService>(tag: kEaiCarTag)) {
Get.put<BailianMultimodalService>(
BailianMultimodalService(appId: kEaiCarBailianAppId),
tag: kEaiCarTag,
permanent: true,
);
}
Get.lazyPut<EmaiController>(
() => EmaiController(
service: Get.find<BailianMultimodalService>(tag: kEaiCarTag),
),
tag: kEaiCarTag,
);
}
}
/// GetX 实例 tag:service 与 controller 共用这一个
const String kEaiCarTag = 'eaicar';
/// EaiCar 车载助手在百炼里的多模态应用 ID(workspace 与 EMAI 同一个,
/// 所以不覆盖 workspaceId,让它走全局配置)。
///
/// ⚠️ 写死在客户端是**有意选的**(落地文档 6.3 方案 A):换 app_id 要发版。
/// 等运营提出「要后台随时改」时,再改成从 `DBAgent.serviceData` 下发——
/// 那时要给客户端手写镜像补 `source` / `serviceData` 两个字段,且**必须 nullable**,
/// 否则老后端不下发就整个 `fromJson` 抛 TypeError、应用配置全空白。
const String kEaiCarBailianAppId = 'mm_dd1eb7cb06484aafb94a0b6b2dff';