@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,149 @@
1
+ /**
2
+ * LLM Provider Factory
3
+ *
4
+ * Esperanto-style factory for creating LLM providers
5
+ *
6
+ * @requirement REQ-LLM-001
7
+ * @design DES-KATASHIRO-003-LLM
8
+ */
9
+ import { MockLLMProvider } from './MockLLMProvider.js';
10
+ import { OllamaLLMProvider } from './OllamaLLMProvider.js';
11
+ import { OpenAILLMProvider } from './OpenAILLMProvider.js';
12
+ import { AzureOpenAILLMProvider } from './AzureOpenAILLMProvider.js';
13
+ /**
14
+ * 環境変数から設定を取得
15
+ */
16
+ function getConfigFromEnv(provider) {
17
+ switch (provider) {
18
+ case 'ollama':
19
+ return {
20
+ baseUrl: process.env.OLLAMA_BASE_URL ?? process.env.OLLAMA_HOST,
21
+ model: process.env.OLLAMA_MODEL,
22
+ };
23
+ case 'openai':
24
+ return {
25
+ apiKey: process.env.OPENAI_API_KEY,
26
+ organization: process.env.OPENAI_ORGANIZATION,
27
+ baseUrl: process.env.OPENAI_BASE_URL,
28
+ model: process.env.OPENAI_MODEL,
29
+ };
30
+ case 'openai-compatible':
31
+ return {
32
+ apiKey: process.env.OPENAI_COMPATIBLE_API_KEY_LLM ??
33
+ process.env.OPENAI_COMPATIBLE_API_KEY,
34
+ baseUrl: process.env.OPENAI_COMPATIBLE_BASE_URL_LLM ??
35
+ process.env.OPENAI_COMPATIBLE_BASE_URL,
36
+ };
37
+ case 'azure-openai':
38
+ return {
39
+ endpoint: process.env.AZURE_OPENAI_ENDPOINT,
40
+ apiKey: process.env.AZURE_OPENAI_API_KEY,
41
+ deploymentName: process.env.AZURE_OPENAI_DEPLOYMENT,
42
+ apiVersion: process.env.AZURE_OPENAI_API_VERSION,
43
+ };
44
+ default:
45
+ return {};
46
+ }
47
+ }
48
+ /**
49
+ * LLM Provider Factory
50
+ *
51
+ * Esperantoスタイルのファクトリクラス
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * // 利用可能なプロバイダーを確認
56
+ * const providers = LLMFactory.getAvailableProviders();
57
+ *
58
+ * // プロバイダーを作成
59
+ * const provider = LLMFactory.create('ollama', {
60
+ * baseUrl: 'http://192.168.224.1:11434',
61
+ * model: 'llama3.2',
62
+ * });
63
+ *
64
+ * // または環境変数から自動設定
65
+ * const provider = LLMFactory.create('openai');
66
+ * ```
67
+ */
68
+ export class LLMFactory {
69
+ /**
70
+ * プロバイダー作成
71
+ */
72
+ static create(provider, config) {
73
+ // 環境変数からの設定とマージ
74
+ const envConfig = getConfigFromEnv(provider);
75
+ const mergedConfig = { ...envConfig, ...config };
76
+ switch (provider) {
77
+ case 'mock':
78
+ return new MockLLMProvider(mergedConfig);
79
+ case 'ollama':
80
+ return new OllamaLLMProvider(mergedConfig);
81
+ case 'openai':
82
+ case 'openai-compatible':
83
+ return new OpenAILLMProvider(mergedConfig);
84
+ case 'azure-openai':
85
+ return new AzureOpenAILLMProvider(mergedConfig);
86
+ default:
87
+ throw new Error(`Unknown LLM provider: ${provider}`);
88
+ }
89
+ }
90
+ /**
91
+ * 利用可能なプロバイダー一覧
92
+ */
93
+ static getAvailableProviders() {
94
+ return ['mock', 'ollama', 'openai', 'openai-compatible', 'azure-openai'];
95
+ }
96
+ /**
97
+ * デフォルトプロバイダー取得
98
+ *
99
+ * 環境変数から自動判定
100
+ */
101
+ static getDefaultProvider() {
102
+ // 優先順位: AZURE > OPENAI > OLLAMA > MOCK
103
+ if (process.env.AZURE_OPENAI_ENDPOINT &&
104
+ process.env.AZURE_OPENAI_API_KEY) {
105
+ return this.create('azure-openai');
106
+ }
107
+ if (process.env.OPENAI_API_KEY) {
108
+ return this.create('openai');
109
+ }
110
+ if (process.env.OLLAMA_BASE_URL || process.env.OLLAMA_HOST) {
111
+ return this.create('ollama');
112
+ }
113
+ // フォールバック: モック
114
+ return this.create('mock');
115
+ }
116
+ /**
117
+ * プロバイダーの利用可能確認
118
+ */
119
+ static isProviderConfigured(provider) {
120
+ switch (provider) {
121
+ case 'mock':
122
+ return true;
123
+ case 'ollama':
124
+ return !!(process.env.OLLAMA_BASE_URL || process.env.OLLAMA_HOST);
125
+ case 'openai':
126
+ return !!process.env.OPENAI_API_KEY;
127
+ case 'openai-compatible':
128
+ return !!(process.env.OPENAI_COMPATIBLE_BASE_URL_LLM ||
129
+ process.env.OPENAI_COMPATIBLE_BASE_URL);
130
+ case 'azure-openai':
131
+ return !!(process.env.AZURE_OPENAI_ENDPOINT && process.env.AZURE_OPENAI_API_KEY);
132
+ default:
133
+ return false;
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * 便利関数: LLMプロバイダー作成
139
+ */
140
+ export function createLLMProvider(provider, config) {
141
+ return LLMFactory.create(provider, config);
142
+ }
143
+ /**
144
+ * 便利関数: デフォルトプロバイダー取得
145
+ */
146
+ export function getDefaultLLMProvider() {
147
+ return LLMFactory.getDefaultProvider();
148
+ }
149
+ //# sourceMappingURL=LLMFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMFactory.js","sourceRoot":"","sources":["../../src/providers/LLMFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Mock LLM Provider - テスト用モックプロバイダー
3
+ *
4
+ * @requirement REQ-LLM-001
5
+ * @design DES-KATASHIRO-003-LLM §3.1
6
+ */
7
+ import type { ZodType, z } from 'zod';
8
+ import type { LLMProvider, GenerateRequest, GenerateResponse, StreamChunk } from '../types.js';
9
+ /**
10
+ * モックプロバイダー設定
11
+ */
12
+ export interface MockProviderConfig {
13
+ /** デフォルトレスポンス */
14
+ defaultResponse?: string;
15
+ /** 遅延(ミリ秒) */
16
+ delay?: number;
17
+ /** エラーを発生させるか */
18
+ shouldFail?: boolean;
19
+ /** エラーメッセージ */
20
+ errorMessage?: string;
21
+ /** カスタムレスポンス生成関数 */
22
+ responseGenerator?: (request: GenerateRequest) => string;
23
+ }
24
+ /**
25
+ * テスト用モックLLMプロバイダー
26
+ */
27
+ export declare class MockLLMProvider implements LLMProvider {
28
+ readonly name = "mock";
29
+ readonly supportedModels: string[];
30
+ private config;
31
+ private callCount;
32
+ private callHistory;
33
+ constructor(config?: MockProviderConfig);
34
+ /**
35
+ * 呼び出し回数取得
36
+ */
37
+ getCallCount(): number;
38
+ /**
39
+ * 呼び出し履歴取得
40
+ */
41
+ getCallHistory(): GenerateRequest[];
42
+ /**
43
+ * リセット
44
+ */
45
+ reset(): void;
46
+ /**
47
+ * 設定更新
48
+ */
49
+ updateConfig(config: Partial<MockProviderConfig>): void;
50
+ generate(request: GenerateRequest): Promise<GenerateResponse>;
51
+ generateStream(request: GenerateRequest): AsyncGenerator<StreamChunk>;
52
+ generateStructured<T extends ZodType>(request: GenerateRequest, schema: T): Promise<z.infer<T>>;
53
+ countTokens(text: string, _model?: string): Promise<number>;
54
+ private estimateTokens;
55
+ private sleep;
56
+ }
57
+ //# sourceMappingURL=MockLLMProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockLLMProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MockLLMProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,MAAM,CAAC;CAC1D;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,eAAe,WAAmC;IAE3D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAyB;gBAEhC,MAAM,GAAE,kBAAuB;IAS3C;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,cAAc,IAAI,eAAe,EAAE;IAInC;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAIjD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+B5D,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC;IAiCtE,kBAAkB,CAAC,CAAC,SAAS,OAAO,EACxC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAahB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Mock LLM Provider - テスト用モックプロバイダー
3
+ *
4
+ * @requirement REQ-LLM-001
5
+ * @design DES-KATASHIRO-003-LLM §3.1
6
+ */
7
+ /**
8
+ * テスト用モックLLMプロバイダー
9
+ */
10
+ export class MockLLMProvider {
11
+ name = 'mock';
12
+ supportedModels = ['mock-model', 'mock-model-v2'];
13
+ config;
14
+ callCount = 0;
15
+ callHistory = [];
16
+ constructor(config = {}) {
17
+ this.config = {
18
+ defaultResponse: 'This is a mock response.',
19
+ delay: 0,
20
+ shouldFail: false,
21
+ ...config,
22
+ };
23
+ }
24
+ /**
25
+ * 呼び出し回数取得
26
+ */
27
+ getCallCount() {
28
+ return this.callCount;
29
+ }
30
+ /**
31
+ * 呼び出し履歴取得
32
+ */
33
+ getCallHistory() {
34
+ return [...this.callHistory];
35
+ }
36
+ /**
37
+ * リセット
38
+ */
39
+ reset() {
40
+ this.callCount = 0;
41
+ this.callHistory = [];
42
+ }
43
+ /**
44
+ * 設定更新
45
+ */
46
+ updateConfig(config) {
47
+ this.config = { ...this.config, ...config };
48
+ }
49
+ async generate(request) {
50
+ this.callCount++;
51
+ this.callHistory.push(request);
52
+ if (this.config.delay && this.config.delay > 0) {
53
+ await this.sleep(this.config.delay);
54
+ }
55
+ if (this.config.shouldFail) {
56
+ throw new Error(this.config.errorMessage ?? 'Mock provider error');
57
+ }
58
+ const content = this.config.responseGenerator
59
+ ? this.config.responseGenerator(request)
60
+ : this.config.defaultResponse ?? '';
61
+ return {
62
+ id: `mock-${Date.now()}-${this.callCount}`,
63
+ model: request.model ?? 'mock-model',
64
+ content,
65
+ usage: {
66
+ promptTokens: this.estimateTokens(request.messages.map((m) => typeof m.content === 'string' ? m.content : '').join('')),
67
+ completionTokens: this.estimateTokens(content),
68
+ totalTokens: 0, // 後で計算
69
+ },
70
+ finishReason: 'stop',
71
+ };
72
+ }
73
+ async *generateStream(request) {
74
+ this.callCount++;
75
+ this.callHistory.push(request);
76
+ if (this.config.shouldFail) {
77
+ throw new Error(this.config.errorMessage ?? 'Mock provider error');
78
+ }
79
+ const content = this.config.responseGenerator
80
+ ? this.config.responseGenerator(request)
81
+ : this.config.defaultResponse ?? '';
82
+ // 文字ごとにストリーミング
83
+ const words = content.split(' ');
84
+ for (let i = 0; i < words.length; i++) {
85
+ if (this.config.delay && this.config.delay > 0) {
86
+ await this.sleep(this.config.delay / words.length);
87
+ }
88
+ yield { type: 'content', content: (i > 0 ? ' ' : '') + words[i] };
89
+ }
90
+ yield {
91
+ type: 'done',
92
+ usage: {
93
+ promptTokens: this.estimateTokens(request.messages.map((m) => typeof m.content === 'string' ? m.content : '').join('')),
94
+ completionTokens: this.estimateTokens(content),
95
+ totalTokens: 0,
96
+ },
97
+ };
98
+ }
99
+ async generateStructured(request, schema) {
100
+ this.callCount++;
101
+ this.callHistory.push(request);
102
+ if (this.config.shouldFail) {
103
+ throw new Error(this.config.errorMessage ?? 'Mock provider error');
104
+ }
105
+ // デフォルトの空オブジェクトを返す(実際のテストでは適切なデータを設定)
106
+ const defaultValue = {};
107
+ return schema.parse(defaultValue);
108
+ }
109
+ async countTokens(text, _model) {
110
+ return this.estimateTokens(text);
111
+ }
112
+ estimateTokens(text) {
113
+ // 簡易トークン推定: 4文字 ≈ 1トークン
114
+ return Math.ceil(text.length / 4);
115
+ }
116
+ sleep(ms) {
117
+ return new Promise((resolve) => setTimeout(resolve, ms));
118
+ }
119
+ }
120
+ //# sourceMappingURL=MockLLMProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockLLMProvider.js","sourceRoot":"","sources":["../../src/providers/MockLLMProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Ollama LLM Provider
3
+ *
4
+ * Local LLM provider using Ollama
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
+ * Ollama設定
14
+ */
15
+ export interface OllamaProviderConfig extends ProviderConfig {
16
+ /** ベースURL(デフォルト: http://localhost:11434) */
17
+ baseUrl?: string;
18
+ /** モデル名(デフォルト: llama3.2) */
19
+ model?: string;
20
+ /** Keep Alive(モデルをメモリに保持する時間) */
21
+ keepAlive?: string;
22
+ }
23
+ /**
24
+ * Ollama LLMプロバイダー
25
+ *
26
+ * ローカルでOllamaを使用したテキスト生成
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const provider = new OllamaLLMProvider({
31
+ * baseUrl: 'http://192.168.224.1:11434',
32
+ * model: 'llama3.2',
33
+ * });
34
+ *
35
+ * const response = await provider.generate({
36
+ * messages: [{ role: 'user', content: 'Hello!' }],
37
+ * });
38
+ * ```
39
+ */
40
+ export declare class OllamaLLMProvider extends BaseLLMProvider {
41
+ readonly name = "ollama";
42
+ readonly supportedModels: string[];
43
+ private readonly baseUrl;
44
+ private readonly model;
45
+ private readonly keepAlive;
46
+ constructor(config?: OllamaProviderConfig);
47
+ protected getDefaultModel(): string;
48
+ /**
49
+ * メッセージ形式変換
50
+ */
51
+ private convertMessages;
52
+ /**
53
+ * テキスト生成
54
+ */
55
+ generate(request: GenerateRequest): Promise<GenerateResponse>;
56
+ /**
57
+ * ストリーミング生成
58
+ */
59
+ generateStream(request: GenerateRequest): AsyncGenerator<StreamChunk>;
60
+ /**
61
+ * 構造化出力生成(Ollama JSON mode)
62
+ */
63
+ generateStructured<T extends ZodType>(request: GenerateRequest, schema: T): Promise<z.infer<T>>;
64
+ /**
65
+ * 利用可能なモデル一覧取得
66
+ */
67
+ listModels(): Promise<string[]>;
68
+ /**
69
+ * モデルの存在確認
70
+ */
71
+ isModelAvailable(modelName?: string): Promise<boolean>;
72
+ }
73
+ //# sourceMappingURL=OllamaLLMProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OllamaLLMProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OllamaLLMProvider.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,EAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,eAAe,WAiBtB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,GAAE,oBAAyB;IAQ7C,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8DnE;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC;IA6E5E;;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;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBrC;;OAEG;IACG,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ7D"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Ollama LLM Provider
3
+ *
4
+ * Local LLM provider using Ollama
5
+ *
6
+ * @requirement REQ-LLM-001
7
+ * @design DES-KATASHIRO-003-LLM
8
+ */
9
+ import { BaseLLMProvider } from './BaseLLMProvider.js';
10
+ /**
11
+ * Ollama LLMプロバイダー
12
+ *
13
+ * ローカルでOllamaを使用したテキスト生成
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const provider = new OllamaLLMProvider({
18
+ * baseUrl: 'http://192.168.224.1:11434',
19
+ * model: 'llama3.2',
20
+ * });
21
+ *
22
+ * const response = await provider.generate({
23
+ * messages: [{ role: 'user', content: 'Hello!' }],
24
+ * });
25
+ * ```
26
+ */
27
+ export class OllamaLLMProvider extends BaseLLMProvider {
28
+ name = 'ollama';
29
+ supportedModels = [
30
+ 'llama3.2',
31
+ 'llama3.2:1b',
32
+ 'llama3.2:3b',
33
+ 'llama3.1',
34
+ 'llama3.1:8b',
35
+ 'llama3.1:70b',
36
+ 'qwen2.5',
37
+ 'qwen2.5:7b',
38
+ 'qwen2.5:14b',
39
+ 'qwen2.5:32b',
40
+ 'qwen2.5-coder',
41
+ 'mistral',
42
+ 'mixtral',
43
+ 'gemma2',
44
+ 'phi3',
45
+ 'codellama',
46
+ ];
47
+ baseUrl;
48
+ model;
49
+ keepAlive;
50
+ constructor(config = {}) {
51
+ super(config);
52
+ this.baseUrl = config.baseUrl ?? 'http://localhost:11434';
53
+ this.model = config.model ?? config.defaultModel ?? 'llama3.2';
54
+ this.keepAlive = config.keepAlive ?? '5m';
55
+ }
56
+ getDefaultModel() {
57
+ return 'llama3.2';
58
+ }
59
+ /**
60
+ * メッセージ形式変換
61
+ */
62
+ convertMessages(messages) {
63
+ return messages.map((msg) => ({
64
+ role: msg.role === 'tool' ? 'assistant' : msg.role,
65
+ content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),
66
+ }));
67
+ }
68
+ /**
69
+ * テキスト生成
70
+ */
71
+ async generate(request) {
72
+ const url = `${this.baseUrl}/api/chat`;
73
+ const model = request.model ?? this.model;
74
+ const controller = new AbortController();
75
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout ?? 30000);
76
+ try {
77
+ const response = await fetch(url, {
78
+ method: 'POST',
79
+ headers: {
80
+ 'Content-Type': 'application/json',
81
+ },
82
+ body: JSON.stringify({
83
+ model,
84
+ messages: this.convertMessages(request.messages),
85
+ stream: false,
86
+ keep_alive: this.keepAlive,
87
+ options: {
88
+ temperature: request.temperature ?? 0.7,
89
+ top_p: request.topP,
90
+ num_predict: request.maxTokens,
91
+ stop: request.stopSequences,
92
+ },
93
+ format: request.responseFormat?.type === 'json_object' ? 'json' : undefined,
94
+ }),
95
+ signal: controller.signal,
96
+ });
97
+ if (!response.ok) {
98
+ const errorText = await response.text();
99
+ throw new Error(`Ollama API error: ${response.status} - ${errorText}`);
100
+ }
101
+ const data = (await response.json());
102
+ // トークン数推定
103
+ const usage = {
104
+ promptTokens: data.prompt_eval_count ?? 0,
105
+ completionTokens: data.eval_count ?? 0,
106
+ totalTokens: (data.prompt_eval_count ?? 0) + (data.eval_count ?? 0),
107
+ };
108
+ return {
109
+ id: `ollama-${Date.now()}`,
110
+ model: data.model,
111
+ content: data.message.content,
112
+ usage,
113
+ finishReason: 'stop',
114
+ metadata: {
115
+ totalDuration: data.total_duration,
116
+ loadDuration: data.load_duration,
117
+ },
118
+ };
119
+ }
120
+ finally {
121
+ clearTimeout(timeoutId);
122
+ }
123
+ }
124
+ /**
125
+ * ストリーミング生成
126
+ */
127
+ async *generateStream(request) {
128
+ const url = `${this.baseUrl}/api/chat`;
129
+ const model = request.model ?? this.model;
130
+ const response = await fetch(url, {
131
+ method: 'POST',
132
+ headers: {
133
+ 'Content-Type': 'application/json',
134
+ },
135
+ body: JSON.stringify({
136
+ model,
137
+ messages: this.convertMessages(request.messages),
138
+ stream: true,
139
+ keep_alive: this.keepAlive,
140
+ options: {
141
+ temperature: request.temperature ?? 0.7,
142
+ top_p: request.topP,
143
+ num_predict: request.maxTokens,
144
+ stop: request.stopSequences,
145
+ },
146
+ format: request.responseFormat?.type === 'json_object' ? 'json' : undefined,
147
+ }),
148
+ });
149
+ if (!response.ok || !response.body) {
150
+ const errorText = await response.text();
151
+ throw new Error(`Ollama API error: ${response.status} - ${errorText}`);
152
+ }
153
+ const reader = response.body.getReader();
154
+ const decoder = new TextDecoder();
155
+ let buffer = '';
156
+ try {
157
+ while (true) {
158
+ const { done, value } = await reader.read();
159
+ if (done)
160
+ break;
161
+ buffer += decoder.decode(value, { stream: true });
162
+ const lines = buffer.split('\n');
163
+ buffer = lines.pop() ?? '';
164
+ for (const line of lines) {
165
+ if (!line.trim())
166
+ continue;
167
+ try {
168
+ const chunk = JSON.parse(line);
169
+ if (chunk.message?.content) {
170
+ yield {
171
+ type: 'content',
172
+ content: chunk.message.content,
173
+ };
174
+ }
175
+ if (chunk.done) {
176
+ yield {
177
+ type: 'usage',
178
+ usage: {
179
+ promptTokens: chunk.prompt_eval_count ?? 0,
180
+ completionTokens: chunk.eval_count ?? 0,
181
+ totalTokens: (chunk.prompt_eval_count ?? 0) + (chunk.eval_count ?? 0),
182
+ },
183
+ };
184
+ yield { type: 'done' };
185
+ }
186
+ }
187
+ catch {
188
+ // JSON parse error - skip
189
+ }
190
+ }
191
+ }
192
+ }
193
+ finally {
194
+ reader.releaseLock();
195
+ }
196
+ }
197
+ /**
198
+ * 構造化出力生成(Ollama JSON mode)
199
+ */
200
+ async generateStructured(request, schema) {
201
+ const jsonSchema = this.zodToJsonSchema(schema);
202
+ const enhancedRequest = {
203
+ ...request,
204
+ responseFormat: { type: 'json_object' },
205
+ messages: [
206
+ ...request.messages,
207
+ {
208
+ role: 'user',
209
+ content: `Respond with valid JSON matching this schema:\n${JSON.stringify(jsonSchema, null, 2)}`,
210
+ },
211
+ ],
212
+ };
213
+ const response = await this.generate(enhancedRequest);
214
+ const parsed = JSON.parse(response.content);
215
+ return schema.parse(parsed);
216
+ }
217
+ /**
218
+ * 利用可能なモデル一覧取得
219
+ */
220
+ async listModels() {
221
+ const url = `${this.baseUrl}/api/tags`;
222
+ const response = await fetch(url);
223
+ if (!response.ok) {
224
+ throw new Error(`Failed to list models: ${response.status}`);
225
+ }
226
+ const data = (await response.json());
227
+ return data.models.map((m) => m.name);
228
+ }
229
+ /**
230
+ * モデルの存在確認
231
+ */
232
+ async isModelAvailable(modelName) {
233
+ try {
234
+ const models = await this.listModels();
235
+ return models.some((m) => m.includes(modelName ?? this.model));
236
+ }
237
+ catch {
238
+ return false;
239
+ }
240
+ }
241
+ }
242
+ //# sourceMappingURL=OllamaLLMProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OllamaLLMProvider.js","sourceRoot":"","sources":["../../src/providers/OllamaLLMProvider.ts"],"names":[],"mappings":"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"}