@mcampa/ai-context-core 0.0.1-beta.05e8984

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.
Files changed (88) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +354 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/context.d.ts +276 -0
  5. package/dist/context.d.ts.map +1 -0
  6. package/dist/context.js +1177 -0
  7. package/dist/context.js.map +1 -0
  8. package/dist/embedding/base-embedding.d.ts +51 -0
  9. package/dist/embedding/base-embedding.d.ts.map +1 -0
  10. package/dist/embedding/base-embedding.js +36 -0
  11. package/dist/embedding/base-embedding.js.map +1 -0
  12. package/dist/embedding/gemini-embedding.d.ts +53 -0
  13. package/dist/embedding/gemini-embedding.d.ts.map +1 -0
  14. package/dist/embedding/gemini-embedding.js +154 -0
  15. package/dist/embedding/gemini-embedding.js.map +1 -0
  16. package/dist/embedding/index.d.ts +6 -0
  17. package/dist/embedding/index.d.ts.map +1 -0
  18. package/dist/embedding/index.js +24 -0
  19. package/dist/embedding/index.js.map +1 -0
  20. package/dist/embedding/ollama-embedding.d.ts +55 -0
  21. package/dist/embedding/ollama-embedding.d.ts.map +1 -0
  22. package/dist/embedding/ollama-embedding.js +193 -0
  23. package/dist/embedding/ollama-embedding.js.map +1 -0
  24. package/dist/embedding/openai-embedding.d.ts +36 -0
  25. package/dist/embedding/openai-embedding.d.ts.map +1 -0
  26. package/dist/embedding/openai-embedding.js +161 -0
  27. package/dist/embedding/openai-embedding.js.map +1 -0
  28. package/dist/embedding/voyageai-embedding.d.ts +44 -0
  29. package/dist/embedding/voyageai-embedding.d.ts.map +1 -0
  30. package/dist/embedding/voyageai-embedding.js +227 -0
  31. package/dist/embedding/voyageai-embedding.js.map +1 -0
  32. package/dist/index.d.ts +8 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +24 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/splitter/ast-splitter.d.ts +22 -0
  37. package/dist/splitter/ast-splitter.d.ts.map +1 -0
  38. package/dist/splitter/ast-splitter.js +308 -0
  39. package/dist/splitter/ast-splitter.js.map +1 -0
  40. package/dist/splitter/index.d.ts +41 -0
  41. package/dist/splitter/index.d.ts.map +1 -0
  42. package/dist/splitter/index.js +27 -0
  43. package/dist/splitter/index.js.map +1 -0
  44. package/dist/splitter/langchain-splitter.d.ts +13 -0
  45. package/dist/splitter/langchain-splitter.d.ts.map +1 -0
  46. package/dist/splitter/langchain-splitter.js +118 -0
  47. package/dist/splitter/langchain-splitter.js.map +1 -0
  48. package/dist/sync/merkle.d.ts +30 -0
  49. package/dist/sync/merkle.d.ts.map +1 -0
  50. package/dist/sync/merkle.js +112 -0
  51. package/dist/sync/merkle.js.map +1 -0
  52. package/dist/sync/synchronizer.d.ts +30 -0
  53. package/dist/sync/synchronizer.d.ts.map +1 -0
  54. package/dist/sync/synchronizer.js +347 -0
  55. package/dist/sync/synchronizer.js.map +1 -0
  56. package/dist/types.d.ts +14 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +3 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/utils/env-manager.d.ts +19 -0
  61. package/dist/utils/env-manager.d.ts.map +1 -0
  62. package/dist/utils/env-manager.js +125 -0
  63. package/dist/utils/env-manager.js.map +1 -0
  64. package/dist/utils/index.d.ts +2 -0
  65. package/dist/utils/index.d.ts.map +1 -0
  66. package/dist/utils/index.js +7 -0
  67. package/dist/utils/index.js.map +1 -0
  68. package/dist/vectordb/index.d.ts +5 -0
  69. package/dist/vectordb/index.d.ts.map +1 -0
  70. package/dist/vectordb/index.js +14 -0
  71. package/dist/vectordb/index.js.map +1 -0
  72. package/dist/vectordb/milvus-restful-vectordb.d.ts +75 -0
  73. package/dist/vectordb/milvus-restful-vectordb.d.ts.map +1 -0
  74. package/dist/vectordb/milvus-restful-vectordb.js +728 -0
  75. package/dist/vectordb/milvus-restful-vectordb.js.map +1 -0
  76. package/dist/vectordb/milvus-vectordb.d.ts +60 -0
  77. package/dist/vectordb/milvus-vectordb.d.ts.map +1 -0
  78. package/dist/vectordb/milvus-vectordb.js +662 -0
  79. package/dist/vectordb/milvus-vectordb.js.map +1 -0
  80. package/dist/vectordb/types.d.ts +120 -0
  81. package/dist/vectordb/types.d.ts.map +1 -0
  82. package/dist/vectordb/types.js +9 -0
  83. package/dist/vectordb/types.js.map +1 -0
  84. package/dist/vectordb/zilliz-utils.d.ts +135 -0
  85. package/dist/vectordb/zilliz-utils.d.ts.map +1 -0
  86. package/dist/vectordb/zilliz-utils.js +197 -0
  87. package/dist/vectordb/zilliz-utils.js.map +1 -0
  88. package/package.json +58 -0
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OllamaEmbedding = void 0;
4
+ const ollama_1 = require("ollama");
5
+ const base_embedding_1 = require("./base-embedding");
6
+ class OllamaEmbedding extends base_embedding_1.Embedding {
7
+ constructor(config) {
8
+ super();
9
+ this.dimension = 768; // Default dimension for many embedding models
10
+ this.dimensionDetected = false; // Track if dimension has been detected
11
+ this.maxTokens = 2048; // Default context window for Ollama
12
+ this.config = config;
13
+ this.client = new ollama_1.Ollama({
14
+ host: config.host || "http://127.0.0.1:11434",
15
+ fetch: config.fetch,
16
+ });
17
+ // Set dimension based on config or will be detected on first use
18
+ if (config.dimension) {
19
+ this.dimension = config.dimension;
20
+ this.dimensionDetected = true;
21
+ }
22
+ // Set max tokens based on config or use default
23
+ if (config.maxTokens) {
24
+ this.maxTokens = config.maxTokens;
25
+ }
26
+ else {
27
+ // Set default based on known models
28
+ this.setDefaultMaxTokensForModel(config.model);
29
+ }
30
+ // If no dimension is provided, it will be detected in the first embed call
31
+ }
32
+ setDefaultMaxTokensForModel(model) {
33
+ // Set different max tokens based on known models
34
+ if (model?.includes("nomic-embed-text")) {
35
+ this.maxTokens = 8192; // nomic-embed-text supports 8192 tokens
36
+ }
37
+ else if (model?.includes("snowflake-arctic-embed")) {
38
+ this.maxTokens = 8192; // snowflake-arctic-embed supports 8192 tokens
39
+ }
40
+ else {
41
+ this.maxTokens = 2048; // Default for most Ollama models
42
+ }
43
+ }
44
+ async embed(text) {
45
+ // Preprocess the text
46
+ const processedText = this.preprocessText(text);
47
+ // Detect dimension on first use if not configured
48
+ if (!this.dimensionDetected && !this.config.dimension) {
49
+ this.dimension = await this.detectDimension();
50
+ this.dimensionDetected = true;
51
+ console.log(`[OllamaEmbedding] 📏 Detected Ollama embedding dimension: ${this.dimension} for model: ${this.config.model}`);
52
+ }
53
+ const embedOptions = {
54
+ model: this.config.model,
55
+ input: processedText,
56
+ options: this.config.options,
57
+ };
58
+ // Only include keep_alive if it has a valid value
59
+ if (this.config.keepAlive && this.config.keepAlive !== "") {
60
+ embedOptions.keep_alive = this.config.keepAlive;
61
+ }
62
+ const response = await this.client.embed(embedOptions);
63
+ if (!response.embeddings || !response.embeddings[0]) {
64
+ throw new Error("Ollama API returned invalid response");
65
+ }
66
+ return {
67
+ vector: response.embeddings[0],
68
+ dimension: this.dimension,
69
+ };
70
+ }
71
+ async embedBatch(texts) {
72
+ // Preprocess all texts
73
+ const processedTexts = this.preprocessTexts(texts);
74
+ // Detect dimension on first use if not configured
75
+ if (!this.dimensionDetected && !this.config.dimension) {
76
+ this.dimension = await this.detectDimension();
77
+ this.dimensionDetected = true;
78
+ console.log(`[OllamaEmbedding] 📏 Detected Ollama embedding dimension: ${this.dimension} for model: ${this.config.model}`);
79
+ }
80
+ // Use Ollama's native batch embedding API
81
+ const embedOptions = {
82
+ model: this.config.model,
83
+ input: processedTexts, // Pass array directly to Ollama
84
+ options: this.config.options,
85
+ };
86
+ // Only include keep_alive if it has a valid value
87
+ if (this.config.keepAlive && this.config.keepAlive !== "") {
88
+ embedOptions.keep_alive = this.config.keepAlive;
89
+ }
90
+ const response = await this.client.embed(embedOptions);
91
+ if (!response.embeddings || !Array.isArray(response.embeddings)) {
92
+ throw new Error("Ollama API returned invalid batch response");
93
+ }
94
+ // Convert to EmbeddingVector format
95
+ return response.embeddings.map((embedding) => ({
96
+ vector: embedding,
97
+ dimension: this.dimension,
98
+ }));
99
+ }
100
+ getDimension() {
101
+ return this.dimension;
102
+ }
103
+ getProvider() {
104
+ return "Ollama";
105
+ }
106
+ /**
107
+ * Set model type and detect its dimension
108
+ * @param model Model name
109
+ */
110
+ async setModel(model) {
111
+ this.config.model = model;
112
+ // Reset dimension detection when model changes
113
+ this.dimensionDetected = false;
114
+ // Update max tokens for new model
115
+ this.setDefaultMaxTokensForModel(model);
116
+ if (!this.config.dimension) {
117
+ this.dimension = await this.detectDimension();
118
+ this.dimensionDetected = true;
119
+ console.log(`[OllamaEmbedding] 📏 Detected Ollama embedding dimension: ${this.dimension} for model: ${this.config.model}`);
120
+ }
121
+ else {
122
+ console.log("[OllamaEmbedding] Dimension already detected for model " +
123
+ this.config.model);
124
+ }
125
+ }
126
+ /**
127
+ * Set host URL
128
+ * @param host Ollama host URL
129
+ */
130
+ setHost(host) {
131
+ this.config.host = host;
132
+ this.client = new ollama_1.Ollama({
133
+ host: host,
134
+ fetch: this.config.fetch,
135
+ });
136
+ }
137
+ /**
138
+ * Set keep alive duration
139
+ * @param keepAlive Keep alive duration
140
+ */
141
+ setKeepAlive(keepAlive) {
142
+ this.config.keepAlive = keepAlive;
143
+ }
144
+ /**
145
+ * Set additional options
146
+ * @param options Additional options for the model
147
+ */
148
+ setOptions(options) {
149
+ this.config.options = options;
150
+ }
151
+ /**
152
+ * Set max tokens manually
153
+ * @param maxTokens Maximum number of tokens
154
+ */
155
+ setMaxTokens(maxTokens) {
156
+ this.config.maxTokens = maxTokens;
157
+ this.maxTokens = maxTokens;
158
+ }
159
+ /**
160
+ * Get client instance (for advanced usage)
161
+ */
162
+ getClient() {
163
+ return this.client;
164
+ }
165
+ async detectDimension(testText = "test") {
166
+ console.log(`[OllamaEmbedding] Detecting embedding dimension...`);
167
+ try {
168
+ const processedText = this.preprocessText(testText);
169
+ const embedOptions = {
170
+ model: this.config.model,
171
+ input: processedText,
172
+ options: this.config.options,
173
+ };
174
+ if (this.config.keepAlive && this.config.keepAlive !== "") {
175
+ embedOptions.keep_alive = this.config.keepAlive;
176
+ }
177
+ const response = await this.client.embed(embedOptions);
178
+ if (!response.embeddings || !response.embeddings[0]) {
179
+ throw new Error("Ollama API returned invalid response");
180
+ }
181
+ const dimension = response.embeddings[0].length;
182
+ console.log(`[OllamaEmbedding] Successfully detected embedding dimension: ${dimension}`);
183
+ return dimension;
184
+ }
185
+ catch (error) {
186
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
187
+ console.error(`[OllamaEmbedding] Failed to detect dimension: ${errorMessage}`);
188
+ throw new Error(`Failed to detect Ollama embedding dimension: ${errorMessage}`);
189
+ }
190
+ }
191
+ }
192
+ exports.OllamaEmbedding = OllamaEmbedding;
193
+ //# sourceMappingURL=ollama-embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-embedding.js","sourceRoot":"","sources":["../../src/embedding/ollama-embedding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import OpenAI from "openai";
2
+ import { Embedding, EmbeddingVector } from "./base-embedding";
3
+ export interface OpenAIEmbeddingConfig {
4
+ model: string;
5
+ apiKey: string;
6
+ baseURL?: string;
7
+ }
8
+ export declare class OpenAIEmbedding extends Embedding {
9
+ private client;
10
+ private config;
11
+ private dimension;
12
+ protected maxTokens: number;
13
+ constructor(config: OpenAIEmbeddingConfig);
14
+ detectDimension(testText?: string): Promise<number>;
15
+ embed(text: string): Promise<EmbeddingVector>;
16
+ embedBatch(texts: string[]): Promise<EmbeddingVector[]>;
17
+ getDimension(): number;
18
+ getProvider(): string;
19
+ /**
20
+ * Set model type
21
+ * @param model Model name
22
+ */
23
+ setModel(model: string): Promise<void>;
24
+ /**
25
+ * Get client instance (for advanced usage)
26
+ */
27
+ getClient(): OpenAI;
28
+ /**
29
+ * Get list of supported models
30
+ */
31
+ static getSupportedModels(): Record<string, {
32
+ dimension: number;
33
+ description: string;
34
+ }>;
35
+ }
36
+ //# sourceMappingURL=openai-embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-embedding.d.ts","sourceRoot":"","sources":["../../src/embedding/openai-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,SAAS,CAAgB;IACjC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAQ;gBAEvB,MAAM,EAAE,qBAAqB;IASnC,eAAe,CAAC,QAAQ,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAwC3D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAgC7C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAiC7D,YAAY,IAAI,MAAM;IAkBtB,WAAW,IAAI,MAAM;IAIrB;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,CACjC,MAAM,EACN;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAC3C;CAkBF"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OpenAIEmbedding = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const base_embedding_1 = require("./base-embedding");
9
+ class OpenAIEmbedding extends base_embedding_1.Embedding {
10
+ constructor(config) {
11
+ super();
12
+ this.dimension = 1536; // Default dimension for text-embedding-3-small
13
+ this.maxTokens = 8192; // Maximum tokens for OpenAI embedding models
14
+ this.config = config;
15
+ this.client = new openai_1.default({
16
+ apiKey: config.apiKey,
17
+ baseURL: config.baseURL,
18
+ });
19
+ }
20
+ async detectDimension(testText = "test") {
21
+ const model = this.config.model || "text-embedding-3-small";
22
+ const knownModels = OpenAIEmbedding.getSupportedModels();
23
+ // Use known dimension for standard models
24
+ if (knownModels[model]) {
25
+ return knownModels[model].dimension;
26
+ }
27
+ // For custom models, make API call to detect dimension
28
+ try {
29
+ const processedText = this.preprocessText(testText);
30
+ const response = await this.client.embeddings.create({
31
+ model: model,
32
+ input: processedText,
33
+ encoding_format: "float",
34
+ });
35
+ return response.data[0].embedding.length;
36
+ }
37
+ catch (error) {
38
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
39
+ // Re-throw authentication errors
40
+ if (errorMessage.includes("API key") ||
41
+ errorMessage.includes("unauthorized") ||
42
+ errorMessage.includes("authentication")) {
43
+ throw new Error(`Failed to detect dimension for model ${model}: ${errorMessage}`);
44
+ }
45
+ // For other errors, throw exception instead of using fallback
46
+ throw new Error(`Failed to detect dimension for model ${model}: ${errorMessage}`);
47
+ }
48
+ }
49
+ async embed(text) {
50
+ const processedText = this.preprocessText(text);
51
+ const model = this.config.model || "text-embedding-3-small";
52
+ const knownModels = OpenAIEmbedding.getSupportedModels();
53
+ if (knownModels[model] && this.dimension !== knownModels[model].dimension) {
54
+ this.dimension = knownModels[model].dimension;
55
+ }
56
+ else if (!knownModels[model]) {
57
+ this.dimension = await this.detectDimension();
58
+ }
59
+ try {
60
+ const response = await this.client.embeddings.create({
61
+ model: model,
62
+ input: processedText,
63
+ encoding_format: "float",
64
+ });
65
+ // Update dimension from actual response
66
+ this.dimension = response.data[0].embedding.length;
67
+ return {
68
+ vector: response.data[0].embedding,
69
+ dimension: this.dimension,
70
+ };
71
+ }
72
+ catch (error) {
73
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
74
+ throw new Error(`Failed to generate OpenAI embedding: ${errorMessage}`);
75
+ }
76
+ }
77
+ async embedBatch(texts) {
78
+ const processedTexts = this.preprocessTexts(texts);
79
+ const model = this.config.model || "text-embedding-3-small";
80
+ const knownModels = OpenAIEmbedding.getSupportedModels();
81
+ if (knownModels[model] && this.dimension !== knownModels[model].dimension) {
82
+ this.dimension = knownModels[model].dimension;
83
+ }
84
+ else if (!knownModels[model]) {
85
+ this.dimension = await this.detectDimension();
86
+ }
87
+ try {
88
+ const response = await this.client.embeddings.create({
89
+ model: model,
90
+ input: processedTexts,
91
+ encoding_format: "float",
92
+ });
93
+ this.dimension = response.data[0].embedding.length;
94
+ return response.data.map((item) => ({
95
+ vector: item.embedding,
96
+ dimension: this.dimension,
97
+ }));
98
+ }
99
+ catch (error) {
100
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
101
+ throw new Error(`Failed to generate OpenAI batch embeddings: ${errorMessage}`);
102
+ }
103
+ }
104
+ getDimension() {
105
+ // For custom models, we need to detect the dimension first
106
+ const model = this.config.model || "text-embedding-3-small";
107
+ const knownModels = OpenAIEmbedding.getSupportedModels();
108
+ // If it's a known model, return its known dimension
109
+ if (knownModels[model]) {
110
+ return knownModels[model].dimension;
111
+ }
112
+ // For custom models, return the current dimension
113
+ // Note: This may be incorrect until detectDimension() is called
114
+ console.warn(`[OpenAIEmbedding] ⚠️ getDimension() called for custom model '${model}' - returning ${this.dimension}. Call detectDimension() first for accurate dimension.`);
115
+ return this.dimension;
116
+ }
117
+ getProvider() {
118
+ return "OpenAI";
119
+ }
120
+ /**
121
+ * Set model type
122
+ * @param model Model name
123
+ */
124
+ async setModel(model) {
125
+ this.config.model = model;
126
+ const knownModels = OpenAIEmbedding.getSupportedModels();
127
+ if (knownModels[model]) {
128
+ this.dimension = knownModels[model].dimension;
129
+ }
130
+ else {
131
+ this.dimension = await this.detectDimension();
132
+ }
133
+ }
134
+ /**
135
+ * Get client instance (for advanced usage)
136
+ */
137
+ getClient() {
138
+ return this.client;
139
+ }
140
+ /**
141
+ * Get list of supported models
142
+ */
143
+ static getSupportedModels() {
144
+ return {
145
+ "text-embedding-3-small": {
146
+ dimension: 1536,
147
+ description: "High performance and cost-effective embedding model (recommended)",
148
+ },
149
+ "text-embedding-3-large": {
150
+ dimension: 3072,
151
+ description: "Highest performance embedding model with larger dimensions",
152
+ },
153
+ "text-embedding-ada-002": {
154
+ dimension: 1536,
155
+ description: "Legacy model (use text-embedding-3-small instead)",
156
+ },
157
+ };
158
+ }
159
+ }
160
+ exports.OpenAIEmbedding = OpenAIEmbedding;
161
+ //# sourceMappingURL=openai-embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-embedding.js","sourceRoot":"","sources":["../../src/embedding/openai-embedding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { VoyageAIClient } from "voyageai";
2
+ import { Embedding, EmbeddingVector } from "./base-embedding";
3
+ export interface VoyageAIEmbeddingConfig {
4
+ model: string;
5
+ apiKey: string;
6
+ }
7
+ export declare class VoyageAIEmbedding extends Embedding {
8
+ private client;
9
+ private config;
10
+ private dimension;
11
+ private inputType;
12
+ protected maxTokens: number;
13
+ constructor(config: VoyageAIEmbeddingConfig);
14
+ private updateModelSettings;
15
+ private updateDimensionForModel;
16
+ detectDimension(): Promise<number>;
17
+ embed(text: string): Promise<EmbeddingVector>;
18
+ embedBatch(texts: string[]): Promise<EmbeddingVector[]>;
19
+ getDimension(): number;
20
+ getProvider(): string;
21
+ /**
22
+ * Set model type
23
+ * @param model Model name
24
+ */
25
+ setModel(model: string): void;
26
+ /**
27
+ * Set input type (VoyageAI specific feature)
28
+ * @param inputType Input type: 'document' | 'query'
29
+ */
30
+ setInputType(inputType: "document" | "query"): void;
31
+ /**
32
+ * Get client instance (for advanced usage)
33
+ */
34
+ getClient(): VoyageAIClient;
35
+ /**
36
+ * Get list of supported models
37
+ */
38
+ static getSupportedModels(): Record<string, {
39
+ dimension: number | string;
40
+ contextLength: number;
41
+ description: string;
42
+ }>;
43
+ }
44
+ //# sourceMappingURL=voyageai-embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyageai-embedding.d.ts","sourceRoot":"","sources":["../../src/embedding/voyageai-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,SAAS,CAAoC;IACrD,SAAS,CAAC,SAAS,EAAE,MAAM,CAAS;gBAExB,MAAM,EAAE,uBAAuB;IAW3C,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,uBAAuB;IAiBzB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAKlC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAoB7C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAyB7D,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI;IAInD;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,CACjC,MAAM,EACN;QAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAC3E;CAoGF"}