@vivantel/virage-reranker-llm 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.
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/reranker.d.ts +18 -0
- package/dist/reranker.d.ts.map +1 -0
- package/dist/reranker.js +62 -0
- package/dist/reranker.js.map +1 -0
- package/dist/reranker.test.d.ts +2 -0
- package/dist/reranker.test.d.ts.map +1 -0
- package/dist/reranker.test.js +127 -0
- package/dist/reranker.test.js.map +1 -0
- package/package.json +57 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { LlmReranker } from "./reranker.js";
|
|
2
|
+
export type { LlmRerankerOptions } 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,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAExE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,WAAW,EAA2B,MAAM,eAAe,CAAC;AAErE,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC5D,OAAO,IAAI,WAAW,CAAC,MAA4B,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Reranker, VectorSearchResult } from "@vivantel/virage-core";
|
|
2
|
+
export interface LlmRerankerOptions {
|
|
3
|
+
/** Anthropic model ID. Defaults to "claude-haiku-4-5". */
|
|
4
|
+
model?: string;
|
|
5
|
+
/** API key. Defaults to ANTHROPIC_API_KEY env var. */
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
/** Number of results to return after re-ranking. Defaults to 5. */
|
|
8
|
+
topK?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class LlmReranker implements Reranker {
|
|
11
|
+
readonly name = "llm";
|
|
12
|
+
private readonly modelId;
|
|
13
|
+
private readonly defaultTopK;
|
|
14
|
+
private readonly client;
|
|
15
|
+
constructor(options?: LlmRerankerOptions);
|
|
16
|
+
rerank(query: string, candidates: VectorSearchResult[], topK?: number): Promise<VectorSearchResult[]>;
|
|
17
|
+
}
|
|
18
|
+
//# 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;AAG1E,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAcD,qBAAa,WAAY,YAAW,QAAQ;IAC1C,QAAQ,CAAC,IAAI,SAAS;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;gBAEvB,OAAO,GAAE,kBAAuB;IAMtC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,kBAAkB,EAAE,EAChC,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,EAAE,CAAC;CA6CjC"}
|
package/dist/reranker.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
const RANK_PROMPT = (query, docs) => `You are a relevance ranking assistant. Given the query and a list of document excerpts numbered 0 to ${docs.length - 1}, return a JSON array of indices in order from most relevant to least relevant.
|
|
3
|
+
|
|
4
|
+
Query: ${query}
|
|
5
|
+
|
|
6
|
+
Documents:
|
|
7
|
+
${docs.map((d, i) => `[${i}] ${d.slice(0, 300)}`).join("\n\n")}
|
|
8
|
+
|
|
9
|
+
Respond with ONLY a JSON array of indices, e.g. [2, 0, 1]. No explanation.`;
|
|
10
|
+
export class LlmReranker {
|
|
11
|
+
name = "llm";
|
|
12
|
+
modelId;
|
|
13
|
+
defaultTopK;
|
|
14
|
+
client;
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
this.modelId = options.model ?? "claude-haiku-4-5";
|
|
17
|
+
this.defaultTopK = options.topK ?? 5;
|
|
18
|
+
this.client = new Anthropic({ apiKey: options.apiKey });
|
|
19
|
+
}
|
|
20
|
+
async rerank(query, candidates, topK) {
|
|
21
|
+
if (candidates.length === 0)
|
|
22
|
+
return [];
|
|
23
|
+
const k = topK ?? this.defaultTopK;
|
|
24
|
+
let indices;
|
|
25
|
+
try {
|
|
26
|
+
const message = await this.client.messages.create({
|
|
27
|
+
model: this.modelId,
|
|
28
|
+
max_tokens: 256,
|
|
29
|
+
messages: [
|
|
30
|
+
{
|
|
31
|
+
role: "user",
|
|
32
|
+
content: RANK_PROMPT(query, candidates.map((c) => c.content)),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
});
|
|
36
|
+
const text = message.content[0]?.type === "text" ? message.content[0].text : "[]";
|
|
37
|
+
const match = text.match(/\[[\d,\s]+\]/);
|
|
38
|
+
indices = match ? JSON.parse(match[0]) : [];
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Fall back to original order on error
|
|
42
|
+
return candidates.slice(0, k);
|
|
43
|
+
}
|
|
44
|
+
// Build reranked list: LLM-ordered first, then any remaining not mentioned
|
|
45
|
+
const seen = new Set();
|
|
46
|
+
const reranked = [];
|
|
47
|
+
for (const idx of indices) {
|
|
48
|
+
if (idx >= 0 && idx < candidates.length && !seen.has(idx)) {
|
|
49
|
+
const score = 1 - reranked.length / candidates.length;
|
|
50
|
+
reranked.push({ ...candidates[idx], similarity: score });
|
|
51
|
+
seen.add(idx);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
55
|
+
if (!seen.has(i)) {
|
|
56
|
+
reranked.push(candidates[i]);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return reranked.slice(0, k);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=reranker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAW1C,MAAM,WAAW,GAAG,CAClB,KAAa,EACb,IAAc,EACd,EAAE,CAAC,wGAAwG,IAAI,CAAC,MAAM,GAAG,CAAC;;SAEnH,KAAK;;;EAGZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;2EAEa,CAAC;AAE5E,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,KAAK,CAAC;IAEL,OAAO,CAAS;IAChB,WAAW,CAAS;IACpB,MAAM,CAAY;IAEnC,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,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,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChD,KAAK,EAAE,IAAI,CAAC,OAAO;gBACnB,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,WAAW,CAClB,KAAK,EACL,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACjC;qBACF;iBACF;aACF,CAAC,CAAC;YACH,MAAM,IAAI,GACR,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACzC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;YACvC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,2EAA2E;QAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.test.d.ts","sourceRoot":"","sources":["../src/reranker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { LlmReranker } from "./reranker.js";
|
|
3
|
+
import { createReranker } from "./index.js";
|
|
4
|
+
const mockCreate = vi.fn();
|
|
5
|
+
vi.mock("@anthropic-ai/sdk", () => ({
|
|
6
|
+
default: vi.fn().mockImplementation(function () {
|
|
7
|
+
return { messages: { create: mockCreate } };
|
|
8
|
+
}),
|
|
9
|
+
}));
|
|
10
|
+
function makeCandidate(id, content, similarity = 0.5) {
|
|
11
|
+
return { id, content, similarity, metadata: {} };
|
|
12
|
+
}
|
|
13
|
+
function mockLlmResponse(indices) {
|
|
14
|
+
mockCreate.mockResolvedValue({
|
|
15
|
+
content: [{ type: "text", text: JSON.stringify(indices) }],
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
describe("LlmReranker", () => {
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
mockCreate.mockReset();
|
|
21
|
+
});
|
|
22
|
+
it("returns empty array immediately when no candidates given", async () => {
|
|
23
|
+
const reranker = new LlmReranker();
|
|
24
|
+
const result = await reranker.rerank("query", []);
|
|
25
|
+
expect(result).toEqual([]);
|
|
26
|
+
expect(mockCreate).not.toHaveBeenCalled();
|
|
27
|
+
});
|
|
28
|
+
it("reorders candidates according to LLM-returned indices", async () => {
|
|
29
|
+
const reranker = new LlmReranker();
|
|
30
|
+
const candidates = [
|
|
31
|
+
makeCandidate("a", "least relevant"),
|
|
32
|
+
makeCandidate("b", "most relevant"),
|
|
33
|
+
makeCandidate("c", "middle"),
|
|
34
|
+
];
|
|
35
|
+
mockLlmResponse([1, 2, 0]);
|
|
36
|
+
const result = await reranker.rerank("query", candidates);
|
|
37
|
+
expect(result.map((r) => r.id)).toEqual(["b", "c", "a"]);
|
|
38
|
+
});
|
|
39
|
+
it("assigns descending similarity scores to reranked results", async () => {
|
|
40
|
+
const reranker = new LlmReranker();
|
|
41
|
+
const candidates = [
|
|
42
|
+
makeCandidate("a", "a"),
|
|
43
|
+
makeCandidate("b", "b"),
|
|
44
|
+
makeCandidate("c", "c"),
|
|
45
|
+
];
|
|
46
|
+
mockLlmResponse([2, 0, 1]);
|
|
47
|
+
const result = await reranker.rerank("query", candidates);
|
|
48
|
+
expect(result[0].similarity).toBeGreaterThan(result[1].similarity);
|
|
49
|
+
expect(result[1].similarity).toBeGreaterThan(result[2].similarity);
|
|
50
|
+
});
|
|
51
|
+
it("respects topK from constructor", async () => {
|
|
52
|
+
const reranker = new LlmReranker({ topK: 2 });
|
|
53
|
+
const candidates = [
|
|
54
|
+
makeCandidate("a", "a"),
|
|
55
|
+
makeCandidate("b", "b"),
|
|
56
|
+
makeCandidate("c", "c"),
|
|
57
|
+
];
|
|
58
|
+
mockLlmResponse([0, 1, 2]);
|
|
59
|
+
const result = await reranker.rerank("query", candidates);
|
|
60
|
+
expect(result).toHaveLength(2);
|
|
61
|
+
});
|
|
62
|
+
it("respects topK override per call", async () => {
|
|
63
|
+
const reranker = new LlmReranker({ topK: 10 });
|
|
64
|
+
const candidates = [
|
|
65
|
+
makeCandidate("a", "a"),
|
|
66
|
+
makeCandidate("b", "b"),
|
|
67
|
+
makeCandidate("c", "c"),
|
|
68
|
+
];
|
|
69
|
+
mockLlmResponse([0, 1, 2]);
|
|
70
|
+
const result = await reranker.rerank("query", candidates, 1);
|
|
71
|
+
expect(result).toHaveLength(1);
|
|
72
|
+
});
|
|
73
|
+
it("falls back to original order when API throws", async () => {
|
|
74
|
+
const reranker = new LlmReranker();
|
|
75
|
+
const candidates = [makeCandidate("a", "a"), makeCandidate("b", "b")];
|
|
76
|
+
mockCreate.mockRejectedValue(new Error("API error"));
|
|
77
|
+
const result = await reranker.rerank("query", candidates);
|
|
78
|
+
expect(result.map((r) => r.id)).toEqual(["a", "b"]);
|
|
79
|
+
});
|
|
80
|
+
it("falls back to original order when LLM returns no JSON array", async () => {
|
|
81
|
+
const reranker = new LlmReranker();
|
|
82
|
+
const candidates = [makeCandidate("a", "a"), makeCandidate("b", "b")];
|
|
83
|
+
mockCreate.mockResolvedValue({
|
|
84
|
+
content: [{ type: "text", text: "I cannot rank these." }],
|
|
85
|
+
});
|
|
86
|
+
const result = await reranker.rerank("query", candidates);
|
|
87
|
+
expect(result.map((r) => r.id)).toEqual(["a", "b"]);
|
|
88
|
+
});
|
|
89
|
+
it("ignores out-of-range indices from LLM", async () => {
|
|
90
|
+
const reranker = new LlmReranker();
|
|
91
|
+
const candidates = [makeCandidate("a", "a"), makeCandidate("b", "b")];
|
|
92
|
+
mockLlmResponse([99, 0, 1]);
|
|
93
|
+
const result = await reranker.rerank("query", candidates);
|
|
94
|
+
expect(result.map((r) => r.id)).toEqual(["a", "b"]);
|
|
95
|
+
});
|
|
96
|
+
it("ignores duplicate indices from LLM", async () => {
|
|
97
|
+
const reranker = new LlmReranker();
|
|
98
|
+
const candidates = [makeCandidate("a", "a"), makeCandidate("b", "b")];
|
|
99
|
+
mockLlmResponse([0, 0, 1]);
|
|
100
|
+
const result = await reranker.rerank("query", candidates);
|
|
101
|
+
expect(result.map((r) => r.id)).toEqual(["a", "b"]);
|
|
102
|
+
expect(result).toHaveLength(2);
|
|
103
|
+
});
|
|
104
|
+
it("appends candidates not mentioned by LLM at the end", async () => {
|
|
105
|
+
const reranker = new LlmReranker({ topK: 10 });
|
|
106
|
+
const candidates = [
|
|
107
|
+
makeCandidate("a", "a"),
|
|
108
|
+
makeCandidate("b", "b"),
|
|
109
|
+
makeCandidate("c", "c"),
|
|
110
|
+
];
|
|
111
|
+
mockLlmResponse([2]); // only mentions index 2
|
|
112
|
+
const result = await reranker.rerank("query", candidates);
|
|
113
|
+
expect(result[0].id).toBe("c");
|
|
114
|
+
expect(result.map((r) => r.id)).toContain("a");
|
|
115
|
+
expect(result.map((r) => r.id)).toContain("b");
|
|
116
|
+
});
|
|
117
|
+
it("exposes name 'llm'", () => {
|
|
118
|
+
expect(new LlmReranker().name).toBe("llm");
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("createReranker factory", () => {
|
|
122
|
+
it("returns an LlmReranker instance", () => {
|
|
123
|
+
const reranker = createReranker({});
|
|
124
|
+
expect(reranker).toBeInstanceOf(LlmReranker);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# 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-llm",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "LLM-based re-ranker for Virage using the Anthropic API",
|
|
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
|
+
"llm",
|
|
32
|
+
"anthropic",
|
|
33
|
+
"claude"
|
|
34
|
+
],
|
|
35
|
+
"author": "Vivantel",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/vivantel/virage",
|
|
40
|
+
"directory": "packages/virage-reranker-llm"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@anthropic-ai/sdk": "^0.55.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
|
+
}
|