@camstack/addon-ai 0.4.51 → 0.4.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +145 -40
- package/dist/addon.mjs +145 -40
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -7921,7 +7921,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7921
7921
|
"quota",
|
|
7922
7922
|
"manual",
|
|
7923
7923
|
"operator",
|
|
7924
|
-
"maintenance"
|
|
7924
|
+
"maintenance",
|
|
7925
|
+
"orphaned-device"
|
|
7925
7926
|
]);
|
|
7926
7927
|
/** One audit row, shared verbatim by both domains. */
|
|
7927
7928
|
var OpsLogEntrySchema = object({
|
|
@@ -12952,10 +12953,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
12952
12953
|
deviceId: number$1(),
|
|
12953
12954
|
data: record(string(), unknown())
|
|
12954
12955
|
});
|
|
12956
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
12957
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
12958
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
12959
|
+
"off",
|
|
12960
|
+
"on",
|
|
12961
|
+
"not-offered",
|
|
12962
|
+
"unreachable"
|
|
12963
|
+
]);
|
|
12964
|
+
var MigrateSwitchReportSchema = object({
|
|
12965
|
+
deviceId: number$1(),
|
|
12966
|
+
switchId: CameraSwitchIdSchema,
|
|
12967
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
12968
|
+
detail: string().optional()
|
|
12969
|
+
});
|
|
12970
|
+
var MigrateDeviceResultSchema = object({
|
|
12971
|
+
sourceId: number$1(),
|
|
12972
|
+
targetId: number$1(),
|
|
12973
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
12974
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
12975
|
+
* value meaning the replaced hardware is quiet. */
|
|
12976
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
12977
|
+
swapped: boolean()
|
|
12978
|
+
});
|
|
12955
12979
|
method(object({
|
|
12956
12980
|
addonId: string(),
|
|
12957
12981
|
stableId: string()
|
|
12958
|
-
}), object({ id: number$1() }), { kind: "mutation" }), method(
|
|
12982
|
+
}), object({ id: number$1() }), { kind: "mutation" }), method(object({
|
|
12983
|
+
sourceId: number$1(),
|
|
12984
|
+
targetId: number$1()
|
|
12985
|
+
}), MigrateDeviceResultSchema, {
|
|
12986
|
+
kind: "mutation",
|
|
12987
|
+
auth: "admin"
|
|
12988
|
+
}), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number$1() }), record(string(), unknown())), method(object({ deviceId: number$1() }), record(string(), unknown())), method(object({ deviceId: number$1() }), DeviceMetaSchema.nullable()), method(object({
|
|
12959
12989
|
deviceId: number$1(),
|
|
12960
12990
|
name: string()
|
|
12961
12991
|
}), _void(), {
|
|
@@ -30552,6 +30582,12 @@ Object.freeze({
|
|
|
30552
30582
|
addonId: null,
|
|
30553
30583
|
access: "view"
|
|
30554
30584
|
},
|
|
30585
|
+
"deviceManager.migrateDevice": {
|
|
30586
|
+
capName: "device-manager",
|
|
30587
|
+
capScope: "system",
|
|
30588
|
+
addonId: null,
|
|
30589
|
+
access: "create"
|
|
30590
|
+
},
|
|
30555
30591
|
"deviceManager.persistConfig": {
|
|
30556
30592
|
capName: "device-manager",
|
|
30557
30593
|
capScope: "system",
|
|
@@ -74735,43 +74771,6 @@ var LLAMA = textEntry({
|
|
|
74735
74771
|
minRamBytes: Math.round(3.5 * GIB),
|
|
74736
74772
|
contextSizeDefault: 4096
|
|
74737
74773
|
});
|
|
74738
|
-
var SMOLVLM_MODEL_BYTES = 1112602656;
|
|
74739
|
-
var SMOLVLM_MMPROJ_BYTES = 872303680;
|
|
74740
|
-
var SMOLVLM_MMPROJ_URL = "https://huggingface.co/ggml-org/SmolVLM2-2.2B-Instruct-GGUF/resolve/main/mmproj-SmolVLM2-2.2B-Instruct-f16.gguf";
|
|
74741
|
-
var SMOLVLM = {
|
|
74742
|
-
meta: {
|
|
74743
|
-
id: "llm-smolvlm2-2.2b-instruct-q4",
|
|
74744
|
-
label: "SmolVLM2 2.2B Instruct (vision)",
|
|
74745
|
-
family: "smolvlm2",
|
|
74746
|
-
purpose: "vision",
|
|
74747
|
-
url: "https://huggingface.co/ggml-org/SmolVLM2-2.2B-Instruct-GGUF/resolve/main/SmolVLM2-2.2B-Instruct-Q4_K_M.gguf",
|
|
74748
|
-
sha256: "0cf76814555b8665149075b74ab6b5c1d428ea1d3d01c1918c12012e8d7c9f58",
|
|
74749
|
-
sizeBytes: SMOLVLM_MODEL_BYTES,
|
|
74750
|
-
quantization: "Q4_K_M",
|
|
74751
|
-
minRamBytes: 4 * GIB,
|
|
74752
|
-
contextSizeDefault: 4096,
|
|
74753
|
-
mmprojUrl: SMOLVLM_MMPROJ_URL
|
|
74754
|
-
},
|
|
74755
|
-
entry: {
|
|
74756
|
-
id: "llm-smolvlm2-2.2b-instruct-q4",
|
|
74757
|
-
name: "SmolVLM2 2.2B Instruct (vision)",
|
|
74758
|
-
description: "smolvlm2 · Q4_K_M · +mmproj",
|
|
74759
|
-
formats: { gguf: {
|
|
74760
|
-
url: "https://huggingface.co/ggml-org/SmolVLM2-2.2B-Instruct-GGUF/resolve/main/SmolVLM2-2.2B-Instruct-Q4_K_M.gguf",
|
|
74761
|
-
sizeMB: mb(SMOLVLM_MODEL_BYTES)
|
|
74762
|
-
} },
|
|
74763
|
-
inputSize: {
|
|
74764
|
-
width: 0,
|
|
74765
|
-
height: 0
|
|
74766
|
-
},
|
|
74767
|
-
labels: [],
|
|
74768
|
-
extraFiles: [{
|
|
74769
|
-
url: SMOLVLM_MMPROJ_URL,
|
|
74770
|
-
filename: "mmproj-SmolVLM2-2.2B-Instruct-f16.gguf",
|
|
74771
|
-
sizeMB: mb(SMOLVLM_MMPROJ_BYTES)
|
|
74772
|
-
}]
|
|
74773
|
-
}
|
|
74774
|
-
};
|
|
74775
74774
|
var QWEN3VL2B_MODEL_BYTES = 1107410624;
|
|
74776
74775
|
var QWEN3VL2B_MMPROJ_BYTES = 819395232;
|
|
74777
74776
|
var QWEN3VL2B_BASE = "https://huggingface.co/unsloth/Qwen3-VL-2B-Instruct-GGUF/resolve/main";
|
|
@@ -74818,6 +74817,111 @@ var QWEN3VL_2B = {
|
|
|
74818
74817
|
}]
|
|
74819
74818
|
}
|
|
74820
74819
|
};
|
|
74820
|
+
var QWEN3VL4B_MODEL_BYTES = 2497282336;
|
|
74821
|
+
var QWEN3VL4B_MMPROJ_BYTES = 836180640;
|
|
74822
|
+
var QWEN3VL4B_BASE = "https://huggingface.co/unsloth/Qwen3-VL-4B-Instruct-GGUF/resolve/main";
|
|
74823
|
+
var QWEN3VL4B_MMPROJ_URL = `${QWEN3VL4B_BASE}/mmproj-F16.gguf`;
|
|
74824
|
+
var QWEN3VL4B_URL = `${QWEN3VL4B_BASE}/Qwen3-VL-4B-Instruct-Q4_K_M.gguf`;
|
|
74825
|
+
/**
|
|
74826
|
+
* The middle rung. It exists because the catalogue used to jump from 2B to a
|
|
74827
|
+
* 35B MoE, and the operator was running an 8B through an EXTERNAL LM Studio
|
|
74828
|
+
* endpoint precisely because nothing in between was offered here — the gap was
|
|
74829
|
+
* pushing the work outside the addon that is supposed to own it.
|
|
74830
|
+
*
|
|
74831
|
+
* At ~3.3 GB all in, this is also the only tier above 2B that a small
|
|
74832
|
+
* mini-PC-class node can hold, so the ladder is now 2B → 4B → 8B rather than
|
|
74833
|
+
* 2B → nothing.
|
|
74834
|
+
*
|
|
74835
|
+
* Same `qwen3vl_merger` projector as the 2B and the 8B: one prompt set and one
|
|
74836
|
+
* download shape cover all three. That is the reason this family was chosen
|
|
74837
|
+
* over its neighbours, not a benchmark — Gemma 4 and GLM-4.6V each want a
|
|
74838
|
+
* projector this addon has never exercised, for no verified gain at this size.
|
|
74839
|
+
*/
|
|
74840
|
+
var QWEN3VL_4B = {
|
|
74841
|
+
meta: {
|
|
74842
|
+
id: "llm-qwen3-vl-4b-instruct-q4",
|
|
74843
|
+
label: "Qwen3-VL 4B Instruct (vision)",
|
|
74844
|
+
family: "qwen3-vl",
|
|
74845
|
+
purpose: "vision",
|
|
74846
|
+
url: QWEN3VL4B_URL,
|
|
74847
|
+
sha256: "d4dcd426bfba75752a312b266b80fec8136fbaca13c62d93b7ac41fa67f0492b",
|
|
74848
|
+
sizeBytes: QWEN3VL4B_MODEL_BYTES,
|
|
74849
|
+
quantization: "Q4_K_M",
|
|
74850
|
+
minRamBytes: 5 * GIB,
|
|
74851
|
+
contextSizeDefault: 8192,
|
|
74852
|
+
mmprojUrl: QWEN3VL4B_MMPROJ_URL
|
|
74853
|
+
},
|
|
74854
|
+
entry: {
|
|
74855
|
+
id: "llm-qwen3-vl-4b-instruct-q4",
|
|
74856
|
+
name: "Qwen3-VL 4B Instruct (vision)",
|
|
74857
|
+
description: "qwen3-vl · Q4_K_M · +mmproj",
|
|
74858
|
+
formats: { gguf: {
|
|
74859
|
+
url: QWEN3VL4B_URL,
|
|
74860
|
+
sizeMB: mb(QWEN3VL4B_MODEL_BYTES)
|
|
74861
|
+
} },
|
|
74862
|
+
inputSize: {
|
|
74863
|
+
width: 0,
|
|
74864
|
+
height: 0
|
|
74865
|
+
},
|
|
74866
|
+
labels: [],
|
|
74867
|
+
extraFiles: [{
|
|
74868
|
+
url: QWEN3VL4B_MMPROJ_URL,
|
|
74869
|
+
filename: "mmproj-F16.gguf",
|
|
74870
|
+
sizeMB: mb(QWEN3VL4B_MMPROJ_BYTES)
|
|
74871
|
+
}]
|
|
74872
|
+
}
|
|
74873
|
+
};
|
|
74874
|
+
var QWEN3VL8B_MODEL_BYTES = 5027785568;
|
|
74875
|
+
var QWEN3VL8B_MMPROJ_BYTES = 1159030336;
|
|
74876
|
+
var QWEN3VL8B_BASE = "https://huggingface.co/unsloth/Qwen3-VL-8B-Instruct-GGUF/resolve/main";
|
|
74877
|
+
var QWEN3VL8B_MMPROJ_URL = `${QWEN3VL8B_BASE}/mmproj-F16.gguf`;
|
|
74878
|
+
var QWEN3VL8B_URL = `${QWEN3VL8B_BASE}/Qwen3-VL-8B-Instruct-Q4_K_M.gguf`;
|
|
74879
|
+
/**
|
|
74880
|
+
* The tier the operator already trusts, brought in-house.
|
|
74881
|
+
*
|
|
74882
|
+
* This is the same weight class as the `qwen/qwen3-vl-8b` served by an external
|
|
74883
|
+
* LM Studio endpoint on the Mac: as a `managed-local` profile the addon owns
|
|
74884
|
+
* the runtime and `nodePin` puts the INFERENCE on that node, instead of the hub
|
|
74885
|
+
* calling out over HTTP to a process nobody here supervises.
|
|
74886
|
+
*
|
|
74887
|
+
* ~6.2 GB resident is a real bite on a 16 GB machine shared with the rest of
|
|
74888
|
+
* CamStack — that is what `minRamBytes` is for, and it is why the 4B above
|
|
74889
|
+
* exists rather than this being the only new rung.
|
|
74890
|
+
*/
|
|
74891
|
+
var QWEN3VL_8B = {
|
|
74892
|
+
meta: {
|
|
74893
|
+
id: "llm-qwen3-vl-8b-instruct-q4",
|
|
74894
|
+
label: "Qwen3-VL 8B Instruct (vision)",
|
|
74895
|
+
family: "qwen3-vl",
|
|
74896
|
+
purpose: "vision",
|
|
74897
|
+
url: QWEN3VL8B_URL,
|
|
74898
|
+
sha256: "108e7ff92b78eefd3db4741885104acba514255c11b617d3c7b197a5f46efe89",
|
|
74899
|
+
sizeBytes: QWEN3VL8B_MODEL_BYTES,
|
|
74900
|
+
quantization: "Q4_K_M",
|
|
74901
|
+
minRamBytes: 8 * GIB,
|
|
74902
|
+
contextSizeDefault: 8192,
|
|
74903
|
+
mmprojUrl: QWEN3VL8B_MMPROJ_URL
|
|
74904
|
+
},
|
|
74905
|
+
entry: {
|
|
74906
|
+
id: "llm-qwen3-vl-8b-instruct-q4",
|
|
74907
|
+
name: "Qwen3-VL 8B Instruct (vision)",
|
|
74908
|
+
description: "qwen3-vl · Q4_K_M · +mmproj",
|
|
74909
|
+
formats: { gguf: {
|
|
74910
|
+
url: QWEN3VL8B_URL,
|
|
74911
|
+
sizeMB: mb(QWEN3VL8B_MODEL_BYTES)
|
|
74912
|
+
} },
|
|
74913
|
+
inputSize: {
|
|
74914
|
+
width: 0,
|
|
74915
|
+
height: 0
|
|
74916
|
+
},
|
|
74917
|
+
labels: [],
|
|
74918
|
+
extraFiles: [{
|
|
74919
|
+
url: QWEN3VL8B_MMPROJ_URL,
|
|
74920
|
+
filename: "mmproj-F16.gguf",
|
|
74921
|
+
sizeMB: mb(QWEN3VL8B_MMPROJ_BYTES)
|
|
74922
|
+
}]
|
|
74923
|
+
}
|
|
74924
|
+
};
|
|
74821
74925
|
var QWEN36_MODEL_BYTES = 22134528992;
|
|
74822
74926
|
var QWEN36_MMPROJ_BYTES = 899283680;
|
|
74823
74927
|
var QWEN36_BASE = "https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF/resolve/main";
|
|
@@ -74826,8 +74930,9 @@ var QWEN36_URL = `${QWEN36_BASE}/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf`;
|
|
|
74826
74930
|
var LLM_MODEL_CATALOG = [
|
|
74827
74931
|
QWEN,
|
|
74828
74932
|
LLAMA,
|
|
74829
|
-
SMOLVLM,
|
|
74830
74933
|
QWEN3VL_2B,
|
|
74934
|
+
QWEN3VL_4B,
|
|
74935
|
+
QWEN3VL_8B,
|
|
74831
74936
|
{
|
|
74832
74937
|
meta: {
|
|
74833
74938
|
id: "llm-qwen3.6-35b-a3b-ud-q4",
|
package/dist/addon.mjs
CHANGED
|
@@ -7948,7 +7948,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7948
7948
|
"quota",
|
|
7949
7949
|
"manual",
|
|
7950
7950
|
"operator",
|
|
7951
|
-
"maintenance"
|
|
7951
|
+
"maintenance",
|
|
7952
|
+
"orphaned-device"
|
|
7952
7953
|
]);
|
|
7953
7954
|
/** One audit row, shared verbatim by both domains. */
|
|
7954
7955
|
var OpsLogEntrySchema = object({
|
|
@@ -12979,10 +12980,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
12979
12980
|
deviceId: number$1(),
|
|
12980
12981
|
data: record(string(), unknown())
|
|
12981
12982
|
});
|
|
12983
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
12984
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
12985
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
12986
|
+
"off",
|
|
12987
|
+
"on",
|
|
12988
|
+
"not-offered",
|
|
12989
|
+
"unreachable"
|
|
12990
|
+
]);
|
|
12991
|
+
var MigrateSwitchReportSchema = object({
|
|
12992
|
+
deviceId: number$1(),
|
|
12993
|
+
switchId: CameraSwitchIdSchema,
|
|
12994
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
12995
|
+
detail: string().optional()
|
|
12996
|
+
});
|
|
12997
|
+
var MigrateDeviceResultSchema = object({
|
|
12998
|
+
sourceId: number$1(),
|
|
12999
|
+
targetId: number$1(),
|
|
13000
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
13001
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
13002
|
+
* value meaning the replaced hardware is quiet. */
|
|
13003
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
13004
|
+
swapped: boolean()
|
|
13005
|
+
});
|
|
12982
13006
|
method(object({
|
|
12983
13007
|
addonId: string(),
|
|
12984
13008
|
stableId: string()
|
|
12985
|
-
}), object({ id: number$1() }), { kind: "mutation" }), method(
|
|
13009
|
+
}), object({ id: number$1() }), { kind: "mutation" }), method(object({
|
|
13010
|
+
sourceId: number$1(),
|
|
13011
|
+
targetId: number$1()
|
|
13012
|
+
}), MigrateDeviceResultSchema, {
|
|
13013
|
+
kind: "mutation",
|
|
13014
|
+
auth: "admin"
|
|
13015
|
+
}), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number$1() }), record(string(), unknown())), method(object({ deviceId: number$1() }), record(string(), unknown())), method(object({ deviceId: number$1() }), DeviceMetaSchema.nullable()), method(object({
|
|
12986
13016
|
deviceId: number$1(),
|
|
12987
13017
|
name: string()
|
|
12988
13018
|
}), _void(), {
|
|
@@ -30579,6 +30609,12 @@ Object.freeze({
|
|
|
30579
30609
|
addonId: null,
|
|
30580
30610
|
access: "view"
|
|
30581
30611
|
},
|
|
30612
|
+
"deviceManager.migrateDevice": {
|
|
30613
|
+
capName: "device-manager",
|
|
30614
|
+
capScope: "system",
|
|
30615
|
+
addonId: null,
|
|
30616
|
+
access: "create"
|
|
30617
|
+
},
|
|
30582
30618
|
"deviceManager.persistConfig": {
|
|
30583
30619
|
capName: "device-manager",
|
|
30584
30620
|
capScope: "system",
|
|
@@ -74762,43 +74798,6 @@ var LLAMA = textEntry({
|
|
|
74762
74798
|
minRamBytes: Math.round(3.5 * GIB),
|
|
74763
74799
|
contextSizeDefault: 4096
|
|
74764
74800
|
});
|
|
74765
|
-
var SMOLVLM_MODEL_BYTES = 1112602656;
|
|
74766
|
-
var SMOLVLM_MMPROJ_BYTES = 872303680;
|
|
74767
|
-
var SMOLVLM_MMPROJ_URL = "https://huggingface.co/ggml-org/SmolVLM2-2.2B-Instruct-GGUF/resolve/main/mmproj-SmolVLM2-2.2B-Instruct-f16.gguf";
|
|
74768
|
-
var SMOLVLM = {
|
|
74769
|
-
meta: {
|
|
74770
|
-
id: "llm-smolvlm2-2.2b-instruct-q4",
|
|
74771
|
-
label: "SmolVLM2 2.2B Instruct (vision)",
|
|
74772
|
-
family: "smolvlm2",
|
|
74773
|
-
purpose: "vision",
|
|
74774
|
-
url: "https://huggingface.co/ggml-org/SmolVLM2-2.2B-Instruct-GGUF/resolve/main/SmolVLM2-2.2B-Instruct-Q4_K_M.gguf",
|
|
74775
|
-
sha256: "0cf76814555b8665149075b74ab6b5c1d428ea1d3d01c1918c12012e8d7c9f58",
|
|
74776
|
-
sizeBytes: SMOLVLM_MODEL_BYTES,
|
|
74777
|
-
quantization: "Q4_K_M",
|
|
74778
|
-
minRamBytes: 4 * GIB,
|
|
74779
|
-
contextSizeDefault: 4096,
|
|
74780
|
-
mmprojUrl: SMOLVLM_MMPROJ_URL
|
|
74781
|
-
},
|
|
74782
|
-
entry: {
|
|
74783
|
-
id: "llm-smolvlm2-2.2b-instruct-q4",
|
|
74784
|
-
name: "SmolVLM2 2.2B Instruct (vision)",
|
|
74785
|
-
description: "smolvlm2 · Q4_K_M · +mmproj",
|
|
74786
|
-
formats: { gguf: {
|
|
74787
|
-
url: "https://huggingface.co/ggml-org/SmolVLM2-2.2B-Instruct-GGUF/resolve/main/SmolVLM2-2.2B-Instruct-Q4_K_M.gguf",
|
|
74788
|
-
sizeMB: mb(SMOLVLM_MODEL_BYTES)
|
|
74789
|
-
} },
|
|
74790
|
-
inputSize: {
|
|
74791
|
-
width: 0,
|
|
74792
|
-
height: 0
|
|
74793
|
-
},
|
|
74794
|
-
labels: [],
|
|
74795
|
-
extraFiles: [{
|
|
74796
|
-
url: SMOLVLM_MMPROJ_URL,
|
|
74797
|
-
filename: "mmproj-SmolVLM2-2.2B-Instruct-f16.gguf",
|
|
74798
|
-
sizeMB: mb(SMOLVLM_MMPROJ_BYTES)
|
|
74799
|
-
}]
|
|
74800
|
-
}
|
|
74801
|
-
};
|
|
74802
74801
|
var QWEN3VL2B_MODEL_BYTES = 1107410624;
|
|
74803
74802
|
var QWEN3VL2B_MMPROJ_BYTES = 819395232;
|
|
74804
74803
|
var QWEN3VL2B_BASE = "https://huggingface.co/unsloth/Qwen3-VL-2B-Instruct-GGUF/resolve/main";
|
|
@@ -74845,6 +74844,111 @@ var QWEN3VL_2B = {
|
|
|
74845
74844
|
}]
|
|
74846
74845
|
}
|
|
74847
74846
|
};
|
|
74847
|
+
var QWEN3VL4B_MODEL_BYTES = 2497282336;
|
|
74848
|
+
var QWEN3VL4B_MMPROJ_BYTES = 836180640;
|
|
74849
|
+
var QWEN3VL4B_BASE = "https://huggingface.co/unsloth/Qwen3-VL-4B-Instruct-GGUF/resolve/main";
|
|
74850
|
+
var QWEN3VL4B_MMPROJ_URL = `${QWEN3VL4B_BASE}/mmproj-F16.gguf`;
|
|
74851
|
+
var QWEN3VL4B_URL = `${QWEN3VL4B_BASE}/Qwen3-VL-4B-Instruct-Q4_K_M.gguf`;
|
|
74852
|
+
/**
|
|
74853
|
+
* The middle rung. It exists because the catalogue used to jump from 2B to a
|
|
74854
|
+
* 35B MoE, and the operator was running an 8B through an EXTERNAL LM Studio
|
|
74855
|
+
* endpoint precisely because nothing in between was offered here — the gap was
|
|
74856
|
+
* pushing the work outside the addon that is supposed to own it.
|
|
74857
|
+
*
|
|
74858
|
+
* At ~3.3 GB all in, this is also the only tier above 2B that a small
|
|
74859
|
+
* mini-PC-class node can hold, so the ladder is now 2B → 4B → 8B rather than
|
|
74860
|
+
* 2B → nothing.
|
|
74861
|
+
*
|
|
74862
|
+
* Same `qwen3vl_merger` projector as the 2B and the 8B: one prompt set and one
|
|
74863
|
+
* download shape cover all three. That is the reason this family was chosen
|
|
74864
|
+
* over its neighbours, not a benchmark — Gemma 4 and GLM-4.6V each want a
|
|
74865
|
+
* projector this addon has never exercised, for no verified gain at this size.
|
|
74866
|
+
*/
|
|
74867
|
+
var QWEN3VL_4B = {
|
|
74868
|
+
meta: {
|
|
74869
|
+
id: "llm-qwen3-vl-4b-instruct-q4",
|
|
74870
|
+
label: "Qwen3-VL 4B Instruct (vision)",
|
|
74871
|
+
family: "qwen3-vl",
|
|
74872
|
+
purpose: "vision",
|
|
74873
|
+
url: QWEN3VL4B_URL,
|
|
74874
|
+
sha256: "d4dcd426bfba75752a312b266b80fec8136fbaca13c62d93b7ac41fa67f0492b",
|
|
74875
|
+
sizeBytes: QWEN3VL4B_MODEL_BYTES,
|
|
74876
|
+
quantization: "Q4_K_M",
|
|
74877
|
+
minRamBytes: 5 * GIB,
|
|
74878
|
+
contextSizeDefault: 8192,
|
|
74879
|
+
mmprojUrl: QWEN3VL4B_MMPROJ_URL
|
|
74880
|
+
},
|
|
74881
|
+
entry: {
|
|
74882
|
+
id: "llm-qwen3-vl-4b-instruct-q4",
|
|
74883
|
+
name: "Qwen3-VL 4B Instruct (vision)",
|
|
74884
|
+
description: "qwen3-vl · Q4_K_M · +mmproj",
|
|
74885
|
+
formats: { gguf: {
|
|
74886
|
+
url: QWEN3VL4B_URL,
|
|
74887
|
+
sizeMB: mb(QWEN3VL4B_MODEL_BYTES)
|
|
74888
|
+
} },
|
|
74889
|
+
inputSize: {
|
|
74890
|
+
width: 0,
|
|
74891
|
+
height: 0
|
|
74892
|
+
},
|
|
74893
|
+
labels: [],
|
|
74894
|
+
extraFiles: [{
|
|
74895
|
+
url: QWEN3VL4B_MMPROJ_URL,
|
|
74896
|
+
filename: "mmproj-F16.gguf",
|
|
74897
|
+
sizeMB: mb(QWEN3VL4B_MMPROJ_BYTES)
|
|
74898
|
+
}]
|
|
74899
|
+
}
|
|
74900
|
+
};
|
|
74901
|
+
var QWEN3VL8B_MODEL_BYTES = 5027785568;
|
|
74902
|
+
var QWEN3VL8B_MMPROJ_BYTES = 1159030336;
|
|
74903
|
+
var QWEN3VL8B_BASE = "https://huggingface.co/unsloth/Qwen3-VL-8B-Instruct-GGUF/resolve/main";
|
|
74904
|
+
var QWEN3VL8B_MMPROJ_URL = `${QWEN3VL8B_BASE}/mmproj-F16.gguf`;
|
|
74905
|
+
var QWEN3VL8B_URL = `${QWEN3VL8B_BASE}/Qwen3-VL-8B-Instruct-Q4_K_M.gguf`;
|
|
74906
|
+
/**
|
|
74907
|
+
* The tier the operator already trusts, brought in-house.
|
|
74908
|
+
*
|
|
74909
|
+
* This is the same weight class as the `qwen/qwen3-vl-8b` served by an external
|
|
74910
|
+
* LM Studio endpoint on the Mac: as a `managed-local` profile the addon owns
|
|
74911
|
+
* the runtime and `nodePin` puts the INFERENCE on that node, instead of the hub
|
|
74912
|
+
* calling out over HTTP to a process nobody here supervises.
|
|
74913
|
+
*
|
|
74914
|
+
* ~6.2 GB resident is a real bite on a 16 GB machine shared with the rest of
|
|
74915
|
+
* CamStack — that is what `minRamBytes` is for, and it is why the 4B above
|
|
74916
|
+
* exists rather than this being the only new rung.
|
|
74917
|
+
*/
|
|
74918
|
+
var QWEN3VL_8B = {
|
|
74919
|
+
meta: {
|
|
74920
|
+
id: "llm-qwen3-vl-8b-instruct-q4",
|
|
74921
|
+
label: "Qwen3-VL 8B Instruct (vision)",
|
|
74922
|
+
family: "qwen3-vl",
|
|
74923
|
+
purpose: "vision",
|
|
74924
|
+
url: QWEN3VL8B_URL,
|
|
74925
|
+
sha256: "108e7ff92b78eefd3db4741885104acba514255c11b617d3c7b197a5f46efe89",
|
|
74926
|
+
sizeBytes: QWEN3VL8B_MODEL_BYTES,
|
|
74927
|
+
quantization: "Q4_K_M",
|
|
74928
|
+
minRamBytes: 8 * GIB,
|
|
74929
|
+
contextSizeDefault: 8192,
|
|
74930
|
+
mmprojUrl: QWEN3VL8B_MMPROJ_URL
|
|
74931
|
+
},
|
|
74932
|
+
entry: {
|
|
74933
|
+
id: "llm-qwen3-vl-8b-instruct-q4",
|
|
74934
|
+
name: "Qwen3-VL 8B Instruct (vision)",
|
|
74935
|
+
description: "qwen3-vl · Q4_K_M · +mmproj",
|
|
74936
|
+
formats: { gguf: {
|
|
74937
|
+
url: QWEN3VL8B_URL,
|
|
74938
|
+
sizeMB: mb(QWEN3VL8B_MODEL_BYTES)
|
|
74939
|
+
} },
|
|
74940
|
+
inputSize: {
|
|
74941
|
+
width: 0,
|
|
74942
|
+
height: 0
|
|
74943
|
+
},
|
|
74944
|
+
labels: [],
|
|
74945
|
+
extraFiles: [{
|
|
74946
|
+
url: QWEN3VL8B_MMPROJ_URL,
|
|
74947
|
+
filename: "mmproj-F16.gguf",
|
|
74948
|
+
sizeMB: mb(QWEN3VL8B_MMPROJ_BYTES)
|
|
74949
|
+
}]
|
|
74950
|
+
}
|
|
74951
|
+
};
|
|
74848
74952
|
var QWEN36_MODEL_BYTES = 22134528992;
|
|
74849
74953
|
var QWEN36_MMPROJ_BYTES = 899283680;
|
|
74850
74954
|
var QWEN36_BASE = "https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF/resolve/main";
|
|
@@ -74853,8 +74957,9 @@ var QWEN36_URL = `${QWEN36_BASE}/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf`;
|
|
|
74853
74957
|
var LLM_MODEL_CATALOG = [
|
|
74854
74958
|
QWEN,
|
|
74855
74959
|
LLAMA,
|
|
74856
|
-
SMOLVLM,
|
|
74857
74960
|
QWEN3VL_2B,
|
|
74961
|
+
QWEN3VL_4B,
|
|
74962
|
+
QWEN3VL_8B,
|
|
74858
74963
|
{
|
|
74859
74964
|
meta: {
|
|
74860
74965
|
id: "llm-qwen3.6-35b-a3b-ud-q4",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-ai",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.53",
|
|
4
4
|
"description": "AI addon for CamStack — the `llm` collection provider (cloud, LAN, and camstack-managed local llama.cpp profiles) plus the per-node `llm-runtime` managed executor.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|