@vivantel/virage-reranker-cross-encoder 0.1.3

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.
@@ -0,0 +1,5 @@
1
+ export { CrossEncoderReranker } from "./reranker.js";
2
+ export type { CrossEncoderRerankerOptions } from "./reranker.js";
3
+ import type { Reranker } from "@vivantel/virage-core";
4
+ export declare function createReranker(config: Record<string, unknown>): Reranker;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAExE"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { CrossEncoderReranker } from "./reranker.js";
2
+ import { CrossEncoderReranker, } from "./reranker.js";
3
+ export function createReranker(config) {
4
+ return new CrossEncoderReranker(config);
5
+ }
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIrD,OAAO,EACL,oBAAoB,GAErB,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC5D,OAAO,IAAI,oBAAoB,CAAC,MAAqC,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Reranker, VectorSearchResult } from "@vivantel/virage-core";
2
+ export interface CrossEncoderRerankerOptions {
3
+ /** HuggingFace model ID. Defaults to "Xenova/ms-marco-MiniLM-L-6-v2". */
4
+ model?: string;
5
+ /** Number of results to return after re-ranking. Defaults to 5. */
6
+ topK?: number;
7
+ }
8
+ export declare class CrossEncoderReranker implements Reranker {
9
+ readonly name = "cross-encoder";
10
+ private readonly modelId;
11
+ private readonly defaultTopK;
12
+ private _pipeline;
13
+ constructor(options?: CrossEncoderRerankerOptions);
14
+ private getPipeline;
15
+ rerank(query: string, candidates: VectorSearchResult[], topK?: number): Promise<VectorSearchResult[]>;
16
+ }
17
+ //# sourceMappingURL=reranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,oBAAqB,YAAW,QAAQ;IACnD,QAAQ,CAAC,IAAI,mBAAmB;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,SAAS,CAAa;gBAElB,OAAO,GAAE,2BAAgC;YAMvC,WAAW;IASnB,MAAM,CACV,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,kBAAkB,EAAE,EAChC,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAsBjC"}
@@ -0,0 +1,42 @@
1
+ export class CrossEncoderReranker {
2
+ name = "cross-encoder";
3
+ modelId;
4
+ defaultTopK;
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ _pipeline = null;
7
+ constructor(options = {}) {
8
+ this.modelId = options.model ?? "Xenova/ms-marco-MiniLM-L-6-v2";
9
+ this.defaultTopK = options.topK ?? 5;
10
+ }
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ async getPipeline() {
13
+ if (!this._pipeline) {
14
+ const { pipeline } = await import("@huggingface/transformers");
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ this._pipeline = await pipeline("text-ranking", this.modelId);
17
+ }
18
+ return this._pipeline;
19
+ }
20
+ async rerank(query, candidates, topK) {
21
+ if (candidates.length === 0)
22
+ return [];
23
+ const k = topK ?? this.defaultTopK;
24
+ const pipe = await this.getPipeline();
25
+ const inputs = candidates.map((c) => ({
26
+ text: query,
27
+ text_pair: c.content,
28
+ }));
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ const outputs = await pipe(inputs, { top_k: null });
31
+ return candidates
32
+ .map((c, i) => ({
33
+ ...c,
34
+ similarity: Array.isArray(outputs)
35
+ ? (outputs[i]?.score ?? c.similarity)
36
+ : c.similarity,
37
+ }))
38
+ .sort((a, b) => b.similarity - a.similarity)
39
+ .slice(0, k);
40
+ }
41
+ }
42
+ //# sourceMappingURL=reranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.js","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,eAAe,CAAC;IAEf,OAAO,CAAS;IAChB,WAAW,CAAS;IACrC,8DAA8D;IACtD,SAAS,GAAQ,IAAI,CAAC;IAE9B,YAAY,UAAuC,EAAE;QACnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,+BAA+B,CAAC;QAChE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,8DAA8D;IACtD,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC/D,8DAA8D;YAC9D,IAAI,CAAC,SAAS,GAAG,MAAM,QAAQ,CAAC,cAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,UAAgC,EAChC,IAAa;QAEb,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QAEnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,CAAC,CAAC,OAAO;SACrB,CAAC,CAAC,CAAC;QACJ,8DAA8D;QAC9D,MAAM,OAAO,GAAU,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,OAAO,UAAU;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,GAAG,CAAC;YACJ,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChC,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAA4B,IAAI,CAAC,CAAC,UAAU,CAAC;gBAC7D,CAAC,CAAC,CAAC,CAAC,UAAU;SACjB,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;aAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reranker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.test.d.ts","sourceRoot":"","sources":["../src/reranker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { CrossEncoderReranker } from "./reranker.js";
3
+ import { createReranker } from "./index.js";
4
+ const mockPipelineFn = vi.fn();
5
+ const mockPipelineFactory = vi.fn().mockResolvedValue(mockPipelineFn);
6
+ vi.mock("@huggingface/transformers", () => ({
7
+ pipeline: mockPipelineFactory,
8
+ }));
9
+ function makeCandidate(id, content, similarity = 0.5) {
10
+ return { id, content, similarity, metadata: {} };
11
+ }
12
+ describe("CrossEncoderReranker", () => {
13
+ beforeEach(() => {
14
+ mockPipelineFn.mockReset();
15
+ mockPipelineFactory.mockClear();
16
+ });
17
+ it("returns empty array immediately when no candidates given", async () => {
18
+ const reranker = new CrossEncoderReranker();
19
+ const result = await reranker.rerank("some query", []);
20
+ expect(result).toEqual([]);
21
+ expect(mockPipelineFn).not.toHaveBeenCalled();
22
+ });
23
+ it("reorders candidates by pipeline score descending", async () => {
24
+ const reranker = new CrossEncoderReranker();
25
+ const candidates = [
26
+ makeCandidate("a", "low relevance", 0.8),
27
+ makeCandidate("b", "high relevance", 0.3),
28
+ makeCandidate("c", "medium relevance", 0.5),
29
+ ];
30
+ mockPipelineFn.mockResolvedValue([
31
+ { score: 0.1 },
32
+ { score: 0.9 },
33
+ { score: 0.5 },
34
+ ]);
35
+ const result = await reranker.rerank("query", candidates);
36
+ expect(result.map((r) => r.id)).toEqual(["b", "c", "a"]);
37
+ });
38
+ it("replaces similarity with pipeline score", async () => {
39
+ const reranker = new CrossEncoderReranker();
40
+ const candidates = [makeCandidate("x", "some content", 0.5)];
41
+ mockPipelineFn.mockResolvedValue([{ score: 0.77 }]);
42
+ const result = await reranker.rerank("query", candidates);
43
+ expect(result[0].similarity).toBe(0.77);
44
+ });
45
+ it("respects topK from constructor", async () => {
46
+ const reranker = new CrossEncoderReranker({ topK: 2 });
47
+ const candidates = [
48
+ makeCandidate("a", "a"),
49
+ makeCandidate("b", "b"),
50
+ makeCandidate("c", "c"),
51
+ ];
52
+ mockPipelineFn.mockResolvedValue([
53
+ { score: 0.9 },
54
+ { score: 0.8 },
55
+ { score: 0.7 },
56
+ ]);
57
+ const result = await reranker.rerank("query", candidates);
58
+ expect(result).toHaveLength(2);
59
+ });
60
+ it("respects topK override per call", async () => {
61
+ const reranker = new CrossEncoderReranker({ topK: 10 });
62
+ const candidates = [
63
+ makeCandidate("a", "a"),
64
+ makeCandidate("b", "b"),
65
+ makeCandidate("c", "c"),
66
+ ];
67
+ mockPipelineFn.mockResolvedValue([
68
+ { score: 0.9 },
69
+ { score: 0.8 },
70
+ { score: 0.7 },
71
+ ]);
72
+ const result = await reranker.rerank("query", candidates, 1);
73
+ expect(result).toHaveLength(1);
74
+ });
75
+ it("lazily initialises and caches the pipeline across calls", async () => {
76
+ const reranker = new CrossEncoderReranker();
77
+ mockPipelineFn.mockResolvedValue([{ score: 0.5 }]);
78
+ await reranker.rerank("q1", [makeCandidate("a", "text")]);
79
+ await reranker.rerank("q2", [makeCandidate("b", "text")]);
80
+ expect(mockPipelineFactory).toHaveBeenCalledTimes(1);
81
+ });
82
+ it("forwards custom model to the pipeline factory", async () => {
83
+ const reranker = new CrossEncoderReranker({ model: "custom/model-v1" });
84
+ mockPipelineFn.mockResolvedValue([{ score: 0.5 }]);
85
+ await reranker.rerank("q", [makeCandidate("a", "text")]);
86
+ expect(mockPipelineFactory).toHaveBeenCalledWith("text-ranking", "custom/model-v1");
87
+ });
88
+ it("falls back to original similarity when pipeline output is not an array", async () => {
89
+ const reranker = new CrossEncoderReranker();
90
+ const candidates = [makeCandidate("a", "content", 0.42)];
91
+ mockPipelineFn.mockResolvedValue("unexpected non-array");
92
+ const result = await reranker.rerank("q", candidates);
93
+ expect(result[0].similarity).toBe(0.42);
94
+ });
95
+ it("exposes name 'cross-encoder'", () => {
96
+ expect(new CrossEncoderReranker().name).toBe("cross-encoder");
97
+ });
98
+ });
99
+ describe("createReranker factory", () => {
100
+ it("returns a CrossEncoderReranker", () => {
101
+ const reranker = createReranker({});
102
+ expect(reranker).toBeInstanceOf(CrossEncoderReranker);
103
+ });
104
+ it("forwards config options", () => {
105
+ const reranker = createReranker({ topK: 3 });
106
+ expect(reranker.name).toBe("cross-encoder");
107
+ });
108
+ });
109
+ //# sourceMappingURL=reranker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.test.js","sourceRoot":"","sources":["../src/reranker.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@vivantel/virage-reranker-cross-encoder",
3
+ "version": "0.1.3",
4
+ "description": "Local cross-encoder re-ranker for Virage (ONNX, no API key required)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "sideEffects": false,
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "type-check": "tsc --noEmit",
25
+ "test": "vitest run",
26
+ "prepublishOnly": "npm run build"
27
+ },
28
+ "keywords": [
29
+ "rag",
30
+ "reranker",
31
+ "cross-encoder",
32
+ "onnx",
33
+ "local"
34
+ ],
35
+ "author": "Vivantel",
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/vivantel/virage",
40
+ "directory": "packages/virage-reranker-cross-encoder"
41
+ },
42
+ "dependencies": {
43
+ "@huggingface/transformers": "^3.0.0"
44
+ },
45
+ "peerDependencies": {
46
+ "@vivantel/virage-core": "*"
47
+ },
48
+ "devDependencies": {
49
+ "@vivantel/virage-core": "0.2.29",
50
+ "@types/node": "^25.9.3",
51
+ "typescript": "^6.0.3",
52
+ "vitest": "^4.1.9"
53
+ },
54
+ "engines": {
55
+ "node": ">=18.0.0"
56
+ }
57
+ }