Skip to content

Commit 24c75a3

Browse files
Merge pull request #91 from BradHutchings/work-in-progress
Work in progress
2 parents 6fde632 + 7977320 commit 24c75a3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+2941
-1763
lines changed

CMakePresets.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@
5555
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/cmake/arm64-apple-clang.cmake"
5656
}
5757
},
58+
{
59+
"name": "x64-linux-gcc", "hidden": true,
60+
"cacheVariables": {
61+
"CMAKE_C_COMPILER": "gcc",
62+
"CMAKE_CXX_COMPILER": "g++"
63+
}
64+
},
65+
{ "name": "x64-linux-gcc-debug", "inherits": [ "base", "x64-linux-gcc", "debug" ] },
66+
{ "name": "x64-linux-gcc-release", "inherits": [ "base", "x64-linux-gcc", "release" ] },
67+
{ "name": "x64-linux-gcc-reldbg", "inherits": [ "base", "x64-linux-gcc", "reldbg" ] },
68+
{ "name": "x64-linux-gcc+static-release", "inherits": [ "base", "x64-linux-gcc", "release", "static" ] },
5869

5970
{ "name": "arm64-windows-llvm-debug", "inherits": [ "base", "arm64-windows-llvm", "debug" ] },
6071
{ "name": "arm64-windows-llvm-release", "inherits": [ "base", "arm64-windows-llvm", "reldbg" ] },

README-llama-cpp.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
[![Release](https://img.shields.io/github/v/release/ggml-org/llama.cpp)](https://github.com/ggml-org/llama.cpp/releases)
77
[![Server](https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml/badge.svg)](https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml)
88

9-
[Roadmap](https://github.com/users/ggerganov/projects/7) / [Manifesto](https://github.com/ggml-org/llama.cpp/discussions/205) / [ggml](https://github.com/ggml-org/ggml)
9+
[Manifesto](https://github.com/ggml-org/llama.cpp/discussions/205) / [ggml](https://github.com/ggml-org/ggml) / [ops](https://github.com/ggml-org/llama.cpp/blob/master/docs/ops.md)
1010

11-
Inference of Meta's [LLaMA](https://arxiv.org/abs/2302.13971) model (and others) in pure C/C++
11+
LLM inference in C/C++
1212

1313
## Recent API changes
1414

@@ -17,10 +17,9 @@ Inference of Meta's [LLaMA](https://arxiv.org/abs/2302.13971) model (and others)
1717

1818
## Hot topics
1919

20-
- 🔥 Multimodal support arrived in `llama-server`: [#12898](https://github.com/ggml-org/llama.cpp/pull/12898) | [documentation](./docs/multimodal.md)
21-
- A new binary `llama-mtmd-cli` is introduced to replace `llava-cli`, `minicpmv-cli`, `gemma3-cli` ([#13012](https://github.com/ggml-org/llama.cpp/pull/13012)) and `qwen2vl-cli` ([#13141](https://github.com/ggml-org/llama.cpp/pull/13141)), `libllava` will be deprecated
20+
- Hot PRs: [All](https://github.com/ggml-org/llama.cpp/pulls?q=is%3Apr+label%3Ahot+) | [Open](https://github.com/ggml-org/llama.cpp/pulls?q=is%3Apr+label%3Ahot+is%3Aopen)
21+
- Multimodal support arrived in `llama-server`: [#12898](https://github.com/ggml-org/llama.cpp/pull/12898) | [documentation](./docs/multimodal.md)
2222
- VS Code extension for FIM completions: https://github.com/ggml-org/llama.vscode
23-
- Universal [tool call support](./docs/function-calling.md) in `llama-server` https://github.com/ggml-org/llama.cpp/pull/9639
2423
- Vim/Neovim plugin for FIM completions: https://github.com/ggml-org/llama.vim
2524
- Introducing GGUF-my-LoRA https://github.com/ggml-org/llama.cpp/discussions/10123
2625
- Hugging Face Inference Endpoints now support GGUF out of the box! https://github.com/ggml-org/llama.cpp/discussions/9669
@@ -134,6 +133,7 @@ Instructions for adding support for new models: [HOWTO-add-model.md](docs/develo
134133
- [x] [GigaChat-20B-A3B](https://huggingface.co/ai-sage/GigaChat-20B-A3B-instruct)
135134
- [X] [Trillion-7B-preview](https://huggingface.co/trillionlabs/Trillion-7B-preview)
136135
- [x] [Ling models](https://huggingface.co/collections/inclusionAI/ling-67c51c85b34a7ea0aba94c32)
136+
- [x] [LFM2 models](https://huggingface.co/collections/LiquidAI/lfm2-686d721927015b2ad73eaa38)
137137

138138
#### Multimodal
139139

completion-ui/completion/bookmark-scripts.js

Lines changed: 58 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ const kLogging = false;
77
const kMaxCopyPastes = 20;
88
const kUpdated = '[[UPDATED]]';
99

10+
const kModeCue = "cue";
11+
const kModeAppend = "append";
12+
const kModePrepend = "prepend";
13+
const kModeReplace = "replace";
14+
const kModes = [kModeCue, kModeAppend, kModePrepend, kModeReplace];
15+
const kLinkModes = [kModeCue];
16+
const kScriptModes = [kModeAppend, kModePrepend, kModeReplace];
17+
1018
var elements = {};
1119
var textChanged = true;
1220

@@ -50,11 +58,9 @@ function FindElements() {
5058
elements.stopWordsCheckbox = document.getElementById("stop-words-checkbox");
5159
elements.stopWordsBreak = document.getElementById("stop-words-break");
5260
elements.stopWords = document.getElementById("stop-words");
61+
elements.mode = document.getElementById("mode");
5362
elements.autoGenerateCheckbox = document.getElementById("auto-generate-checkbox");
54-
elements.appendCheckbox = document.getElementById("append-checkbox");
55-
elements.replaceCheckbox = document.getElementById("replace-checkbox");
56-
elements.bookmarkTypeLink = document.getElementById("bookmark-type-link");
57-
elements.bookmarkTypeScript = document.getElementById("bookmark-type-script");
63+
5864
elements.bookmarkLabel = document.getElementById("bookmark-label");
5965
elements.bookmark = document.getElementById("bookmark");
6066

@@ -81,10 +87,16 @@ function UpdateBookmark() {
8187
stopWordsText = '';
8288
}
8389
let autoGenerate = elements.autoGenerateCheckbox.checked;
84-
let append = elements.appendCheckbox.checked;
85-
let replace = elements.replaceCheckbox.checked;
86-
let bookmarkTypeLink = elements.bookmarkTypeLink.checked;
87-
let bookmarkTypeScript = elements.bookmarkTypeScript.checked;
90+
let mode = elements.mode.value;
91+
92+
// let bookmarkTypeLink = elements.bookmarkTypeLink.checked;
93+
// let bookmarkTypeScript = elements.bookmarkTypeScript.checked;
94+
95+
if (!kModes.includes(mode)) {
96+
mode = kModeCue;
97+
}
98+
let bookmarkTypeLink = kLinkModes.includes(mode);
99+
let bookmarkTypeScript = kScriptModes.includes(mode);
88100

89101
let cue = elements.cueText.value
90102
let generated = elements.generatedText.value
@@ -95,10 +107,11 @@ function UpdateBookmark() {
95107
"tokens": tokens,
96108
"stop-words": stopWordsText,
97109
"auto-generate": autoGenerate,
98-
"append": append,
99-
"replace": replace,
100-
"bookmark-type-link" : bookmarkTypeLink,
101-
"bookmark-type-script" : bookmarkTypeScript,
110+
"mode": mode,
111+
// "append": append,
112+
// "replace": replace,
113+
// "bookmark-type-link" : bookmarkTypeLink,
114+
// "bookmark-type-script" : bookmarkTypeScript,
102115
"cue": cue,
103116
"generated": generated,
104117
}
@@ -152,30 +165,11 @@ function UpdateBookmark() {
152165
" }\n" +
153166
" else if (activeElt) {\n" +
154167
" let cue = \"" + cue.replace(/[\\"']/g, '\\$&') + "\";\n" +
155-
" let value = (" + append + ") ? activeElt.value + cue : cue;\n" +
168+
" let value = (" + (mode == "append") + ") ? activeElt.value + cue : cue;\n" +
156169
" activeElt.value = value;\n" +
157170
" }\n" +
158171
"})();"
159172

160-
/*
161-
// We previously included the rootUrl, but no need to with link/script option. -Brad 2025-06-30
162-
163-
var rootUrl = window.location.protocol + "//" + window.location.host + "/completion/";
164-
if (kLogging || logThis) console.log(rootUrl);
165-
166-
var js =
167-
"javascript:(() => { \n" +
168-
" let hash = '" + hash + "';\n" +
169-
" let rootUrl = '" + rootUrl + "';\n" +
170-
" if (typeof isMmojoPage !== 'undefined') {\n" +
171-
" location.hash = hash;\n" +
172-
" }\n" +
173-
" else {\n" +
174-
" location = rootUrl + hash;\n" +
175-
" }\n" +
176-
"})();"
177-
*/
178-
179173
if (kLogging || logThis) console.log(js);
180174

181175
elements.bookmark.href = js;
@@ -228,11 +222,7 @@ function settings_drop(event) {
228222
hash = match.replaceAll('#', '').replaceAll('\'', '');
229223
if (kLogging || logThis) console.log("hash: " + hash);
230224

231-
jsonData = decodeURIComponent(atob(hash));
232-
if (kLogging || logThis) console.log("jsonData: " + jsonData);
233-
234-
data = JSON.parse(jsonData);
235-
if (kLogging || logThis) console.log("data: " + data);
225+
UseHash(hash);
236226
}
237227
else if (bookmarkData.startsWith(hostUrl)) {
238228
if (kLogging || logThis) console.log("This is one of our link bookmarks.");
@@ -244,85 +234,11 @@ function settings_drop(event) {
244234
hash = match.replaceAll('#', '').replaceAll('\'', '');
245235
if (kLogging || logThis) console.log("hash: " + hash);
246236

247-
jsonData = decodeURIComponent(atob(hash));
248-
if (kLogging || logThis) console.log("jsonData: " + jsonData);
249-
250-
data = JSON.parse(jsonData);
251-
if (kLogging || logThis) console.log("data: " + data);
252-
}
253-
254-
let label = '';
255-
let temperature = 0.25;
256-
let tokens = -1;
257-
let stopWords = '';
258-
let autoGenerate = true;
259-
let append = false;
260-
let bookmarkTypeLink = true;
261-
let bookmarkTypeScript = false;
262-
263-
let cue = '';
264-
let generated = '';
265-
266-
if ('label' in data) {
267-
label = data['label'];
268-
}
269-
if ('temperature' in data) {
270-
temperature = data['temperature'];
271-
}
272-
if ('tokens' in data) {
273-
tokens = data['tokens'];;
274-
}
275-
if ('stop-words' in data) {
276-
stopWords = data['stop-words'];
277-
}
278-
if ('auto-generate' in data) {
279-
autoGenerate = data['auto-generate'];
280-
}
281-
if ('append' in data) {
282-
append = data['append'];
283-
}
284-
if ('bookmark-type-link' in data) {
285-
bookmarkTypeLink = data['bookmark-type-link'];
286-
}
287-
if ('bookmark-type-script' in data) {
288-
bookmarkTypeScript = data['bookmark-type-script'];
289-
}
290-
if ('cue' in data) {
291-
cue = data['cue'];
292-
}
293-
if ('generated' in data) {
294-
generated = data['generated'];
295-
}
296-
297-
if (kLogging || logThis) {
298-
console.log("label: " + label);
299-
console.log("temperature: " + temperature);
300-
console.log("tokens: " + tokens);
301-
console.log("stopWords: " + stopWords);
302-
console.log("autoGenerate: " + autoGenerate);
303-
console.log("append: " + append);
304-
console.log("bookmarkTypeLink: " + bookmarkTypeLink);
305-
console.log("bookmarkTypeScript: " + bookmarkTypeScript);
306-
console.log("cue: " + cue);
307-
console.log("generated: " + generated);
237+
UseHash(hash);
308238
}
309-
310-
elements.label.value = label;
311-
elements.temperature.value = temperature;
312-
elements.tokens.value = tokens;
313-
elements.stopWordsCheckbox.checked = (stopWords != '');
314-
elements.stopWords.value = stopWords;
315-
elements.autoGenerateCheckbox.checked = autoGenerate;
316-
elements.appendCheckbox.checked = append;
317-
elements.bookmarkTypeLink.checked = bookmarkTypeLink;
318-
elements.bookmarkTypeScript.checked = bookmarkTypeScript;
319-
320-
elements.cueText.value = cue;
321-
elements.generatedText.value = generated;
322-
323239
}
324240
catch {
325-
// if (kLogging) console.log("There was a problem parsing the dropped bookmark.")
241+
if (kLogging || logThis) console.log("settings_drop() catch");
326242
}
327243

328244
UpdateBookmark();
@@ -341,11 +257,8 @@ function ClearBookmarkMaker() {
341257
let temperature = "";
342258
let tokens = "";
343259
let stopWords = "";
260+
let mode = kModeCue;
344261
let autoGenerate = false;
345-
let append = false;
346-
let replace = false;
347-
let bookmarkTypeLink = true;
348-
let bookmarkTypeScript = false;
349262
let cue = "";
350263
let generated = "";
351264

@@ -354,11 +267,8 @@ function ClearBookmarkMaker() {
354267
elements.tokens.value = tokens;
355268
elements.stopWordsCheckbox.checked = (stopWords != '');
356269
elements.stopWords.value = stopWords;
270+
elements.mode.value = mode;
357271
elements.autoGenerateCheckbox.checked = autoGenerate;
358-
elements.appendCheckbox.checked = append;
359-
elements.replaceCheckbox.checked = replace;
360-
elements.bookmarkTypeLink.checked = bookmarkTypeLink;
361-
elements.bookmarkTypeScript.checked = bookmarkTypeScript;
362272

363273
elements.cueText.value = cue;
364274
elements.generatedText.value = generated;
@@ -387,9 +297,8 @@ function UseHash(hash) {
387297
let temperature = null;
388298
let tokens = null;
389299
let stopWords = null;
300+
let mode = kModeCue;
390301
let autoGenerate = false;
391-
let append = false;
392-
let replace = false;
393302
let cue = "";
394303
let generated = "";
395304

@@ -399,11 +308,8 @@ function UseHash(hash) {
399308
let saveTokensValue = elements.tokens.value;
400309
let saveStopWordsCheckboxValue = elements.stopWordsCheckbox.checked;
401310
let saveStopWordsValue = elements.stopWords.value;
311+
let saveModeValue = elements.mode.value;
402312
let saveAutoGenerateValue = elements.autoGenerateCheckbox.checked;
403-
let saveAppendValue = elements.appendCheckbox.checked;
404-
let saveReplaceValue = elements.replaceCheckbox.checked;
405-
let saveBookmarkTypeLink = elements.bookmarkTypeLink.checked;
406-
let saveBookmarkTypeScript = elements.bookmarkTypeScript.checked;
407313
let saveCueTextValue = elements.cueText.value;
408314
let saveGeneratedTextValue = elements.generatedText.value;
409315

@@ -454,44 +360,20 @@ function UseHash(hash) {
454360
elements.stopWords.value = '';
455361
}
456362

457-
if ('auto-generate' in data) {
458-
autoGenerate = data['auto-generate'];
459-
elements.autoGenerateCheckbox.checked = autoGenerate;
460-
}
461-
else {
462-
elements.autoGenerateCheckbox.checked = false;
463-
}
464-
465-
if ('append' in data) {
466-
append = data['append'];
467-
elements.appendCheckbox.checked = append;
468-
}
469-
else {
470-
elements.appendCheckbox.checked = false;
471-
}
472-
473-
if ('replace' in data) {
474-
replace = data['replace'];
475-
elements.replaceCheckbox.checked = replace;
476-
}
477-
else {
478-
elements.replaceCheckbox.checked = false;
479-
}
480-
481-
if ('bookmark-type-link' in data) {
482-
bookmarkTypeLink = data['bookmark-type-link'];
483-
elements.bookmarkTypeLink.checked = bookmarkTypeLink;
363+
if ('mode' in data) {
364+
mode = data['mode'];
365+
elements.mode.value = mode;
484366
}
485367
else {
486-
elements.bookmarkTypeLink.checked = false;
368+
elements.mode.value = kModeCue;
487369
}
488370

489-
if ('bookmark-type-script' in data) {
490-
bookmarkTypeScript = data['bookmark-type-script'];
491-
elements.bookmarkTypeScript.checked = bookmarkTypeScript;
371+
if ('auto-generate' in data) {
372+
autoGenerate = data['auto-generate'];
373+
elements.autoGenerateCheckbox.checked = autoGenerate;
492374
}
493375
else {
494-
elements.bookmarkTypeScript.checked = false;
376+
elements.autoGenerateCheckbox.checked = false;
495377
}
496378

497379
if ('cue' in data) {
@@ -510,14 +392,29 @@ function UseHash(hash) {
510392
elements.generatedText.value = '';
511393
}
512394

395+
// convert old append and replace to modes.
396+
if ('append' in data) {
397+
let append = data['append'];
398+
if (append) {
399+
elements.mode.value = kModeAppend;
400+
}
401+
}
402+
403+
if ('replace' in data) {
404+
let replace = data['replace'];
405+
if (replace) {
406+
elements.mode.value = kModeReplace;
407+
}
408+
}
409+
513410
if (kLogging || logThis) console.log('- cue:');
514411
if (kLogging || logThis) console.log(cue);
515412
if (kLogging || logThis) console.log('- generated:');
516413
if (kLogging || logThis) console.log(generated);
517414
}
518415
}
519416
catch {
520-
if (kLogging) console.log("UseHash() catch");
417+
if (kLogging || logThis) console.log("UseHash() catch");
521418

522419
elements.cueText.value = saveCueTextValue;
523420
elements.generatedText.value = saveGeneratedTextValue;
@@ -529,11 +426,7 @@ function UseHash(hash) {
529426
elements.stopWords.value = saveStopWordsValue;
530427

531428
elements.autoGenerateCheckbox.checked = saveAutoGenerateValue;
532-
elements.appendCheckbox.checked = saveAppendValue;
533-
elements.replaceCheckbox.checked = saveReplaceValue;
534-
535-
elements.bookmarkTypeLink.checked = saveBookmarkTypeLink;
536-
elements.bookmarkTypeScript.checked = saveBookmarkTypeScript;
429+
elements.mode.value = saveModeValue;
537430

538431
elements.cueText.value = saveCueTextValue;
539432
elements.generatedText.value = saveGeneratedTextValue;

0 commit comments

Comments
 (0)