Skip to content

Commit c82b144

Browse files
committed
improvements and bug fixes
1 parent 8a25b31 commit c82b144

10 files changed

+93
-280
lines changed

example/chat.dart

-92
This file was deleted.

example/reasoning.dart

-110
This file was deleted.

example/rp.dart

-73
This file was deleted.

example/simple.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import 'package:llama_cpp_dart/src/llama_cpp.dart';
66
void main() {
77
// Initialize settings
88
String modelPath = "/Users/adel/Downloads/gemma-3-12b-it-Q4_K_M.gguf";
9-
String prompt = "Hello my name is";
9+
String prompt =
10+
"<start_of_turn>Hello my name is.<end_of_turn>\n<start_of_turn>model\n";
1011
int ngl = 99;
1112
int nPredict = 32;
1213

example/test.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ void main() async {
1010
String modelPath = "/Users/adel/Downloads/gemma-3-12b-it-Q4_K_M.gguf";
1111
Llama llama = Llama(modelPath);
1212

13-
llama.setPrompt("2 * 2 = ?");
13+
llama.setPrompt(
14+
"<start_of_turn>What is 2 * 4?<end_of_turn>\n<start_of_turn>model\n");
1415
while (true) {
1516
var (token, done) = llama.getNext();
1617
stdout.write(token);

example/test_embedding.dart

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ void main() async {
1717
List<double> embeddings = llama.getEmbeddings("2 * 2 = ?");
1818
stdout.write(embeddings);
1919
stdout.write("\n");
20+
stdout.write(embeddings.length);
21+
stdout.write("\n");
2022

2123
llama.dispose();
2224
} catch (e) {

lib/src/chat.dart

+34-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/// Represents supported chat formats for export
22
enum ChatFormat {
33
chatml,
4-
alpaca;
4+
alpaca,
5+
gemini;
56

67
String get value => name;
78
}
@@ -80,6 +81,8 @@ class ChatHistory {
8081
return _exportChatML();
8182
case ChatFormat.alpaca:
8283
return _exportAlpaca();
84+
case ChatFormat.gemini:
85+
return _exportGemini();
8386
}
8487
}
8588

@@ -119,6 +122,36 @@ class ChatHistory {
119122
return buffer.toString();
120123
}
121124

125+
/// Exports chat history in Gemini format
126+
String _exportGemini() {
127+
final buffer = StringBuffer();
128+
129+
for (final message in messages) {
130+
switch (message.role) {
131+
case Role.user:
132+
buffer.write('<start_of_turn>user\n');
133+
buffer.write(message.content);
134+
buffer.writeln('<end_of_turn>');
135+
case Role.assistant:
136+
buffer.write('<start_of_turn>model\n');
137+
buffer.write(message.content);
138+
buffer.writeln('<end_of_turn>');
139+
case Role.system:
140+
// Gemini doesn't formally support system messages in this format
141+
// System messages are typically handled differently or incorporated into user messages
142+
// For backward compatibility, we'll include it with a comment
143+
buffer.write('<start_of_turn>user\n');
144+
buffer.write('System instruction: ${message.content}');
145+
buffer.writeln('<end_of_turn>');
146+
case Role.unknown:
147+
// Skip unknown roles or handle as needed
148+
break;
149+
}
150+
}
151+
152+
return buffer.toString();
153+
}
154+
122155
/// Creates a ChatHistory from JSON
123156
factory ChatHistory.fromJson(Map<String, dynamic> json) {
124157
final chatHistory = ChatHistory();

0 commit comments

Comments
 (0)