@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,351 @@
|
|
|
1
|
+
import { GoogleGenAI } from '@google/genai';
|
|
2
|
+
/**
|
|
3
|
+
* Map finish reasons from GoogleGenAI to our format
|
|
4
|
+
*/
|
|
5
|
+
const finishReasonMap = {
|
|
6
|
+
'FINISH_REASON_UNSPECIFIED': 'error',
|
|
7
|
+
'STOP': 'stop',
|
|
8
|
+
'MAX_TOKENS': 'length',
|
|
9
|
+
'SAFETY': 'stop',
|
|
10
|
+
'RECITATION': 'stop',
|
|
11
|
+
'LANGUAGE': 'error',
|
|
12
|
+
'OTHER': 'error',
|
|
13
|
+
'BLOCKLIST': 'error',
|
|
14
|
+
'PROHIBITED_CONTENT': 'error',
|
|
15
|
+
'MALFORMED_FUNCTION_CALL': 'error',
|
|
16
|
+
'error': 'error'
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* GoogleGenAI driver
|
|
20
|
+
*/
|
|
21
|
+
export class GoogleGenAIDriver {
|
|
22
|
+
client;
|
|
23
|
+
defaultModel;
|
|
24
|
+
defaultTemperature;
|
|
25
|
+
defaultOptions;
|
|
26
|
+
constructor(config = {}) {
|
|
27
|
+
const apiKey = config.apiKey || process.env.GOOGLE_GENAI_API_KEY;
|
|
28
|
+
if (!apiKey) {
|
|
29
|
+
throw new Error('GoogleGenAI API key is required. Set it in config or GOOGLE_GENAI_API_KEY environment variable.');
|
|
30
|
+
}
|
|
31
|
+
this.client = new GoogleGenAI({ apiKey });
|
|
32
|
+
this.defaultModel = config.model || 'gemma-3-27b';
|
|
33
|
+
this.defaultTemperature = config.temperature ?? 0.7;
|
|
34
|
+
this.defaultOptions = config.defaultOptions || {};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Convert content (string or Attachment[]) to string
|
|
38
|
+
*/
|
|
39
|
+
contentToString(content) {
|
|
40
|
+
if (typeof content === 'string') {
|
|
41
|
+
return content;
|
|
42
|
+
}
|
|
43
|
+
// For Attachment[], extract text content
|
|
44
|
+
// TODO: In the future, handle image_url and file attachments for multimodal support
|
|
45
|
+
return content
|
|
46
|
+
.filter((att) => {
|
|
47
|
+
const a = att;
|
|
48
|
+
return a.type === 'text' && a.text;
|
|
49
|
+
})
|
|
50
|
+
.map((att) => att.text)
|
|
51
|
+
.join('\n');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Convert Element to Part (flat text conversion)
|
|
55
|
+
* Used for systemInstruction and simple data
|
|
56
|
+
*/
|
|
57
|
+
elementToPart(element) {
|
|
58
|
+
if (typeof element === 'string') {
|
|
59
|
+
return { text: element };
|
|
60
|
+
}
|
|
61
|
+
switch (element.type) {
|
|
62
|
+
case 'text':
|
|
63
|
+
return { text: element.content };
|
|
64
|
+
case 'message': {
|
|
65
|
+
// Flatten message as text
|
|
66
|
+
const messageContent = this.contentToString(element.content);
|
|
67
|
+
return { text: `${element.role}: ${messageContent}` };
|
|
68
|
+
}
|
|
69
|
+
case 'material': {
|
|
70
|
+
const materialContent = this.contentToString(element.content);
|
|
71
|
+
return { text: `# ${element.title}\n${materialContent}` };
|
|
72
|
+
}
|
|
73
|
+
case 'chunk': {
|
|
74
|
+
const chunkContent = this.contentToString(element.content);
|
|
75
|
+
const chunkHeader = element.index !== undefined && element.total !== undefined
|
|
76
|
+
? `[Chunk ${element.index + 1}/${element.total} of ${element.partOf}]`
|
|
77
|
+
: `[Chunk of ${element.partOf}]`;
|
|
78
|
+
return { text: `${chunkHeader}\n${chunkContent}` };
|
|
79
|
+
}
|
|
80
|
+
case 'section':
|
|
81
|
+
case 'subsection': {
|
|
82
|
+
// Section/SubSection elements should be compiled before reaching here
|
|
83
|
+
// If they do reach here, flatten their items recursively
|
|
84
|
+
const flattenItems = (items) => {
|
|
85
|
+
return items.map(item => {
|
|
86
|
+
if (typeof item === 'string')
|
|
87
|
+
return item;
|
|
88
|
+
if (typeof item === 'function')
|
|
89
|
+
return ''; // DynamicContent should be resolved before this point
|
|
90
|
+
return this.elementToPart(item).text || '';
|
|
91
|
+
}).filter(Boolean).join('\n');
|
|
92
|
+
};
|
|
93
|
+
return { text: flattenItems(element.items) };
|
|
94
|
+
}
|
|
95
|
+
case 'json':
|
|
96
|
+
return { text: typeof element.content === 'string' ? element.content : JSON.stringify(element.content, null, 2) };
|
|
97
|
+
default:
|
|
98
|
+
return { text: JSON.stringify(element) };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Convert Element to Content (structure-preserving conversion)
|
|
103
|
+
* Used for conversation history where role matters
|
|
104
|
+
*/
|
|
105
|
+
elementToContent(element) {
|
|
106
|
+
if (typeof element === 'string') {
|
|
107
|
+
return { parts: [{ text: element }] };
|
|
108
|
+
}
|
|
109
|
+
if (element.type === 'message') {
|
|
110
|
+
// Role conversion:
|
|
111
|
+
// - assistant → model
|
|
112
|
+
// - system → user (Gemini API doesn't support system role in contents)
|
|
113
|
+
// - user → user
|
|
114
|
+
const role = element.role === 'assistant' ? 'model' : 'user';
|
|
115
|
+
const messageContent = this.contentToString(element.content);
|
|
116
|
+
return {
|
|
117
|
+
role,
|
|
118
|
+
parts: [{ text: messageContent }]
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// Non-message elements: convert to Part and wrap in Content without role
|
|
122
|
+
return {
|
|
123
|
+
parts: [this.elementToPart(element)]
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Convert JSON Schema to GoogleGenAI Schema format
|
|
128
|
+
*/
|
|
129
|
+
convertJsonSchema(schema) {
|
|
130
|
+
if (!schema || typeof schema !== 'object')
|
|
131
|
+
return undefined;
|
|
132
|
+
// GoogleGenAI uses a specific schema format
|
|
133
|
+
// For now, we'll pass it through and let the API handle it
|
|
134
|
+
return schema;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Query implementation
|
|
138
|
+
*/
|
|
139
|
+
async query(prompt, options = {}) {
|
|
140
|
+
try {
|
|
141
|
+
// Merge options with defaults
|
|
142
|
+
const mergedOptions = { ...this.defaultOptions, ...options };
|
|
143
|
+
// Convert prompt to GoogleGenAI format
|
|
144
|
+
// Instructions → systemInstruction (Part[])
|
|
145
|
+
const systemInstructionParts = prompt.instructions?.map(el => this.elementToPart(el));
|
|
146
|
+
// Data + Output → contents (Content[])
|
|
147
|
+
const allDataElements = [...(prompt.data || []), ...(prompt.output || [])];
|
|
148
|
+
const contents = allDataElements.length > 0
|
|
149
|
+
? allDataElements.map(el => this.elementToContent(el))
|
|
150
|
+
: [{ parts: [{ text: 'Please process according to the instructions.' }] }];
|
|
151
|
+
// Create generation config
|
|
152
|
+
const config = {
|
|
153
|
+
temperature: mergedOptions.temperature ?? this.defaultTemperature,
|
|
154
|
+
maxOutputTokens: mergedOptions.maxTokens,
|
|
155
|
+
topP: mergedOptions.topP,
|
|
156
|
+
topK: mergedOptions.topK,
|
|
157
|
+
candidateCount: mergedOptions.candidateCount,
|
|
158
|
+
stopSequences: mergedOptions.stopSequences,
|
|
159
|
+
thinkingConfig: mergedOptions.thinkingConfig,
|
|
160
|
+
};
|
|
161
|
+
// Add system instruction if present
|
|
162
|
+
if (systemInstructionParts && systemInstructionParts.length > 0) {
|
|
163
|
+
config.systemInstruction = systemInstructionParts;
|
|
164
|
+
}
|
|
165
|
+
// Handle structured outputs
|
|
166
|
+
if (prompt.metadata?.outputSchema) {
|
|
167
|
+
config.responseMimeType = 'application/json';
|
|
168
|
+
config.responseSchema = this.convertJsonSchema(prompt.metadata.outputSchema);
|
|
169
|
+
}
|
|
170
|
+
// Remove undefined values
|
|
171
|
+
Object.keys(config).forEach(key => {
|
|
172
|
+
if (config[key] === undefined) {
|
|
173
|
+
delete config[key];
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
// Get model name
|
|
177
|
+
const model = mergedOptions.model || this.defaultModel;
|
|
178
|
+
// Generate content
|
|
179
|
+
const response = await this.client.models.generateContent({
|
|
180
|
+
model,
|
|
181
|
+
contents,
|
|
182
|
+
config
|
|
183
|
+
});
|
|
184
|
+
// Extract text content using convenience property
|
|
185
|
+
const content = response.text || '';
|
|
186
|
+
// Extract candidate for finish reason
|
|
187
|
+
const candidate = response.candidates?.[0];
|
|
188
|
+
// Map finish reason
|
|
189
|
+
const finishReason = finishReasonMap[candidate?.finishReason || 'error'] || 'error';
|
|
190
|
+
// Handle structured outputs
|
|
191
|
+
let structuredOutput;
|
|
192
|
+
if (prompt.metadata?.outputSchema && content) {
|
|
193
|
+
try {
|
|
194
|
+
structuredOutput = JSON.parse(content);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Keep as text if not valid JSON
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
content,
|
|
202
|
+
finishReason,
|
|
203
|
+
structuredOutput,
|
|
204
|
+
usage: response.usageMetadata ? {
|
|
205
|
+
promptTokens: response.usageMetadata.promptTokenCount || 0,
|
|
206
|
+
completionTokens: response.usageMetadata.candidatesTokenCount || 0,
|
|
207
|
+
totalTokens: response.usageMetadata.totalTokenCount || 0
|
|
208
|
+
} : undefined
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
console.error('[GoogleGenAIDriver] Query error:', error);
|
|
213
|
+
if (error instanceof Error) {
|
|
214
|
+
console.error('[GoogleGenAIDriver] Error message:', error.message);
|
|
215
|
+
console.error('[GoogleGenAIDriver] Error stack:', error.stack);
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
content: '',
|
|
219
|
+
finishReason: 'error'
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Stream query implementation
|
|
225
|
+
*/
|
|
226
|
+
async streamQuery(prompt, options) {
|
|
227
|
+
const mergedOptions = { ...this.defaultOptions, ...options };
|
|
228
|
+
// Convert prompt to GoogleGenAI format
|
|
229
|
+
// Instructions → systemInstruction (Part[])
|
|
230
|
+
const systemInstructionParts = prompt.instructions?.map(el => this.elementToPart(el));
|
|
231
|
+
// Data + Output → contents (Content[])
|
|
232
|
+
const allDataElements = [...(prompt.data || []), ...(prompt.output || [])];
|
|
233
|
+
const contents = allDataElements.length > 0
|
|
234
|
+
? allDataElements.map(el => this.elementToContent(el))
|
|
235
|
+
: [{ parts: [{ text: 'Please process according to the instructions.' }] }];
|
|
236
|
+
// Create generation config
|
|
237
|
+
const config = {
|
|
238
|
+
temperature: mergedOptions.temperature ?? this.defaultTemperature,
|
|
239
|
+
maxOutputTokens: mergedOptions.maxTokens,
|
|
240
|
+
topP: mergedOptions.topP,
|
|
241
|
+
topK: mergedOptions.topK,
|
|
242
|
+
candidateCount: mergedOptions.candidateCount,
|
|
243
|
+
stopSequences: mergedOptions.stopSequences,
|
|
244
|
+
thinkingConfig: mergedOptions.thinkingConfig,
|
|
245
|
+
};
|
|
246
|
+
// Add system instruction if present
|
|
247
|
+
if (systemInstructionParts && systemInstructionParts.length > 0) {
|
|
248
|
+
config.systemInstruction = systemInstructionParts;
|
|
249
|
+
}
|
|
250
|
+
// Handle structured outputs
|
|
251
|
+
if (prompt.metadata?.outputSchema) {
|
|
252
|
+
config.responseMimeType = 'application/json';
|
|
253
|
+
config.responseSchema = this.convertJsonSchema(prompt.metadata.outputSchema);
|
|
254
|
+
}
|
|
255
|
+
// Remove undefined values
|
|
256
|
+
Object.keys(config).forEach(key => {
|
|
257
|
+
if (config[key] === undefined) {
|
|
258
|
+
delete config[key];
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
// Get model name
|
|
262
|
+
const model = mergedOptions.model || this.defaultModel;
|
|
263
|
+
// Generate content stream
|
|
264
|
+
const streamResponse = await this.client.models.generateContentStream({
|
|
265
|
+
model,
|
|
266
|
+
contents,
|
|
267
|
+
config
|
|
268
|
+
});
|
|
269
|
+
// Shared state for accumulating content and metadata
|
|
270
|
+
let fullContent = '';
|
|
271
|
+
let usage;
|
|
272
|
+
let finishReason = 'stop';
|
|
273
|
+
let streamConsumed = false;
|
|
274
|
+
const chunks = [];
|
|
275
|
+
// Process the stream and cache chunks
|
|
276
|
+
const processStream = async () => {
|
|
277
|
+
try {
|
|
278
|
+
for await (const chunk of streamResponse) {
|
|
279
|
+
const text = chunk.text;
|
|
280
|
+
if (text) {
|
|
281
|
+
fullContent += text;
|
|
282
|
+
chunks.push(text);
|
|
283
|
+
}
|
|
284
|
+
// Update finish reason if provided
|
|
285
|
+
if (chunk.candidates?.[0]?.finishReason) {
|
|
286
|
+
const reason = chunk.candidates[0].finishReason;
|
|
287
|
+
finishReason = finishReasonMap[reason] || 'error';
|
|
288
|
+
}
|
|
289
|
+
// Accumulate usage if provided
|
|
290
|
+
if (chunk.usageMetadata) {
|
|
291
|
+
usage = {
|
|
292
|
+
promptTokens: chunk.usageMetadata.promptTokenCount || 0,
|
|
293
|
+
completionTokens: chunk.usageMetadata.candidatesTokenCount || 0,
|
|
294
|
+
totalTokens: chunk.usageMetadata.totalTokenCount || 0
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
finishReason = 'error';
|
|
301
|
+
}
|
|
302
|
+
streamConsumed = true;
|
|
303
|
+
};
|
|
304
|
+
// Start processing the stream
|
|
305
|
+
const processingPromise = processStream();
|
|
306
|
+
// Create the stream generator that yields cached chunks
|
|
307
|
+
const streamGenerator = async function* () {
|
|
308
|
+
let index = 0;
|
|
309
|
+
while (!streamConsumed || index < chunks.length) {
|
|
310
|
+
if (index < chunks.length) {
|
|
311
|
+
yield chunks[index++];
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
// Wait a bit for more chunks
|
|
315
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
// Create result promise
|
|
320
|
+
const resultPromise = (async () => {
|
|
321
|
+
await processingPromise;
|
|
322
|
+
// Handle structured outputs
|
|
323
|
+
let structuredOutput;
|
|
324
|
+
if (prompt.metadata?.outputSchema && fullContent) {
|
|
325
|
+
try {
|
|
326
|
+
structuredOutput = JSON.parse(fullContent);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
// Keep as undefined if parsing fails
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return {
|
|
333
|
+
content: fullContent,
|
|
334
|
+
structuredOutput,
|
|
335
|
+
usage,
|
|
336
|
+
finishReason
|
|
337
|
+
};
|
|
338
|
+
})();
|
|
339
|
+
return {
|
|
340
|
+
stream: streamGenerator(),
|
|
341
|
+
result: resultPromise
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Close the client
|
|
346
|
+
*/
|
|
347
|
+
async close() {
|
|
348
|
+
// GoogleGenAI client doesn't need explicit closing
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=google-genai-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-genai-driver.js","sourceRoot":"","sources":["../../src/google-genai/google-genai-driver.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type { AIDriver, ChatMessage, QueryResult, QueryOptions, DriverConfig, Role } from './types.js';
|
|
2
|
+
export { TestDriver, type TestDriverOptions, type ResponseProvider } from './test-driver.js';
|
|
3
|
+
export { EchoDriver, type EchoDriverConfig } from './echo-driver.js';
|
|
4
|
+
export { OpenAIDriver, type OpenAIDriverConfig, type OpenAIQueryOptions } from './openai/openai-driver.js';
|
|
5
|
+
export { OllamaDriver, type OllamaDriverConfig } from './ollama/ollama-driver.js';
|
|
6
|
+
export { AnthropicDriver, type AnthropicDriverConfig, type AnthropicQueryOptions } from './anthropic/anthropic-driver.js';
|
|
7
|
+
export { MlxDriver, type MlxDriverConfig } from './mlx-ml/mlx-driver.js';
|
|
8
|
+
export { MlxProcess } from './mlx-ml/process/index.js';
|
|
9
|
+
export type { MlxMessage } from './mlx-ml/types.js';
|
|
10
|
+
export { VertexAIDriver, type VertexAIDriverConfig, type VertexAIQueryOptions } from './vertexai/vertexai-driver.js';
|
|
11
|
+
export { GoogleGenAIDriver, type GoogleGenAIDriverConfig, type GoogleGenAIQueryOptions } from './google-genai/google-genai-driver.js';
|
|
12
|
+
export type { FormatterOptions, ElementFormatter, ChatMessage as FormatterChatMessage } from './formatter/types.js';
|
|
13
|
+
export { DefaultFormatter } from './formatter/formatter.js';
|
|
14
|
+
export { formatPromptAsMessages, formatCompletionPrompt, defaultFormatterTexts, ECHO_SPECIAL_TOKENS } from './formatter/converter.js';
|
|
15
|
+
export { AIService, DriverRegistry, registerFactories, type SelectionOptions, type ApplicationConfig } from './driver-registry/index.js';
|
|
16
|
+
export type { DriverProvider, DriverCapability, ModelSpec, DriverFactory } from './driver-registry/index.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,IAAI,EACL,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,SAAS,EACT,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,UAAU,EACX,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,UAAU,EACX,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,uCAAuC,CAAC;AAG/C,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,IAAI,oBAAoB,EACpC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACd,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Test driver
|
|
2
|
+
export { TestDriver } from './test-driver.js';
|
|
3
|
+
// Echo driver
|
|
4
|
+
export { EchoDriver } from './echo-driver.js';
|
|
5
|
+
// OpenAI driver
|
|
6
|
+
export { OpenAIDriver } from './openai/openai-driver.js';
|
|
7
|
+
// Ollama driver
|
|
8
|
+
export { OllamaDriver } from './ollama/ollama-driver.js';
|
|
9
|
+
// Anthropic driver
|
|
10
|
+
export { AnthropicDriver } from './anthropic/anthropic-driver.js';
|
|
11
|
+
// MLX ML driver
|
|
12
|
+
export { MlxDriver } from './mlx-ml/mlx-driver.js';
|
|
13
|
+
// MLX ML low-level process API
|
|
14
|
+
export { MlxProcess } from './mlx-ml/process/index.js';
|
|
15
|
+
// VertexAI driver
|
|
16
|
+
export { VertexAIDriver } from './vertexai/vertexai-driver.js';
|
|
17
|
+
// GoogleGenAI driver
|
|
18
|
+
export { GoogleGenAIDriver } from './google-genai/google-genai-driver.js';
|
|
19
|
+
export { DefaultFormatter } from './formatter/formatter.js';
|
|
20
|
+
export { formatPromptAsMessages, formatCompletionPrompt, defaultFormatterTexts, ECHO_SPECIAL_TOKENS } from './formatter/converter.js';
|
|
21
|
+
// Driver Registry and AI Service exports
|
|
22
|
+
export { AIService, DriverRegistry, registerFactories } from './driver-registry/index.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,cAAc;AACd,OAAO,EACL,UAAU,EAGX,MAAM,kBAAkB,CAAC;AAE1B,cAAc;AACd,OAAO,EACL,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,OAAO,EACL,YAAY,EAGb,MAAM,2BAA2B,CAAC;AAEnC,gBAAgB;AAChB,OAAO,EACL,YAAY,EAEb,MAAM,2BAA2B,CAAC;AAEnC,mBAAmB;AACnB,OAAO,EACL,eAAe,EAGhB,MAAM,iCAAiC,CAAC;AAEzC,gBAAgB;AAChB,OAAO,EACL,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAEhC,+BAA+B;AAC/B,OAAO,EACL,UAAU,EACX,MAAM,2BAA2B,CAAC;AAMnC,kBAAkB;AAClB,OAAO,EACL,cAAc,EAGf,MAAM,+BAA+B,CAAC;AAEvC,qBAAqB;AACrB,OAAO,EACL,iBAAiB,EAGlB,MAAM,uCAAuC,CAAC;AAS/C,OAAO,EACL,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,yCAAyC;AACzC,OAAO,EACL,SAAS,EACT,cAAc,EACd,iBAAiB,EAGlB,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { AIDriver, QueryOptions, QueryResult, StreamResult } from '../types.js';
|
|
2
|
+
import type { FormatterOptions, ChatMessage } from '../formatter/types.js';
|
|
3
|
+
import type { MlxMessage, MlxMlModelOptions, MlxModelCapabilities } from './types.js';
|
|
4
|
+
import type { CompiledPrompt } from '@modular-prompt/core';
|
|
5
|
+
/**
|
|
6
|
+
* Check if the prompt contains MessageElement
|
|
7
|
+
*/
|
|
8
|
+
export declare function hasMessageElement(prompt: CompiledPrompt): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Convert ChatMessage format to MLX format
|
|
11
|
+
*/
|
|
12
|
+
export declare function convertMessages(messages: ChatMessage[]): MlxMessage[];
|
|
13
|
+
/**
|
|
14
|
+
* MLX ML driver configuration
|
|
15
|
+
*/
|
|
16
|
+
export interface MlxDriverConfig {
|
|
17
|
+
model: string;
|
|
18
|
+
defaultOptions?: Partial<MlxMlModelOptions>;
|
|
19
|
+
formatterOptions?: FormatterOptions;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* MLX ML driver using Python subprocess
|
|
23
|
+
*/
|
|
24
|
+
export declare class MlxDriver implements AIDriver {
|
|
25
|
+
private process;
|
|
26
|
+
private model;
|
|
27
|
+
private defaultOptions;
|
|
28
|
+
private runtimeInfo;
|
|
29
|
+
private modelProcessor;
|
|
30
|
+
private formatterOptions;
|
|
31
|
+
constructor(config: MlxDriverConfig);
|
|
32
|
+
/**
|
|
33
|
+
* Initialize process and cache runtime info
|
|
34
|
+
*/
|
|
35
|
+
private ensureInitialized;
|
|
36
|
+
/**
|
|
37
|
+
* Determine which API to use (chat or completion)
|
|
38
|
+
* Simple logic based on runtime info only
|
|
39
|
+
*/
|
|
40
|
+
private determineApi;
|
|
41
|
+
/**
|
|
42
|
+
* Execute query and return stream
|
|
43
|
+
* Common logic for query and streamQuery
|
|
44
|
+
*/
|
|
45
|
+
private executeQuery;
|
|
46
|
+
/**
|
|
47
|
+
* Query the AI model with a compiled prompt
|
|
48
|
+
*/
|
|
49
|
+
query(prompt: CompiledPrompt, options?: QueryOptions): Promise<QueryResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Stream query implementation
|
|
52
|
+
*/
|
|
53
|
+
streamQuery(prompt: CompiledPrompt, options?: QueryOptions): Promise<StreamResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Get model capabilities (public API)
|
|
56
|
+
*
|
|
57
|
+
* Returns runtime information converted to camelCase
|
|
58
|
+
*/
|
|
59
|
+
getCapabilities(): Promise<MlxModelCapabilities>;
|
|
60
|
+
/**
|
|
61
|
+
* Close the process
|
|
62
|
+
*/
|
|
63
|
+
close(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=mlx-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mlx-driver.d.ts","sourceRoot":"","sources":["../../src/mlx-ml/mlx-driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI3E,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAYjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAKrE;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAsCD;;GAEG;AACH,qBAAa,SAAU,YAAW,QAAQ;IACxC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,gBAAgB,CAAmB;gBAG/B,MAAM,EAAE,eAAe;IAQnC;;OAEG;YACW,iBAAiB;IAmB/B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAUpB;;;OAGG;YACW,YAAY;IA2B1B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAajF;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,YAAY,CAAC;IA8CxB;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAgCtD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|