@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.
- package/LICENSE +21 -0
- package/README.md +597 -0
- package/dist/anthropic/anthropic-driver.d.ts +47 -0
- package/dist/anthropic/anthropic-driver.d.ts.map +1 -0
- package/dist/anthropic/anthropic-driver.js +217 -0
- package/dist/anthropic/anthropic-driver.js.map +1 -0
- package/dist/driver-registry/ai-service.d.ts +43 -0
- package/dist/driver-registry/ai-service.d.ts.map +1 -0
- package/dist/driver-registry/ai-service.js +77 -0
- package/dist/driver-registry/ai-service.js.map +1 -0
- package/dist/driver-registry/config-based-factory.d.ts +64 -0
- package/dist/driver-registry/config-based-factory.d.ts.map +1 -0
- package/dist/driver-registry/config-based-factory.js +90 -0
- package/dist/driver-registry/config-based-factory.js.map +1 -0
- package/dist/driver-registry/factory-helper.d.ts +49 -0
- package/dist/driver-registry/factory-helper.d.ts.map +1 -0
- package/dist/driver-registry/factory-helper.js +109 -0
- package/dist/driver-registry/factory-helper.js.map +1 -0
- package/dist/driver-registry/index.d.ts +9 -0
- package/dist/driver-registry/index.d.ts.map +1 -0
- package/dist/driver-registry/index.js +8 -0
- package/dist/driver-registry/index.js.map +1 -0
- package/dist/driver-registry/registry.d.ts +50 -0
- package/dist/driver-registry/registry.d.ts.map +1 -0
- package/dist/driver-registry/registry.js +208 -0
- package/dist/driver-registry/registry.js.map +1 -0
- package/dist/driver-registry/types.d.ts +108 -0
- package/dist/driver-registry/types.d.ts.map +1 -0
- package/dist/driver-registry/types.js +6 -0
- package/dist/driver-registry/types.js.map +1 -0
- package/dist/echo-driver.d.ts +88 -0
- package/dist/echo-driver.d.ts.map +1 -0
- package/dist/echo-driver.js +198 -0
- package/dist/echo-driver.js.map +1 -0
- package/dist/formatter/completion-formatter.d.ts +27 -0
- package/dist/formatter/completion-formatter.d.ts.map +1 -0
- package/dist/formatter/completion-formatter.js +84 -0
- package/dist/formatter/completion-formatter.js.map +1 -0
- package/dist/formatter/converter.d.ts +20 -0
- package/dist/formatter/converter.d.ts.map +1 -0
- package/dist/formatter/converter.js +176 -0
- package/dist/formatter/converter.js.map +1 -0
- package/dist/formatter/element-formatters/base.d.ts +34 -0
- package/dist/formatter/element-formatters/base.d.ts.map +1 -0
- package/dist/formatter/element-formatters/base.js +36 -0
- package/dist/formatter/element-formatters/base.js.map +1 -0
- package/dist/formatter/element-formatters/chunk.d.ts +11 -0
- package/dist/formatter/element-formatters/chunk.d.ts.map +1 -0
- package/dist/formatter/element-formatters/chunk.js +12 -0
- package/dist/formatter/element-formatters/chunk.js.map +1 -0
- package/dist/formatter/element-formatters/index.d.ts +14 -0
- package/dist/formatter/element-formatters/index.d.ts.map +1 -0
- package/dist/formatter/element-formatters/index.js +15 -0
- package/dist/formatter/element-formatters/index.js.map +1 -0
- package/dist/formatter/element-formatters/json.d.ts +11 -0
- package/dist/formatter/element-formatters/json.d.ts.map +1 -0
- package/dist/formatter/element-formatters/json.js +27 -0
- package/dist/formatter/element-formatters/json.js.map +1 -0
- package/dist/formatter/element-formatters/material.d.ts +11 -0
- package/dist/formatter/element-formatters/material.d.ts.map +1 -0
- package/dist/formatter/element-formatters/material.js +35 -0
- package/dist/formatter/element-formatters/material.js.map +1 -0
- package/dist/formatter/element-formatters/message.d.ts +13 -0
- package/dist/formatter/element-formatters/message.d.ts.map +1 -0
- package/dist/formatter/element-formatters/message.js +35 -0
- package/dist/formatter/element-formatters/message.js.map +1 -0
- package/dist/formatter/element-formatters/registry.d.ts +29 -0
- package/dist/formatter/element-formatters/registry.d.ts.map +1 -0
- package/dist/formatter/element-formatters/registry.js +82 -0
- package/dist/formatter/element-formatters/registry.js.map +1 -0
- package/dist/formatter/element-formatters/section.d.ts +18 -0
- package/dist/formatter/element-formatters/section.d.ts.map +1 -0
- package/dist/formatter/element-formatters/section.js +46 -0
- package/dist/formatter/element-formatters/section.js.map +1 -0
- package/dist/formatter/element-formatters/string-pattern.d.ts +22 -0
- package/dist/formatter/element-formatters/string-pattern.d.ts.map +1 -0
- package/dist/formatter/element-formatters/string-pattern.js +124 -0
- package/dist/formatter/element-formatters/string-pattern.js.map +1 -0
- package/dist/formatter/element-formatters/text.d.ts +11 -0
- package/dist/formatter/element-formatters/text.d.ts.map +1 -0
- package/dist/formatter/element-formatters/text.js +11 -0
- package/dist/formatter/element-formatters/text.js.map +1 -0
- package/dist/formatter/formatter.d.ts +24 -0
- package/dist/formatter/formatter.d.ts.map +1 -0
- package/dist/formatter/formatter.js +252 -0
- package/dist/formatter/formatter.js.map +1 -0
- package/dist/formatter/types.d.ts +91 -0
- package/dist/formatter/types.d.ts.map +1 -0
- package/dist/formatter/types.js +2 -0
- package/dist/formatter/types.js.map +1 -0
- package/dist/google-genai/google-genai-driver.d.ts +67 -0
- package/dist/google-genai/google-genai-driver.d.ts.map +1 -0
- package/dist/google-genai/google-genai-driver.js +351 -0
- package/dist/google-genai/google-genai-driver.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/mlx-ml/mlx-driver.d.ts +65 -0
- package/dist/mlx-ml/mlx-driver.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-driver.js +235 -0
- package/dist/mlx-ml/mlx-driver.js.map +1 -0
- package/dist/mlx-ml/model-spec/index.d.ts +7 -0
- package/dist/mlx-ml/model-spec/index.d.ts.map +1 -0
- package/dist/mlx-ml/model-spec/index.js +7 -0
- package/dist/mlx-ml/model-spec/index.js.map +1 -0
- package/dist/mlx-ml/model-spec/types.d.ts +30 -0
- package/dist/mlx-ml/model-spec/types.d.ts.map +1 -0
- package/dist/mlx-ml/model-spec/types.js +7 -0
- package/dist/mlx-ml/model-spec/types.js.map +1 -0
- package/dist/mlx-ml/process/index.d.ts +33 -0
- package/dist/mlx-ml/process/index.d.ts.map +1 -0
- package/dist/mlx-ml/process/index.js +65 -0
- package/dist/mlx-ml/process/index.js.map +1 -0
- package/dist/mlx-ml/process/model-handlers.d.ts +58 -0
- package/dist/mlx-ml/process/model-handlers.d.ts.map +1 -0
- package/dist/mlx-ml/process/model-handlers.js +197 -0
- package/dist/mlx-ml/process/model-handlers.js.map +1 -0
- package/dist/mlx-ml/process/model-specific.d.ts +35 -0
- package/dist/mlx-ml/process/model-specific.d.ts.map +1 -0
- package/dist/mlx-ml/process/model-specific.js +35 -0
- package/dist/mlx-ml/process/model-specific.js.map +1 -0
- package/dist/mlx-ml/process/parameter-mapper.d.ts +17 -0
- package/dist/mlx-ml/process/parameter-mapper.d.ts.map +1 -0
- package/dist/mlx-ml/process/parameter-mapper.js +91 -0
- package/dist/mlx-ml/process/parameter-mapper.js.map +1 -0
- package/dist/mlx-ml/process/parameter-validator.d.ts +55 -0
- package/dist/mlx-ml/process/parameter-validator.d.ts.map +1 -0
- package/dist/mlx-ml/process/parameter-validator.js +203 -0
- package/dist/mlx-ml/process/parameter-validator.js.map +1 -0
- package/dist/mlx-ml/process/process-communication.d.ts +25 -0
- package/dist/mlx-ml/process/process-communication.d.ts.map +1 -0
- package/dist/mlx-ml/process/process-communication.js +117 -0
- package/dist/mlx-ml/process/process-communication.js.map +1 -0
- package/dist/mlx-ml/process/queue.d.ts +30 -0
- package/dist/mlx-ml/process/queue.d.ts.map +1 -0
- package/dist/mlx-ml/process/queue.js +147 -0
- package/dist/mlx-ml/process/queue.js.map +1 -0
- package/dist/mlx-ml/process/types.d.ts +97 -0
- package/dist/mlx-ml/process/types.d.ts.map +1 -0
- package/dist/mlx-ml/process/types.js +2 -0
- package/dist/mlx-ml/process/types.js.map +1 -0
- package/dist/mlx-ml/types.d.ts +66 -0
- package/dist/mlx-ml/types.d.ts.map +1 -0
- package/dist/mlx-ml/types.js +7 -0
- package/dist/mlx-ml/types.js.map +1 -0
- package/dist/ollama/ollama-driver.d.ts +15 -0
- package/dist/ollama/ollama-driver.d.ts.map +1 -0
- package/dist/ollama/ollama-driver.js +15 -0
- package/dist/ollama/ollama-driver.js.map +1 -0
- package/dist/openai/openai-driver.d.ts +71 -0
- package/dist/openai/openai-driver.d.ts.map +1 -0
- package/dist/openai/openai-driver.js +230 -0
- package/dist/openai/openai-driver.js.map +1 -0
- package/dist/test-driver.d.ts +78 -0
- package/dist/test-driver.d.ts.map +1 -0
- package/dist/test-driver.js +193 -0
- package/dist/test-driver.js.map +1 -0
- package/dist/types.d.ts +90 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vertexai/vertexai-driver.d.ts +63 -0
- package/dist/vertexai/vertexai-driver.d.ts.map +1 -0
- package/dist/vertexai/vertexai-driver.js +335 -0
- package/dist/vertexai/vertexai-driver.js.map +1 -0
- package/package.json +61 -0
- package/scripts/download-model.js +40 -0
- package/scripts/setup-mlx.js +53 -0
- package/src/mlx-ml/python/.python-version +1 -0
- package/src/mlx-ml/python/__main__.py +312 -0
- package/src/mlx-ml/python/chat_template_constraints.py +164 -0
- package/src/mlx-ml/python/pyproject.toml +19 -0
- package/src/mlx-ml/python/token_utils.py +262 -0
- 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":"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"}
|
|
@@ -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"}
|