@modular-prompt/driver 0.4.5

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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +597 -0
  3. package/dist/anthropic/anthropic-driver.d.ts +47 -0
  4. package/dist/anthropic/anthropic-driver.d.ts.map +1 -0
  5. package/dist/anthropic/anthropic-driver.js +217 -0
  6. package/dist/anthropic/anthropic-driver.js.map +1 -0
  7. package/dist/driver-registry/ai-service.d.ts +43 -0
  8. package/dist/driver-registry/ai-service.d.ts.map +1 -0
  9. package/dist/driver-registry/ai-service.js +77 -0
  10. package/dist/driver-registry/ai-service.js.map +1 -0
  11. package/dist/driver-registry/config-based-factory.d.ts +64 -0
  12. package/dist/driver-registry/config-based-factory.d.ts.map +1 -0
  13. package/dist/driver-registry/config-based-factory.js +90 -0
  14. package/dist/driver-registry/config-based-factory.js.map +1 -0
  15. package/dist/driver-registry/factory-helper.d.ts +49 -0
  16. package/dist/driver-registry/factory-helper.d.ts.map +1 -0
  17. package/dist/driver-registry/factory-helper.js +109 -0
  18. package/dist/driver-registry/factory-helper.js.map +1 -0
  19. package/dist/driver-registry/index.d.ts +9 -0
  20. package/dist/driver-registry/index.d.ts.map +1 -0
  21. package/dist/driver-registry/index.js +8 -0
  22. package/dist/driver-registry/index.js.map +1 -0
  23. package/dist/driver-registry/registry.d.ts +50 -0
  24. package/dist/driver-registry/registry.d.ts.map +1 -0
  25. package/dist/driver-registry/registry.js +208 -0
  26. package/dist/driver-registry/registry.js.map +1 -0
  27. package/dist/driver-registry/types.d.ts +108 -0
  28. package/dist/driver-registry/types.d.ts.map +1 -0
  29. package/dist/driver-registry/types.js +6 -0
  30. package/dist/driver-registry/types.js.map +1 -0
  31. package/dist/echo-driver.d.ts +88 -0
  32. package/dist/echo-driver.d.ts.map +1 -0
  33. package/dist/echo-driver.js +198 -0
  34. package/dist/echo-driver.js.map +1 -0
  35. package/dist/formatter/completion-formatter.d.ts +27 -0
  36. package/dist/formatter/completion-formatter.d.ts.map +1 -0
  37. package/dist/formatter/completion-formatter.js +84 -0
  38. package/dist/formatter/completion-formatter.js.map +1 -0
  39. package/dist/formatter/converter.d.ts +20 -0
  40. package/dist/formatter/converter.d.ts.map +1 -0
  41. package/dist/formatter/converter.js +176 -0
  42. package/dist/formatter/converter.js.map +1 -0
  43. package/dist/formatter/element-formatters/base.d.ts +34 -0
  44. package/dist/formatter/element-formatters/base.d.ts.map +1 -0
  45. package/dist/formatter/element-formatters/base.js +36 -0
  46. package/dist/formatter/element-formatters/base.js.map +1 -0
  47. package/dist/formatter/element-formatters/chunk.d.ts +11 -0
  48. package/dist/formatter/element-formatters/chunk.d.ts.map +1 -0
  49. package/dist/formatter/element-formatters/chunk.js +12 -0
  50. package/dist/formatter/element-formatters/chunk.js.map +1 -0
  51. package/dist/formatter/element-formatters/index.d.ts +14 -0
  52. package/dist/formatter/element-formatters/index.d.ts.map +1 -0
  53. package/dist/formatter/element-formatters/index.js +15 -0
  54. package/dist/formatter/element-formatters/index.js.map +1 -0
  55. package/dist/formatter/element-formatters/json.d.ts +11 -0
  56. package/dist/formatter/element-formatters/json.d.ts.map +1 -0
  57. package/dist/formatter/element-formatters/json.js +27 -0
  58. package/dist/formatter/element-formatters/json.js.map +1 -0
  59. package/dist/formatter/element-formatters/material.d.ts +11 -0
  60. package/dist/formatter/element-formatters/material.d.ts.map +1 -0
  61. package/dist/formatter/element-formatters/material.js +35 -0
  62. package/dist/formatter/element-formatters/material.js.map +1 -0
  63. package/dist/formatter/element-formatters/message.d.ts +13 -0
  64. package/dist/formatter/element-formatters/message.d.ts.map +1 -0
  65. package/dist/formatter/element-formatters/message.js +35 -0
  66. package/dist/formatter/element-formatters/message.js.map +1 -0
  67. package/dist/formatter/element-formatters/registry.d.ts +29 -0
  68. package/dist/formatter/element-formatters/registry.d.ts.map +1 -0
  69. package/dist/formatter/element-formatters/registry.js +82 -0
  70. package/dist/formatter/element-formatters/registry.js.map +1 -0
  71. package/dist/formatter/element-formatters/section.d.ts +18 -0
  72. package/dist/formatter/element-formatters/section.d.ts.map +1 -0
  73. package/dist/formatter/element-formatters/section.js +46 -0
  74. package/dist/formatter/element-formatters/section.js.map +1 -0
  75. package/dist/formatter/element-formatters/string-pattern.d.ts +22 -0
  76. package/dist/formatter/element-formatters/string-pattern.d.ts.map +1 -0
  77. package/dist/formatter/element-formatters/string-pattern.js +124 -0
  78. package/dist/formatter/element-formatters/string-pattern.js.map +1 -0
  79. package/dist/formatter/element-formatters/text.d.ts +11 -0
  80. package/dist/formatter/element-formatters/text.d.ts.map +1 -0
  81. package/dist/formatter/element-formatters/text.js +11 -0
  82. package/dist/formatter/element-formatters/text.js.map +1 -0
  83. package/dist/formatter/formatter.d.ts +24 -0
  84. package/dist/formatter/formatter.d.ts.map +1 -0
  85. package/dist/formatter/formatter.js +252 -0
  86. package/dist/formatter/formatter.js.map +1 -0
  87. package/dist/formatter/types.d.ts +91 -0
  88. package/dist/formatter/types.d.ts.map +1 -0
  89. package/dist/formatter/types.js +2 -0
  90. package/dist/formatter/types.js.map +1 -0
  91. package/dist/google-genai/google-genai-driver.d.ts +67 -0
  92. package/dist/google-genai/google-genai-driver.d.ts.map +1 -0
  93. package/dist/google-genai/google-genai-driver.js +351 -0
  94. package/dist/google-genai/google-genai-driver.js.map +1 -0
  95. package/dist/index.d.ts +17 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +23 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/mlx-ml/mlx-driver.d.ts +65 -0
  100. package/dist/mlx-ml/mlx-driver.d.ts.map +1 -0
  101. package/dist/mlx-ml/mlx-driver.js +235 -0
  102. package/dist/mlx-ml/mlx-driver.js.map +1 -0
  103. package/dist/mlx-ml/model-spec/index.d.ts +7 -0
  104. package/dist/mlx-ml/model-spec/index.d.ts.map +1 -0
  105. package/dist/mlx-ml/model-spec/index.js +7 -0
  106. package/dist/mlx-ml/model-spec/index.js.map +1 -0
  107. package/dist/mlx-ml/model-spec/types.d.ts +30 -0
  108. package/dist/mlx-ml/model-spec/types.d.ts.map +1 -0
  109. package/dist/mlx-ml/model-spec/types.js +7 -0
  110. package/dist/mlx-ml/model-spec/types.js.map +1 -0
  111. package/dist/mlx-ml/process/index.d.ts +33 -0
  112. package/dist/mlx-ml/process/index.d.ts.map +1 -0
  113. package/dist/mlx-ml/process/index.js +65 -0
  114. package/dist/mlx-ml/process/index.js.map +1 -0
  115. package/dist/mlx-ml/process/model-handlers.d.ts +58 -0
  116. package/dist/mlx-ml/process/model-handlers.d.ts.map +1 -0
  117. package/dist/mlx-ml/process/model-handlers.js +197 -0
  118. package/dist/mlx-ml/process/model-handlers.js.map +1 -0
  119. package/dist/mlx-ml/process/model-specific.d.ts +35 -0
  120. package/dist/mlx-ml/process/model-specific.d.ts.map +1 -0
  121. package/dist/mlx-ml/process/model-specific.js +35 -0
  122. package/dist/mlx-ml/process/model-specific.js.map +1 -0
  123. package/dist/mlx-ml/process/parameter-mapper.d.ts +17 -0
  124. package/dist/mlx-ml/process/parameter-mapper.d.ts.map +1 -0
  125. package/dist/mlx-ml/process/parameter-mapper.js +91 -0
  126. package/dist/mlx-ml/process/parameter-mapper.js.map +1 -0
  127. package/dist/mlx-ml/process/parameter-validator.d.ts +55 -0
  128. package/dist/mlx-ml/process/parameter-validator.d.ts.map +1 -0
  129. package/dist/mlx-ml/process/parameter-validator.js +203 -0
  130. package/dist/mlx-ml/process/parameter-validator.js.map +1 -0
  131. package/dist/mlx-ml/process/process-communication.d.ts +25 -0
  132. package/dist/mlx-ml/process/process-communication.d.ts.map +1 -0
  133. package/dist/mlx-ml/process/process-communication.js +117 -0
  134. package/dist/mlx-ml/process/process-communication.js.map +1 -0
  135. package/dist/mlx-ml/process/queue.d.ts +30 -0
  136. package/dist/mlx-ml/process/queue.d.ts.map +1 -0
  137. package/dist/mlx-ml/process/queue.js +147 -0
  138. package/dist/mlx-ml/process/queue.js.map +1 -0
  139. package/dist/mlx-ml/process/types.d.ts +97 -0
  140. package/dist/mlx-ml/process/types.d.ts.map +1 -0
  141. package/dist/mlx-ml/process/types.js +2 -0
  142. package/dist/mlx-ml/process/types.js.map +1 -0
  143. package/dist/mlx-ml/types.d.ts +66 -0
  144. package/dist/mlx-ml/types.d.ts.map +1 -0
  145. package/dist/mlx-ml/types.js +7 -0
  146. package/dist/mlx-ml/types.js.map +1 -0
  147. package/dist/ollama/ollama-driver.d.ts +15 -0
  148. package/dist/ollama/ollama-driver.d.ts.map +1 -0
  149. package/dist/ollama/ollama-driver.js +15 -0
  150. package/dist/ollama/ollama-driver.js.map +1 -0
  151. package/dist/openai/openai-driver.d.ts +71 -0
  152. package/dist/openai/openai-driver.d.ts.map +1 -0
  153. package/dist/openai/openai-driver.js +230 -0
  154. package/dist/openai/openai-driver.js.map +1 -0
  155. package/dist/test-driver.d.ts +78 -0
  156. package/dist/test-driver.d.ts.map +1 -0
  157. package/dist/test-driver.js +193 -0
  158. package/dist/test-driver.js.map +1 -0
  159. package/dist/types.d.ts +90 -0
  160. package/dist/types.d.ts.map +1 -0
  161. package/dist/types.js +2 -0
  162. package/dist/types.js.map +1 -0
  163. package/dist/vertexai/vertexai-driver.d.ts +63 -0
  164. package/dist/vertexai/vertexai-driver.d.ts.map +1 -0
  165. package/dist/vertexai/vertexai-driver.js +335 -0
  166. package/dist/vertexai/vertexai-driver.js.map +1 -0
  167. package/package.json +61 -0
  168. package/scripts/download-model.js +40 -0
  169. package/scripts/setup-mlx.js +53 -0
  170. package/src/mlx-ml/python/.python-version +1 -0
  171. package/src/mlx-ml/python/__main__.py +312 -0
  172. package/src/mlx-ml/python/chat_template_constraints.py +164 -0
  173. package/src/mlx-ml/python/pyproject.toml +19 -0
  174. package/src/mlx-ml/python/token_utils.py +262 -0
  175. package/src/mlx-ml/python/uv.lock +1029 -0
@@ -0,0 +1,217 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import { extractJSON } from '@modular-prompt/utils';
3
+ /**
4
+ * Anthropic API driver
5
+ */
6
+ export class AnthropicDriver {
7
+ client;
8
+ defaultModel;
9
+ defaultOptions;
10
+ constructor(config = {}) {
11
+ this.client = new Anthropic({
12
+ apiKey: config.apiKey || process.env.ANTHROPIC_API_KEY
13
+ });
14
+ this.defaultModel = config.model || 'claude-3-5-sonnet-20241022';
15
+ this.defaultOptions = config.defaultOptions || {};
16
+ }
17
+ /**
18
+ * Convert CompiledPrompt to Anthropic messages
19
+ */
20
+ compiledPromptToAnthropic(prompt) {
21
+ let system;
22
+ const messages = [];
23
+ // Helper to process elements
24
+ const processElements = (elements) => {
25
+ const content = [];
26
+ for (const element of elements) {
27
+ if (typeof element === 'string') {
28
+ content.push(element);
29
+ }
30
+ else if (typeof element === 'object' && element !== null && 'type' in element) {
31
+ const el = element;
32
+ if (el.type === 'text') {
33
+ content.push(el.content);
34
+ }
35
+ else if (el.type === 'message') {
36
+ // Handle message elements separately
37
+ const role = el.role === 'system' ? 'system' : el.role === 'user' ? 'user' : 'assistant';
38
+ const messageContent = typeof el.content === 'string' ? el.content : JSON.stringify(el.content);
39
+ if (role === 'system') {
40
+ system = system ? `${system}\n\n${messageContent}` : messageContent;
41
+ }
42
+ else {
43
+ messages.push({ role: role, content: messageContent });
44
+ }
45
+ }
46
+ else if (el.type === 'section' || el.type === 'subsection') {
47
+ // Process section content
48
+ if (el.title)
49
+ content.push(`## ${el.title}`);
50
+ if (el.items) {
51
+ for (const item of el.items) {
52
+ if (typeof item === 'string') {
53
+ content.push(item);
54
+ }
55
+ else if (typeof item === 'object' && item !== null && 'type' in item && item.type === 'subsection') {
56
+ if (item.title)
57
+ content.push(`### ${item.title}`);
58
+ if ('items' in item && item.items) {
59
+ content.push(...item.items.filter((i) => typeof i === 'string'));
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ else {
66
+ // Default formatting for other elements
67
+ content.push(JSON.stringify(el));
68
+ }
69
+ }
70
+ }
71
+ return content.join('\n');
72
+ };
73
+ // Process instructions as system message
74
+ if (prompt.instructions && prompt.instructions.length > 0) {
75
+ const instructionContent = processElements(prompt.instructions);
76
+ if (instructionContent) {
77
+ system = system ? `${system}\n\n${instructionContent}` : instructionContent;
78
+ }
79
+ }
80
+ // Add JSON instruction if schema is provided
81
+ if (prompt.metadata?.outputSchema) {
82
+ const jsonInstruction = '\n\nYou must respond with valid JSON that matches the provided schema. Output only the JSON object, no additional text or markdown formatting.';
83
+ system = system ? `${system}${jsonInstruction}` : jsonInstruction;
84
+ }
85
+ // Process data as user message
86
+ if (prompt.data && prompt.data.length > 0) {
87
+ const dataContent = processElements(prompt.data);
88
+ if (dataContent) {
89
+ messages.push({ role: 'user', content: dataContent });
90
+ }
91
+ }
92
+ // Process output as user message
93
+ if (prompt.output && prompt.output.length > 0) {
94
+ const outputContent = processElements(prompt.output);
95
+ if (outputContent) {
96
+ messages.push({ role: 'user', content: outputContent });
97
+ }
98
+ }
99
+ // Ensure messages alternate between user and assistant
100
+ // If first message is not user, add a dummy user message
101
+ if (messages.length > 0 && messages[0].role !== 'user') {
102
+ messages.unshift({ role: 'user', content: 'Continue.' });
103
+ }
104
+ // If last message is assistant, add a dummy user message
105
+ if (messages.length > 0 && messages[messages.length - 1].role === 'assistant') {
106
+ messages.push({ role: 'user', content: 'Continue.' });
107
+ }
108
+ // If no messages, add a default
109
+ if (messages.length === 0) {
110
+ messages.push({ role: 'user', content: 'Please respond according to the instructions.' });
111
+ }
112
+ return { system, messages };
113
+ }
114
+ /**
115
+ * Query the AI model
116
+ */
117
+ async query(prompt, options) {
118
+ // Use streamQuery for consistency
119
+ const { result } = await this.streamQuery(prompt, options);
120
+ return result;
121
+ }
122
+ /**
123
+ * Stream query implementation
124
+ */
125
+ async streamQuery(prompt, options) {
126
+ const anthropicOptions = options || {};
127
+ const mergedOptions = { ...this.defaultOptions, ...anthropicOptions };
128
+ // Convert prompt
129
+ const { system, messages } = this.compiledPromptToAnthropic(prompt);
130
+ // Create stream
131
+ const anthropicStream = await this.client.messages.create({
132
+ model: mergedOptions.model || this.defaultModel,
133
+ messages,
134
+ max_tokens: mergedOptions.maxTokens || 4096,
135
+ temperature: mergedOptions.temperature,
136
+ top_p: mergedOptions.topP,
137
+ top_k: mergedOptions.topK,
138
+ stop_sequences: mergedOptions.stopSequences,
139
+ system,
140
+ stream: true
141
+ });
142
+ // Shared state
143
+ let fullContent = '';
144
+ let usage;
145
+ let finishReason = 'stop';
146
+ let streamConsumed = false;
147
+ const chunks = [];
148
+ // Process the stream
149
+ const processStream = async () => {
150
+ for await (const chunk of anthropicStream) {
151
+ if (chunk.type === 'content_block_delta' && chunk.delta.type === 'text_delta') {
152
+ const content = chunk.delta.text;
153
+ fullContent += content;
154
+ chunks.push(content);
155
+ }
156
+ else if (chunk.type === 'message_stop') {
157
+ // TODO: Investigate correct way to get usage from streaming response
158
+ // The actual API response may contain usage data in message_stop event,
159
+ // but the SDK type definitions don't reflect this.
160
+ // Consider checking message_start event or using MessageStream class instead.
161
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
+ const finalMessage = chunk;
163
+ if (finalMessage.message?.usage) {
164
+ usage = {
165
+ promptTokens: finalMessage.message.usage.input_tokens,
166
+ completionTokens: finalMessage.message.usage.output_tokens,
167
+ totalTokens: finalMessage.message.usage.input_tokens + finalMessage.message.usage.output_tokens
168
+ };
169
+ }
170
+ }
171
+ }
172
+ streamConsumed = true;
173
+ };
174
+ // Start processing
175
+ const processingPromise = processStream();
176
+ // Create stream generator
177
+ const streamGenerator = async function* () {
178
+ let index = 0;
179
+ while (!streamConsumed || index < chunks.length) {
180
+ if (index < chunks.length) {
181
+ yield chunks[index++];
182
+ }
183
+ else {
184
+ await new Promise(resolve => setTimeout(resolve, 10));
185
+ }
186
+ }
187
+ };
188
+ // Create result promise
189
+ const resultPromise = processingPromise.then(() => {
190
+ // Extract structured output if schema is provided
191
+ let structuredOutput;
192
+ if (prompt.metadata?.outputSchema && fullContent) {
193
+ const extracted = extractJSON(fullContent, { multiple: false });
194
+ if (extracted.source !== 'none' && extracted.data !== null) {
195
+ structuredOutput = extracted.data;
196
+ }
197
+ }
198
+ return {
199
+ content: fullContent,
200
+ structuredOutput,
201
+ usage,
202
+ finishReason
203
+ };
204
+ });
205
+ return {
206
+ stream: streamGenerator(),
207
+ result: resultPromise
208
+ };
209
+ }
210
+ /**
211
+ * Close the client
212
+ */
213
+ async close() {
214
+ // Anthropic client doesn't need explicit closing
215
+ }
216
+ }
217
+ //# sourceMappingURL=anthropic-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-driver.js","sourceRoot":"","sources":["../../src/anthropic/anthropic-driver.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAuBpD;;GAEG;AACH,MAAM,OAAO,eAAe;IAClB,MAAM,CAAY;IAClB,YAAY,CAAS;IACrB,cAAc,CAAiC;IAEvD,YAAY,SAAgC,EAAE;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;SACvD,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,4BAA4B,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,MAAsB;QAItD,IAAI,MAA0B,CAAC;QAC/B,MAAM,QAAQ,GAA2D,EAAE,CAAC;QAE5E,6BAA6B;QAC7B,MAAM,eAAe,GAAG,CAAC,QAAmB,EAAU,EAAE;YACtD,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;oBAChF,MAAM,EAAE,GAAG,OAAkB,CAAC;oBAE9B,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACvB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACjC,qCAAqC;wBACrC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;wBACzF,MAAM,cAAc,GAAG,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;wBAEhG,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACtB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;wBACtE,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAA4B,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;wBACjF,CAAC;oBACH,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBAC7D,0BAA0B;wBAC1B,IAAI,EAAE,CAAC,KAAK;4BAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;wBAC7C,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;4BACb,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gCAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oCAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCACrB,CAAC;qCAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oCACrG,IAAI,IAAI,CAAC,KAAK;wCAAE,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;oCAClD,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wCAClC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;oCACnE,CAAC;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,wCAAwC;wBACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,yCAAyC;QACzC,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAChE,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,kBAAkB,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,gJAAgJ,CAAC;YACzK,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;QACpE,CAAC;QAED,+BAA+B;QAC/B,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,WAAW,EAAE,CAAC;gBAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,aAAa,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,yDAAyD;QACzD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,yDAAyD;QACzD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,gCAAgC;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,MAAsB,EAAE,OAAsB;QACxD,kCAAkC;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAsB,EAAE,OAAsB;QAC9D,MAAM,gBAAgB,GAAG,OAAgC,IAAI,EAAE,CAAC;QAChE,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAEtE,iBAAiB;QACjB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAEpE,gBAAgB;QAChB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxD,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY;YAC/C,QAAQ;YACR,UAAU,EAAE,aAAa,CAAC,SAAS,IAAI,IAAI;YAC3C,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,KAAK,EAAE,aAAa,CAAC,IAAI;YACzB,KAAK,EAAE,aAAa,CAAC,IAAI;YACzB,cAAc,EAAE,aAAa,CAAC,aAAa;YAC3C,MAAM;YACN,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,eAAe;QACf,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,KAAuC,CAAC;QAC5C,IAAI,YAAY,GAAgC,MAAM,CAAC;QACvD,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,qBAAqB;QACrB,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;gBAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBACjC,WAAW,IAAI,OAAO,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACzC,qEAAqE;oBACrE,wEAAwE;oBACxE,mDAAmD;oBACnD,8EAA8E;oBAC9E,8DAA8D;oBAC9D,MAAM,YAAY,GAAG,KAAY,CAAC;oBAClC,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wBAChC,KAAK,GAAG;4BACN,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY;4BACrD,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa;4BAC1D,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa;yBAChG,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YACD,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;QAEF,mBAAmB;QACnB,MAAM,iBAAiB,GAAG,aAAa,EAAE,CAAC;QAE1C,0BAA0B;QAC1B,MAAM,eAAe,GAAG,KAAK,SAAS,CAAC;YACrC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,cAAc,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChD,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,wBAAwB;QACxB,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE;YAChD,kDAAkD;YAClD,IAAI,gBAAqC,CAAC;YAC1C,IAAI,MAAM,CAAC,QAAQ,EAAE,YAAY,IAAI,WAAW,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;gBAChE,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC3D,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,WAAW;gBACpB,gBAAgB;gBAChB,KAAK;gBACL,YAAY;aACb,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,eAAe,EAAE;YACzB,MAAM,EAAE,aAAa;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,iDAAiD;IACnD,CAAC;CACF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * AIService - capability駆動のドライバ作成サービス
3
+ */
4
+ import type { ModelSpec, DriverCapability, DriverProvider } from './types.js';
5
+ import type { AIDriver } from '../types.js';
6
+ import type { ApplicationConfig } from './config-based-factory.js';
7
+ /**
8
+ * モデル選択オプション
9
+ */
10
+ export interface SelectionOptions {
11
+ /** ローカル実行を優先 */
12
+ preferLocal?: boolean;
13
+ /** 特定のプロバイダーを優先 */
14
+ preferProvider?: DriverProvider;
15
+ /** 除外するプロバイダー */
16
+ excludeProviders?: DriverProvider[];
17
+ /** 高速応答を優先 */
18
+ preferFast?: boolean;
19
+ /** 条件緩和モード(条件を満たさない場合は条件を減らして再試行) */
20
+ lenient?: boolean;
21
+ }
22
+ /**
23
+ * AIサービスクラス
24
+ * レジストリを管理し、capabilityベースでドライバを作成
25
+ */
26
+ export declare class AIService {
27
+ private registry;
28
+ private config;
29
+ constructor(config: ApplicationConfig);
30
+ /**
31
+ * capabilityからドライバを作成
32
+ */
33
+ createDriverFromCapabilities(capabilities: DriverCapability[], options?: SelectionOptions): Promise<AIDriver | null>;
34
+ /**
35
+ * モデル仕様から直接ドライバを作成
36
+ */
37
+ createDriver(spec: ModelSpec): Promise<AIDriver>;
38
+ /**
39
+ * モデル選択
40
+ */
41
+ selectModels(capabilities: DriverCapability[], options?: SelectionOptions): ModelSpec[];
42
+ }
43
+ //# sourceMappingURL=ai-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-service.d.ts","sourceRoot":"","sources":["../../src/driver-registry/ai-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAInE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,mBAAmB;IACnB,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,iBAAiB;IACjB,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IAEpC,cAAc;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,iBAAiB;IAMrC;;OAEG;IACG,4BAA4B,CAChC,YAAY,EAAE,gBAAgB,EAAE,EAChC,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQ3B;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItD;;OAEG;IACH,YAAY,CACV,YAAY,EAAE,gBAAgB,EAAE,EAChC,OAAO,CAAC,EAAE,gBAAgB,GACzB,SAAS,EAAE;CA8Cf"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * AIService - capability駆動のドライバ作成サービス
3
+ */
4
+ import { registerFactories } from './config-based-factory.js';
5
+ import { DriverRegistry as DriverRegistryImpl } from './registry.js';
6
+ /**
7
+ * AIサービスクラス
8
+ * レジストリを管理し、capabilityベースでドライバを作成
9
+ */
10
+ export class AIService {
11
+ registry;
12
+ config;
13
+ constructor(config) {
14
+ this.config = config;
15
+ this.registry = new DriverRegistryImpl();
16
+ registerFactories(this.registry, config);
17
+ }
18
+ /**
19
+ * capabilityからドライバを作成
20
+ */
21
+ async createDriverFromCapabilities(capabilities, options) {
22
+ const models = this.selectModels(capabilities, options);
23
+ if (!models.length)
24
+ return null;
25
+ // 最適なモデルを選択してドライバを作成
26
+ return this.registry.createDriver(models[0]);
27
+ }
28
+ /**
29
+ * モデル仕様から直接ドライバを作成
30
+ */
31
+ async createDriver(spec) {
32
+ return this.registry.createDriver(spec);
33
+ }
34
+ /**
35
+ * モデル選択
36
+ */
37
+ selectModels(capabilities, options) {
38
+ // capability フィルタ
39
+ let models = this.config.models?.filter(m => capabilities.every(cap => m.capabilities.includes(cap))) || [];
40
+ // プロバイダー除外
41
+ if (options?.excludeProviders) {
42
+ models = models.filter(m => !options.excludeProviders.includes(m.provider));
43
+ }
44
+ // lenient モード:条件を満たすモデルがない場合は条件を緩和
45
+ if (options?.lenient && models.length === 0 && capabilities.length > 0) {
46
+ return this.selectModels(capabilities.slice(0, -1), options);
47
+ }
48
+ // ソート
49
+ models.sort((a, b) => {
50
+ // 特定プロバイダー優先
51
+ if (options?.preferProvider) {
52
+ if (a.provider === options.preferProvider)
53
+ return -1;
54
+ if (b.provider === options.preferProvider)
55
+ return 1;
56
+ }
57
+ // ローカル優先
58
+ if (options?.preferLocal) {
59
+ const aLocal = a.capabilities.includes('local');
60
+ const bLocal = b.capabilities.includes('local');
61
+ if (aLocal !== bLocal)
62
+ return aLocal ? -1 : 1;
63
+ }
64
+ // 高速優先
65
+ if (options?.preferFast) {
66
+ const aFast = a.capabilities.includes('fast');
67
+ const bFast = b.capabilities.includes('fast');
68
+ if (aFast !== bFast)
69
+ return aFast ? -1 : 1;
70
+ }
71
+ // 優先度
72
+ return (b.priority || 0) - (a.priority || 0);
73
+ });
74
+ return models;
75
+ }
76
+ }
77
+ //# sourceMappingURL=ai-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-service.js","sourceRoot":"","sources":["../../src/driver-registry/ai-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Config-based Driver Factory
3
+ * ApplicationConfigを使用したドライバーファクトリー
4
+ *
5
+ * registryパターンで各ドライバーのファクトリーを登録し、
6
+ * createDriverはregistryを通じて動的にドライバーを作成する
7
+ */
8
+ import type { DriverRegistry } from './registry.js';
9
+ import type { ModelSpec } from './types.js';
10
+ /**
11
+ * アプリケーション設定
12
+ * CLI層やアプリケーション層で管理される統一的な設定
13
+ */
14
+ export interface ApplicationConfig {
15
+ /** ドライバー設定 */
16
+ drivers?: {
17
+ /** OpenAI API設定 */
18
+ openai?: {
19
+ apiKey?: string;
20
+ baseURL?: string;
21
+ organization?: string;
22
+ };
23
+ /** Anthropic API設定 */
24
+ anthropic?: {
25
+ apiKey?: string;
26
+ baseURL?: string;
27
+ };
28
+ /** VertexAI設定 */
29
+ vertexai?: {
30
+ project?: string;
31
+ location?: string;
32
+ region?: string;
33
+ };
34
+ /** GoogleGenAI設定 */
35
+ googlegenai?: {
36
+ apiKey?: string;
37
+ };
38
+ /** MLX設定 */
39
+ mlx?: {
40
+ baseURL?: string;
41
+ pythonPath?: string;
42
+ };
43
+ /** Ollama設定 */
44
+ ollama?: {
45
+ baseURL?: string;
46
+ };
47
+ };
48
+ /** デフォルトオプション */
49
+ defaultOptions?: {
50
+ temperature?: number;
51
+ maxTokens?: number;
52
+ topP?: number;
53
+ topK?: number;
54
+ };
55
+ /** モデル仕様 */
56
+ models?: ModelSpec[];
57
+ }
58
+ /**
59
+ * ApplicationConfigベースのファクトリーをregistryに登録
60
+ *
61
+ * 各ドライバーのファクトリーがDriverConfigを受け取る形で登録する
62
+ */
63
+ export declare function registerFactories(registry: DriverRegistry, config: ApplicationConfig): void;
64
+ //# sourceMappingURL=config-based-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-based-factory.d.ts","sourceRoot":"","sources":["../../src/driver-registry/config-based-factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAY5C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc;IACd,OAAO,CAAC,EAAE;QACR,mBAAmB;QACnB,MAAM,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,sBAAsB;QACtB,SAAS,CAAC,EAAE;YACV,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,iBAAiB;QACjB,QAAQ,CAAC,EAAE;YACT,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,oBAAoB;QACpB,WAAW,CAAC,EAAE;YACZ,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,YAAY;QACZ,GAAG,CAAC,EAAE;YACJ,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,eAAe;QACf,MAAM,CAAC,EAAE;YACP,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IAEF,iBAAiB;IACjB,cAAc,CAAC,EAAE;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,YAAY;IACZ,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAGD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CA0EN"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Config-based Driver Factory
3
+ * ApplicationConfigを使用したドライバーファクトリー
4
+ *
5
+ * registryパターンで各ドライバーのファクトリーを登録し、
6
+ * createDriverはregistryを通じて動的にドライバーを作成する
7
+ */
8
+ // 個別ドライバーのインポート
9
+ import { MlxDriver } from '../mlx-ml/mlx-driver.js';
10
+ import { OpenAIDriver } from '../openai/openai-driver.js';
11
+ import { AnthropicDriver } from '../anthropic/anthropic-driver.js';
12
+ import { VertexAIDriver } from '../vertexai/vertexai-driver.js';
13
+ import { GoogleGenAIDriver } from '../google-genai/google-genai-driver.js';
14
+ import { OllamaDriver } from '../ollama/ollama-driver.js';
15
+ import { EchoDriver } from '../echo-driver.js';
16
+ import { TestDriver } from '../test-driver.js';
17
+ /**
18
+ * ApplicationConfigベースのファクトリーをregistryに登録
19
+ *
20
+ * 各ドライバーのファクトリーがDriverConfigを受け取る形で登録する
21
+ */
22
+ export function registerFactories(registry, config) {
23
+ // MLX Driver Factory
24
+ registry.registerFactory('mlx', (spec) => {
25
+ return new MlxDriver({
26
+ model: spec.model,
27
+ defaultOptions: config.defaultOptions
28
+ });
29
+ });
30
+ // OpenAI Driver Factory
31
+ registry.registerFactory('openai', (spec) => {
32
+ const openaiConfig = config.drivers?.openai;
33
+ return new OpenAIDriver({
34
+ apiKey: openaiConfig?.apiKey || process.env.OPENAI_API_KEY,
35
+ baseURL: openaiConfig?.baseURL,
36
+ organization: openaiConfig?.organization,
37
+ model: spec.model,
38
+ defaultOptions: config.defaultOptions
39
+ });
40
+ });
41
+ // Anthropic Driver Factory
42
+ registry.registerFactory('anthropic', (spec) => {
43
+ const anthropicConfig = config.drivers?.anthropic;
44
+ return new AnthropicDriver({
45
+ apiKey: anthropicConfig?.apiKey || process.env.ANTHROPIC_API_KEY,
46
+ model: spec.model,
47
+ defaultOptions: config.defaultOptions
48
+ });
49
+ });
50
+ // VertexAI Driver Factory
51
+ registry.registerFactory('vertexai', (spec) => {
52
+ const vertexConfig = config.drivers?.vertexai;
53
+ return new VertexAIDriver({
54
+ project: vertexConfig?.project || process.env.VERTEX_AI_PROJECT,
55
+ location: vertexConfig?.location || vertexConfig?.region || 'us-central1',
56
+ model: spec.model,
57
+ defaultOptions: config.defaultOptions
58
+ });
59
+ });
60
+ // GoogleGenAI Driver Factory
61
+ registry.registerFactory('googlegenai', (spec) => {
62
+ const googlegenaiConfig = config.drivers?.googlegenai;
63
+ return new GoogleGenAIDriver({
64
+ apiKey: googlegenaiConfig?.apiKey || process.env.GOOGLE_GENAI_API_KEY,
65
+ model: spec.model,
66
+ defaultOptions: config.defaultOptions
67
+ });
68
+ });
69
+ // Ollama Driver Factory
70
+ registry.registerFactory('ollama', (spec) => {
71
+ const ollamaConfig = config.drivers?.ollama;
72
+ return new OllamaDriver({
73
+ baseURL: ollamaConfig?.baseURL || 'http://localhost:11434',
74
+ model: spec.model,
75
+ defaultOptions: config.defaultOptions
76
+ });
77
+ });
78
+ // Echo Driver Factory (for testing)
79
+ registry.registerFactory('echo', () => {
80
+ return new EchoDriver({
81
+ format: 'text'
82
+ });
83
+ });
84
+ // Test Driver Factory (for unit testing)
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ registry.registerFactory('test', () => {
87
+ return new TestDriver({});
88
+ });
89
+ }
90
+ //# sourceMappingURL=config-based-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-based-factory.js","sourceRoot":"","sources":["../../src/driver-registry/config-based-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Driver Factory Helper
3
+ * ドライバファクトリの登録を支援するヘルパー関数
4
+ */
5
+ import type { DriverRegistry } from './registry.js';
6
+ import type { ModelSpec } from './types.js';
7
+ import type { AIDriver } from '../types.js';
8
+ import type { MlxDriver } from '../mlx-ml/mlx-driver.js';
9
+ import type { OpenAIDriver } from '../openai/openai-driver.js';
10
+ import type { AnthropicDriver } from '../anthropic/anthropic-driver.js';
11
+ import type { VertexAIDriver } from '../vertexai/vertexai-driver.js';
12
+ import type { OllamaDriver } from '../ollama/ollama-driver.js';
13
+ import type { EchoDriver } from '../echo-driver.js';
14
+ import type { TestDriver } from '../test-driver.js';
15
+ /**
16
+ * 標準ドライバーのファクトリー関数を登録
17
+ *
18
+ * 各ドライバーのコンストラクタは異なるシグネチャを持つため、
19
+ * 個別にファクトリー関数を定義して登録する
20
+ */
21
+ export declare function registerStandardDriverFactories(registry: DriverRegistry, drivers: {
22
+ MlxDriver?: typeof MlxDriver;
23
+ OpenAIDriver?: typeof OpenAIDriver;
24
+ AnthropicDriver?: typeof AnthropicDriver;
25
+ VertexAIDriver?: typeof VertexAIDriver;
26
+ OllamaDriver?: typeof OllamaDriver;
27
+ EchoDriver?: typeof EchoDriver;
28
+ TestDriver?: typeof TestDriver;
29
+ }): void;
30
+ /**
31
+ * 下位互換性のための旧API
32
+ * @deprecated Use registerStandardDriverFactories instead
33
+ */
34
+ export declare function registerDriverFactories(registry: DriverRegistry, drivers: Record<string, unknown>): void;
35
+ /**
36
+ * 単一のドライバーファクトリーを登録する汎用関数
37
+ *
38
+ * 使用例:
39
+ * ```typescript
40
+ * registerDriverFactory(registry, 'custom', (config) => {
41
+ * return new CustomDriver({
42
+ * apiKey: config.credentials?.apiKey,
43
+ * // ... カスタム設定
44
+ * });
45
+ * });
46
+ * ```
47
+ */
48
+ export declare function registerDriverFactory(registry: DriverRegistry, name: string, factory: (spec: ModelSpec) => AIDriver): void;
49
+ //# sourceMappingURL=factory-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-helper.d.ts","sourceRoot":"","sources":["../../src/driver-registry/factory-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,eAAe,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;CAChC,GACA,IAAI,CA8EN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAGN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,GACrC,IAAI,CAGN"}