@nahisaho/katashiro-rag 2.0.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.
Files changed (102) hide show
  1. package/LICENSE +21 -0
  2. package/dist/RAGEngine.d.ts +58 -0
  3. package/dist/RAGEngine.d.ts.map +1 -0
  4. package/dist/RAGEngine.js +97 -0
  5. package/dist/RAGEngine.js.map +1 -0
  6. package/dist/RAGPipeline.d.ts +162 -0
  7. package/dist/RAGPipeline.d.ts.map +1 -0
  8. package/dist/RAGPipeline.js +222 -0
  9. package/dist/RAGPipeline.js.map +1 -0
  10. package/dist/Retriever.d.ts +49 -0
  11. package/dist/Retriever.d.ts.map +1 -0
  12. package/dist/Retriever.js +96 -0
  13. package/dist/Retriever.js.map +1 -0
  14. package/dist/chunking/DocumentChunker.d.ts +47 -0
  15. package/dist/chunking/DocumentChunker.d.ts.map +1 -0
  16. package/dist/chunking/DocumentChunker.js +171 -0
  17. package/dist/chunking/DocumentChunker.js.map +1 -0
  18. package/dist/chunking/index.d.ts +5 -0
  19. package/dist/chunking/index.d.ts.map +1 -0
  20. package/dist/chunking/index.js +5 -0
  21. package/dist/chunking/index.js.map +1 -0
  22. package/dist/embedding/AzureOpenAIEmbeddingProvider.d.ts +63 -0
  23. package/dist/embedding/AzureOpenAIEmbeddingProvider.d.ts.map +1 -0
  24. package/dist/embedding/AzureOpenAIEmbeddingProvider.js +133 -0
  25. package/dist/embedding/AzureOpenAIEmbeddingProvider.js.map +1 -0
  26. package/dist/embedding/BaseEmbeddingProvider.d.ts +43 -0
  27. package/dist/embedding/BaseEmbeddingProvider.d.ts.map +1 -0
  28. package/dist/embedding/BaseEmbeddingProvider.js +98 -0
  29. package/dist/embedding/BaseEmbeddingProvider.js.map +1 -0
  30. package/dist/embedding/EmbeddingFactory.d.ts +75 -0
  31. package/dist/embedding/EmbeddingFactory.d.ts.map +1 -0
  32. package/dist/embedding/EmbeddingFactory.js +153 -0
  33. package/dist/embedding/EmbeddingFactory.js.map +1 -0
  34. package/dist/embedding/EmbeddingManager.d.ts +41 -0
  35. package/dist/embedding/EmbeddingManager.d.ts.map +1 -0
  36. package/dist/embedding/EmbeddingManager.js +93 -0
  37. package/dist/embedding/EmbeddingManager.js.map +1 -0
  38. package/dist/embedding/MockEmbeddingProvider.d.ts +54 -0
  39. package/dist/embedding/MockEmbeddingProvider.d.ts.map +1 -0
  40. package/dist/embedding/MockEmbeddingProvider.js +91 -0
  41. package/dist/embedding/MockEmbeddingProvider.js.map +1 -0
  42. package/dist/embedding/OllamaEmbeddingProvider.d.ts +69 -0
  43. package/dist/embedding/OllamaEmbeddingProvider.d.ts.map +1 -0
  44. package/dist/embedding/OllamaEmbeddingProvider.js +136 -0
  45. package/dist/embedding/OllamaEmbeddingProvider.js.map +1 -0
  46. package/dist/embedding/OpenAIEmbeddingProvider.d.ts +83 -0
  47. package/dist/embedding/OpenAIEmbeddingProvider.d.ts.map +1 -0
  48. package/dist/embedding/OpenAIEmbeddingProvider.js +150 -0
  49. package/dist/embedding/OpenAIEmbeddingProvider.js.map +1 -0
  50. package/dist/embedding/index.d.ts +16 -0
  51. package/dist/embedding/index.d.ts.map +1 -0
  52. package/dist/embedding/index.js +15 -0
  53. package/dist/embedding/index.js.map +1 -0
  54. package/dist/index.d.ts +20 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +22 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/reranking/LLMReranker.d.ts +147 -0
  59. package/dist/reranking/LLMReranker.d.ts.map +1 -0
  60. package/dist/reranking/LLMReranker.js +262 -0
  61. package/dist/reranking/LLMReranker.js.map +1 -0
  62. package/dist/reranking/index.d.ts +7 -0
  63. package/dist/reranking/index.d.ts.map +1 -0
  64. package/dist/reranking/index.js +7 -0
  65. package/dist/reranking/index.js.map +1 -0
  66. package/dist/types.d.ts +144 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +8 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/vectordb/FileVectorStore.d.ts +93 -0
  71. package/dist/vectordb/FileVectorStore.d.ts.map +1 -0
  72. package/dist/vectordb/FileVectorStore.js +218 -0
  73. package/dist/vectordb/FileVectorStore.js.map +1 -0
  74. package/dist/vectordb/InMemoryVectorStore.d.ts +48 -0
  75. package/dist/vectordb/InMemoryVectorStore.d.ts.map +1 -0
  76. package/dist/vectordb/InMemoryVectorStore.js +86 -0
  77. package/dist/vectordb/InMemoryVectorStore.js.map +1 -0
  78. package/dist/vectordb/index.d.ts +8 -0
  79. package/dist/vectordb/index.d.ts.map +1 -0
  80. package/dist/vectordb/index.js +6 -0
  81. package/dist/vectordb/index.js.map +1 -0
  82. package/package.json +37 -0
  83. package/src/RAGEngine.ts +127 -0
  84. package/src/RAGPipeline.ts +357 -0
  85. package/src/Retriever.ts +121 -0
  86. package/src/chunking/DocumentChunker.ts +207 -0
  87. package/src/chunking/index.ts +5 -0
  88. package/src/embedding/AzureOpenAIEmbeddingProvider.ts +208 -0
  89. package/src/embedding/BaseEmbeddingProvider.ts +133 -0
  90. package/src/embedding/EmbeddingFactory.ts +225 -0
  91. package/src/embedding/EmbeddingManager.ts +110 -0
  92. package/src/embedding/MockEmbeddingProvider.ts +123 -0
  93. package/src/embedding/OllamaEmbeddingProvider.ts +197 -0
  94. package/src/embedding/OpenAIEmbeddingProvider.ts +226 -0
  95. package/src/embedding/index.ts +33 -0
  96. package/src/index.ts +55 -0
  97. package/src/reranking/LLMReranker.ts +401 -0
  98. package/src/reranking/index.ts +15 -0
  99. package/src/types.ts +157 -0
  100. package/src/vectordb/FileVectorStore.ts +289 -0
  101. package/src/vectordb/InMemoryVectorStore.ts +121 -0
  102. package/src/vectordb/index.ts +9 -0
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Mock Embedding Provider - テスト用
3
+ *
4
+ * @requirement REQ-RAG-001
5
+ * @design DES-KATASHIRO-003-RAG §3.1
6
+ */
7
+
8
+ import type { EmbeddingProvider, Vector } from '../types.js';
9
+
10
+ /**
11
+ * MockEmbeddingProvider設定
12
+ */
13
+ export interface MockEmbeddingProviderConfig {
14
+ /** ベクトル次元数 */
15
+ dimensions?: number;
16
+ /** 遅延(ミリ秒) */
17
+ delay?: number;
18
+ /** エラーを発生させるか */
19
+ shouldFail?: boolean;
20
+ }
21
+
22
+ /**
23
+ * テスト用モックEmbeddingプロバイダー
24
+ */
25
+ export class MockEmbeddingProvider implements EmbeddingProvider {
26
+ readonly name = 'mock';
27
+ readonly dimensions: number;
28
+
29
+ private delay: number;
30
+ private shouldFail: boolean;
31
+ private callCount = 0;
32
+
33
+ constructor(config: MockEmbeddingProviderConfig = {}) {
34
+ this.dimensions = config.dimensions ?? 1536;
35
+ this.delay = config.delay ?? 0;
36
+ this.shouldFail = config.shouldFail ?? false;
37
+ }
38
+
39
+ /**
40
+ * 呼び出し回数取得
41
+ */
42
+ getCallCount(): number {
43
+ return this.callCount;
44
+ }
45
+
46
+ /**
47
+ * リセット
48
+ */
49
+ reset(): void {
50
+ this.callCount = 0;
51
+ }
52
+
53
+ async embed(text: string): Promise<Vector> {
54
+ this.callCount++;
55
+
56
+ if (this.delay > 0) {
57
+ await this.sleep(this.delay);
58
+ }
59
+
60
+ if (this.shouldFail) {
61
+ throw new Error('Mock embedding provider error');
62
+ }
63
+
64
+ return this.generateDeterministicVector(text);
65
+ }
66
+
67
+ async embedBatch(texts: string[]): Promise<Vector[]> {
68
+ this.callCount++;
69
+
70
+ if (this.delay > 0) {
71
+ await this.sleep(this.delay);
72
+ }
73
+
74
+ if (this.shouldFail) {
75
+ throw new Error('Mock embedding provider error');
76
+ }
77
+
78
+ return texts.map((text) => this.generateDeterministicVector(text));
79
+ }
80
+
81
+ /**
82
+ * テキストから決定的なベクトルを生成
83
+ * 同じテキストからは常に同じベクトルが生成される
84
+ */
85
+ private generateDeterministicVector(text: string): Vector {
86
+ const vector: Vector = new Array(this.dimensions);
87
+ let seed = this.hashString(text);
88
+
89
+ for (let i = 0; i < this.dimensions; i++) {
90
+ seed = this.nextRandom(seed);
91
+ // -1から1の範囲に正規化
92
+ vector[i] = (seed / 2147483647) * 2 - 1;
93
+ }
94
+
95
+ // L2正規化
96
+ const norm = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
97
+ return vector.map((v) => v / norm);
98
+ }
99
+
100
+ /**
101
+ * 文字列のシンプルなハッシュ
102
+ */
103
+ private hashString(str: string): number {
104
+ let hash = 0;
105
+ for (let i = 0; i < str.length; i++) {
106
+ const char = str.charCodeAt(i);
107
+ hash = ((hash << 5) - hash) + char;
108
+ hash = hash & hash;
109
+ }
110
+ return Math.abs(hash);
111
+ }
112
+
113
+ /**
114
+ * 線形合同法による擬似乱数
115
+ */
116
+ private nextRandom(seed: number): number {
117
+ return (seed * 1103515245 + 12345) & 2147483647;
118
+ }
119
+
120
+ private sleep(ms: number): Promise<void> {
121
+ return new Promise((resolve) => setTimeout(resolve, ms));
122
+ }
123
+ }
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Ollama Embedding Provider
3
+ *
4
+ * Local embedding provider using Ollama
5
+ *
6
+ * @requirement REQ-RAG-001
7
+ * @design DES-KATASHIRO-003-RAG
8
+ */
9
+
10
+ import { BaseEmbeddingProvider } from './BaseEmbeddingProvider.js';
11
+ import type { EmbeddingConfig } from '../types.js';
12
+
13
+ /**
14
+ * Ollama設定
15
+ */
16
+ export interface OllamaEmbeddingConfig extends EmbeddingConfig {
17
+ /** ベースURL(デフォルト: http://localhost:11434) */
18
+ baseUrl?: string;
19
+ /** モデル名(デフォルト: nomic-embed-text) */
20
+ model?: string;
21
+ /** Keep Alive(モデルをメモリに保持する時間) */
22
+ keepAlive?: string;
23
+ }
24
+
25
+ /**
26
+ * Ollama APIレスポンス
27
+ */
28
+ interface OllamaEmbeddingResponse {
29
+ embedding: number[];
30
+ model: string;
31
+ total_duration?: number;
32
+ load_duration?: number;
33
+ prompt_eval_count?: number;
34
+ }
35
+
36
+ /**
37
+ * Ollama Embeddingプロバイダー
38
+ *
39
+ * ローカルでOllamaを使用した埋め込み生成
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const provider = new OllamaEmbeddingProvider({
44
+ * baseUrl: 'http://192.168.224.1:11434',
45
+ * model: 'nomic-embed-text',
46
+ * });
47
+ *
48
+ * const embedding = await provider.embed('Hello, world!');
49
+ * ```
50
+ */
51
+ export class OllamaEmbeddingProvider extends BaseEmbeddingProvider {
52
+ readonly name = 'ollama';
53
+
54
+ private readonly baseUrl: string;
55
+ private readonly model: string;
56
+ private readonly keepAlive: string;
57
+ private _dimensions: number;
58
+
59
+ get dimensions(): number {
60
+ return this._dimensions;
61
+ }
62
+
63
+ constructor(config: OllamaEmbeddingConfig = {}) {
64
+ super(config);
65
+
66
+ this.baseUrl = config.baseUrl ?? 'http://localhost:11434';
67
+ this.model = config.model ?? 'nomic-embed-text';
68
+ this.keepAlive = config.keepAlive ?? '5m';
69
+
70
+ // nomic-embed-text: 768次元
71
+ // mxbai-embed-large: 1024次元
72
+ // all-minilm: 384次元
73
+ this._dimensions = config.dimensions ?? this.getDefaultDimensions(this.model);
74
+ }
75
+
76
+ /**
77
+ * モデルごとのデフォルト次元数
78
+ */
79
+ private getDefaultDimensions(model: string): number {
80
+ const dimensionMap: Record<string, number> = {
81
+ 'nomic-embed-text': 768,
82
+ 'mxbai-embed-large': 1024,
83
+ 'all-minilm': 384,
84
+ 'snowflake-arctic-embed': 1024,
85
+ 'bge-m3': 1024,
86
+ };
87
+
88
+ // モデル名の先頭マッチで検索
89
+ for (const [key, dims] of Object.entries(dimensionMap)) {
90
+ if (model.includes(key)) {
91
+ return dims;
92
+ }
93
+ }
94
+
95
+ return 768; // デフォルト
96
+ }
97
+
98
+ /**
99
+ * 単一テキストの埋め込み生成
100
+ */
101
+ async embed(text: string): Promise<number[]> {
102
+ return this.withRetry(async () => {
103
+ const url = `${this.baseUrl}/api/embeddings`;
104
+
105
+ const response = await this.fetchWithTimeout(
106
+ url,
107
+ {
108
+ method: 'POST',
109
+ headers: {
110
+ 'Content-Type': 'application/json',
111
+ },
112
+ body: JSON.stringify({
113
+ model: this.model,
114
+ prompt: text,
115
+ keep_alive: this.keepAlive,
116
+ }),
117
+ },
118
+ this.config.timeout
119
+ );
120
+
121
+ const data = (await response.json()) as OllamaEmbeddingResponse;
122
+
123
+ // 次元数を実際の値で更新(初回のみ)
124
+ if (this._dimensions === 768 && data.embedding.length !== 768) {
125
+ this._dimensions = data.embedding.length;
126
+ }
127
+
128
+ return data.embedding;
129
+ });
130
+ }
131
+
132
+ /**
133
+ * バッチ埋め込み生成(Ollama固有実装)
134
+ *
135
+ * Ollamaはネイティブのバッチ処理をサポートしていないため、
136
+ * 並列リクエストで処理
137
+ */
138
+ protected override async embedBatchInternal(
139
+ texts: string[]
140
+ ): Promise<number[][]> {
141
+ // 並列度を制限(5並列)
142
+ const concurrency = 5;
143
+ const results: number[][] = new Array(texts.length);
144
+
145
+ for (let i = 0; i < texts.length; i += concurrency) {
146
+ const batch = texts.slice(i, i + concurrency);
147
+ const embeddings = await Promise.all(
148
+ batch.map((text) => this.embed(text))
149
+ );
150
+
151
+ embeddings.forEach((embedding, j) => {
152
+ results[i + j] = embedding;
153
+ });
154
+ }
155
+
156
+ return results;
157
+ }
158
+
159
+ /**
160
+ * 利用可能なモデル一覧取得
161
+ */
162
+ async listModels(): Promise<string[]> {
163
+ const url = `${this.baseUrl}/api/tags`;
164
+
165
+ const response = await this.fetchWithTimeout(url, {
166
+ method: 'GET',
167
+ });
168
+
169
+ interface OllamaTagsResponse {
170
+ models: Array<{ name: string; model: string }>;
171
+ }
172
+
173
+ const data = (await response.json()) as OllamaTagsResponse;
174
+
175
+ // embeddingモデルをフィルタ(名前に embed を含むもの)
176
+ return data.models
177
+ .filter(
178
+ (m) =>
179
+ m.name.includes('embed') ||
180
+ m.name.includes('nomic') ||
181
+ m.name.includes('bge')
182
+ )
183
+ .map((m) => m.name);
184
+ }
185
+
186
+ /**
187
+ * モデルの存在確認
188
+ */
189
+ async isModelAvailable(): Promise<boolean> {
190
+ try {
191
+ const models = await this.listModels();
192
+ return models.some((m) => m.includes(this.model));
193
+ } catch {
194
+ return false;
195
+ }
196
+ }
197
+ }
@@ -0,0 +1,226 @@
1
+ /**
2
+ * OpenAI Embedding Provider
3
+ *
4
+ * OpenAI API embedding provider
5
+ *
6
+ * @requirement REQ-RAG-001
7
+ * @design DES-KATASHIRO-003-RAG
8
+ */
9
+
10
+ import { BaseEmbeddingProvider } from './BaseEmbeddingProvider.js';
11
+ import type { EmbeddingConfig } from '../types.js';
12
+
13
+ /**
14
+ * OpenAI Embedding設定
15
+ */
16
+ export interface OpenAIEmbeddingConfig extends EmbeddingConfig {
17
+ /** APIキー */
18
+ apiKey?: string;
19
+ /** ベースURL(カスタムエンドポイント用) */
20
+ baseUrl?: string;
21
+ /** モデル名 */
22
+ model?: string;
23
+ /** 組織ID */
24
+ organization?: string;
25
+ /** エンコーディングフォーマット */
26
+ encodingFormat?: 'float' | 'base64';
27
+ }
28
+
29
+ /**
30
+ * OpenAI Embedding APIレスポンス
31
+ */
32
+ interface OpenAIEmbeddingResponse {
33
+ object: 'list';
34
+ data: Array<{
35
+ object: 'embedding';
36
+ embedding: number[];
37
+ index: number;
38
+ }>;
39
+ model: string;
40
+ usage: {
41
+ prompt_tokens: number;
42
+ total_tokens: number;
43
+ };
44
+ }
45
+
46
+ /**
47
+ * OpenAI Embeddingプロバイダー
48
+ *
49
+ * OpenAI API(またはOpenAI互換API)を使用した埋め込み生成
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * // OpenAI API
54
+ * const provider = new OpenAIEmbeddingProvider({
55
+ * apiKey: process.env.OPENAI_API_KEY,
56
+ * model: 'text-embedding-3-small',
57
+ * });
58
+ *
59
+ * // OpenAI互換API(vLLM, LocalAI等)
60
+ * const localProvider = new OpenAIEmbeddingProvider({
61
+ * baseUrl: 'http://localhost:8000/v1',
62
+ * model: 'local-embedding-model',
63
+ * });
64
+ *
65
+ * const embedding = await provider.embed('Hello, world!');
66
+ * ```
67
+ */
68
+ export class OpenAIEmbeddingProvider extends BaseEmbeddingProvider {
69
+ readonly name = 'openai';
70
+
71
+ private readonly apiKey: string;
72
+ private readonly baseUrl: string;
73
+ private readonly model: string;
74
+ private readonly organization?: string;
75
+ private readonly encodingFormat: 'float' | 'base64';
76
+ private _dimensions: number;
77
+
78
+ get dimensions(): number {
79
+ return this._dimensions;
80
+ }
81
+
82
+ constructor(config: OpenAIEmbeddingConfig = {}) {
83
+ super(config);
84
+
85
+ this.apiKey = config.apiKey ?? process.env.OPENAI_API_KEY ?? '';
86
+ this.baseUrl = config.baseUrl ?? 'https://api.openai.com/v1';
87
+ this.model = config.model ?? 'text-embedding-3-small';
88
+ this.organization = config.organization;
89
+ this.encodingFormat = config.encodingFormat ?? 'float';
90
+
91
+ // モデルごとのデフォルト次元数
92
+ this._dimensions = config.dimensions ?? this.getDefaultDimensions(this.model);
93
+ }
94
+
95
+ /**
96
+ * モデルごとのデフォルト次元数
97
+ */
98
+ private getDefaultDimensions(model: string): number {
99
+ const dimensionMap: Record<string, number> = {
100
+ 'text-embedding-3-small': 1536,
101
+ 'text-embedding-3-large': 3072,
102
+ 'text-embedding-ada-002': 1536,
103
+ };
104
+
105
+ return dimensionMap[model] ?? 1536;
106
+ }
107
+
108
+ /**
109
+ * 単一テキストの埋め込み生成
110
+ */
111
+ async embed(text: string): Promise<number[]> {
112
+ const embeddings = await this.embedBatchInternal([text]);
113
+ const result = embeddings[0];
114
+ if (!result) {
115
+ throw new Error('Failed to generate embedding');
116
+ }
117
+ return result;
118
+ }
119
+
120
+ /**
121
+ * バッチ埋め込み生成(OpenAI固有実装)
122
+ *
123
+ * OpenAI APIはネイティブでバッチ処理をサポート
124
+ */
125
+ protected override async embedBatchInternal(
126
+ texts: string[]
127
+ ): Promise<number[][]> {
128
+ return this.withRetry(async () => {
129
+ const url = `${this.baseUrl}/embeddings`;
130
+
131
+ const headers: Record<string, string> = {
132
+ 'Content-Type': 'application/json',
133
+ Authorization: `Bearer ${this.apiKey}`,
134
+ };
135
+
136
+ if (this.organization) {
137
+ headers['OpenAI-Organization'] = this.organization;
138
+ }
139
+
140
+ const body: Record<string, unknown> = {
141
+ model: this.model,
142
+ input: texts,
143
+ encoding_format: this.encodingFormat,
144
+ };
145
+
146
+ // 次元数指定(text-embedding-3系のみサポート)
147
+ if (
148
+ this._dimensions &&
149
+ (this.model.includes('text-embedding-3') ||
150
+ this.baseUrl !== 'https://api.openai.com/v1')
151
+ ) {
152
+ body.dimensions = this._dimensions;
153
+ }
154
+
155
+ const response = await this.fetchWithTimeout(
156
+ url,
157
+ {
158
+ method: 'POST',
159
+ headers,
160
+ body: JSON.stringify(body),
161
+ },
162
+ this.config.timeout
163
+ );
164
+
165
+ const data = (await response.json()) as OpenAIEmbeddingResponse;
166
+
167
+ // インデックス順にソート
168
+ const sortedData = [...data.data].sort((a, b) => a.index - b.index);
169
+
170
+ // 実際の次元数を更新
171
+ const firstItem = sortedData[0];
172
+ if (firstItem) {
173
+ this._dimensions = firstItem.embedding.length;
174
+ }
175
+
176
+ return sortedData.map((d) => d.embedding);
177
+ });
178
+ }
179
+
180
+ /**
181
+ * 利用可能なモデル一覧取得
182
+ */
183
+ async listModels(): Promise<string[]> {
184
+ const url = `${this.baseUrl}/models`;
185
+
186
+ const headers: Record<string, string> = {
187
+ Authorization: `Bearer ${this.apiKey}`,
188
+ };
189
+
190
+ if (this.organization) {
191
+ headers['OpenAI-Organization'] = this.organization;
192
+ }
193
+
194
+ const response = await this.fetchWithTimeout(url, {
195
+ method: 'GET',
196
+ headers,
197
+ });
198
+
199
+ interface OpenAIModelsResponse {
200
+ data: Array<{ id: string; owned_by: string }>;
201
+ }
202
+
203
+ const data = (await response.json()) as OpenAIModelsResponse;
204
+
205
+ // embeddingモデルをフィルタ
206
+ return data.data.filter((m) => m.id.includes('embedding')).map((m) => m.id);
207
+ }
208
+ }
209
+
210
+ /**
211
+ * OpenAI互換プロバイダー(ファクトリ関数)
212
+ *
213
+ * vLLM, LocalAI, LM Studio等のOpenAI互換エンドポイント用
214
+ */
215
+ export function createOpenAICompatibleEmbeddingProvider(
216
+ baseUrl: string,
217
+ model: string,
218
+ config: Partial<OpenAIEmbeddingConfig> = {}
219
+ ): OpenAIEmbeddingProvider {
220
+ return new OpenAIEmbeddingProvider({
221
+ ...config,
222
+ baseUrl,
223
+ model,
224
+ apiKey: config.apiKey ?? 'not-required', // 一部のローカルAPIはキー不要
225
+ });
226
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Embedding module exports
3
+ */
4
+
5
+ // Manager
6
+ export { EmbeddingManager } from './EmbeddingManager.js';
7
+
8
+ // Base
9
+ export { BaseEmbeddingProvider } from './BaseEmbeddingProvider.js';
10
+
11
+ // Providers
12
+ export { MockEmbeddingProvider } from './MockEmbeddingProvider.js';
13
+ export type { MockEmbeddingProviderConfig } from './MockEmbeddingProvider.js';
14
+
15
+ export { OllamaEmbeddingProvider } from './OllamaEmbeddingProvider.js';
16
+ export type { OllamaEmbeddingConfig } from './OllamaEmbeddingProvider.js';
17
+
18
+ export { OpenAIEmbeddingProvider, createOpenAICompatibleEmbeddingProvider } from './OpenAIEmbeddingProvider.js';
19
+ export type { OpenAIEmbeddingConfig } from './OpenAIEmbeddingProvider.js';
20
+
21
+ export { AzureOpenAIEmbeddingProvider } from './AzureOpenAIEmbeddingProvider.js';
22
+ export type { AzureOpenAIEmbeddingConfig } from './AzureOpenAIEmbeddingProvider.js';
23
+
24
+ // Factory
25
+ export {
26
+ EmbeddingFactory,
27
+ createEmbeddingProvider,
28
+ getDefaultEmbeddingProvider,
29
+ } from './EmbeddingFactory.js';
30
+ export type {
31
+ EmbeddingProviderType,
32
+ EmbeddingProviderConfigMap,
33
+ } from './EmbeddingFactory.js';
package/src/index.ts ADDED
@@ -0,0 +1,55 @@
1
+ /**
2
+ * RAG Package - Main Entry Point
3
+ *
4
+ * @packageDocumentation
5
+ * @module @nahisaho/katashiro-rag
6
+ */
7
+
8
+ // Types
9
+ export type {
10
+ Document,
11
+ Chunk,
12
+ SearchResult,
13
+ RetrievalResult,
14
+ Vector,
15
+ EmbeddingProvider,
16
+ VectorStore,
17
+ ChunkingConfig,
18
+ RetrieverConfig,
19
+ RAGEngineConfig,
20
+ } from './types.js';
21
+
22
+ // Embedding
23
+ export { EmbeddingManager } from './embedding/index.js';
24
+ export { MockEmbeddingProvider } from './embedding/index.js';
25
+ export type { MockEmbeddingProviderConfig } from './embedding/index.js';
26
+
27
+ // Vector Store
28
+ export { InMemoryVectorStore } from './vectordb/index.js';
29
+ export type { InMemoryVectorStoreConfig } from './vectordb/index.js';
30
+
31
+ // Chunking
32
+ export { DocumentChunker } from './chunking/index.js';
33
+
34
+ // Retriever
35
+ export { Retriever } from './Retriever.js';
36
+
37
+ // RAG Engine
38
+ export { RAGEngine } from './RAGEngine.js';
39
+
40
+ // RAG Pipeline (REQ-RAG-101)
41
+ export { RAGPipeline, DEFAULT_RAG_SYSTEM_PROMPT, DEFAULT_CONTEXT_TEMPLATE } from './RAGPipeline.js';
42
+ export type { RAGPipelineConfig, RAGPipelineResult, RAGQueryOptions } from './RAGPipeline.js';
43
+
44
+ // Reranking (REQ-RAG-103)
45
+ export {
46
+ LLMReranker,
47
+ rerankResults,
48
+ DEFAULT_RERANKER_CONFIG,
49
+ DEFAULT_RERANKER_PROMPT,
50
+ } from './reranking/index.js';
51
+ export type {
52
+ LLMRerankerConfig,
53
+ RerankedResult,
54
+ RerankerResponse,
55
+ } from './reranking/index.js';