@nahisaho/katashiro-llm 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 (62) hide show
  1. package/LICENSE +21 -0
  2. package/dist/LLMClient.d.ts +64 -0
  3. package/dist/LLMClient.d.ts.map +1 -0
  4. package/dist/LLMClient.js +139 -0
  5. package/dist/LLMClient.js.map +1 -0
  6. package/dist/PromptManager.d.ts +66 -0
  7. package/dist/PromptManager.d.ts.map +1 -0
  8. package/dist/PromptManager.js +121 -0
  9. package/dist/PromptManager.js.map +1 -0
  10. package/dist/TokenCounter.d.ts +43 -0
  11. package/dist/TokenCounter.d.ts.map +1 -0
  12. package/dist/TokenCounter.js +100 -0
  13. package/dist/TokenCounter.js.map +1 -0
  14. package/dist/index.d.ts +12 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +17 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/providers/AzureOpenAILLMProvider.d.ts +82 -0
  19. package/dist/providers/AzureOpenAILLMProvider.d.ts.map +1 -0
  20. package/dist/providers/AzureOpenAILLMProvider.js +339 -0
  21. package/dist/providers/AzureOpenAILLMProvider.js.map +1 -0
  22. package/dist/providers/BaseLLMProvider.d.ts +51 -0
  23. package/dist/providers/BaseLLMProvider.d.ts.map +1 -0
  24. package/dist/providers/BaseLLMProvider.js +72 -0
  25. package/dist/providers/BaseLLMProvider.js.map +1 -0
  26. package/dist/providers/LLMFactory.d.ts +75 -0
  27. package/dist/providers/LLMFactory.d.ts.map +1 -0
  28. package/dist/providers/LLMFactory.js +149 -0
  29. package/dist/providers/LLMFactory.js.map +1 -0
  30. package/dist/providers/MockLLMProvider.d.ts +57 -0
  31. package/dist/providers/MockLLMProvider.d.ts.map +1 -0
  32. package/dist/providers/MockLLMProvider.js +120 -0
  33. package/dist/providers/MockLLMProvider.js.map +1 -0
  34. package/dist/providers/OllamaLLMProvider.d.ts +73 -0
  35. package/dist/providers/OllamaLLMProvider.d.ts.map +1 -0
  36. package/dist/providers/OllamaLLMProvider.js +242 -0
  37. package/dist/providers/OllamaLLMProvider.js.map +1 -0
  38. package/dist/providers/OpenAILLMProvider.d.ts +87 -0
  39. package/dist/providers/OpenAILLMProvider.d.ts.map +1 -0
  40. package/dist/providers/OpenAILLMProvider.js +349 -0
  41. package/dist/providers/OpenAILLMProvider.js.map +1 -0
  42. package/dist/providers/index.d.ts +17 -0
  43. package/dist/providers/index.d.ts.map +1 -0
  44. package/dist/providers/index.js +19 -0
  45. package/dist/providers/index.js.map +1 -0
  46. package/dist/types.d.ts +251 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +8 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +51 -0
  51. package/src/LLMClient.ts +171 -0
  52. package/src/PromptManager.ts +156 -0
  53. package/src/TokenCounter.ts +114 -0
  54. package/src/index.ts +35 -0
  55. package/src/providers/AzureOpenAILLMProvider.ts +494 -0
  56. package/src/providers/BaseLLMProvider.ts +110 -0
  57. package/src/providers/LLMFactory.ts +216 -0
  58. package/src/providers/MockLLMProvider.ts +173 -0
  59. package/src/providers/OllamaLLMProvider.ts +322 -0
  60. package/src/providers/OpenAILLMProvider.ts +500 -0
  61. package/src/providers/index.ts +35 -0
  62. package/src/types.ts +268 -0
@@ -0,0 +1,87 @@
1
+ /**
2
+ * OpenAI LLM Provider
3
+ *
4
+ * OpenAI API provider for chat completions
5
+ *
6
+ * @requirement REQ-LLM-001
7
+ * @design DES-KATASHIRO-003-LLM
8
+ */
9
+ import type { z, ZodType } from 'zod';
10
+ import type { ProviderConfig, GenerateRequest, GenerateResponse, StreamChunk } from '../types.js';
11
+ import { BaseLLMProvider } from './BaseLLMProvider.js';
12
+ /**
13
+ * OpenAI設定
14
+ */
15
+ export interface OpenAIProviderConfig extends ProviderConfig {
16
+ /** APIキー */
17
+ apiKey?: string;
18
+ /** ベースURL(カスタムエンドポイント用) */
19
+ baseUrl?: string;
20
+ /** モデル名 */
21
+ model?: string;
22
+ /** 組織ID */
23
+ organization?: string;
24
+ }
25
+ /**
26
+ * OpenAI LLMプロバイダー
27
+ *
28
+ * OpenAI API(またはOpenAI互換API)を使用したテキスト生成
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * // OpenAI API
33
+ * const provider = new OpenAILLMProvider({
34
+ * apiKey: process.env.OPENAI_API_KEY,
35
+ * model: 'gpt-4o',
36
+ * });
37
+ *
38
+ * // OpenAI互換API(vLLM, LM Studio等)
39
+ * const localProvider = new OpenAILLMProvider({
40
+ * baseUrl: 'http://localhost:8000/v1',
41
+ * model: 'local-model',
42
+ * });
43
+ * ```
44
+ */
45
+ export declare class OpenAILLMProvider extends BaseLLMProvider {
46
+ readonly name = "openai";
47
+ readonly supportedModels: string[];
48
+ private readonly apiKey;
49
+ private readonly baseUrl;
50
+ private readonly model;
51
+ private readonly organization?;
52
+ constructor(config?: OpenAIProviderConfig);
53
+ protected getDefaultModel(): string;
54
+ /**
55
+ * メッセージ形式変換
56
+ */
57
+ private convertMessages;
58
+ /**
59
+ * ツール定義変換
60
+ */
61
+ private convertTools;
62
+ /**
63
+ * Finish Reason変換
64
+ */
65
+ private convertFinishReason;
66
+ /**
67
+ * テキスト生成
68
+ */
69
+ generate(request: GenerateRequest): Promise<GenerateResponse>;
70
+ /**
71
+ * ストリーミング生成
72
+ */
73
+ generateStream(request: GenerateRequest): AsyncGenerator<StreamChunk>;
74
+ /**
75
+ * 構造化出力生成
76
+ */
77
+ generateStructured<T extends ZodType>(request: GenerateRequest, schema: T): Promise<z.infer<T>>;
78
+ /**
79
+ * トークン数カウント(近似)
80
+ */
81
+ countTokens(text: string, _model?: string): Promise<number>;
82
+ }
83
+ /**
84
+ * OpenAI互換プロバイダー(ファクトリ関数)
85
+ */
86
+ export declare function createOpenAICompatibleLLMProvider(baseUrl: string, model: string, config?: Partial<OpenAIProviderConfig>): OpenAILLMProvider;
87
+ //# sourceMappingURL=OpenAILLMProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAILLMProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAILLMProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,WAAW,EAMZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,eAAe,WAStB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;gBAE3B,MAAM,GAAE,oBAAyB;IAS7C,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuFnE;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC;IAqI5E;;OAEG;IACY,kBAAkB,CAAC,CAAC,SAAS,OAAO,EACjD,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAoBtB;;OAEG;IACY,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAO3E;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM,GACzC,iBAAiB,CAOnB"}
@@ -0,0 +1,349 @@
1
+ /**
2
+ * OpenAI LLM Provider
3
+ *
4
+ * OpenAI API provider for chat completions
5
+ *
6
+ * @requirement REQ-LLM-001
7
+ * @design DES-KATASHIRO-003-LLM
8
+ */
9
+ import { BaseLLMProvider } from './BaseLLMProvider.js';
10
+ /**
11
+ * OpenAI LLMプロバイダー
12
+ *
13
+ * OpenAI API(またはOpenAI互換API)を使用したテキスト生成
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // OpenAI API
18
+ * const provider = new OpenAILLMProvider({
19
+ * apiKey: process.env.OPENAI_API_KEY,
20
+ * model: 'gpt-4o',
21
+ * });
22
+ *
23
+ * // OpenAI互換API(vLLM, LM Studio等)
24
+ * const localProvider = new OpenAILLMProvider({
25
+ * baseUrl: 'http://localhost:8000/v1',
26
+ * model: 'local-model',
27
+ * });
28
+ * ```
29
+ */
30
+ export class OpenAILLMProvider extends BaseLLMProvider {
31
+ name = 'openai';
32
+ supportedModels = [
33
+ 'gpt-4o',
34
+ 'gpt-4o-mini',
35
+ 'gpt-4-turbo',
36
+ 'gpt-4',
37
+ 'gpt-3.5-turbo',
38
+ 'o1',
39
+ 'o1-mini',
40
+ 'o1-preview',
41
+ ];
42
+ apiKey;
43
+ baseUrl;
44
+ model;
45
+ organization;
46
+ constructor(config = {}) {
47
+ super(config);
48
+ this.apiKey = config.apiKey ?? process.env.OPENAI_API_KEY ?? '';
49
+ this.baseUrl = config.baseUrl ?? 'https://api.openai.com/v1';
50
+ this.model = config.model ?? config.defaultModel ?? 'gpt-4o-mini';
51
+ this.organization = config.organization;
52
+ }
53
+ getDefaultModel() {
54
+ return 'gpt-4o-mini';
55
+ }
56
+ /**
57
+ * メッセージ形式変換
58
+ */
59
+ convertMessages(messages) {
60
+ return messages.map((msg) => {
61
+ const converted = {
62
+ role: msg.role,
63
+ content: typeof msg.content === 'string'
64
+ ? msg.content
65
+ : JSON.stringify(msg.content),
66
+ };
67
+ if (msg.name)
68
+ converted.name = msg.name;
69
+ if (msg.toolCallId)
70
+ converted.tool_call_id = msg.toolCallId;
71
+ if (msg.toolCalls) {
72
+ converted.tool_calls = msg.toolCalls.map((tc) => ({
73
+ id: tc.id,
74
+ type: tc.type,
75
+ function: tc.function,
76
+ }));
77
+ }
78
+ return converted;
79
+ });
80
+ }
81
+ /**
82
+ * ツール定義変換
83
+ */
84
+ convertTools(tools) {
85
+ if (!tools)
86
+ return undefined;
87
+ return tools.map((tool) => ({
88
+ type: tool.type,
89
+ function: {
90
+ name: tool.function.name,
91
+ description: tool.function.description,
92
+ parameters: tool.function.parameters,
93
+ },
94
+ }));
95
+ }
96
+ /**
97
+ * Finish Reason変換
98
+ */
99
+ convertFinishReason(reason) {
100
+ switch (reason) {
101
+ case 'stop':
102
+ return 'stop';
103
+ case 'length':
104
+ return 'length';
105
+ case 'tool_calls':
106
+ return 'tool_calls';
107
+ case 'content_filter':
108
+ return 'content_filter';
109
+ default:
110
+ return 'stop';
111
+ }
112
+ }
113
+ /**
114
+ * テキスト生成
115
+ */
116
+ async generate(request) {
117
+ const url = `${this.baseUrl}/chat/completions`;
118
+ const model = request.model ?? this.model;
119
+ const headers = {
120
+ 'Content-Type': 'application/json',
121
+ Authorization: `Bearer ${this.apiKey}`,
122
+ };
123
+ if (this.organization) {
124
+ headers['OpenAI-Organization'] = this.organization;
125
+ }
126
+ const body = {
127
+ model,
128
+ messages: this.convertMessages(request.messages),
129
+ temperature: request.temperature,
130
+ max_tokens: request.maxTokens,
131
+ top_p: request.topP,
132
+ stop: request.stopSequences,
133
+ user: request.user,
134
+ };
135
+ if (request.tools) {
136
+ body.tools = this.convertTools(request.tools);
137
+ body.tool_choice = request.toolChoice;
138
+ }
139
+ if (request.responseFormat) {
140
+ body.response_format = {
141
+ type: request.responseFormat.type,
142
+ };
143
+ }
144
+ const controller = new AbortController();
145
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout ?? 30000);
146
+ try {
147
+ const response = await fetch(url, {
148
+ method: 'POST',
149
+ headers,
150
+ body: JSON.stringify(body),
151
+ signal: controller.signal,
152
+ });
153
+ if (!response.ok) {
154
+ const errorText = await response.text();
155
+ throw new Error(`OpenAI API error: ${response.status} - ${errorText}`);
156
+ }
157
+ const data = (await response.json());
158
+ const choice = data.choices[0];
159
+ if (!choice) {
160
+ throw new Error('No choices returned from OpenAI API');
161
+ }
162
+ const toolCalls = choice.message.tool_calls?.map((tc) => ({
163
+ id: tc.id,
164
+ type: tc.type,
165
+ function: tc.function,
166
+ }));
167
+ const usage = {
168
+ promptTokens: data.usage.prompt_tokens,
169
+ completionTokens: data.usage.completion_tokens,
170
+ totalTokens: data.usage.total_tokens,
171
+ };
172
+ return {
173
+ id: data.id,
174
+ model: data.model,
175
+ content: choice.message.content ?? '',
176
+ toolCalls,
177
+ usage,
178
+ finishReason: this.convertFinishReason(choice.finish_reason),
179
+ };
180
+ }
181
+ finally {
182
+ clearTimeout(timeoutId);
183
+ }
184
+ }
185
+ /**
186
+ * ストリーミング生成
187
+ */
188
+ async *generateStream(request) {
189
+ const url = `${this.baseUrl}/chat/completions`;
190
+ const model = request.model ?? this.model;
191
+ const headers = {
192
+ 'Content-Type': 'application/json',
193
+ Authorization: `Bearer ${this.apiKey}`,
194
+ };
195
+ if (this.organization) {
196
+ headers['OpenAI-Organization'] = this.organization;
197
+ }
198
+ const body = {
199
+ model,
200
+ messages: this.convertMessages(request.messages),
201
+ temperature: request.temperature,
202
+ max_tokens: request.maxTokens,
203
+ top_p: request.topP,
204
+ stop: request.stopSequences,
205
+ user: request.user,
206
+ stream: true,
207
+ stream_options: { include_usage: true },
208
+ };
209
+ if (request.tools) {
210
+ body.tools = this.convertTools(request.tools);
211
+ body.tool_choice = request.toolChoice;
212
+ }
213
+ const response = await fetch(url, {
214
+ method: 'POST',
215
+ headers,
216
+ body: JSON.stringify(body),
217
+ });
218
+ if (!response.ok || !response.body) {
219
+ const errorText = await response.text();
220
+ throw new Error(`OpenAI API error: ${response.status} - ${errorText}`);
221
+ }
222
+ const reader = response.body.getReader();
223
+ const decoder = new TextDecoder();
224
+ let buffer = '';
225
+ // ツール呼び出しを累積
226
+ const toolCallsMap = new Map();
227
+ try {
228
+ while (true) {
229
+ const { done, value } = await reader.read();
230
+ if (done)
231
+ break;
232
+ buffer += decoder.decode(value, { stream: true });
233
+ const lines = buffer.split('\n');
234
+ buffer = lines.pop() ?? '';
235
+ for (const line of lines) {
236
+ if (!line.startsWith('data: '))
237
+ continue;
238
+ const data = line.slice(6).trim();
239
+ if (data === '[DONE]') {
240
+ yield { type: 'done' };
241
+ continue;
242
+ }
243
+ try {
244
+ const chunk = JSON.parse(data);
245
+ const delta = chunk.choices[0]?.delta;
246
+ if (delta?.content) {
247
+ yield {
248
+ type: 'content',
249
+ content: delta.content,
250
+ };
251
+ }
252
+ if (delta?.tool_calls) {
253
+ for (const tc of delta.tool_calls) {
254
+ const existing = toolCallsMap.get(tc.index) ?? {
255
+ id: '',
256
+ name: '',
257
+ arguments: '',
258
+ };
259
+ if (tc.id)
260
+ existing.id = tc.id;
261
+ if (tc.function?.name)
262
+ existing.name = tc.function.name;
263
+ if (tc.function?.arguments) {
264
+ existing.arguments += tc.function.arguments;
265
+ }
266
+ toolCallsMap.set(tc.index, existing);
267
+ }
268
+ }
269
+ if (chunk.usage) {
270
+ yield {
271
+ type: 'usage',
272
+ usage: {
273
+ promptTokens: chunk.usage.prompt_tokens,
274
+ completionTokens: chunk.usage.completion_tokens,
275
+ totalTokens: chunk.usage.total_tokens,
276
+ },
277
+ };
278
+ }
279
+ // ツール呼び出し完了時
280
+ const finishReason = chunk.choices[0]?.finish_reason;
281
+ if (finishReason === 'tool_calls') {
282
+ for (const [, tc] of toolCallsMap) {
283
+ yield {
284
+ type: 'tool_call',
285
+ toolCall: {
286
+ id: tc.id,
287
+ type: 'function',
288
+ function: {
289
+ name: tc.name,
290
+ arguments: tc.arguments,
291
+ },
292
+ },
293
+ };
294
+ }
295
+ }
296
+ }
297
+ catch {
298
+ // JSON parse error - skip
299
+ }
300
+ }
301
+ }
302
+ }
303
+ finally {
304
+ reader.releaseLock();
305
+ }
306
+ }
307
+ /**
308
+ * 構造化出力生成
309
+ */
310
+ async generateStructured(request, schema) {
311
+ const jsonSchema = this.zodToJsonSchema(schema);
312
+ const enhancedRequest = {
313
+ ...request,
314
+ responseFormat: { type: 'json_object' },
315
+ messages: [
316
+ ...request.messages,
317
+ {
318
+ role: 'user',
319
+ content: `Respond with valid JSON matching this schema:\n${JSON.stringify(jsonSchema, null, 2)}`,
320
+ },
321
+ ],
322
+ };
323
+ const response = await this.generate(enhancedRequest);
324
+ const parsed = JSON.parse(response.content);
325
+ return schema.parse(parsed);
326
+ }
327
+ /**
328
+ * トークン数カウント(近似)
329
+ */
330
+ async countTokens(text, _model) {
331
+ // tiktoken互換の近似計算
332
+ // 英語: ~4文字/トークン, 日本語: ~2文字/トークン
333
+ const englishChars = text.replace(/[^\x00-\x7F]/g, '').length;
334
+ const nonEnglishChars = text.length - englishChars;
335
+ return Math.ceil(englishChars / 4 + nonEnglishChars / 2);
336
+ }
337
+ }
338
+ /**
339
+ * OpenAI互換プロバイダー(ファクトリ関数)
340
+ */
341
+ export function createOpenAICompatibleLLMProvider(baseUrl, model, config = {}) {
342
+ return new OpenAILLMProvider({
343
+ ...config,
344
+ baseUrl,
345
+ model,
346
+ apiKey: config.apiKey ?? 'not-required',
347
+ });
348
+ }
349
+ //# sourceMappingURL=OpenAILLMProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAILLMProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAILLMProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAsFvD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IAC3C,IAAI,GAAG,QAAQ,CAAC;IAChB,eAAe,GAAG;QACzB,QAAQ;QACR,aAAa;QACb,aAAa;QACb,OAAO;QACP,eAAe;QACf,IAAI;QACJ,SAAS;QACT,YAAY;KACb,CAAC;IAEe,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,YAAY,CAAU;IAEvC,YAAY,SAA+B,EAAE;QAC3C,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,2BAA2B,CAAC;QAC7D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY,IAAI,aAAa,CAAC;QAClE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAES,eAAe;QACvB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAmB;QACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAkB;gBAC/B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;oBAC7B,CAAC,CAAC,GAAG,CAAC,OAAO;oBACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;aAClC,CAAC;YAEF,IAAI,GAAG,CAAC,IAAI;gBAAE,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACxC,IAAI,GAAG,CAAC,UAAU;gBAAE,SAAS,CAAC,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC;YAC5D,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,SAAS,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAChD,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;iBACtB,CAAC,CAAC,CAAC;YACN,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAwB;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;gBACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;aACrC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,MAAqB;QAErB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB,KAAK,YAAY;gBACf,OAAO,YAAY,CAAC;YACtB,KAAK,gBAAgB;gBACnB,OAAO,gBAAgB,CAAC;YAC1B;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,mBAAmB,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAE1C,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;SACvC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAA4B;YACpC,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,IAAI,EAAE,OAAO,CAAC,aAAa;YAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG;gBACrB,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI;aAClC,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAC1B,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAC7B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;YAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,SAAS,GAA2B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CACtE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACP,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;aACtB,CAAC,CACH,CAAC;YAEF,MAAM,KAAK,GAAe;gBACxB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;gBACtC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;gBAC9C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;aACrC,CAAC;YAEF,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE;gBACrC,SAAS;gBACT,KAAK;gBACL,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,aAAa,CAAC;aAC7D,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,cAAc,CAAC,OAAwB;QAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,mBAAmB,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAE1C,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;SACvC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAA4B;YACpC,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,IAAI,EAAE,OAAO,CAAC,aAAa;YAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;SACxC,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACxC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,aAAa;QACb,MAAM,YAAY,GAAG,IAAI,GAAG,EAGzB,CAAC;QAEJ,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACtB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wBACvB,SAAS;oBACX,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC;wBACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;wBAEtC,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;4BACnB,MAAM;gCACJ,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB,CAAC;wBACJ,CAAC;wBAED,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;4BACtB,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gCAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;oCAC7C,EAAE,EAAE,EAAE;oCACN,IAAI,EAAE,EAAE;oCACR,SAAS,EAAE,EAAE;iCACd,CAAC;gCACF,IAAI,EAAE,CAAC,EAAE;oCAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gCAC/B,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI;oCAAE,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gCACxD,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;oCAC3B,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;gCAC9C,CAAC;gCACD,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;4BACvC,CAAC;wBACH,CAAC;wBAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;4BAChB,MAAM;gCACJ,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE;oCACL,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa;oCACvC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB;oCAC/C,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;iCACtC;6BACF,CAAC;wBACJ,CAAC;wBAED,aAAa;wBACb,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC;wBACrD,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;4BAClC,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;gCAClC,MAAM;oCACJ,IAAI,EAAE,WAAW;oCACjB,QAAQ,EAAE;wCACR,EAAE,EAAE,EAAE,CAAC,EAAE;wCACT,IAAI,EAAE,UAAU;wCAChB,QAAQ,EAAE;4CACR,IAAI,EAAE,EAAE,CAAC,IAAI;4CACb,SAAS,EAAE,EAAE,CAAC,SAAS;yCACxB;qCACF;iCACF,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,0BAA0B;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,kBAAkB,CAC/B,OAAwB,EACxB,MAAS;QAET,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,eAAe,GAAoB;YACvC,GAAG,OAAO;YACV,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;YACvC,QAAQ,EAAE;gBACR,GAAG,OAAO,CAAC,QAAQ;gBACnB;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,kDAAkD,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBACjG;aACF;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,MAAe;QACtD,kBAAkB;QAClB,gCAAgC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAC/C,OAAe,EACf,KAAa,EACb,SAAwC,EAAE;IAE1C,OAAO,IAAI,iBAAiB,CAAC;QAC3B,GAAG,MAAM;QACT,OAAO;QACP,KAAK;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc;KACxC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * LLM Providers Index
3
+ *
4
+ * @requirement REQ-LLM-001
5
+ * @design DES-KATASHIRO-003-LLM
6
+ */
7
+ export { BaseLLMProvider } from './BaseLLMProvider.js';
8
+ export { MockLLMProvider, type MockProviderConfig } from './MockLLMProvider.js';
9
+ export { OllamaLLMProvider } from './OllamaLLMProvider.js';
10
+ export type { OllamaProviderConfig } from './OllamaLLMProvider.js';
11
+ export { OpenAILLMProvider, createOpenAICompatibleLLMProvider } from './OpenAILLMProvider.js';
12
+ export type { OpenAIProviderConfig } from './OpenAILLMProvider.js';
13
+ export { AzureOpenAILLMProvider } from './AzureOpenAILLMProvider.js';
14
+ export type { AzureOpenAIProviderConfig } from './AzureOpenAILLMProvider.js';
15
+ export { LLMFactory, createLLMProvider, getDefaultLLMProvider, } from './LLMFactory.js';
16
+ export type { LLMProviderType, LLMProviderConfigMap, } from './LLMFactory.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAC9F,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAG7E,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * LLM Providers Index
3
+ *
4
+ * @requirement REQ-LLM-001
5
+ * @design DES-KATASHIRO-003-LLM
6
+ */
7
+ // Base
8
+ export { BaseLLMProvider } from './BaseLLMProvider.js';
9
+ // Mock
10
+ export { MockLLMProvider } from './MockLLMProvider.js';
11
+ // Ollama
12
+ export { OllamaLLMProvider } from './OllamaLLMProvider.js';
13
+ // OpenAI
14
+ export { OpenAILLMProvider, createOpenAICompatibleLLMProvider } from './OpenAILLMProvider.js';
15
+ // Azure OpenAI
16
+ export { AzureOpenAILLMProvider } from './AzureOpenAILLMProvider.js';
17
+ // Factory
18
+ export { LLMFactory, createLLMProvider, getDefaultLLMProvider, } from './LLMFactory.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO;AACP,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO;AACP,OAAO,EAAE,eAAe,EAA2B,MAAM,sBAAsB,CAAC;AAEhF,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAG9F,eAAe;AACf,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,UAAU;AACV,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}