@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,109 @@
1
+ /**
2
+ * Driver Factory Helper
3
+ * ドライバファクトリの登録を支援するヘルパー関数
4
+ */
5
+ /**
6
+ * 標準ドライバーのファクトリー関数を登録
7
+ *
8
+ * 各ドライバーのコンストラクタは異なるシグネチャを持つため、
9
+ * 個別にファクトリー関数を定義して登録する
10
+ */
11
+ export function registerStandardDriverFactories(registry, drivers) {
12
+ // MLX Driver
13
+ if (drivers.MlxDriver) {
14
+ const Driver = drivers.MlxDriver;
15
+ registry.registerFactory('mlx', (spec) => {
16
+ return new Driver({
17
+ model: spec.model,
18
+ defaultOptions: spec.metadata
19
+ });
20
+ });
21
+ }
22
+ // OpenAI Driver
23
+ if (drivers.OpenAIDriver) {
24
+ const Driver = drivers.OpenAIDriver;
25
+ registry.registerFactory('openai', (spec) => {
26
+ return new Driver({
27
+ apiKey: process.env.OPENAI_API_KEY || '',
28
+ model: spec.model,
29
+ defaultOptions: spec.metadata
30
+ });
31
+ });
32
+ }
33
+ // Anthropic Driver
34
+ if (drivers.AnthropicDriver) {
35
+ const Driver = drivers.AnthropicDriver;
36
+ registry.registerFactory('anthropic', (spec) => {
37
+ return new Driver({
38
+ apiKey: process.env.ANTHROPIC_API_KEY || '',
39
+ model: spec.model,
40
+ defaultOptions: spec.metadata
41
+ });
42
+ });
43
+ }
44
+ // VertexAI Driver
45
+ if (drivers.VertexAIDriver) {
46
+ const Driver = drivers.VertexAIDriver;
47
+ registry.registerFactory('vertexai', (spec) => {
48
+ return new Driver({
49
+ project: process.env.VERTEX_AI_PROJECT,
50
+ location: process.env.VERTEX_AI_LOCATION || 'us-central1',
51
+ model: spec.model,
52
+ defaultOptions: spec.metadata
53
+ });
54
+ });
55
+ }
56
+ // Ollama Driver
57
+ if (drivers.OllamaDriver) {
58
+ const Driver = drivers.OllamaDriver;
59
+ registry.registerFactory('ollama', (spec) => {
60
+ return new Driver({
61
+ baseURL: 'http://localhost:11434',
62
+ model: spec.model,
63
+ defaultOptions: spec.metadata
64
+ });
65
+ });
66
+ }
67
+ // Echo Driver (for testing)
68
+ if (drivers.EchoDriver) {
69
+ const Driver = drivers.EchoDriver;
70
+ registry.registerFactory('echo', () => {
71
+ return new Driver({
72
+ format: 'text'
73
+ });
74
+ });
75
+ }
76
+ // Test Driver (for unit testing)
77
+ if (drivers.TestDriver) {
78
+ const Driver = drivers.TestDriver;
79
+ registry.registerFactory('test', () => {
80
+ return new Driver({});
81
+ });
82
+ }
83
+ }
84
+ /**
85
+ * 下位互換性のための旧API
86
+ * @deprecated Use registerStandardDriverFactories instead
87
+ */
88
+ export function registerDriverFactories(registry, drivers) {
89
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
+ registerStandardDriverFactories(registry, drivers);
91
+ }
92
+ /**
93
+ * 単一のドライバーファクトリーを登録する汎用関数
94
+ *
95
+ * 使用例:
96
+ * ```typescript
97
+ * registerDriverFactory(registry, 'custom', (config) => {
98
+ * return new CustomDriver({
99
+ * apiKey: config.credentials?.apiKey,
100
+ * // ... カスタム設定
101
+ * });
102
+ * });
103
+ * ```
104
+ */
105
+ export function registerDriverFactory(registry, name, factory) {
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ registry.registerFactory(name, factory);
108
+ }
109
+ //# sourceMappingURL=factory-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-helper.js","sourceRoot":"","sources":["../../src/driver-registry/factory-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Driver Registry Module
3
+ * ドライバレジストリモジュールのエクスポート
4
+ */
5
+ export { DriverRegistry } from './registry.js';
6
+ export { registerFactories, type ApplicationConfig } from './config-based-factory.js';
7
+ export { AIService, type SelectionOptions } from './ai-service.js';
8
+ export type { DriverProvider, DriverCapability, ModelSpec, DriverFactory } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver-registry/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Driver Registry Module
3
+ * ドライバレジストリモジュールのエクスポート
4
+ */
5
+ export { DriverRegistry } from './registry.js';
6
+ export { registerFactories } from './config-based-factory.js';
7
+ export { AIService } from './ai-service.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver-registry/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,SAAS,EAEV,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Driver Registry Implementation
3
+ * ドライバレジストリの実装
4
+ */
5
+ import type { AIDriver } from '../types.js';
6
+ import { LogLevel } from '@modular-prompt/utils';
7
+ import type { DriverProvider, DriverCapability, ModelSpec, DriverSelectionCriteria, DriverSelectionResult, IDriverRegistry, DriverFactory } from './types.js';
8
+ /**
9
+ * ドライバレジストリクラス
10
+ */
11
+ export declare class DriverRegistry implements IDriverRegistry {
12
+ private models;
13
+ private factories;
14
+ private logger;
15
+ constructor(logLevel?: LogLevel);
16
+ /**
17
+ * デフォルトのドライバファクトリを登録
18
+ */
19
+ private registerDefaultFactories;
20
+ /**
21
+ * カスタムファクトリを登録
22
+ */
23
+ registerFactory(provider: DriverProvider, factory: DriverFactory): void;
24
+ /**
25
+ * ファクトリを取得
26
+ */
27
+ getFactory(provider: DriverProvider): DriverFactory | undefined;
28
+ /**
29
+ * モデルを登録
30
+ */
31
+ registerModel(spec: ModelSpec): void;
32
+ /**
33
+ * 条件に基づいてモデルを選択
34
+ */
35
+ selectModel(criteria: DriverSelectionCriteria): DriverSelectionResult | null;
36
+ /**
37
+ * モデル仕様からドライバインスタンスを作成
38
+ */
39
+ createDriver(spec: ModelSpec): Promise<AIDriver>;
40
+ /**
41
+ * 簡易選択メソッド:能力配列から自動選択
42
+ */
43
+ selectAndCreateDriver(capabilities: DriverCapability[], options?: {
44
+ preferLocal?: boolean;
45
+ preferFast?: boolean;
46
+ providers?: DriverProvider[];
47
+ excludeProviders?: DriverProvider[];
48
+ }): Promise<AIDriver | null>;
49
+ }
50
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/driver-registry/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAU,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAWzD,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,SAAS,CAAiD;IAClE,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,GAAE,QAAwB;IAS9C;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAIvE;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,GAAG,SAAS;IAK/D;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAcpC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,uBAAuB,GAAG,qBAAqB,GAAG,IAAI;IAwH5E;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAStD;;OAEG;IACG,qBAAqB,CACzB,YAAY,EAAE,gBAAgB,EAAE,EAChC,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;QAC7B,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;KACrC,GACA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CA0B5B"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Driver Registry Implementation
3
+ * ドライバレジストリの実装
4
+ */
5
+ import { Logger, LogLevel } from '@modular-prompt/utils';
6
+ // 標準ドライバーを個別インポート
7
+ import { MlxDriver } from '../mlx-ml/mlx-driver.js';
8
+ import { OpenAIDriver } from '../openai/openai-driver.js';
9
+ import { AnthropicDriver } from '../anthropic/anthropic-driver.js';
10
+ import { VertexAIDriver } from '../vertexai/vertexai-driver.js';
11
+ import { OllamaDriver } from '../ollama/ollama-driver.js';
12
+ import { EchoDriver } from '../echo-driver.js';
13
+ import { TestDriver } from '../test-driver.js';
14
+ import { registerStandardDriverFactories } from './factory-helper.js';
15
+ /**
16
+ * ドライバレジストリクラス
17
+ */
18
+ export class DriverRegistry {
19
+ models = new Map();
20
+ factories = new Map();
21
+ logger;
22
+ constructor(logLevel = LogLevel.INFO) {
23
+ this.logger = new Logger({
24
+ level: logLevel,
25
+ prefix: 'DriverRegistry'
26
+ });
27
+ // デフォルトのファクトリを登録
28
+ this.registerDefaultFactories();
29
+ }
30
+ /**
31
+ * デフォルトのドライバファクトリを登録
32
+ */
33
+ registerDefaultFactories() {
34
+ // 標準ドライバーを登録
35
+ registerStandardDriverFactories(this, {
36
+ MlxDriver,
37
+ OpenAIDriver,
38
+ AnthropicDriver,
39
+ VertexAIDriver,
40
+ OllamaDriver,
41
+ EchoDriver,
42
+ TestDriver
43
+ });
44
+ }
45
+ /**
46
+ * カスタムファクトリを登録
47
+ */
48
+ registerFactory(provider, factory) {
49
+ this.factories.set(provider, factory);
50
+ }
51
+ /**
52
+ * ファクトリを取得
53
+ */
54
+ getFactory(provider) {
55
+ return this.factories.get(provider);
56
+ }
57
+ /**
58
+ * モデルを登録
59
+ */
60
+ registerModel(spec) {
61
+ // デフォルト値を設定
62
+ if (spec.enabled === undefined) {
63
+ spec.enabled = true;
64
+ }
65
+ if (spec.priority === undefined) {
66
+ spec.priority = 0;
67
+ }
68
+ const key = `${spec.provider}:${spec.model}`;
69
+ this.models.set(key, spec);
70
+ }
71
+ /**
72
+ * 条件に基づいてモデルを選択
73
+ */
74
+ selectModel(criteria) {
75
+ const candidates = [];
76
+ for (const [, spec] of this.models) {
77
+ // 無効なモデルはスキップ
78
+ if (!spec.enabled) {
79
+ continue;
80
+ }
81
+ // プロバイダーフィルタ
82
+ if (criteria.providers && !criteria.providers.includes(spec.provider)) {
83
+ continue;
84
+ }
85
+ if (criteria.excludeProviders?.includes(spec.provider)) {
86
+ continue;
87
+ }
88
+ // トークン数チェック
89
+ if (criteria.minInputTokens &&
90
+ spec.maxInputTokens &&
91
+ spec.maxInputTokens < criteria.minInputTokens) {
92
+ continue;
93
+ }
94
+ if (criteria.minOutputTokens &&
95
+ spec.maxOutputTokens &&
96
+ spec.maxOutputTokens < criteria.minOutputTokens) {
97
+ continue;
98
+ }
99
+ // コストチェック
100
+ if (criteria.maxCost) {
101
+ const cost = spec.cost;
102
+ if (cost) {
103
+ if (criteria.maxCost.input && cost.input > criteria.maxCost.input) {
104
+ continue;
105
+ }
106
+ if (criteria.maxCost.output && cost.output > criteria.maxCost.output) {
107
+ continue;
108
+ }
109
+ }
110
+ }
111
+ // 能力チェックとスコア計算
112
+ let score = spec.priority || 0;
113
+ const warnings = [];
114
+ const capabilities = spec.capabilities;
115
+ // 必須能力チェック
116
+ if (criteria.requiredCapabilities) {
117
+ const missing = criteria.requiredCapabilities.filter(cap => !capabilities.includes(cap));
118
+ if (missing.length > 0) {
119
+ continue; // 必須能力が欠けている場合はスキップ
120
+ }
121
+ score += criteria.requiredCapabilities.length * 10;
122
+ }
123
+ // 除外能力チェック
124
+ if (criteria.excludeCapabilities) {
125
+ const hasExcluded = criteria.excludeCapabilities.some(cap => capabilities.includes(cap));
126
+ if (hasExcluded) {
127
+ continue;
128
+ }
129
+ }
130
+ // 望ましい能力でスコア調整
131
+ if (criteria.preferredCapabilities) {
132
+ const matched = criteria.preferredCapabilities.filter(cap => capabilities.includes(cap));
133
+ score += matched.length * 5;
134
+ const missing = criteria.preferredCapabilities.filter(cap => !capabilities.includes(cap));
135
+ if (missing.length > 0) {
136
+ warnings.push(`Missing preferred capabilities: ${missing.join(', ')}`);
137
+ }
138
+ }
139
+ // 特別な優先設定
140
+ if (criteria.preferLocal && capabilities.includes('local')) {
141
+ score += 20;
142
+ }
143
+ if (criteria.preferFast && capabilities.includes('fast')) {
144
+ score += 15;
145
+ }
146
+ // 選択理由を生成
147
+ const reasons = [];
148
+ if (spec.provider === 'mlx' && criteria.preferLocal) {
149
+ reasons.push('Local execution preferred');
150
+ }
151
+ if (capabilities.includes('fast') && criteria.preferFast) {
152
+ reasons.push('Fast response preferred');
153
+ }
154
+ if (criteria.requiredCapabilities?.length) {
155
+ reasons.push(`Meets all required capabilities: ${criteria.requiredCapabilities.join(', ')}`);
156
+ }
157
+ if (spec.priority && spec.priority > 0) {
158
+ reasons.push(`High priority (${spec.priority})`);
159
+ }
160
+ candidates.push({
161
+ model: spec,
162
+ reason: reasons.join('; ') || 'Default selection',
163
+ score,
164
+ warnings: warnings.length > 0 ? warnings : undefined
165
+ });
166
+ }
167
+ // スコアでソート(降順)
168
+ candidates.sort((a, b) => b.score - a.score);
169
+ return candidates.length > 0 ? candidates[0] : null;
170
+ }
171
+ /**
172
+ * モデル仕様からドライバインスタンスを作成
173
+ */
174
+ async createDriver(spec) {
175
+ const factory = this.factories.get(spec.provider);
176
+ if (!factory) {
177
+ throw new Error(`No factory registered for provider: ${spec.provider}`);
178
+ }
179
+ return await factory(spec);
180
+ }
181
+ /**
182
+ * 簡易選択メソッド:能力配列から自動選択
183
+ */
184
+ async selectAndCreateDriver(capabilities, options) {
185
+ const criteria = {
186
+ requiredCapabilities: capabilities,
187
+ ...options
188
+ };
189
+ const result = this.selectModel(criteria);
190
+ if (!result) {
191
+ return null;
192
+ }
193
+ // 警告があれば出力
194
+ if (result.warnings) {
195
+ this.logger.warn('Driver selection warnings:', result.warnings);
196
+ }
197
+ this.logger.info(`Selected model: ${result.model.model} (${result.model.provider})`);
198
+ this.logger.debug(`Reason: ${result.reason}`);
199
+ try {
200
+ return await this.createDriver(result.model);
201
+ }
202
+ catch (error) {
203
+ this.logger.error(`Failed to create driver: ${error}`);
204
+ return null;
205
+ }
206
+ }
207
+ }
208
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/driver-registry/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Driver Registry Types
3
+ * ドライバレジストリシステムの型定義
4
+ */
5
+ import type { AIDriver } from '../types.js';
6
+ /**
7
+ * ドライバプロバイダータイプ
8
+ */
9
+ export type DriverProvider = 'openai' | 'anthropic' | 'vertexai' | 'googlegenai' | 'mlx' | 'ollama' | 'echo' | 'test';
10
+ /**
11
+ * ドライバ能力フラグ
12
+ * 各ドライバが持つ機能や特性を表す
13
+ */
14
+ export type DriverCapability = 'streaming' | 'local' | 'fast' | 'large-context' | 'multilingual' | 'japanese' | 'coding' | 'reasoning' | 'chat' | 'tools' | 'vision' | 'audio' | 'structured' | 'json' | 'function-calling';
15
+ /**
16
+ * モデル仕様(code-bugsのModelSpecと同等)
17
+ */
18
+ export interface ModelSpec {
19
+ /** モデル識別子(プロバイダ内でユニーク) */
20
+ model: string;
21
+ /** プロバイダー名 */
22
+ provider: DriverProvider;
23
+ /** モデルの能力フラグ */
24
+ capabilities: DriverCapability[];
25
+ /** 最大入力トークン数 */
26
+ maxInputTokens?: number;
27
+ /** 最大出力トークン数 */
28
+ maxOutputTokens?: number;
29
+ /** 合計最大トークン数(入力+出力) */
30
+ maxTotalTokens?: number;
31
+ /** 分あたりのトークン制限 (TPM: Tokens Per Minute) */
32
+ tokensPerMinute?: number;
33
+ /** 分あたりのリクエスト制限 (RPM: Requests Per Minute) */
34
+ requestsPerMinute?: number;
35
+ /** コスト情報(1Kトークンあたりのドル) */
36
+ cost?: {
37
+ input: number;
38
+ output: number;
39
+ };
40
+ /** 優先度(高いほど優先される) */
41
+ priority?: number;
42
+ /** このモデルが有効かどうか */
43
+ enabled?: boolean;
44
+ /** カスタムメタデータ */
45
+ metadata?: Record<string, unknown>;
46
+ }
47
+ /**
48
+ * ドライバファクトリ関数の型
49
+ * ModelSpecを直接受け取ってドライバを作成
50
+ */
51
+ export type DriverFactory = (spec: ModelSpec) => AIDriver | Promise<AIDriver>;
52
+ /**
53
+ * ドライバ選択条件
54
+ */
55
+ export interface DriverSelectionCriteria {
56
+ /** 必要な能力(すべて満たす必要がある) */
57
+ requiredCapabilities?: DriverCapability[];
58
+ /** 望ましい能力(いくつか満たせばよい) */
59
+ preferredCapabilities?: DriverCapability[];
60
+ /** 除外する能力(これらを持つドライバは選択しない) */
61
+ excludeCapabilities?: DriverCapability[];
62
+ /** 最小入力トークン数 */
63
+ minInputTokens?: number;
64
+ /** 最小出力トークン数 */
65
+ minOutputTokens?: number;
66
+ /** 最大コスト(1Kトークンあたり) */
67
+ maxCost?: {
68
+ input?: number;
69
+ output?: number;
70
+ };
71
+ /** 特定のプロバイダーに限定 */
72
+ providers?: DriverProvider[];
73
+ /** 特定のプロバイダーを除外 */
74
+ excludeProviders?: DriverProvider[];
75
+ /** ローカル実行を優先 */
76
+ preferLocal?: boolean;
77
+ /** 速度を優先 */
78
+ preferFast?: boolean;
79
+ }
80
+ /**
81
+ * モデル選択結果
82
+ */
83
+ export interface DriverSelectionResult {
84
+ /** 選択されたモデル仕様 */
85
+ model: ModelSpec;
86
+ /** 選択理由 */
87
+ reason: string;
88
+ /** スコア(適合度) */
89
+ score: number;
90
+ /** 警告メッセージ */
91
+ warnings?: string[];
92
+ }
93
+ /**
94
+ * ドライバレジストリインターフェース
95
+ */
96
+ export interface IDriverRegistry {
97
+ /** モデルを登録 */
98
+ registerModel(spec: ModelSpec): void;
99
+ /** 条件に基づいてモデルを選択 */
100
+ selectModel(criteria: DriverSelectionCriteria): DriverSelectionResult | null;
101
+ /** モデル仕様からドライバインスタンスを作成 */
102
+ createDriver(spec: ModelSpec): Promise<AIDriver>;
103
+ /** ファクトリーを登録 */
104
+ registerFactory(provider: DriverProvider, factory: DriverFactory): void;
105
+ /** ファクトリーを取得 */
106
+ getFactory(provider: DriverProvider): DriverFactory | undefined;
107
+ }
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/driver-registry/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Driver Registry Types
3
+ * ドライバレジストリシステムの型定義
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/driver-registry/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,88 @@
1
+ import type { CompiledPrompt } from '@modular-prompt/core';
2
+ import type { AIDriver, QueryOptions, QueryResult, StreamResult } from './types.js';
3
+ import type { FormatterOptions } from './formatter/types.js';
4
+ /**
5
+ * Echo driver configuration
6
+ */
7
+ export interface EchoDriverConfig {
8
+ /**
9
+ * Format for echo output determines what the driver returns:
10
+ * - 'text': Human-readable markdown formatted text
11
+ * - 'messages': Array of chat messages as JSON (for testing message-based APIs)
12
+ * - 'raw': The raw CompiledPrompt object as JSON (includes metadata)
13
+ * - 'both': Object containing both 'text' and 'messages' fields as JSON
14
+ * - 'debug': Comprehensive debug info including raw prompt, formatted versions, and metadata
15
+ *
16
+ * @default 'text'
17
+ */
18
+ format?: 'text' | 'messages' | 'raw' | 'both' | 'debug';
19
+ /**
20
+ * Include metadata wrapper around the response.
21
+ * When true, adds timestamp and options to the output.
22
+ *
23
+ * @default false
24
+ */
25
+ includeMetadata?: boolean;
26
+ /**
27
+ * Custom formatter options for text/message formatting.
28
+ * Allows customization of markers, preambles, and section descriptions.
29
+ */
30
+ formatterOptions?: FormatterOptions;
31
+ /**
32
+ * Simulate token usage statistics.
33
+ * When true, estimates token counts based on character length.
34
+ *
35
+ * @default true
36
+ */
37
+ simulateUsage?: boolean;
38
+ /**
39
+ * Number of characters to send in each streaming chunk.
40
+ * Lower values create more granular streaming.
41
+ *
42
+ * @default 100
43
+ */
44
+ streamChunkSize?: number;
45
+ }
46
+ /**
47
+ * Echo driver that returns the formatted prompt instead of calling an AI model.
48
+ * Primary use cases:
49
+ * - Debugging: Inspect the exact prompt being sent to AI models
50
+ * - Testing: Verify prompt generation without API calls
51
+ * - Development: Quickly iterate on prompt design
52
+ *
53
+ * @example
54
+ * // Debug prompt structure
55
+ * const driver = new EchoDriver({ format: 'debug' });
56
+ * const result = await driver.query(prompt);
57
+ * console.log(JSON.parse(result.content));
58
+ *
59
+ * @example
60
+ * // Test structured outputs with raw format
61
+ * const driver = new EchoDriver({ format: 'raw' });
62
+ * prompt.metadata = { outputSchema: { type: 'object' } };
63
+ * const result = await driver.query(prompt);
64
+ * // result.structuredOutput contains the entire prompt as JSON
65
+ */
66
+ export declare class EchoDriver implements AIDriver {
67
+ private format;
68
+ private includeMetadata;
69
+ private simulateUsage;
70
+ private streamChunkSize;
71
+ private formatterOptions;
72
+ constructor(config?: EchoDriverConfig);
73
+ /**
74
+ * Query implementation that echoes back the formatted prompt.
75
+ * The format of the response depends on the configured format option.
76
+ * Structured outputs are automatically extracted from JSON formats.
77
+ */
78
+ query(prompt: CompiledPrompt, options?: QueryOptions): Promise<QueryResult>;
79
+ /**
80
+ * Stream query implementation
81
+ */
82
+ streamQuery(prompt: CompiledPrompt, options?: QueryOptions): Promise<StreamResult>;
83
+ /**
84
+ * Close the driver
85
+ */
86
+ close(): Promise<void>;
87
+ }
88
+ //# sourceMappingURL=echo-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo-driver.d.ts","sourceRoot":"","sources":["../src/echo-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI7D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAExD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAW,YAAW,QAAQ;IACzC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,GAAE,gBAAqB;IAazC;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA8IjF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAsBxF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}