feat: improve AI dialogue evaluation and capability boundaries

This commit is contained in:
shen
2026-09-19 18:58:14 -07:00
parent 335d0304b1
commit 7306dc0f85
23 changed files with 1308 additions and 452 deletions
@@ -99,16 +99,17 @@ class _IndependentStepState extends State<_IndependentStep>
checkingWithAi = true;
aiCheckError = null;
});
final feedback = await AiService.instance.answerFeedback(
provider: widget.state.aiProvider,
endpoint: widget.state.aiEndpoint,
model: widget.state.aiModel,
answerId: widget.segmentId,
target: widget.activity.independentHelp,
taskPrompt: widget.activity.independentPrompt,
answer: answer,
level: lessonLevel(widget.lessonId),
);
final feedback = await AiService.instance.capabilities.evaluation
.evaluateAnswer(
provider: widget.state.aiProvider,
endpoint: widget.state.aiEndpoint,
model: widget.state.aiModel,
answerId: widget.segmentId,
target: widget.activity.independentHelp,
taskPrompt: widget.activity.independentPrompt,
answer: answer,
level: lessonLevel(widget.lessonId),
);
// The learner may have kept typing while the request ran.
if (!mounted || widget.controller.text.trim() != answer) {
if (mounted) setState(() => checkingWithAi = false);
@@ -57,15 +57,16 @@ class _WritingStepState extends State<_WritingStep> {
requestingAiFeedback = true;
aiFeedbackError = null;
});
final feedback = await AiService.instance.writingFeedback(
provider: widget.state.aiProvider,
endpoint: widget.state.aiEndpoint,
model: widget.state.aiModel,
lessonId: widget.lessonId,
taskPrompt: widget.activity.writingPrompt,
answer: widget.controller.text.trim(),
level: lessonLevel(widget.lessonId),
);
final feedback = await AiService.instance.capabilities.evaluation
.evaluateWriting(
provider: widget.state.aiProvider,
endpoint: widget.state.aiEndpoint,
model: widget.state.aiModel,
lessonId: widget.lessonId,
taskPrompt: widget.activity.writingPrompt,
answer: widget.controller.text.trim(),
level: lessonLevel(widget.lessonId),
);
if (!mounted) return;
setState(() {
requestingAiFeedback = false;
@@ -88,9 +89,7 @@ class _WritingStepState extends State<_WritingStep> {
),
SectionCard(
tint: AppColors.surfaceMuted,
child: Text(
'小提示:${grammarNoteForSegment(widget.segmentId)}',
),
child: Text('小提示:${grammarNoteForSegment(widget.segmentId)}'),
),
if (widget.showHelp)
SectionCard(