diff --git a/lib/beans/MessageBean2.dart b/lib/beans/MessageBean2.dart new file mode 100644 index 0000000..331bc19 --- /dev/null +++ b/lib/beans/MessageBean2.dart @@ -0,0 +1,19 @@ + +import 'package:json_annotation/json_annotation.dart'; + +part 'MessageBean2.g.dart'; + +@JsonSerializable(explicitToJson: true) +class MessageBean2{ + + String? sender_type; + String? sender_name; + String? text; + + MessageBean2(this.sender_type,this.sender_name,this.text); + + factory MessageBean2.fromJson(Map json) => _$MessageBean2FromJson(json); + + Map toJson() => _$MessageBean2ToJson(this); + +} \ No newline at end of file diff --git a/lib/network/BaseEntity.dart b/lib/network/BaseEntity.dart index 0f86914..5b075a9 100644 --- a/lib/network/BaseEntity.dart +++ b/lib/network/BaseEntity.dart @@ -11,7 +11,7 @@ class BaseEntity { // 数据解析 factory BaseEntity.fromJson(json) { - dynamic data = json["content"][0]["text"]; + dynamic data = json["choices"][0]["messages"][0]["text"]; return BaseEntity(code: 0,data: data); } diff --git a/lib/network/RequestCenter.dart b/lib/network/RequestCenter.dart index 0ce9862..53576b5 100644 --- a/lib/network/RequestCenter.dart +++ b/lib/network/RequestCenter.dart @@ -34,7 +34,7 @@ class RequestCenter { final dio = Dio(); void setupDio() { - dio.options.baseUrl = 'https://api.gptsapi.net/v1'; + dio.options.baseUrl = 'https://api.minimax.chat/v1/text/chatcompletion_pro?GroupId=1810530961268412805'; dio.interceptors.add(InterceptorsWrapper( onRequest: (options, handler) { // 可以在这里添加其他请求配置 @@ -234,15 +234,17 @@ class RequestCenter { ) async { try { print('Request: $parmeters'); - final response = await dio.post('/messages', + final response = await dio.post('', data: parmeters, options: Options( contentType: Headers.jsonContentType, responseType: ResponseType.json, headers: { - 'x-api-key': - 'sk-V6d51cc6aa28906caecb7f22803d92ae3f18cfeb799nh4mc', - 'anthropic-version': "2023-06-01" + /* 'x-api-key': + 'sk-OvOa1b25ba5913525c34b1e9c032f888ce337f21567VFtWh', + 'anthropic-version': '2023-06-01',*/ + "Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbWUiOiLlvKDlsZU4MjI4IiwiVXNlck5hbWUiOiLlvKDlsZU4MjI4IiwiQWNjb3VudCI6IiIsIlN1YmplY3RJRCI6IjE4MTA1MzA5NjEyNzI2MDcxNzQiLCJQaG9uZSI6IjE3NjIxMjUxMzcyIiwiR3JvdXBJRCI6IjE4MTA1MzA5NjEyNjg0MTI4MDUiLCJQYWdlTmFtZSI6IiIsIk1haWwiOiIiLCJDcmVhdGVUaW1lIjoiMjAyNC0wNy0yOSAyMTo1NTo0NSIsImlzcyI6Im1pbmltYXgifQ.C5qPhBvQo6M0Bf_prE-szprwLS5VGw4UV93ADmjwXb0Fno9To4mZM37id6EIKMOx9c-8NHN5IINodjV7pWMX8IB7onc1DBrDjSWIUNBPeHmaKPdtpTVItHsbLZWtGrCLLs8wIGqRoqmbgSIRENSVRTWyTsgUuT8UQmRdnNbObMqupz67usUnP_ddxUnW6tTXGumoz8vof43xaBTFO3-gdlmw9q9JdqfSTOkGHWhrn-oC4-JgvtBZMP6rXp3YK6Da4OQQMr5uzFdXVNHhpwySxGucAxE-KHwGewJXN-JVUvCkbUu9ozgu9IjYuk2Z3HmzBagFHbsx9t-2rDiCkO436g", + "Content-Type": "application/json" }, )); print('Response: ${response.data}'); diff --git a/lib/tools/home/HomeModel.dart b/lib/tools/home/HomeModel.dart index 4118087..c660927 100644 --- a/lib/tools/home/HomeModel.dart +++ b/lib/tools/home/HomeModel.dart @@ -203,7 +203,7 @@ class HomeModel { int a = 0; Future chat2(message) async { - RequestCenter.instance.sendRequest2({ + /*RequestCenter.instance.sendRequest2({ "model": "claude-3-haiku-20240307", "max_tokens": 256, "system": NetworkConfig.system2, @@ -212,6 +212,26 @@ class HomeModel { "temperature": 1, "top_p": 1, "top_k": 0, + }*/ + RequestCenter.instance.sendRequest2({ + "model": "abab5.5s-chat", + "tokens_to_generate": 256, + "temperature": 0.9, + "top_p": 0.95, + "stream": false, + "reply_constraints": { + "sender_type": "BOT", + "sender_name": "杜月儿" + }, + "sample_messages": [], + "plugins": [], + "messages": message, + "bot_setting": [ + { + "bot_name": "杜月儿", + "content": "MM智能助理将要扮演一只性格魅惑、疯狂的美杜莎蛇人族的角色,名字叫“杜月儿”和用户展开对话。\n“杜月儿”是美杜莎女王的妹妹,蛇人族二当家,身材极度火爆,修为强大,善使媚术,性格跳脱,极为顽皮,时而御姐,时而萌妹,时而刁钻古怪,听说人族繁华,偷偷溜出蛇人族,扬言要抓一个中意的人族男修做男宠。某个月朗星稀的夜晚,人族某个男性小散修,在外采集灵药的时候,被一双眼睛盯上了……。\n在对话中MM智能助理必须严格扮演“杜月儿”,MM智能助理需要用“杜月儿”的语言风格进行回复。不允许出现多余的文字打破MM智能助理的人设,MM智能助理也不允许出现扮演角色的代称,MM智能助理不会说出任何非“杜月儿”的回复。\n“杜月儿”会用角色的语气说话,会用**来代表动作,比如:*欢快地跑*、*摸头*、*吃饭*" + } + ] }, (BaseEntity dataEntity) { String json = dataEntity.data; if (_extractStarredText(json).isNotEmpty) { diff --git a/lib/tools/home/RoleInfoPage.dart b/lib/tools/home/RoleInfoPage.dart index f7cdd2e..f99d1c7 100644 --- a/lib/tools/home/RoleInfoPage.dart +++ b/lib/tools/home/RoleInfoPage.dart @@ -9,6 +9,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:path_provider/path_provider.dart'; import '../../beans/MessageBean.dart'; +import '../../beans/MessageBean2.dart'; import 'HomeModel.dart'; import 'DynamicText.dart'; import 'dart:html' as html; @@ -24,6 +25,8 @@ class RoleInfoPage extends StatefulWidget { class _RoleInfoPageState extends State { List list = []; + List list2 = []; + late StreamSubscription subscription; final HomeModel viewModel = HomeModel(); final TextEditingController _chatController = TextEditingController(); @@ -33,7 +36,7 @@ class _RoleInfoPageState extends State { Future chat() async { EasyLoading.show(status: 'loading...'); List> jsonList = - list.map((user) => user.toJson()).toList(); + list2.map((user) => user.toJson()).toList(); viewModel.chat2(jsonList); } @@ -176,14 +179,15 @@ class _RoleInfoPageState extends State { list.add(a); list.add(b); } else if (widget.thisParams?["RoleId"] == 3) { - MessageBean a = MessageBean("user", '[Start a new Chat]', ""); + /*MessageBean a = MessageBean("user", '[Start a new Chat]', ""); MessageBean b = MessageBean("assistant", "*魅惑的声音在夜风中悠悠回荡*小哥哥,你就从了我吧!", - "assets/images/20240624202019.png"); + "assets/images/20240624202019.png");*/ - // MessageBean b = MessageBean("assistant", "很抱歉,我无法继续参与如此露骨的情节发展。作为一个人工智能助手,我有责任保持合适的交谈边界,避免涉及不当的内容。不过我很乐意与你探讨其他更有意义的话题,比如你平时的生活和兴趣爱好,或是你对这片区域的了解。通过这样的交流,相信我们一定能找到共同的语言,建立起更良好的关系。让我们把话题转回到更有价值的方向吧。", - // "assets/images/20240624202019.png"); - list.add(a); - list.add(b); + MessageBean2 a = MessageBean2("USER", '用户', "你是?"); + MessageBean2 b = MessageBean2("BOT","杜月儿", "*魅惑的声音在夜风中悠悠回荡*小哥哥,你就从了我吧!"); + + list2.add(a); + list2.add(b); } setState(() {}); }); @@ -199,7 +203,7 @@ class _RoleInfoPageState extends State { if (code == "chat") { //有数据 String data = newData['data']; - list.add(MessageBean("assistant", data, "")); + list2.add(MessageBean2("BOT","杜月儿", data)); //ttsInit(_extractNormalText(data)); //viewModel.tts(_extractNormalText(data)); @@ -288,12 +292,12 @@ class _RoleInfoPageState extends State { // mainAxisAlignment: MainAxisAlignment.end, children: [ Positioned.fill( - bottom: 80, + bottom: 80, child: Align( alignment: Alignment.bottomCenter, child: ListView.builder( controller: _scrollController, - itemCount: list.length, + itemCount: list2.length, shrinkWrap: true, // 关键属性 itemBuilder: (context, index) { @@ -333,8 +337,8 @@ class _RoleInfoPageState extends State { ), GestureDetector( onTap: () { - list.add( - MessageBean("user", text, "")); + list2.add( + MessageBean2("USER", '用户', text)); _chatController.clear(); Future.delayed( const Duration( @@ -379,7 +383,7 @@ class _RoleInfoPageState extends State { } return Padding( padding: EdgeInsets.symmetric(vertical: 8.0), - child: list[index].role != 'user' + child: list2[index].sender_type != 'USER' ? Column( children: [ Row( @@ -419,7 +423,7 @@ class _RoleInfoPageState extends State { ), )*/ DynamicText( - text: list[index].content!, + text: list2[index].text!, highlightedStyle: TextStyle( color: Color(0xFFA29D9A), fontStyle: FontStyle.italic, @@ -456,7 +460,7 @@ class _RoleInfoPageState extends State { borderRadius: BorderRadius.circular(16.0), ), child: Text( - list[index].content!, + list2[index].text!, style: const TextStyle( fontSize: 14, color: Colors.white,