@mhalder/qdrant-mcp-server 1.1.0
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/.env.example +92 -0
- package/.github/workflows/ci.yml +61 -0
- package/.github/workflows/claude-code-review.yml +57 -0
- package/.github/workflows/claude.yml +50 -0
- package/.github/workflows/release.yml +52 -0
- package/.husky/commit-msg +1 -0
- package/.husky/pre-commit +1 -0
- package/.releaserc.json +59 -0
- package/.yamlfmt +4 -0
- package/CHANGELOG.md +73 -0
- package/CONTRIBUTING.md +176 -0
- package/LICENSE +21 -0
- package/README.md +714 -0
- package/build/embeddings/base.d.ts +23 -0
- package/build/embeddings/base.d.ts.map +1 -0
- package/build/embeddings/base.js +2 -0
- package/build/embeddings/base.js.map +1 -0
- package/build/embeddings/cohere.d.ts +17 -0
- package/build/embeddings/cohere.d.ts.map +1 -0
- package/build/embeddings/cohere.js +102 -0
- package/build/embeddings/cohere.js.map +1 -0
- package/build/embeddings/cohere.test.d.ts +2 -0
- package/build/embeddings/cohere.test.d.ts.map +1 -0
- package/build/embeddings/cohere.test.js +279 -0
- package/build/embeddings/cohere.test.js.map +1 -0
- package/build/embeddings/factory.d.ts +10 -0
- package/build/embeddings/factory.d.ts.map +1 -0
- package/build/embeddings/factory.js +98 -0
- package/build/embeddings/factory.js.map +1 -0
- package/build/embeddings/factory.test.d.ts +2 -0
- package/build/embeddings/factory.test.d.ts.map +1 -0
- package/build/embeddings/factory.test.js +329 -0
- package/build/embeddings/factory.test.js.map +1 -0
- package/build/embeddings/ollama.d.ts +18 -0
- package/build/embeddings/ollama.d.ts.map +1 -0
- package/build/embeddings/ollama.js +135 -0
- package/build/embeddings/ollama.js.map +1 -0
- package/build/embeddings/ollama.test.d.ts +2 -0
- package/build/embeddings/ollama.test.d.ts.map +1 -0
- package/build/embeddings/ollama.test.js +399 -0
- package/build/embeddings/ollama.test.js.map +1 -0
- package/build/embeddings/openai.d.ts +16 -0
- package/build/embeddings/openai.d.ts.map +1 -0
- package/build/embeddings/openai.js +108 -0
- package/build/embeddings/openai.js.map +1 -0
- package/build/embeddings/openai.test.d.ts +2 -0
- package/build/embeddings/openai.test.d.ts.map +1 -0
- package/build/embeddings/openai.test.js +283 -0
- package/build/embeddings/openai.test.js.map +1 -0
- package/build/embeddings/voyage.d.ts +19 -0
- package/build/embeddings/voyage.d.ts.map +1 -0
- package/build/embeddings/voyage.js +113 -0
- package/build/embeddings/voyage.js.map +1 -0
- package/build/embeddings/voyage.test.d.ts +2 -0
- package/build/embeddings/voyage.test.d.ts.map +1 -0
- package/build/embeddings/voyage.test.js +371 -0
- package/build/embeddings/voyage.test.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +534 -0
- package/build/index.js.map +1 -0
- package/build/index.test.d.ts +2 -0
- package/build/index.test.d.ts.map +1 -0
- package/build/index.test.js +241 -0
- package/build/index.test.js.map +1 -0
- package/build/qdrant/client.d.ts +37 -0
- package/build/qdrant/client.d.ts.map +1 -0
- package/build/qdrant/client.js +142 -0
- package/build/qdrant/client.js.map +1 -0
- package/build/qdrant/client.test.d.ts +2 -0
- package/build/qdrant/client.test.d.ts.map +1 -0
- package/build/qdrant/client.test.js +340 -0
- package/build/qdrant/client.test.js.map +1 -0
- package/commitlint.config.js +25 -0
- package/docker-compose.yml +22 -0
- package/docs/test_report.md +259 -0
- package/examples/README.md +315 -0
- package/examples/basic/README.md +111 -0
- package/examples/filters/README.md +262 -0
- package/examples/knowledge-base/README.md +207 -0
- package/examples/rate-limiting/README.md +376 -0
- package/package.json +59 -0
- package/scripts/verify-providers.js +238 -0
- package/src/embeddings/base.ts +25 -0
- package/src/embeddings/cohere.test.ts +408 -0
- package/src/embeddings/cohere.ts +152 -0
- package/src/embeddings/factory.test.ts +453 -0
- package/src/embeddings/factory.ts +163 -0
- package/src/embeddings/ollama.test.ts +543 -0
- package/src/embeddings/ollama.ts +196 -0
- package/src/embeddings/openai.test.ts +402 -0
- package/src/embeddings/openai.ts +158 -0
- package/src/embeddings/voyage.test.ts +520 -0
- package/src/embeddings/voyage.ts +168 -0
- package/src/index.test.ts +304 -0
- package/src/index.ts +614 -0
- package/src/qdrant/client.test.ts +456 -0
- package/src/qdrant/client.ts +195 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +37 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { EmbeddingProviderFactory } from "./factory.js";
|
|
3
|
+
import { OpenAIEmbeddings } from "./openai.js";
|
|
4
|
+
import { CohereEmbeddings } from "./cohere.js";
|
|
5
|
+
import { VoyageEmbeddings } from "./voyage.js";
|
|
6
|
+
import { OllamaEmbeddings } from "./ollama.js";
|
|
7
|
+
describe("EmbeddingProviderFactory", () => {
|
|
8
|
+
let originalEnv;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
// Save original environment
|
|
11
|
+
originalEnv = { ...process.env };
|
|
12
|
+
});
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
// Restore original environment
|
|
15
|
+
process.env = originalEnv;
|
|
16
|
+
});
|
|
17
|
+
describe("create", () => {
|
|
18
|
+
describe("Unknown provider", () => {
|
|
19
|
+
it("should throw error for unknown provider", () => {
|
|
20
|
+
expect(() => EmbeddingProviderFactory.create({
|
|
21
|
+
provider: "unknown",
|
|
22
|
+
})).toThrow("Unknown embedding provider: unknown");
|
|
23
|
+
});
|
|
24
|
+
it("should list supported providers in error message", () => {
|
|
25
|
+
expect(() => EmbeddingProviderFactory.create({
|
|
26
|
+
provider: "invalid",
|
|
27
|
+
})).toThrow("openai, cohere, voyage, ollama");
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe("OpenAI provider", () => {
|
|
31
|
+
it("should throw error if API key is missing", () => {
|
|
32
|
+
expect(() => EmbeddingProviderFactory.create({
|
|
33
|
+
provider: "openai",
|
|
34
|
+
})).toThrow("API key is required for OpenAI provider");
|
|
35
|
+
});
|
|
36
|
+
it("should create OpenAI provider with API key", () => {
|
|
37
|
+
const provider = EmbeddingProviderFactory.create({
|
|
38
|
+
provider: "openai",
|
|
39
|
+
apiKey: "test-key",
|
|
40
|
+
});
|
|
41
|
+
expect(provider).toBeInstanceOf(OpenAIEmbeddings);
|
|
42
|
+
expect(provider.getModel()).toBe("text-embedding-3-small");
|
|
43
|
+
expect(provider.getDimensions()).toBe(1536);
|
|
44
|
+
});
|
|
45
|
+
it("should use custom model", () => {
|
|
46
|
+
const provider = EmbeddingProviderFactory.create({
|
|
47
|
+
provider: "openai",
|
|
48
|
+
apiKey: "test-key",
|
|
49
|
+
model: "text-embedding-3-large",
|
|
50
|
+
});
|
|
51
|
+
expect(provider.getModel()).toBe("text-embedding-3-large");
|
|
52
|
+
expect(provider.getDimensions()).toBe(3072);
|
|
53
|
+
});
|
|
54
|
+
it("should use custom dimensions", () => {
|
|
55
|
+
const provider = EmbeddingProviderFactory.create({
|
|
56
|
+
provider: "openai",
|
|
57
|
+
apiKey: "test-key",
|
|
58
|
+
dimensions: 512,
|
|
59
|
+
});
|
|
60
|
+
expect(provider.getDimensions()).toBe(512);
|
|
61
|
+
});
|
|
62
|
+
it("should pass rate limit config", () => {
|
|
63
|
+
const provider = EmbeddingProviderFactory.create({
|
|
64
|
+
provider: "openai",
|
|
65
|
+
apiKey: "test-key",
|
|
66
|
+
rateLimitConfig: {
|
|
67
|
+
maxRequestsPerMinute: 1000,
|
|
68
|
+
retryAttempts: 5,
|
|
69
|
+
retryDelayMs: 2000,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
expect(provider).toBeInstanceOf(OpenAIEmbeddings);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe("Cohere provider", () => {
|
|
76
|
+
it("should throw error if API key is missing", () => {
|
|
77
|
+
expect(() => EmbeddingProviderFactory.create({
|
|
78
|
+
provider: "cohere",
|
|
79
|
+
})).toThrow("API key is required for Cohere provider");
|
|
80
|
+
});
|
|
81
|
+
it("should create Cohere provider with API key", () => {
|
|
82
|
+
const provider = EmbeddingProviderFactory.create({
|
|
83
|
+
provider: "cohere",
|
|
84
|
+
apiKey: "test-key",
|
|
85
|
+
});
|
|
86
|
+
expect(provider).toBeInstanceOf(CohereEmbeddings);
|
|
87
|
+
expect(provider.getModel()).toBe("embed-english-v3.0");
|
|
88
|
+
expect(provider.getDimensions()).toBe(1024);
|
|
89
|
+
});
|
|
90
|
+
it("should use custom model", () => {
|
|
91
|
+
const provider = EmbeddingProviderFactory.create({
|
|
92
|
+
provider: "cohere",
|
|
93
|
+
apiKey: "test-key",
|
|
94
|
+
model: "embed-multilingual-v3.0",
|
|
95
|
+
});
|
|
96
|
+
expect(provider.getModel()).toBe("embed-multilingual-v3.0");
|
|
97
|
+
});
|
|
98
|
+
it("should use custom dimensions", () => {
|
|
99
|
+
const provider = EmbeddingProviderFactory.create({
|
|
100
|
+
provider: "cohere",
|
|
101
|
+
apiKey: "test-key",
|
|
102
|
+
dimensions: 384,
|
|
103
|
+
});
|
|
104
|
+
expect(provider.getDimensions()).toBe(384);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("Voyage provider", () => {
|
|
108
|
+
it("should throw error if API key is missing", () => {
|
|
109
|
+
expect(() => EmbeddingProviderFactory.create({
|
|
110
|
+
provider: "voyage",
|
|
111
|
+
})).toThrow("API key is required for Voyage AI provider");
|
|
112
|
+
});
|
|
113
|
+
it("should create Voyage provider with API key", () => {
|
|
114
|
+
const provider = EmbeddingProviderFactory.create({
|
|
115
|
+
provider: "voyage",
|
|
116
|
+
apiKey: "test-key",
|
|
117
|
+
});
|
|
118
|
+
expect(provider).toBeInstanceOf(VoyageEmbeddings);
|
|
119
|
+
expect(provider.getModel()).toBe("voyage-2");
|
|
120
|
+
expect(provider.getDimensions()).toBe(1024);
|
|
121
|
+
});
|
|
122
|
+
it("should use custom model", () => {
|
|
123
|
+
const provider = EmbeddingProviderFactory.create({
|
|
124
|
+
provider: "voyage",
|
|
125
|
+
apiKey: "test-key",
|
|
126
|
+
model: "voyage-large-2",
|
|
127
|
+
});
|
|
128
|
+
expect(provider.getModel()).toBe("voyage-large-2");
|
|
129
|
+
expect(provider.getDimensions()).toBe(1536);
|
|
130
|
+
});
|
|
131
|
+
it("should use default base URL", () => {
|
|
132
|
+
const provider = EmbeddingProviderFactory.create({
|
|
133
|
+
provider: "voyage",
|
|
134
|
+
apiKey: "test-key",
|
|
135
|
+
});
|
|
136
|
+
expect(provider).toBeInstanceOf(VoyageEmbeddings);
|
|
137
|
+
});
|
|
138
|
+
it("should use custom base URL", () => {
|
|
139
|
+
const provider = EmbeddingProviderFactory.create({
|
|
140
|
+
provider: "voyage",
|
|
141
|
+
apiKey: "test-key",
|
|
142
|
+
baseUrl: "https://custom.voyageai.com/v1",
|
|
143
|
+
});
|
|
144
|
+
expect(provider).toBeInstanceOf(VoyageEmbeddings);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
describe("Ollama provider", () => {
|
|
148
|
+
it("should not require API key", () => {
|
|
149
|
+
const provider = EmbeddingProviderFactory.create({
|
|
150
|
+
provider: "ollama",
|
|
151
|
+
});
|
|
152
|
+
expect(provider).toBeInstanceOf(OllamaEmbeddings);
|
|
153
|
+
expect(provider.getModel()).toBe("nomic-embed-text");
|
|
154
|
+
expect(provider.getDimensions()).toBe(768);
|
|
155
|
+
});
|
|
156
|
+
it("should use custom model", () => {
|
|
157
|
+
const provider = EmbeddingProviderFactory.create({
|
|
158
|
+
provider: "ollama",
|
|
159
|
+
model: "mxbai-embed-large",
|
|
160
|
+
});
|
|
161
|
+
expect(provider.getModel()).toBe("mxbai-embed-large");
|
|
162
|
+
expect(provider.getDimensions()).toBe(1024);
|
|
163
|
+
});
|
|
164
|
+
it("should use default base URL", () => {
|
|
165
|
+
const provider = EmbeddingProviderFactory.create({
|
|
166
|
+
provider: "ollama",
|
|
167
|
+
});
|
|
168
|
+
expect(provider).toBeInstanceOf(OllamaEmbeddings);
|
|
169
|
+
});
|
|
170
|
+
it("should use custom base URL", () => {
|
|
171
|
+
const provider = EmbeddingProviderFactory.create({
|
|
172
|
+
provider: "ollama",
|
|
173
|
+
baseUrl: "http://custom:11434",
|
|
174
|
+
});
|
|
175
|
+
expect(provider).toBeInstanceOf(OllamaEmbeddings);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
describe("createFromEnv", () => {
|
|
180
|
+
it("should default to Ollama provider", () => {
|
|
181
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
182
|
+
expect(provider).toBeInstanceOf(OllamaEmbeddings);
|
|
183
|
+
});
|
|
184
|
+
it("should create OpenAI provider from environment", () => {
|
|
185
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
186
|
+
process.env.OPENAI_API_KEY = "test-openai-key";
|
|
187
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
188
|
+
expect(provider).toBeInstanceOf(OpenAIEmbeddings);
|
|
189
|
+
});
|
|
190
|
+
it("should create Cohere provider from environment", () => {
|
|
191
|
+
process.env.EMBEDDING_PROVIDER = "cohere";
|
|
192
|
+
process.env.COHERE_API_KEY = "test-cohere-key";
|
|
193
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
194
|
+
expect(provider).toBeInstanceOf(CohereEmbeddings);
|
|
195
|
+
});
|
|
196
|
+
it("should create Voyage provider from environment", () => {
|
|
197
|
+
process.env.EMBEDDING_PROVIDER = "voyage";
|
|
198
|
+
process.env.VOYAGE_API_KEY = "test-voyage-key";
|
|
199
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
200
|
+
expect(provider).toBeInstanceOf(VoyageEmbeddings);
|
|
201
|
+
});
|
|
202
|
+
it("should create Ollama provider from environment", () => {
|
|
203
|
+
process.env.EMBEDDING_PROVIDER = "ollama";
|
|
204
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
205
|
+
expect(provider).toBeInstanceOf(OllamaEmbeddings);
|
|
206
|
+
});
|
|
207
|
+
it("should be case insensitive for provider name", () => {
|
|
208
|
+
process.env.EMBEDDING_PROVIDER = "OpenAI";
|
|
209
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
210
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
211
|
+
expect(provider).toBeInstanceOf(OpenAIEmbeddings);
|
|
212
|
+
});
|
|
213
|
+
it("should use custom model from environment", () => {
|
|
214
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
215
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
216
|
+
process.env.EMBEDDING_MODEL = "text-embedding-3-large";
|
|
217
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
218
|
+
expect(provider.getModel()).toBe("text-embedding-3-large");
|
|
219
|
+
});
|
|
220
|
+
it("should use custom dimensions from environment", () => {
|
|
221
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
222
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
223
|
+
process.env.EMBEDDING_DIMENSIONS = "512";
|
|
224
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
225
|
+
expect(provider.getDimensions()).toBe(512);
|
|
226
|
+
});
|
|
227
|
+
it("should use custom base URL from environment", () => {
|
|
228
|
+
process.env.EMBEDDING_PROVIDER = "voyage";
|
|
229
|
+
process.env.VOYAGE_API_KEY = "test-key";
|
|
230
|
+
process.env.EMBEDDING_BASE_URL = "https://custom.voyage.com";
|
|
231
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
232
|
+
expect(provider).toBeInstanceOf(VoyageEmbeddings);
|
|
233
|
+
});
|
|
234
|
+
it("should use rate limit config from environment", () => {
|
|
235
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
236
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
237
|
+
process.env.EMBEDDING_MAX_REQUESTS_PER_MINUTE = "1000";
|
|
238
|
+
process.env.EMBEDDING_RETRY_ATTEMPTS = "5";
|
|
239
|
+
process.env.EMBEDDING_RETRY_DELAY = "2000";
|
|
240
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
241
|
+
expect(provider).toBeInstanceOf(OpenAIEmbeddings);
|
|
242
|
+
});
|
|
243
|
+
it("should select correct API key based on provider", () => {
|
|
244
|
+
process.env.EMBEDDING_PROVIDER = "cohere";
|
|
245
|
+
process.env.OPENAI_API_KEY = "openai-key";
|
|
246
|
+
process.env.COHERE_API_KEY = "cohere-key";
|
|
247
|
+
process.env.VOYAGE_API_KEY = "voyage-key";
|
|
248
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
249
|
+
expect(provider).toBeInstanceOf(CohereEmbeddings);
|
|
250
|
+
});
|
|
251
|
+
it("should handle Ollama without API key", () => {
|
|
252
|
+
process.env.EMBEDDING_PROVIDER = "ollama";
|
|
253
|
+
process.env.OPENAI_API_KEY = "openai-key"; // Should not use this
|
|
254
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
255
|
+
expect(provider).toBeInstanceOf(OllamaEmbeddings);
|
|
256
|
+
});
|
|
257
|
+
describe("Environment variable validation", () => {
|
|
258
|
+
it("should throw error for invalid EMBEDDING_DIMENSIONS (NaN)", () => {
|
|
259
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
260
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
261
|
+
process.env.EMBEDDING_DIMENSIONS = "not-a-number";
|
|
262
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_DIMENSIONS: must be a positive integer, got "not-a-number"');
|
|
263
|
+
});
|
|
264
|
+
it("should throw error for invalid EMBEDDING_DIMENSIONS (negative)", () => {
|
|
265
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
266
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
267
|
+
process.env.EMBEDDING_DIMENSIONS = "-100";
|
|
268
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_DIMENSIONS: must be a positive integer, got "-100"');
|
|
269
|
+
});
|
|
270
|
+
it("should throw error for invalid EMBEDDING_DIMENSIONS (zero)", () => {
|
|
271
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
272
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
273
|
+
process.env.EMBEDDING_DIMENSIONS = "0";
|
|
274
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_DIMENSIONS: must be a positive integer, got "0"');
|
|
275
|
+
});
|
|
276
|
+
it("should throw error for invalid EMBEDDING_MAX_REQUESTS_PER_MINUTE (NaN)", () => {
|
|
277
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
278
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
279
|
+
process.env.EMBEDDING_MAX_REQUESTS_PER_MINUTE = "invalid";
|
|
280
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_MAX_REQUESTS_PER_MINUTE: must be a positive integer, got "invalid"');
|
|
281
|
+
});
|
|
282
|
+
it("should throw error for invalid EMBEDDING_MAX_REQUESTS_PER_MINUTE (negative)", () => {
|
|
283
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
284
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
285
|
+
process.env.EMBEDDING_MAX_REQUESTS_PER_MINUTE = "-50";
|
|
286
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_MAX_REQUESTS_PER_MINUTE: must be a positive integer, got "-50"');
|
|
287
|
+
});
|
|
288
|
+
it("should throw error for invalid EMBEDDING_RETRY_ATTEMPTS (NaN)", () => {
|
|
289
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
290
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
291
|
+
process.env.EMBEDDING_RETRY_ATTEMPTS = "abc";
|
|
292
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_RETRY_ATTEMPTS: must be a non-negative integer, got "abc"');
|
|
293
|
+
});
|
|
294
|
+
it("should throw error for invalid EMBEDDING_RETRY_ATTEMPTS (negative)", () => {
|
|
295
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
296
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
297
|
+
process.env.EMBEDDING_RETRY_ATTEMPTS = "-5";
|
|
298
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_RETRY_ATTEMPTS: must be a non-negative integer, got "-5"');
|
|
299
|
+
});
|
|
300
|
+
it("should throw error for invalid EMBEDDING_RETRY_DELAY (NaN)", () => {
|
|
301
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
302
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
303
|
+
process.env.EMBEDDING_RETRY_DELAY = "xyz";
|
|
304
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_RETRY_DELAY: must be a non-negative integer, got "xyz"');
|
|
305
|
+
});
|
|
306
|
+
it("should throw error for invalid EMBEDDING_RETRY_DELAY (negative)", () => {
|
|
307
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
308
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
309
|
+
process.env.EMBEDDING_RETRY_DELAY = "-1000";
|
|
310
|
+
expect(() => EmbeddingProviderFactory.createFromEnv()).toThrow('Invalid EMBEDDING_RETRY_DELAY: must be a non-negative integer, got "-1000"');
|
|
311
|
+
});
|
|
312
|
+
it("should accept valid EMBEDDING_RETRY_ATTEMPTS (zero)", () => {
|
|
313
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
314
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
315
|
+
process.env.EMBEDDING_RETRY_ATTEMPTS = "0";
|
|
316
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
317
|
+
expect(provider).toBeInstanceOf(OpenAIEmbeddings);
|
|
318
|
+
});
|
|
319
|
+
it("should accept valid EMBEDDING_RETRY_DELAY (zero)", () => {
|
|
320
|
+
process.env.EMBEDDING_PROVIDER = "openai";
|
|
321
|
+
process.env.OPENAI_API_KEY = "test-key";
|
|
322
|
+
process.env.EMBEDDING_RETRY_DELAY = "0";
|
|
323
|
+
const provider = EmbeddingProviderFactory.createFromEnv();
|
|
324
|
+
expect(provider).toBeInstanceOf(OpenAIEmbeddings);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
//# sourceMappingURL=factory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.test.js","sourceRoot":"","sources":["../../src/embeddings/factory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EmbeddingProvider, EmbeddingResult, RateLimitConfig } from "./base.js";
|
|
2
|
+
export declare class OllamaEmbeddings implements EmbeddingProvider {
|
|
3
|
+
private model;
|
|
4
|
+
private dimensions;
|
|
5
|
+
private limiter;
|
|
6
|
+
private retryAttempts;
|
|
7
|
+
private retryDelayMs;
|
|
8
|
+
private baseUrl;
|
|
9
|
+
constructor(model?: string, dimensions?: number, rateLimitConfig?: RateLimitConfig, baseUrl?: string);
|
|
10
|
+
private isOllamaError;
|
|
11
|
+
private retryWithBackoff;
|
|
12
|
+
private callApi;
|
|
13
|
+
embed(text: string): Promise<EmbeddingResult>;
|
|
14
|
+
embedBatch(texts: string[]): Promise<EmbeddingResult[]>;
|
|
15
|
+
getDimensions(): number;
|
|
16
|
+
getModel(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/embeddings/ollama.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAWhF,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;gBAGtB,KAAK,GAAE,MAA2B,EAClC,UAAU,CAAC,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,eAAe,EACjC,OAAO,GAAE,MAAiC;IA4B5C,OAAO,CAAC,aAAa;YAMP,gBAAgB;YAsChB,OAAO;IAyDf,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB7C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAkB7D,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;CAGnB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import Bottleneck from "bottleneck";
|
|
2
|
+
export class OllamaEmbeddings {
|
|
3
|
+
model;
|
|
4
|
+
dimensions;
|
|
5
|
+
limiter;
|
|
6
|
+
retryAttempts;
|
|
7
|
+
retryDelayMs;
|
|
8
|
+
baseUrl;
|
|
9
|
+
constructor(model = "nomic-embed-text", dimensions, rateLimitConfig, baseUrl = "http://localhost:11434") {
|
|
10
|
+
this.model = model;
|
|
11
|
+
this.baseUrl = baseUrl;
|
|
12
|
+
// Default dimensions for different models
|
|
13
|
+
const defaultDimensions = {
|
|
14
|
+
"nomic-embed-text": 768,
|
|
15
|
+
"mxbai-embed-large": 1024,
|
|
16
|
+
"all-minilm": 384,
|
|
17
|
+
};
|
|
18
|
+
this.dimensions = dimensions || defaultDimensions[model] || 768;
|
|
19
|
+
// Rate limiting configuration (more lenient for local models)
|
|
20
|
+
const maxRequestsPerMinute = rateLimitConfig?.maxRequestsPerMinute || 1000;
|
|
21
|
+
this.retryAttempts = rateLimitConfig?.retryAttempts || 3;
|
|
22
|
+
this.retryDelayMs = rateLimitConfig?.retryDelayMs || 500;
|
|
23
|
+
this.limiter = new Bottleneck({
|
|
24
|
+
reservoir: maxRequestsPerMinute,
|
|
25
|
+
reservoirRefreshAmount: maxRequestsPerMinute,
|
|
26
|
+
reservoirRefreshInterval: 60 * 1000,
|
|
27
|
+
maxConcurrent: 10,
|
|
28
|
+
minTime: Math.floor((60 * 1000) / maxRequestsPerMinute),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
isOllamaError(e) {
|
|
32
|
+
return (typeof e === "object" && e !== null && ("status" in e || "message" in e));
|
|
33
|
+
}
|
|
34
|
+
async retryWithBackoff(fn, attempt = 0) {
|
|
35
|
+
try {
|
|
36
|
+
return await fn();
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// Type guard for OllamaError
|
|
40
|
+
const apiError = this.isOllamaError(error)
|
|
41
|
+
? error
|
|
42
|
+
: { status: 0, message: String(error) };
|
|
43
|
+
const isRateLimitError = apiError.status === 429 ||
|
|
44
|
+
(typeof apiError.message === "string" &&
|
|
45
|
+
apiError.message.toLowerCase().includes("rate limit"));
|
|
46
|
+
if (isRateLimitError && attempt < this.retryAttempts) {
|
|
47
|
+
const delayMs = this.retryDelayMs * Math.pow(2, attempt);
|
|
48
|
+
const waitTimeSeconds = (delayMs / 1000).toFixed(1);
|
|
49
|
+
console.error(`Rate limit reached. Retrying in ${waitTimeSeconds}s (attempt ${attempt + 1}/${this.retryAttempts})...`);
|
|
50
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
51
|
+
return this.retryWithBackoff(fn, attempt + 1);
|
|
52
|
+
}
|
|
53
|
+
if (isRateLimitError) {
|
|
54
|
+
throw new Error(`Ollama API rate limit exceeded after ${this.retryAttempts} retry attempts. Please try again later or reduce request frequency.`);
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async callApi(text) {
|
|
60
|
+
try {
|
|
61
|
+
const response = await fetch(`${this.baseUrl}/api/embeddings`, {
|
|
62
|
+
method: "POST",
|
|
63
|
+
headers: {
|
|
64
|
+
"Content-Type": "application/json",
|
|
65
|
+
},
|
|
66
|
+
body: JSON.stringify({
|
|
67
|
+
model: this.model,
|
|
68
|
+
prompt: text,
|
|
69
|
+
}),
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
const errorBody = await response.text();
|
|
73
|
+
const textPreview = text.length > 100 ? text.substring(0, 100) + "..." : text;
|
|
74
|
+
const error = {
|
|
75
|
+
status: response.status,
|
|
76
|
+
message: `Ollama API error (${response.status}) for model "${this.model}": ${errorBody}. Text preview: "${textPreview}"`,
|
|
77
|
+
};
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
return response.json();
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// Re-throw if it's already an OllamaError from the !response.ok block
|
|
84
|
+
if (error && typeof error === "object" && "status" in error) {
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
// For Error instances (like network errors), enhance the message
|
|
88
|
+
if (error instanceof Error) {
|
|
89
|
+
const textPreview = text.length > 100 ? text.substring(0, 100) + "..." : text;
|
|
90
|
+
throw new Error(`Failed to call Ollama API at ${this.baseUrl} with model ${this.model}: ${error.message}. Text preview: "${textPreview}"`);
|
|
91
|
+
}
|
|
92
|
+
// Handle objects with 'message' property - preserve the original error structure
|
|
93
|
+
// This ensures objects with 'message' property work correctly in tests
|
|
94
|
+
if (this.isOllamaError(error)) {
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
// For other types, create a descriptive error message
|
|
98
|
+
const textPreview = text.length > 100 ? text.substring(0, 100) + "..." : text;
|
|
99
|
+
const errorMessage = JSON.stringify(error);
|
|
100
|
+
throw new Error(`Failed to call Ollama API at ${this.baseUrl} with model ${this.model}: ${errorMessage}. Text preview: "${textPreview}"`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async embed(text) {
|
|
104
|
+
return this.limiter.schedule(() => this.retryWithBackoff(async () => {
|
|
105
|
+
const response = await this.callApi(text);
|
|
106
|
+
if (!response.embedding) {
|
|
107
|
+
throw new Error("No embedding returned from Ollama API");
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
embedding: response.embedding,
|
|
111
|
+
dimensions: this.dimensions,
|
|
112
|
+
};
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
async embedBatch(texts) {
|
|
116
|
+
// Ollama doesn't support batch embeddings natively, so we process in parallel
|
|
117
|
+
// Process in chunks to avoid overwhelming Ollama and prevent memory issues
|
|
118
|
+
const CHUNK_SIZE = 50;
|
|
119
|
+
const results = [];
|
|
120
|
+
for (let i = 0; i < texts.length; i += CHUNK_SIZE) {
|
|
121
|
+
const chunk = texts.slice(i, i + CHUNK_SIZE);
|
|
122
|
+
// The Bottleneck limiter will handle rate limiting and concurrency (maxConcurrent: 10)
|
|
123
|
+
const chunkResults = await Promise.all(chunk.map((text) => this.embed(text)));
|
|
124
|
+
results.push(...chunkResults);
|
|
125
|
+
}
|
|
126
|
+
return results;
|
|
127
|
+
}
|
|
128
|
+
getDimensions() {
|
|
129
|
+
return this.dimensions;
|
|
130
|
+
}
|
|
131
|
+
getModel() {
|
|
132
|
+
return this.model;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/embeddings/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAYpC,MAAM,OAAO,gBAAgB;IACnB,KAAK,CAAS;IACd,UAAU,CAAS;IACnB,OAAO,CAAa;IACpB,aAAa,CAAS;IACtB,YAAY,CAAS;IACrB,OAAO,CAAS;IAExB,YACE,QAAgB,kBAAkB,EAClC,UAAmB,EACnB,eAAiC,EACjC,UAAkB,wBAAwB;QAE1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,0CAA0C;QAC1C,MAAM,iBAAiB,GAA2B;YAChD,kBAAkB,EAAE,GAAG;YACvB,mBAAmB,EAAE,IAAI;YACzB,YAAY,EAAE,GAAG;SAClB,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QAEhE,8DAA8D;QAC9D,MAAM,oBAAoB,GAAG,eAAe,EAAE,oBAAoB,IAAI,IAAI,CAAC;QAC3E,IAAI,CAAC,aAAa,GAAG,eAAe,EAAE,aAAa,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,GAAG,eAAe,EAAE,YAAY,IAAI,GAAG,CAAC;QAEzD,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC;YAC5B,SAAS,EAAE,oBAAoB;YAC/B,sBAAsB,EAAE,oBAAoB;YAC5C,wBAAwB,EAAE,EAAE,GAAG,IAAI;YACnC,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,oBAAoB,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,CAAU;QAC9B,OAAO,CACL,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,CACzE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,EAAoB,EACpB,UAAkB,CAAC;QAEnB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBACxC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAE1C,MAAM,gBAAgB,GACpB,QAAQ,CAAC,MAAM,KAAK,GAAG;gBACvB,CAAC,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;oBACnC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YAE3D,IAAI,gBAAgB,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,eAAe,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpD,OAAO,CAAC,KAAK,CACX,mCAAmC,eAAe,cAAc,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,MAAM,CACxG,CAAC;gBAEF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CACb,wCAAwC,IAAI,CAAC,aAAa,sEAAsE,CACjI,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAY;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI;iBACb,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5D,MAAM,KAAK,GAAgB;oBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,qBAAqB,QAAQ,CAAC,MAAM,gBAAgB,IAAI,CAAC,KAAK,MAAM,SAAS,oBAAoB,WAAW,GAAG;iBACzH,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sEAAsE;YACtE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACd,CAAC;YAED,iEAAiE;YACjE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5D,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,OAAO,eAAe,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,oBAAoB,WAAW,GAAG,CAC1H,CAAC;YACJ,CAAC;YAED,iFAAiF;YACjF,uEAAuE;YACvE,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,sDAAsD;YACtD,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAE3C,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,OAAO,eAAe,IAAI,CAAC,KAAK,KAAK,YAAY,oBAAoB,WAAW,GAAG,CACzH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAChC,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1C,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO;gBACL,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,8EAA8E;QAC9E,2EAA2E;QAC3E,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,OAAO,GAAsB,EAAE,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;YAC7C,uFAAuF;YACvF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACtC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.test.d.ts","sourceRoot":"","sources":["../../src/embeddings/ollama.test.ts"],"names":[],"mappings":""}
|