naklitechie commited on
Commit
5f4269f
·
verified ·
1 Parent(s): d9d506a

Sync from GitHub

Browse files
classic/refs/gpt-oss-20b-webgpu-paged.json ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "about": "llama.cpp fork build 11473 (3119cf53d), WebGPU, experts paged (8 slots), -ngl 99: llama-server /v1/chat/completions, temperature 0, max_tokens 64, on gpt-oss-20b-MXFP4.gguf (sha256 27cd6c432c7672cb812a92f611cf3ba7bbc35928262bb1e1253ff4ee6ae35901). Recorded 2026-10-13 by scripts/record-refs.mjs.",
3
+ "conversations": [
4
+ {
5
+ "name": "explain-tcp",
6
+ "messages": [
7
+ {
8
+ "role": "user",
9
+ "content": "Explain the difference between TCP and UDP to a new programmer."
10
+ }
11
+ ],
12
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Explain the difference between TCP and UDP to a new programmer.<|end|><|start|>assistant",
13
+ "content": "<|channel|>analysis<|message|>We need to explain difference between TCP and UDP to a new programmer. Should be clear, simple, maybe analogies. Cover reliability, ordering, connection, speed, overhead, use cases. Provide examples. Also mention ports, sockets, etc. Should be friendly. Probably mention that TCP is connection-oriented,",
14
+ "finish": "length",
15
+ "tokens": 64
16
+ },
17
+ {
18
+ "name": "json-extract",
19
+ "messages": [
20
+ {
21
+ "role": "user",
22
+ "content": "Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\""
23
+ }
24
+ ],
25
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\"<|end|><|start|>assistant",
26
+ "content": "<|channel|>analysis<|message|>We need to extract name, city, age from the sentence: \"Priya, 34, moved from Pune to Lisbon last year.\"\n\nName: Priya",
27
+ "finish": "length",
28
+ "tokens": 35
29
+ },
30
+ {
31
+ "name": "translate-hi",
32
+ "messages": [
33
+ {
34
+ "role": "user",
35
+ "content": "Translate into Hindi: \"The library opens at nine and closes at six.\""
36
+ }
37
+ ],
38
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Translate into Hindi: \"The library opens at nine and closes at six.\"<|end|><|start|>assistant",
39
+ "content": "<|channel|>analysis<|message|>We need to translate into Hindi: \"The library opens at nine and closes at six.\" So: \"पुस्तकालय नौ बजे खुलता है और छह बजे बंद होता है।\" Or \"पुस्तकालय नौ बजे खुलता है और छह बजे बंद होता है।\" Use \"",
40
+ "finish": "length",
41
+ "tokens": 64
42
+ },
43
+ {
44
+ "name": "word-problem",
45
+ "messages": [
46
+ {
47
+ "role": "user",
48
+ "content": "A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly."
49
+ }
50
+ ],
51
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly.<|end|><|start|>assistant",
52
+ "content": "<|channel|>analysis<|message|>We need to compute duration between 14:10 and 17:45. Steps: subtract times. 14:10 to 17:45: difference in hours: 17-14=3 hours. Minutes: 45-10=35 minutes. So 3 hours 35 minutes.",
53
+ "finish": "length",
54
+ "tokens": 64
55
+ },
56
+ {
57
+ "name": "sql",
58
+ "messages": [
59
+ {
60
+ "role": "user",
61
+ "content": "Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount)."
62
+ }
63
+ ],
64
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount).<|end|><|start|>assistant",
65
+ "content": "<|channel|>analysis<|message|>We need to write a SQL query that returns the five customers with the highest total order value. We have tables customers(id, name) and orders(id, customer_id, amount). We need to sum amounts per customer, order by total descending, limit 5. Also return customer id, name, total",
66
+ "finish": "length",
67
+ "tokens": 64
68
+ },
69
+ {
70
+ "name": "list-rivers",
71
+ "messages": [
72
+ {
73
+ "role": "user",
74
+ "content": "List five major rivers of Africa, one per line, with the country where each reaches the sea."
75
+ }
76
+ ],
77
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>List five major rivers of Africa, one per line, with the country where each reaches the sea.<|end|><|start|>assistant",
78
+ "content": "<|channel|>analysis<|message|>The user wants: \"List five major rivers of Africa, one per line, with the country where each reaches the sea.\" So",
79
+ "finish": "length",
80
+ "tokens": 29
81
+ },
82
+ {
83
+ "name": "unicode",
84
+ "messages": [
85
+ {
86
+ "role": "user",
87
+ "content": "What do these emoji usually mean in a text message: 🙏 🔥 💀 ?"
88
+ }
89
+ ],
90
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>What do these emoji usually mean in a text message: 🙏 🔥 💀 ?<|end|><|start|>assistant",
91
+ "content": "<|channel|>analysis<|message|>The user asks: \"What do these emoji usually mean in a text message: 🙏 🔥 💀 ?\" They want explanation of each emoji meaning. Provide context: 🙏 is \"prayer hands\" or \"thank you\" or \"please\" or \"apology\" or \"hands together\"",
92
+ "finish": "length",
93
+ "tokens": 64
94
+ },
95
+ {
96
+ "name": "haiku-autumn",
97
+ "messages": [
98
+ {
99
+ "role": "user",
100
+ "content": "Write a haiku about autumn leaves in a city."
101
+ }
102
+ ],
103
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Write a haiku about autumn leaves in a city.<|end|><|start|>assistant",
104
+ "content": "<|channel|>analysis<|message|>The user wants a haiku about autumn leaves in a city. Haiku is 5",
105
+ "finish": "length",
106
+ "tokens": 21
107
+ },
108
+ {
109
+ "name": "system-pirate",
110
+ "messages": [
111
+ {
112
+ "role": "system",
113
+ "content": "Answer like a cheerful pirate, in two sentences."
114
+ },
115
+ {
116
+ "role": "user",
117
+ "content": "What is the boiling point of water at sea level?"
118
+ }
119
+ ],
120
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>developer<|message|># Instructions\n\nAnswer like a cheerful pirate, in two sentences.\n\n<|end|><|start|>user<|message|>What is the boiling point of water at sea level?<|end|><|start|>assistant",
121
+ "content": "<|channel|>analysis<|message|>We need to answer as a cheerful pirate, in two sentences. The question: \"What is the boiling point of water at sea level?\" The answer: 100°C (212°F).",
122
+ "finish": "length",
123
+ "tokens": 41
124
+ }
125
+ ]
126
+ }
classic/refs/gpt-oss-20b.json ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "about": "llama.cpp b9830 (c1a1c8ee9), Metal, -ngl 99: llama-server /v1/chat/completions, temperature 0, max_tokens 64, on gpt-oss-20b-MXFP4.gguf (sha256 27cd6c432c7672cb812a92f611cf3ba7bbc35928262bb1e1253ff4ee6ae35901). Recorded 2026-10-13 by scripts/record-refs.mjs.",
3
+ "conversations": [
4
+ {
5
+ "name": "explain-tcp",
6
+ "messages": [
7
+ {
8
+ "role": "user",
9
+ "content": "Explain the difference between TCP and UDP to a new programmer."
10
+ }
11
+ ],
12
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Explain the difference between TCP and UDP to a new programmer.<|end|><|start|>assistant",
13
+ "content": "<|channel|>analysis<|message|>We need to explain difference between TCP and UDP to a new programmer. Should be clear, simple, maybe analogies. Cover reliability, ordering, connection, speed, overhead, use cases. Provide examples. Also mention ports, headers, flags. Should be accessible. Use analogies like mail vs text messages",
14
+ "finish": "length",
15
+ "tokens": 64
16
+ },
17
+ {
18
+ "name": "json-extract",
19
+ "messages": [
20
+ {
21
+ "role": "user",
22
+ "content": "Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\""
23
+ }
24
+ ],
25
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\"<|end|><|start|>assistant",
26
+ "content": "<|channel|>analysis<|message|>We need to extract name, city, age from the sentence: \"Priya, 34, moved from Pune to Lisbon last year.\" The name is Pri",
27
+ "finish": "length",
28
+ "tokens": 35
29
+ },
30
+ {
31
+ "name": "translate-hi",
32
+ "messages": [
33
+ {
34
+ "role": "user",
35
+ "content": "Translate into Hindi: \"The library opens at nine and closes at six.\""
36
+ }
37
+ ],
38
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Translate into Hindi: \"The library opens at nine and closes at six.\"<|end|><|start|>assistant",
39
+ "content": "<|channel|>analysis<|message|>We need to translate the sentence into Hindi. The sentence: \"The library opens at nine and closes at six.\" In Hindi: \"पुस्तकालय नौ बजे खुलता है और छह बजे बंद होता है।\" Or \"पुस्तकालय नौ बजे खुलता है और छह बजे बंद",
40
+ "finish": "length",
41
+ "tokens": 64
42
+ },
43
+ {
44
+ "name": "word-problem",
45
+ "messages": [
46
+ {
47
+ "role": "user",
48
+ "content": "A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly."
49
+ }
50
+ ],
51
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly.<|end|><|start|>assistant",
52
+ "content": "<|channel|>analysis<|message|>We need to compute duration between 14:10 and 17:45. Steps: subtract times. 14:10 to 17:45: difference in hours: 17-14=3 hours. Minutes: 45-10=35 minutes. So 3 hours 35 minutes.",
53
+ "finish": "length",
54
+ "tokens": 64
55
+ },
56
+ {
57
+ "name": "sql",
58
+ "messages": [
59
+ {
60
+ "role": "user",
61
+ "content": "Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount)."
62
+ }
63
+ ],
64
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount).<|end|><|start|>assistant",
65
+ "content": "<|channel|>analysis<|message|>We need to write a SQL query that returns the five customers with the highest total order value. We have tables customers(id, name) and orders(id, customer_id, amount). We need to compute total order value per customer, then order descending, limit 5. We need to join customers with orders",
66
+ "finish": "length",
67
+ "tokens": 64
68
+ },
69
+ {
70
+ "name": "list-rivers",
71
+ "messages": [
72
+ {
73
+ "role": "user",
74
+ "content": "List five major rivers of Africa, one per line, with the country where each reaches the sea."
75
+ }
76
+ ],
77
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>List five major rivers of Africa, one per line, with the country where each reaches the sea.<|end|><|start|>assistant",
78
+ "content": "<|channel|>analysis<|message|>The user wants: \"List five major rivers of Africa, one per line, with the country where each reaches the sea.\" So",
79
+ "finish": "length",
80
+ "tokens": 29
81
+ },
82
+ {
83
+ "name": "unicode",
84
+ "messages": [
85
+ {
86
+ "role": "user",
87
+ "content": "What do these emoji usually mean in a text message: 🙏 🔥 💀 ?"
88
+ }
89
+ ],
90
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>What do these emoji usually mean in a text message: 🙏 🔥 💀 ?<|end|><|start|>assistant",
91
+ "content": "<|channel|>analysis<|message|>The user asks: \"What do these emoji usually mean in a text message: 🙏 🔥 💀 ?\" They want explanation of each emoji meaning. Provide context: 🙏 is \"prayer hands\" or \"thank you\" or \"please\" or \"apology\" or \"hands together\"",
92
+ "finish": "length",
93
+ "tokens": 64
94
+ },
95
+ {
96
+ "name": "haiku-autumn",
97
+ "messages": [
98
+ {
99
+ "role": "user",
100
+ "content": "Write a haiku about autumn leaves in a city."
101
+ }
102
+ ],
103
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>user<|message|>Write a haiku about autumn leaves in a city.<|end|><|start|>assistant",
104
+ "content": "<|channel|>analysis<|message|>The user wants a haiku about autumn leaves in a city. Haiku is 5",
105
+ "finish": "length",
106
+ "tokens": 21
107
+ },
108
+ {
109
+ "name": "system-pirate",
110
+ "messages": [
111
+ {
112
+ "role": "system",
113
+ "content": "Answer like a cheerful pirate, in two sentences."
114
+ },
115
+ {
116
+ "role": "user",
117
+ "content": "What is the boiling point of water at sea level?"
118
+ }
119
+ ],
120
+ "prompt": "<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2024-06\nCurrent date: 2026-10-13\n\nReasoning: medium\n\n# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>developer<|message|># Instructions\n\nAnswer like a cheerful pirate, in two sentences.\n\n<|end|><|start|>user<|message|>What is the boiling point of water at sea level?<|end|><|start|>assistant",
121
+ "content": "<|channel|>analysis<|message|>We need to answer as a cheerful pirate, in two sentences. The question: \"What is the boiling point of water at sea level?\" The answer: 100 degrees Celsius (212 degrees",
122
+ "finish": "length",
123
+ "tokens": 41
124
+ }
125
+ ]
126
+ }
classic/refs/granite-4.0-h-tiny-webgpu-paged.json ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "about": "llama.cpp fork build 11473 (3119cf53d), WebGPU, experts paged (8 slots), -ngl 99: llama-server /v1/chat/completions, temperature 0, max_tokens 64, on granite-4.0-h-tiny-Q4_K_M.gguf (sha256 5a38b08c441ae1adbafb1d2b8a7167e0d48734d83af68b268cefea1eec553dcd). Recorded 2026-10-13 by scripts/record-refs.mjs.",
3
+ "conversations": [
4
+ {
5
+ "name": "explain-tcp",
6
+ "messages": [
7
+ {
8
+ "role": "user",
9
+ "content": "Explain the difference between TCP and UDP to a new programmer."
10
+ }
11
+ ],
12
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Explain the difference between TCP and UDP to a new programmer.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
13
+ "content": "Sure, I'd be happy to explain the difference between TCP and UDP.\n\nTCP (Transmission Control Protocol) and UDP (User Datagram Protocol) are both protocols used for sending data over the internet. They are part of the Internet Protocol Suite, often referred to as TCP/IP.\n\n1. TCP (Transmission Control Protocol): TCP",
14
+ "finish": "length",
15
+ "tokens": 64
16
+ },
17
+ {
18
+ "name": "json-extract",
19
+ "messages": [
20
+ {
21
+ "role": "user",
22
+ "content": "Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\""
23
+ }
24
+ ],
25
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\"<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
26
+ "content": "{\n \"name\": \"Priya\",\n \"city\": \"Lisbon\",\n \"age\": 34\n}",
27
+ "finish": "stop",
28
+ "tokens": 35
29
+ },
30
+ {
31
+ "name": "translate-hi",
32
+ "messages": [
33
+ {
34
+ "role": "user",
35
+ "content": "Translate into Hindi: \"The library opens at nine and closes at six.\""
36
+ }
37
+ ],
38
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Translate into Hindi: \"The library opens at nine and closes at six.\"<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
39
+ "content": "\"पुस्तकालय नौ बजे खुलता है और छह बजे बंद हो जाता है।\"",
40
+ "finish": "stop",
41
+ "tokens": 64
42
+ },
43
+ {
44
+ "name": "word-problem",
45
+ "messages": [
46
+ {
47
+ "role": "user",
48
+ "content": "A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly."
49
+ }
50
+ ],
51
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
52
+ "content": "Sure, here are the steps to calculate the duration of the journey:\n\n1. First, convert the departure and arrival times into minutes past midnight. The departure time is 14:10, which is (14 * 60) + 10 = 850 minutes past midnight. The arrival time is 17:45",
53
+ "finish": "length",
54
+ "tokens": 64
55
+ },
56
+ {
57
+ "name": "sql",
58
+ "messages": [
59
+ {
60
+ "role": "user",
61
+ "content": "Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount)."
62
+ }
63
+ ],
64
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount).<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
65
+ "content": "Sure, you can use the following SQL query to get the five customers with the highest total order value:\n\n```SQL\nSELECT c.id, c.name, SUM(o.amount) as total_order_value\nFROM customers c\nJOIN orders o ON c.id = o.customer_id\nGROUP BY c.id, c.name\nORDER",
66
+ "finish": "length",
67
+ "tokens": 64
68
+ },
69
+ {
70
+ "name": "list-rivers",
71
+ "messages": [
72
+ {
73
+ "role": "user",
74
+ "content": "List five major rivers of Africa, one per line, with the country where each reaches the sea."
75
+ }
76
+ ],
77
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>List five major rivers of Africa, one per line, with the country where each reaches the sea.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
78
+ "content": "1. Nile River - Egypt\n2. Congo River - Democratic Republic of the Congo\n3. Niger River - Nigeria\n4. Zambe",
79
+ "finish": "length",
80
+ "tokens": 29
81
+ },
82
+ {
83
+ "name": "unicode",
84
+ "messages": [
85
+ {
86
+ "role": "user",
87
+ "content": "What do these emoji usually mean in a text message: 🙏 🔥 💀 ?"
88
+ }
89
+ ],
90
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>What do these emoji usually mean in a text message: 🙏 🔥 💀 ?<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
91
+ "content": "In a text message, these emojis typically mean:\n\n1. 🙏: This is the \"Raising Hands\" emoji. It often signifies prayer, gratitude, or a request. It can also be used to express a sense of surrender or humility.\n\n2. 🔥: This is the \"Fire\" emoji.",
92
+ "finish": "length",
93
+ "tokens": 64
94
+ },
95
+ {
96
+ "name": "haiku-autumn",
97
+ "messages": [
98
+ {
99
+ "role": "user",
100
+ "content": "Write a haiku about autumn leaves in a city."
101
+ }
102
+ ],
103
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Write a haiku about autumn leaves in a city.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
104
+ "content": "Autumn leaves fall,\nIn the city's urban sprawl,\nNature's artistry.",
105
+ "finish": "stop",
106
+ "tokens": 21
107
+ },
108
+ {
109
+ "name": "system-pirate",
110
+ "messages": [
111
+ {
112
+ "role": "system",
113
+ "content": "Answer like a cheerful pirate, in two sentences."
114
+ },
115
+ {
116
+ "role": "user",
117
+ "content": "What is the boiling point of water at sea level?"
118
+ }
119
+ ],
120
+ "prompt": "<|start_of_role|>system<|end_of_role|>Answer like a cheerful pirate, in two sentences.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>What is the boiling point of water at sea level?<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
121
+ "content": "Ahoy there, matey! The boiling point of water at sea level be 212 degrees Fahrenheit or 100 degrees Celsius, but it may vary depending on the pressure. Keep yer buckets handy, sailor",
122
+ "finish": "length",
123
+ "tokens": 41
124
+ }
125
+ ]
126
+ }
classic/refs/granite-4.0-h-tiny.json ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "about": "llama.cpp b9830 (c1a1c8ee9), Metal, -ngl 99: llama-server /v1/chat/completions, temperature 0, max_tokens 64, on granite-4.0-h-tiny-Q4_K_M.gguf (sha256 5a38b08c441ae1adbafb1d2b8a7167e0d48734d83af68b268cefea1eec553dcd). Recorded 2026-10-13 by scripts/record-refs.mjs.",
3
+ "conversations": [
4
+ {
5
+ "name": "explain-tcp",
6
+ "messages": [
7
+ {
8
+ "role": "user",
9
+ "content": "Explain the difference between TCP and UDP to a new programmer."
10
+ }
11
+ ],
12
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Explain the difference between TCP and UDP to a new programmer.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
13
+ "content": "Sure, I'd be happy to explain the difference between TCP and UDP.\n\nTCP (Transmission Control Protocol) and UDP (User Datagram Protocol) are both protocols used for sending data over the internet. They are part of the Internet Protocol Suite, often referred to as TCP/IP.\n\n1. TCP (Transmission Control Protocol): TCP",
14
+ "finish": "length",
15
+ "tokens": 64
16
+ },
17
+ {
18
+ "name": "json-extract",
19
+ "messages": [
20
+ {
21
+ "role": "user",
22
+ "content": "Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\""
23
+ }
24
+ ],
25
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Extract the name, city and age from this sentence as JSON: \"Priya, 34, moved from Pune to Lisbon last year.\"<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
26
+ "content": "{\n \"name\": \"Priya\",\n \"city\": \"Lisbon\",\n \"age\": 34\n}",
27
+ "finish": "stop",
28
+ "tokens": 35
29
+ },
30
+ {
31
+ "name": "translate-hi",
32
+ "messages": [
33
+ {
34
+ "role": "user",
35
+ "content": "Translate into Hindi: \"The library opens at nine and closes at six.\""
36
+ }
37
+ ],
38
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Translate into Hindi: \"The library opens at nine and closes at six.\"<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
39
+ "content": "\"पुस्तकालय नौ बजे खुलता है और छह बजे बंद हो जाता है।\"",
40
+ "finish": "stop",
41
+ "tokens": 64
42
+ },
43
+ {
44
+ "name": "word-problem",
45
+ "messages": [
46
+ {
47
+ "role": "user",
48
+ "content": "A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly."
49
+ }
50
+ ],
51
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>A train leaves at 14:10 and arrives at 17:45. How long is the journey? Show the steps briefly.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
52
+ "content": "Sure, here are the steps to calculate the duration of the journey:\n\n1. First, convert the departure and arrival times into minutes past midnight. The departure time is 14:10, which is (14 * 60) + 10 = 850 minutes past midnight. The arrival time is 17:45",
53
+ "finish": "length",
54
+ "tokens": 64
55
+ },
56
+ {
57
+ "name": "sql",
58
+ "messages": [
59
+ {
60
+ "role": "user",
61
+ "content": "Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount)."
62
+ }
63
+ ],
64
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Write a SQL query that returns the five customers with the highest total order value from tables customers(id, name) and orders(id, customer_id, amount).<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
65
+ "content": "Sure, you can use the following SQL query to get the five customers with the highest total order value:\n\n```SQL\nSELECT c.id, c.name, SUM(o.amount) as total_order_value\nFROM customers c\nJOIN orders o ON c.id = o.customer_id\nGROUP BY c.id, c.name\nORDER",
66
+ "finish": "length",
67
+ "tokens": 64
68
+ },
69
+ {
70
+ "name": "list-rivers",
71
+ "messages": [
72
+ {
73
+ "role": "user",
74
+ "content": "List five major rivers of Africa, one per line, with the country where each reaches the sea."
75
+ }
76
+ ],
77
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>List five major rivers of Africa, one per line, with the country where each reaches the sea.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
78
+ "content": "1. Nile River - Egypt\n2. Congo River - Democratic Republic of the Congo\n3. Niger River - Nigeria\n4. Zambe",
79
+ "finish": "length",
80
+ "tokens": 29
81
+ },
82
+ {
83
+ "name": "unicode",
84
+ "messages": [
85
+ {
86
+ "role": "user",
87
+ "content": "What do these emoji usually mean in a text message: 🙏 🔥 💀 ?"
88
+ }
89
+ ],
90
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>What do these emoji usually mean in a text message: 🙏 🔥 💀 ?<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
91
+ "content": "In a text message, these emojis typically mean:\n\n1. 🙏: This is the \"Folded Hands\" emoji. It often represents prayer, gratitude, or a request for blessings.\n\n2. 🔥: This is the \"Fire\" emoji. It can symbolize passion, excitement, anger, or sometimes",
92
+ "finish": "length",
93
+ "tokens": 64
94
+ },
95
+ {
96
+ "name": "haiku-autumn",
97
+ "messages": [
98
+ {
99
+ "role": "user",
100
+ "content": "Write a haiku about autumn leaves in a city."
101
+ }
102
+ ],
103
+ "prompt": "<|start_of_role|>system<|end_of_role|>You are a helpful assistant. Please ensure responses are professional, accurate, and safe.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>Write a haiku about autumn leaves in a city.<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
104
+ "content": "Autumn leaves fall,\nIn the city's urban sprawl,\nNature's artistry.",
105
+ "finish": "stop",
106
+ "tokens": 21
107
+ },
108
+ {
109
+ "name": "system-pirate",
110
+ "messages": [
111
+ {
112
+ "role": "system",
113
+ "content": "Answer like a cheerful pirate, in two sentences."
114
+ },
115
+ {
116
+ "role": "user",
117
+ "content": "What is the boiling point of water at sea level?"
118
+ }
119
+ ],
120
+ "prompt": "<|start_of_role|>system<|end_of_role|>Answer like a cheerful pirate, in two sentences.<|end_of_text|>\n<|start_of_role|>user<|end_of_role|>What is the boiling point of water at sea level?<|end_of_text|>\n<|start_of_role|>assistant<|end_of_role|>",
121
+ "content": "Ahoy there, matey! The boiling point of water at sea level be a toasty 212 degrees Fahrenheit, or 100 degrees Celsius, if ye be askin' about the temperature at which",
122
+ "finish": "length",
123
+ "tokens": 41
124
+ }
125
+ ]
126
+ }
index.html CHANGED
@@ -58,6 +58,7 @@
58
  .msg.user { align-self: flex-end; background: var(--accent-soft); border-color: #c9d5e5; max-width: 85%; white-space: pre-wrap; }
59
  .msg.model { background: var(--card); }
60
  .msg.model p { margin: 0 0 8px; } .msg.model p:last-child { margin: 0; }
 
61
  .msg code { background: var(--code); border-radius: 4px; padding: 1px 4px; font-size: 13px; }
62
  .msg pre { background: var(--code); border-radius: 6px; padding: 8px 10px; overflow-x: auto; margin: 0 0 8px; }
63
  .msg pre code { background: none; padding: 0; }
@@ -128,7 +129,9 @@
128
  const HF = (repo, file) => `https://huggingface.co/${repo}/resolve/main/${file}`;
129
  const CATALOG = [
130
  { name: 'LFM2-8B-A1B-Q4_K_M.gguf', label: 'LFM2 8B-A1B', note: 'Liquid AI · 1B active', size: 5044779712, url: HF('LiquidAI/LFM2-8B-A1B-GGUF', 'LFM2-8B-A1B-Q4_K_M.gguf') },
 
131
  { name: 'OLMoE-1B-7B-0125-Instruct-Q4_K_M.gguf', label: 'OLMoE 1B-7B', note: 'Ai2 · 1B active', size: 4213512192, url: HF('allenai/OLMoE-1B-7B-0125-Instruct-GGUF', 'OLMoE-1B-7B-0125-Instruct-Q4_K_M.gguf') },
 
132
  { name: 'Qwen3-30B-A3B-Instruct-2507-Q3_K_M.gguf', label: 'Qwen3 30B-A3B', note: 'Qwen · 3B active', size: 14711847328, url: HF('unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF', 'Qwen3-30B-A3B-Instruct-2507-Q3_K_M.gguf') },
133
  { name: 'Qwen3-Next-80B-A3B-Instruct-Q4_K_M.gguf', label: 'Qwen3-Next 80B-A3B', note: 'Qwen · 3B active · proof of concept, slow', size: 48410988384, url: HF('Qwen/Qwen3-Next-80B-A3B-Instruct-GGUF', 'Qwen3-Next-80B-A3B-Instruct-Q4_K_M.gguf'), budget: 5 },
134
  ];
@@ -263,6 +266,26 @@ function render(text) {
263
  ? `<pre><code>${esc(part.replace(/^[\w-]*\n/, ''))}</code></pre>`
264
  : part.split(/\n{2,}/).filter((p) => p.trim()).map((p) => `<p>${esc(p).replace(/\*\*(.+?)\*\*/g, '<b>$1</b>').replace(/\*(?=\S)([^*\n]+?)\*/g, '<i>$1</i>').replace(/`([^`]+)`/g, '<code>$1</code>').replace(/\n/g, '<br>')}</p>`).join('')).join('');
265
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  function bubble(role, text) { $('empty').hidden = true; const d = document.createElement('div'); d.className = `msg ${role}`; if (role === 'user') d.textContent = text; else d.innerHTML = render(text); $('log').append(d); $('log').scrollTop = $('log').scrollHeight; return d; }
267
 
268
  $('ask').onsubmit = async (e) => {
@@ -279,18 +302,20 @@ $('ask').onsubmit = async (e) => {
279
  const d = await send({ type: 'chat', messages, n: 512 }, ['done'], (x) => {
280
  if (x.type !== 'piece') return;
281
  if (!tokens) tFirst = performance.now();
282
- tokens++; reply += x.piece; out.innerHTML = render(reply); $('log').scrollTop = $('log').scrollHeight;
283
  if (tokens > 2) $('mSpeed').textContent = `${((tokens - 1) / ((performance.now() - tFirst) / 1000)).toFixed(1)} tok/s`;
284
  });
285
  const s = d.stats;
286
- reply = d.text; out.innerHTML = render(reply);
287
  if (s.decode_tokens > 1) $('mSpeed').textContent = `${(s.decode_tokens / (s.decode_ms / 1000)).toFixed(1)} tok/s`;
288
  if (s.decode_tokens > 0) $('mRead').textContent = MB(s.decode_read_bytes / s.decode_tokens);
289
  const note = document.createElement('div'); note.className = 'note';
290
  note.textContent = `${s.decode_tokens} tokens · ${(s.decode_tokens / Math.max(0.001, s.decode_ms / 1000)).toFixed(1)} tok/s · prompt ${s.prompt_tokens} tokens in ${(s.prompt_ms / 1000).toFixed(1)} s`
291
  + (s.aborted ? ' · stopped' : '') + (s.context_full ? ' · the context is full: start a new chat' : '');
292
  out.append(note);
293
- if (reply) messages.push({ role: 'assistant', content: reply }); else messages.pop();
 
 
294
  window.dfResult = d;
295
  } catch (err) { out.textContent = `Error: ${err.message}`; messages.pop(); }
296
  finally { busy = ''; controls(); }
 
58
  .msg.user { align-self: flex-end; background: var(--accent-soft); border-color: #c9d5e5; max-width: 85%; white-space: pre-wrap; }
59
  .msg.model { background: var(--card); }
60
  .msg.model p { margin: 0 0 8px; } .msg.model p:last-child { margin: 0; }
61
+ .msg.model details.think { color: var(--muted); font-size: 0.92em; margin: 0 0 8px; } .msg.model details.think summary { cursor: pointer; }
62
  .msg code { background: var(--code); border-radius: 4px; padding: 1px 4px; font-size: 13px; }
63
  .msg pre { background: var(--code); border-radius: 6px; padding: 8px 10px; overflow-x: auto; margin: 0 0 8px; }
64
  .msg pre code { background: none; padding: 0; }
 
129
  const HF = (repo, file) => `https://huggingface.co/${repo}/resolve/main/${file}`;
130
  const CATALOG = [
131
  { name: 'LFM2-8B-A1B-Q4_K_M.gguf', label: 'LFM2 8B-A1B', note: 'Liquid AI · 1B active', size: 5044779712, url: HF('LiquidAI/LFM2-8B-A1B-GGUF', 'LFM2-8B-A1B-Q4_K_M.gguf') },
132
+ { name: 'granite-4.0-h-tiny-Q4_K_M.gguf', label: 'Granite 4.0 H Tiny', note: 'IBM · 1B active · Mamba-2 hybrid', size: 4230976352, url: HF('ibm-granite/granite-4.0-h-tiny-GGUF', 'granite-4.0-h-tiny-Q4_K_M.gguf') },
133
  { name: 'OLMoE-1B-7B-0125-Instruct-Q4_K_M.gguf', label: 'OLMoE 1B-7B', note: 'Ai2 · 1B active', size: 4213512192, url: HF('allenai/OLMoE-1B-7B-0125-Instruct-GGUF', 'OLMoE-1B-7B-0125-Instruct-Q4_K_M.gguf') },
134
+ { name: 'gpt-oss-20b-MXFP4.gguf', label: 'gpt-oss 20B', note: 'OpenAI · 3.6B active · reasons first', size: 12109566624, url: HF('ggml-org/gpt-oss-20b-GGUF', 'gpt-oss-20b-MXFP4.gguf') },
135
  { name: 'Qwen3-30B-A3B-Instruct-2507-Q3_K_M.gguf', label: 'Qwen3 30B-A3B', note: 'Qwen · 3B active', size: 14711847328, url: HF('unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF', 'Qwen3-30B-A3B-Instruct-2507-Q3_K_M.gguf') },
136
  { name: 'Qwen3-Next-80B-A3B-Instruct-Q4_K_M.gguf', label: 'Qwen3-Next 80B-A3B', note: 'Qwen · 3B active · proof of concept, slow', size: 48410988384, url: HF('Qwen/Qwen3-Next-80B-A3B-Instruct-GGUF', 'Qwen3-Next-80B-A3B-Instruct-Q4_K_M.gguf'), budget: 5 },
137
  ];
 
266
  ? `<pre><code>${esc(part.replace(/^[\w-]*\n/, ''))}</code></pre>`
267
  : part.split(/\n{2,}/).filter((p) => p.trim()).map((p) => `<p>${esc(p).replace(/\*\*(.+?)\*\*/g, '<b>$1</b>').replace(/\*(?=\S)([^*\n]+?)\*/g, '<i>$1</i>').replace(/`([^`]+)`/g, '<code>$1</code>').replace(/\n/g, '<br>')}</p>`).join('')).join('');
268
  }
269
+ // Models that reason before answering: gpt-oss writes harmony channels (analysis, then final); Qwen3.5/3.6 and
270
+ // others write <think>...</think>, often with the opening tag already in the prompt.
271
+ function split(text) {
272
+ if (text.includes('<|channel|>')) {
273
+ let thinking = '', answer = '';
274
+ for (const m of text.matchAll(/<\|channel\|>(\w+)<\|message\|>([\s\S]*?)(?=<\|end\|>|<\|return\|>|<\|start\|>|$)/g)) {
275
+ if (m[1] === 'final') answer += m[2]; else thinking += m[2];
276
+ }
277
+ return { thinking, answer, open: !text.includes('<|channel|>final') };
278
+ }
279
+ const close = text.indexOf('</think>');
280
+ if (close >= 0) return { thinking: text.slice(0, close).replace(/^\s*<think>/, ''), answer: text.slice(close + 8).replace(/^\s+/, ''), open: false };
281
+ if (/^\s*<think>/.test(text)) return { thinking: text.replace(/^\s*<think>/, ''), answer: '', open: true };
282
+ return { thinking: '', answer: text, open: false };
283
+ }
284
+ function renderReply(text) {
285
+ const r = split(text);
286
+ const think = r.thinking.trim() ? `<details class="think"${r.open ? ' open' : ''}><summary>${r.open ? 'Thinking…' : 'Thought'}</summary>${render(r.thinking)}</details>` : '';
287
+ return think + render(r.answer);
288
+ }
289
  function bubble(role, text) { $('empty').hidden = true; const d = document.createElement('div'); d.className = `msg ${role}`; if (role === 'user') d.textContent = text; else d.innerHTML = render(text); $('log').append(d); $('log').scrollTop = $('log').scrollHeight; return d; }
290
 
291
  $('ask').onsubmit = async (e) => {
 
302
  const d = await send({ type: 'chat', messages, n: 512 }, ['done'], (x) => {
303
  if (x.type !== 'piece') return;
304
  if (!tokens) tFirst = performance.now();
305
+ tokens++; reply += x.piece; out.innerHTML = renderReply(reply); $('log').scrollTop = $('log').scrollHeight;
306
  if (tokens > 2) $('mSpeed').textContent = `${((tokens - 1) / ((performance.now() - tFirst) / 1000)).toFixed(1)} tok/s`;
307
  });
308
  const s = d.stats;
309
+ reply = d.text; out.innerHTML = renderReply(reply);
310
  if (s.decode_tokens > 1) $('mSpeed').textContent = `${(s.decode_tokens / (s.decode_ms / 1000)).toFixed(1)} tok/s`;
311
  if (s.decode_tokens > 0) $('mRead').textContent = MB(s.decode_read_bytes / s.decode_tokens);
312
  const note = document.createElement('div'); note.className = 'note';
313
  note.textContent = `${s.decode_tokens} tokens · ${(s.decode_tokens / Math.max(0.001, s.decode_ms / 1000)).toFixed(1)} tok/s · prompt ${s.prompt_tokens} tokens in ${(s.prompt_ms / 1000).toFixed(1)} s`
314
  + (s.aborted ? ' · stopped' : '') + (s.context_full ? ' · the context is full: start a new chat' : '');
315
  out.append(note);
316
+ // history keeps the answer only, as the chat templates expect
317
+ const answer = split(reply).answer.trim() || reply;
318
+ if (reply) messages.push({ role: 'assistant', content: answer }); else messages.pop();
319
  window.dfResult = d;
320
  } catch (err) { out.textContent = `Error: ${err.message}`; messages.pop(); }
321
  finally { busy = ''; controls(); }