Compare commits

...

2 Commits

Author SHA1 Message Date
104cb44026 国产模型2 2024-08-11 16:22:42 +08:00
79a6934e83 国产模型 2024-07-29 22:14:18 +08:00
6 changed files with 90 additions and 25 deletions

View File

@ -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<String, dynamic> json) => _$MessageBean2FromJson(json);
Map<String, dynamic> toJson() => _$MessageBean2ToJson(this);
}

View File

@ -0,0 +1,20 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'MessageBean2.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
MessageBean2 _$MessageBean2FromJson(Map<String, dynamic> json) => MessageBean2(
json['sender_type'] as String?,
json['sender_name'] as String?,
json['text'] as String?,
);
Map<String, dynamic> _$MessageBean2ToJson(MessageBean2 instance) =>
<String, dynamic>{
'sender_type': instance.sender_type,
'sender_name': instance.sender_name,
'text': instance.text,
};

View File

@ -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);
}

View File

@ -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}');

View File

@ -203,7 +203,7 @@ class HomeModel {
int a = 0;
Future<void> chat2(message) async {
RequestCenter.instance.sendRequest2({
/*RequestCenter.instance.sendRequest2({
"model": "claude-3-haiku-20240307",
"max_tokens": 256,
"system": NetworkConfig.system2,
@ -212,9 +212,29 @@ class HomeModel {
"temperature": 1,
"top_p": 1,
"top_k": 0,
}*/
RequestCenter.instance.sendRequest2({
"model": "abab5.5s-chat",
"tokens_to_generate": 512,
"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) {
/*if (_extractStarredText(json).isNotEmpty) {*/
a = 0;
if (dataEntity.code == 0 && dataEntity.data != null) {
streamController.sink.add({
@ -227,7 +247,7 @@ class HomeModel {
'data': "",
});
}
} else {
/*} else {
if (a < 5) {
a++;
chat2(message);
@ -237,7 +257,7 @@ class HomeModel {
'data': "(剧情结束)",
});
}
}
}*/
}, (ErrorEntity errorEntity) {
streamController.sink.add({
'code': "0", //

View File

@ -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<RoleInfoPage> {
List<MessageBean> list = [];
List<MessageBean2> list2 = [];
late StreamSubscription subscription;
final HomeModel viewModel = HomeModel();
final TextEditingController _chatController = TextEditingController();
@ -33,7 +36,7 @@ class _RoleInfoPageState extends State<RoleInfoPage> {
Future<void> chat() async {
EasyLoading.show(status: 'loading...');
List<Map<String, dynamic>> jsonList =
list.map((user) => user.toJson()).toList();
list2.map((user) => user.toJson()).toList();
viewModel.chat2(jsonList);
}
@ -176,14 +179,15 @@ class _RoleInfoPageState extends State<RoleInfoPage> {
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<RoleInfoPage> {
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<RoleInfoPage> {
// 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<RoleInfoPage> {
),
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<RoleInfoPage> {
}
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<RoleInfoPage> {
),
)*/
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<RoleInfoPage> {
borderRadius: BorderRadius.circular(16.0),
),
child: Text(
list[index].content!,
list2[index].text!,
style: const TextStyle(
fontSize: 14,
color: Colors.white,