|
|
@@ -117,6 +117,50 @@ describe("LlamaCpp expand context size config", () => {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
+describe("LlamaCpp model resolution (config > env > default)", () => {
|
|
|
+ const HARDCODED_EMBED = "hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf";
|
|
|
+ const HARDCODED_RERANK = "hf:ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF/qwen3-reranker-0.6b-q8_0.gguf";
|
|
|
+ const HARDCODED_GENERATE = "hf:tobil/qmd-query-expansion-1.7B-gguf/qmd-query-expansion-1.7B-q4_k_m.gguf";
|
|
|
+
|
|
|
+ test("uses hardcoded default when no config or env is set", () => {
|
|
|
+ const prev = process.env.QMD_EMBED_MODEL;
|
|
|
+ delete process.env.QMD_EMBED_MODEL;
|
|
|
+ try {
|
|
|
+ const llm = new LlamaCpp({}) as any;
|
|
|
+ expect(llm.embedModelUri).toBe(HARDCODED_EMBED);
|
|
|
+ expect(llm.rerankModelUri).toBe(HARDCODED_RERANK);
|
|
|
+ expect(llm.generateModelUri).toBe(HARDCODED_GENERATE);
|
|
|
+ } finally {
|
|
|
+ if (prev === undefined) delete process.env.QMD_EMBED_MODEL;
|
|
|
+ else process.env.QMD_EMBED_MODEL = prev;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ test("env var overrides hardcoded default", () => {
|
|
|
+ const prev = process.env.QMD_EMBED_MODEL;
|
|
|
+ process.env.QMD_EMBED_MODEL = "hf:custom/embed-model.gguf";
|
|
|
+ try {
|
|
|
+ const llm = new LlamaCpp({}) as any;
|
|
|
+ expect(llm.embedModelUri).toBe("hf:custom/embed-model.gguf");
|
|
|
+ } finally {
|
|
|
+ if (prev === undefined) delete process.env.QMD_EMBED_MODEL;
|
|
|
+ else process.env.QMD_EMBED_MODEL = prev;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ test("config overrides env var", () => {
|
|
|
+ const prev = process.env.QMD_EMBED_MODEL;
|
|
|
+ process.env.QMD_EMBED_MODEL = "hf:env/model.gguf";
|
|
|
+ try {
|
|
|
+ const llm = new LlamaCpp({ embedModel: "hf:config/model.gguf" }) as any;
|
|
|
+ expect(llm.embedModelUri).toBe("hf:config/model.gguf");
|
|
|
+ } finally {
|
|
|
+ if (prev === undefined) delete process.env.QMD_EMBED_MODEL;
|
|
|
+ else process.env.QMD_EMBED_MODEL = prev;
|
|
|
+ }
|
|
|
+ });
|
|
|
+});
|
|
|
+
|
|
|
describe("LlamaCpp rerank deduping", () => {
|
|
|
test("deduplicates identical document texts before scoring", async () => {
|
|
|
const llm = new LlamaCpp({}) as any;
|