feat: 新增追问模式和iOS本地化,重构后端输出模型

This commit is contained in:
qzl
2026-04-29 14:26:15 +08:00
parent f497afbff2
commit 16cb47e75a
39 changed files with 1346 additions and 600 deletions
@@ -5,6 +5,7 @@ import '../../../../core/network/api_problem.dart';
import '../apis/divination_api.dart';
import '../models/divination_backend_models.dart';
import '../models/divination_params.dart';
import '../models/divination_result.dart';
class DivinationRunService {
const DivinationRunService({required DivinationApi api}) : _api = api;
@@ -38,6 +39,7 @@ class DivinationRunService {
List<String> advice = const <String>[];
List<String> keywords = const <String>[];
String answer = '';
DivinationRunStatus status = DivinationRunStatus.success;
await for (final event in _api.streamEvents(
threadId: threadId,
@@ -68,6 +70,7 @@ class DivinationRunService {
advice = _requiredStringList(event, 'advice');
keywords = _requiredStringList(event, 'keywords');
answer = _requiredString(event, 'answer');
status = _parseStatus(event['status']);
onTextMessageEnd?.call();
continue;
}
@@ -111,9 +114,22 @@ class DivinationRunService {
advice: advice,
keywords: keywords,
answer: answer,
status: status,
);
}
DivinationRunStatus _parseStatus(Object? value) {
if (value is! String) {
return DivinationRunStatus.success;
}
return switch (value) {
'success' => DivinationRunStatus.success,
'failed' => DivinationRunStatus.failed,
'refused' => DivinationRunStatus.refused,
_ => DivinationRunStatus.success,
};
}
String _requiredString(Map<String, dynamic> json, String key) {
final value = json[key];
if (value is! String || value.isEmpty) {