perf: improve AI prompt cache reuse

This commit is contained in:
shen
2026-09-19 19:21:41 -07:00
parent 7306dc0f85
commit 1a10ca88e0
9 changed files with 318 additions and 124 deletions
+25 -18
View File
@@ -100,13 +100,15 @@ void main() {
);
expect(reply?.reply, 'Where are you from?');
expect(messages, hasLength(3));
expect(messages, hasLength(4));
expect(messages![0]['role'], 'system');
expect(jsonDecode(messages![1]['content'] as String), {
expect(messages![1]['role'], 'user');
expect(messages![1]['content'], startsWith('[ConversationConfig]'));
expect(jsonDecode(messages![2]['content'] as String), {
'reply': "Hi! What's your name?",
});
expect(messages![2]['role'], 'user');
final last = messages![2]['content'] as String;
expect(messages![3]['role'], 'user');
final last = messages![3]['content'] as String;
expect(last, startsWith('My name is Alex.'));
expect(
last,
@@ -114,28 +116,33 @@ void main() {
);
expect(
last,
endsWith('Do not repeat any questions or greetings already asked or answered.'),
endsWith(
'Do not repeat any questions or greetings already asked or answered.',
),
);
expect(messages![0]['content'], isNot(contains('Ask where the learner')));
});
test('dialogue system prompt stays identical across turns', () {
test('dialogue system prompt stays identical across levels and lessons', () {
final words = ['Excuse me.', 'Can you help me?'];
final a = AiService.dialogueSystemPrompt(
level: 'A1',
allowedLanguage: words,
);
final b = AiService.dialogueSystemPrompt(
level: 'A1',
allowedLanguage: words,
);
final a = AiService.dialogueSystemPrompt();
final b = AiService.dialogueSystemPrompt();
expect(a, b);
expect(a, contains('CEFR A1'));
expect(a, contains('Strictly do not repeat any question'));
expect(a, endsWith('Taught language: Excuse me.; Can you help me?'));
expect(a, isNot(contains('Excuse me.')));
final config = AiService.dialogueConversationConfig(
level: 'A1',
allowedLanguage: words,
);
expect(config, contains('A1'));
expect(config, contains('Excuse me.'));
expect(
AiService.dialogueSystemPrompt(level: 'A0', allowedLanguage: const []),
contains('A0 English conversation partner'),
AiService.dialogueConversationConfig(
level: 'A0',
allowedLanguage: const [],
),
contains('simple, common A0 English'),
);
});
}