Skip to content

Commit 727ef33

Browse files
Merge pull request #98 from BradHutchings/work-in-progress
Work in progress
2 parents 2ec8689 + 7b28046 commit 727ef33

Some content is hidden

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

42 files changed

+759
-409
lines changed

.github/workflows/close-issue.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
steps:
1818
- uses: actions/stale@v5
1919
with:
20-
exempt-issue-labels: "refactor,help wanted,good first issue,research,bug,roadmap"
20+
exempt-issue-labels: "refactoring,help wanted,good first issue,research,bug,roadmap"
2121
days-before-issue-stale: 30
2222
days-before-issue-close: 14
2323
stale-issue-label: "stale"

completion-ui/admin/index.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<!--
4+
// Copyright 2024-25 Brad Hutchings.
5+
// All Rights Reserved.
6+
// License Inquiries: [email protected].
7+
-->
8+
<head>
9+
<--
10+
To do: Script file that can determine actual server, redirect to another port. -Brad 2025-07-24
11+
-->
12+
<meta http-equiv="refresh" content="0; url=https://mmojo.local:8443/">
13+
</head>
14+
</html>

completion-ui/completion/help-scripts.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ var instructions =
3535
"<li>To print what's in the <b>Work Area</b>, just print the page.</li>\n" +
3636
"</ul>\n" +
3737

38+
"<hr />\n" +
39+
"<h3>Change the Model:</h3>\n" +
40+
"<p>Use the Mmojo Admin page to change which large language model Mmojo uses:</p>\n" +
41+
"<ul>\n" +
42+
"<li><a href=\"/admin\" target=\"_blank\">Mmojo Admin</a></li>\n" +
43+
"</ul>\n" +
44+
3845
"<hr />\n" +
3946
"<h3>Install Our Certificate Authority:</h3>\n" +
4047
"<p>To remove security warnings for the Mmojo Knowledge Appliance on your devices and to allow the Mmojo app to install on " +
@@ -49,7 +56,8 @@ var instructions =
4956
"For more information and updates, please visit:\n\n" +
5057
"<ul>\n" +
5158
"<li><a href=\"https://Mmojo.net\" target=\"_blank\">https://Mmojo.net</a></li>\n" +
52-
"</ul>\n\n";
59+
"</ul>\n" +
60+
"<div style=\"height: 2rem;\"></div>\n\n";
5361

5462
function PageLoaded() {
5563
FindElements();

completion-ui/completion/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<div id="content">
3030

3131
<div id="title-bar" class="row">
32-
<div id="mmojo">Mmojo Completion</div>
32+
<div id="mmojo-completion" onclick="ClickMmojoCompletion();">Mmojo Completion</div>
3333
<img id="settings-icon" src="images/settings-64.png" onclick="ToggleSettings();" title="Toggle Settings" />
3434
<img id="chat-icon" src="images/chat-64.png" onclick="Chat();" title="Chat" />
3535
<img id="print-icon" src="images/print-64.png" onclick="Print();"/>

completion-ui/completion/scripts.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const kCompletionsURL = kServerURL + "/completion";
1717
const kModelsURL = kServerURL + "/v1/models"
1818
const kTokenizeURL = kServerURL + "/tokenize"
1919

20+
const kMmojoCompletion = "Mmojo Completion";
2021
const kStatus_TypeSomething = "Awaiting your cue.";
2122
const kStatus_Ready = "Ready.";
2223
const kStatus_Evaluating = "Evaluating.";
@@ -37,6 +38,7 @@ var generating = false; // Replace this with a mode: kMode_Typing, kMode
3738
var replaying = false;
3839
var metadata = {};
3940
var contextWindowSize = 0;
41+
var modelName = "";
4042

4143
var isMobile = (navigator.maxTouchPoints > 1) && (window.navigator.userAgent.includes("Mobi"));
4244

@@ -109,6 +111,7 @@ function FindElements() {
109111
elements.printContent = document.getElementById("print-content");
110112

111113
elements.titleBar = document.getElementById("title-bar");
114+
elements.mmojoCompletion = document.getElementById("mmojo-completion");
112115
elements.settingsIcon = document.getElementById("settings-icon");
113116
// elements.hashIcon = document.getElementById("hash-icon");
114117
// elements.colorWheelIcon = document.getElementById("color-wheel-icon");
@@ -1056,7 +1059,7 @@ async function GetModelInfoFromServer() {
10561059

10571060
const data0 = json.data[0];
10581061
metadata = data0.meta;
1059-
const modelName = metadata["general.name"];
1062+
modelName = metadata["general.name"];
10601063
const n_ctx_train = metadata["n_ctx_train"];
10611064
const n_ctx = metadata["n_ctx"];
10621065

@@ -1079,6 +1082,7 @@ async function GetModelInfoFromServer() {
10791082
if (kLogging) console.log("Exception caught receiving results from " + kModelsURL + ".");
10801083
if (kLogging) console.log(exc);
10811084

1085+
modelName = "";
10821086
elements.model.innerHTML = '';
10831087
}
10841088
}
@@ -1448,3 +1452,19 @@ function Print() {
14481452
function Help() {
14491453
window.open('help.html', '_blank');
14501454
}
1455+
1456+
var mmojoCompletionClicked = false;
1457+
function ClickMmojoCompletion() {
1458+
if (!mmojoCompletionClicked) {
1459+
mmojoCompletionClicked = true;
1460+
elements.mmojoCompletion.innerText = modelName;
1461+
setTimeout(function() {
1462+
RestoreMmojoCompletion();
1463+
}, 3000);
1464+
}
1465+
}
1466+
1467+
function RestoreMmojoCompletion() {
1468+
elements.mmojoCompletion.innerText = kMmojoCompletion;
1469+
mmojoCompletionClicked = false;
1470+
}

completion-ui/completion/styles.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ ul, li {
291291
color: var(--grey-dark);
292292
}
293293

294-
#mmojo {
294+
#mmojo-completion {
295295
flex-grow: 8;
296296
flex-shrink: 20;
297297

completion-ui/loading.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-->
88
<head>
99
<meta http-equiv="refresh" content="5">
10+
<title>Mmojo - Model Loading</title>
1011
<style>
1112
:root {
1213
--color1: #CB997E;

convert_hf_to_gguf.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6486,7 +6486,7 @@ def prepare_tensors(self):
64866486
self.gguf_writer.add_max_alibi_bias(self.max_alibi_bias)
64876487

64886488

6489-
@ModelBase.register("Glm4ForCausalLM")
6489+
@ModelBase.register("Glm4ForCausalLM", "Glm4vForConditionalGeneration")
64906490
class Glm4Model(TextModel):
64916491
model_arch = gguf.MODEL_ARCH.GLM4
64926492

@@ -6508,14 +6508,22 @@ def set_vocab(self):
65086508

65096509
def set_gguf_parameters(self):
65106510
super().set_gguf_parameters()
6511-
rope_dim = self.hparams["head_dim"]
6511+
if (rope_dim := self.hparams.get("head_dim")) is None:
6512+
rope_dim = self.hparams["hidden_size"] // self.hparams["num_attention_heads"]
65126513
self.gguf_writer.add_rope_dimension_count(int(rope_dim * self.hparams.get("partial_rotary_factor", 0.5)))
65136514
rope_scaling = self.hparams.get("rope_scaling") or {}
65146515
if rope_scaling.get("rope_type", rope_scaling.get("type")) == "yarn" and "factor" in rope_scaling:
65156516
self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.YARN)
65166517
self.gguf_writer.add_rope_scaling_factor(rope_scaling["factor"])
65176518
self.gguf_writer.add_rope_scaling_orig_ctx_len(rope_scaling["original_max_position_embeddings"])
65186519

6520+
def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
6521+
if name.startswith("model.visual."): # ignore visual part of Glm4v
6522+
return []
6523+
elif name.startswith("model.language_model."):
6524+
name = name.replace("language_model.", "") # for Glm4v
6525+
return super().modify_tensors(data_torch, name, bid)
6526+
65196527

65206528
@ModelBase.register("GlmForCausalLM", "ChatGLMModel", "ChatGLMForConditionalGeneration")
65216529
class ChatGLMModel(TextModel):

docs/build.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ cmake --build build --config Release
6868
cmake --build build-x64-windows-llvm-release
6969
```
7070
- Curl usage is enabled by default and can be turned off with `-DLLAMA_CURL=OFF`. Otherwise you need to install development libraries for libcurl.
71+
- **Debian / Ubuntu:** `sudo apt-get install libcurl4-openssl-dev` # (or `libcurl4-gnutls-dev` if you prefer GnuTLS)
72+
- **Fedora / RHEL / Rocky / Alma:** `sudo dnf install libcurl-devel`
73+
- **Arch / Manjaro:** `sudo pacman -S curl` # includes libcurl headers
7174
7275
## BLAS Build
7376

ggml/cmake/ggml-config.cmake.in

Lines changed: 85 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,130 @@
1-
2-
@GGML_VARIABLES_EXPANDED@
3-
41
@PACKAGE_INIT@
52

6-
set_and_check(GGML_INCLUDE_DIR "@PACKAGE_GGML_INCLUDE_INSTALL_DIR@")
7-
set_and_check(GGML_LIB_DIR "@PACKAGE_GGML_LIB_INSTALL_DIR@")
8-
#set_and_check(GGML_BIN_DIR "@PACKAGE_GGML_BIN_INSTALL_DIR@")
9-
10-
find_package(Threads REQUIRED)
11-
12-
find_library(GGML_LIBRARY ggml
13-
REQUIRED
14-
HINTS ${GGML_LIB_DIR}
15-
NO_CMAKE_FIND_ROOT_PATH)
16-
17-
add_library(ggml::ggml UNKNOWN IMPORTED)
18-
set_target_properties(ggml::ggml
19-
PROPERTIES
20-
IMPORTED_LOCATION "${GGML_LIBRARY}")
21-
22-
find_library(GGML_BASE_LIBRARY ggml-base
23-
REQUIRED
24-
HINTS ${GGML_LIB_DIR}
25-
NO_CMAKE_FIND_ROOT_PATH)
26-
27-
add_library(ggml::ggml-base UNKNOWN IMPORTED)
28-
set_target_properties(ggml::ggml-base
29-
PROPERTIES
30-
IMPORTED_LOCATION "${GGML_BASE_LIBRARY}")
3+
@GGML_VARIABLES_EXPANDED@
314

5+
# Find all dependencies before creating any target.
6+
include(CMakeFindDependencyMacro)
7+
find_dependency(Threads)
328
if (NOT GGML_SHARED_LIB)
9+
set(GGML_CPU_INTERFACE_LINK_LIBRARIES "")
10+
set(GGML_CPU_INTERFACE_LINK_OPTIONS "")
11+
3312
if (APPLE AND GGML_ACCELERATE)
34-
find_library(ACCELERATE_FRAMEWORK Accelerate REQUIRED)
13+
find_library(ACCELERATE_FRAMEWORK Accelerate)
14+
if(NOT ACCELERATE_FRAMEWORK)
15+
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
16+
return()
17+
endif()
3518
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${ACCELERATE_FRAMEWORK})
3619
endif()
3720

38-
if (GGML_OPENMP)
39-
find_package(OpenMP REQUIRED)
21+
if (GGML_OPENMP_ENABLED)
22+
find_dependency(OpenMP)
4023
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
4124
endif()
4225

4326
if (GGML_CPU_HBM)
44-
find_library(memkind memkind REQUIRED)
27+
find_library(memkind memkind)
28+
if(NOT memkind)
29+
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
30+
return()
31+
endif()
4532
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES memkind)
4633
endif()
4734

4835
if (GGML_BLAS)
49-
find_package(BLAS REQUIRED)
36+
find_dependency(BLAS)
5037
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES})
5138
list(APPEND GGML_CPU_INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS})
5239
endif()
5340

5441
if (GGML_CUDA)
55-
find_package(CUDAToolkit REQUIRED)
42+
set(GGML_CUDA_INTERFACE_LINK_LIBRARIES "")
43+
find_dependency(CUDAToolkit)
44+
if (GGML_STATIC)
45+
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cudart_static>)
46+
if (WIN32)
47+
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cublas> $<LINK_ONLY:CUDA::cublasLt>)
48+
else()
49+
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cublas_static> $<LINK_ONLY:CUDA::cublasLt_static>)
50+
endif()
51+
endif()
52+
if (NOT GGML_CUDA_NO_VMM)
53+
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cuda_driver>)
54+
endif()
5655
endif()
5756

5857
if (GGML_METAL)
59-
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
60-
find_library(METAL_FRAMEWORK Metal REQUIRED)
61-
find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
58+
find_library(FOUNDATION_LIBRARY Foundation)
59+
find_library(METAL_FRAMEWORK Metal)
60+
find_library(METALKIT_FRAMEWORK MetalKit)
61+
if(NOT FOUNDATION_LIBRARY OR NOT METAL_FRAMEWORK OR NOT METALKIT_FRAMEWORK)
62+
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
63+
return()
64+
endif()
65+
set(GGML_METAL_INTERFACE_LINK_LIBRARIES
66+
${FOUNDATION_LIBRARY} ${METAL_FRAMEWORK} ${METALKIT_FRAMEWORK})
67+
endif()
6268

63-
list(APPEND GGML_METAL_INTERFACE_LINK_LIBRARIES
64-
${FOUNDATION_LIBRARY} ${METAL_FRAMEWORK} ${METALKIT_FRAMEWORK})
69+
if (GGML_OPENCL)
70+
find_dependency(OpenCL)
71+
set(GGML_OPENCL_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:OpenCL::OpenCL>)
6572
endif()
6673

6774
if (GGML_VULKAN)
68-
find_package(Vulkan REQUIRED)
69-
list(APPEND GGML_VULKAN_INTERFACE_LINK_LIBRARIES Vulkan::Vulkan)
75+
find_dependency(Vulkan)
76+
set(GGML_VULKAN_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:Vulkan::Vulkan>)
7077
endif()
7178

7279
if (GGML_HIP)
73-
find_package(hip REQUIRED)
74-
find_package(hipblas REQUIRED)
75-
find_package(rocblas REQUIRED)
76-
list(APPEND GGML_HIP_INTERFACE_LINK_LIBRARIES hip::host roc::rocblas roc::hipblas)
80+
find_dependency(hip)
81+
find_dependency(hipblas)
82+
find_dependency(rocblas)
83+
set(GGML_HIP_INTERFACE_LINK_LIBRARIES hip::host roc::rocblas roc::hipblas)
7784
endif()
7885

7986
if (GGML_SYCL)
87+
set(GGML_SYCL_INTERFACE_LINK_LIBRARIES "")
8088
find_package(DNNL)
8189
if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL")
8290
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES DNNL::dnnl)
8391
endif()
8492
if (WIN32)
85-
find_package(IntelSYCL REQUIRED)
86-
find_package(MKL REQUIRED)
93+
find_dependency(IntelSYCL)
94+
find_dependency(MKL)
8795
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL)
8896
endif()
8997
endif()
9098
endif()
9199

100+
set_and_check(GGML_INCLUDE_DIR "@PACKAGE_GGML_INCLUDE_INSTALL_DIR@")
101+
set_and_check(GGML_LIB_DIR "@PACKAGE_GGML_LIB_INSTALL_DIR@")
102+
#set_and_check(GGML_BIN_DIR "@PACKAGE_GGML_BIN_INSTALL_DIR@")
103+
104+
if(NOT TARGET ggml::ggml)
105+
106+
find_package(Threads REQUIRED)
107+
108+
find_library(GGML_LIBRARY ggml
109+
REQUIRED
110+
HINTS ${GGML_LIB_DIR}
111+
NO_CMAKE_FIND_ROOT_PATH)
112+
113+
add_library(ggml::ggml UNKNOWN IMPORTED)
114+
set_target_properties(ggml::ggml
115+
PROPERTIES
116+
IMPORTED_LOCATION "${GGML_LIBRARY}")
117+
118+
find_library(GGML_BASE_LIBRARY ggml-base
119+
REQUIRED
120+
HINTS ${GGML_LIB_DIR}
121+
NO_CMAKE_FIND_ROOT_PATH)
122+
123+
add_library(ggml::ggml-base UNKNOWN IMPORTED)
124+
set_target_properties(ggml::ggml-base
125+
PROPERTIES
126+
IMPORTED_LOCATION "${GGML_BASE_LIBRARY}")
127+
92128
set(_ggml_all_targets "")
93129
foreach(_ggml_backend ${GGML_AVAILABLE_BACKENDS})
94130
string(REPLACE "-" "_" _ggml_backend_pfx "${_ggml_backend}")
@@ -149,4 +185,6 @@ set_target_properties(ggml::all
149185
PROPERTIES
150186
INTERFACE_LINK_LIBRARIES "${_ggml_all_targets}")
151187

188+
endif() # TARGET ggml::ggml
189+
152190
check_required_components(ggml)

0 commit comments

Comments
 (0)