@just-every/ensemble 0.2.257 → 0.2.259
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/README.md +2 -2
- package/dist/cjs/data/model_data.cjs +66 -11
- package/dist/cjs/data/model_data.d.ts.map +1 -1
- package/dist/cjs/data/model_data.js.map +1 -1
- package/dist/cjs/model_providers/assemblyai.cjs +360 -0
- package/dist/cjs/model_providers/assemblyai.d.ts +30 -0
- package/dist/cjs/model_providers/assemblyai.d.ts.map +1 -0
- package/dist/cjs/model_providers/assemblyai.js.map +1 -0
- package/dist/cjs/model_providers/gemini.cjs +93 -34
- package/dist/cjs/model_providers/gemini.d.ts.map +1 -1
- package/dist/cjs/model_providers/gemini.js.map +1 -1
- package/dist/cjs/model_providers/model_provider.cjs +10 -0
- package/dist/cjs/model_providers/model_provider.d.ts.map +1 -1
- package/dist/cjs/model_providers/model_provider.js.map +1 -1
- package/dist/cjs/model_providers/openai.cjs +91 -25
- package/dist/cjs/model_providers/openai.d.ts.map +1 -1
- package/dist/cjs/model_providers/openai.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types/types.d.ts +2 -1
- package/dist/cjs/types/types.d.ts.map +1 -1
- package/dist/data/model_data.d.ts.map +1 -1
- package/dist/data/model_data.js +66 -11
- package/dist/data/model_data.js.map +1 -1
- package/dist/model_providers/assemblyai.d.ts +30 -0
- package/dist/model_providers/assemblyai.d.ts.map +1 -0
- package/dist/model_providers/assemblyai.js +323 -0
- package/dist/model_providers/assemblyai.js.map +1 -0
- package/dist/model_providers/gemini.d.ts.map +1 -1
- package/dist/model_providers/gemini.js +93 -34
- package/dist/model_providers/gemini.js.map +1 -1
- package/dist/model_providers/model_provider.d.ts.map +1 -1
- package/dist/model_providers/model_provider.js +10 -0
- package/dist/model_providers/model_provider.js.map +1 -1
- package/dist/model_providers/openai.d.ts.map +1 -1
- package/dist/model_providers/openai.js +91 -25
- package/dist/model_providers/openai.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types.d.ts +2 -1
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { BaseModelProvider } from './base_provider.js';
|
|
2
|
+
const ASSEMBLYAI_STREAMING_URL = 'wss://streaming.assemblyai.com/v3/ws';
|
|
3
|
+
const ASSEMBLYAI_STREAMING_MODELS = new Set(['u3-rt-pro']);
|
|
4
|
+
const DEFAULT_SAMPLE_RATE = 16000;
|
|
5
|
+
const DEFAULT_CHANNELS = 1;
|
|
6
|
+
const BYTES_PER_SAMPLE = 2;
|
|
7
|
+
const TARGET_CHUNK_MS = 50;
|
|
8
|
+
const WEBSOCKET_OPEN_STATE = 1;
|
|
9
|
+
const DONE = Symbol('done');
|
|
10
|
+
function normalizeAudioSource(source) {
|
|
11
|
+
if (source instanceof ReadableStream) {
|
|
12
|
+
return source;
|
|
13
|
+
}
|
|
14
|
+
if (typeof source === 'object' && source !== null && Symbol.asyncIterator in source) {
|
|
15
|
+
return new ReadableStream({
|
|
16
|
+
async start(controller) {
|
|
17
|
+
try {
|
|
18
|
+
for await (const chunk of source) {
|
|
19
|
+
controller.enqueue(chunk);
|
|
20
|
+
}
|
|
21
|
+
controller.close();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
controller.error(error);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (typeof source === 'function') {
|
|
30
|
+
return normalizeAudioSource(source());
|
|
31
|
+
}
|
|
32
|
+
if (source instanceof ArrayBuffer || source instanceof Uint8Array) {
|
|
33
|
+
const data = source instanceof ArrayBuffer ? new Uint8Array(source) : source;
|
|
34
|
+
return new ReadableStream({
|
|
35
|
+
start(controller) {
|
|
36
|
+
controller.enqueue(data);
|
|
37
|
+
controller.close();
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Unsupported audio source type: ${typeof source}`);
|
|
42
|
+
}
|
|
43
|
+
function appendBuffer(left, right) {
|
|
44
|
+
if (left.length === 0)
|
|
45
|
+
return right;
|
|
46
|
+
const merged = new Uint8Array(left.length + right.length);
|
|
47
|
+
merged.set(left);
|
|
48
|
+
merged.set(right, left.length);
|
|
49
|
+
return merged;
|
|
50
|
+
}
|
|
51
|
+
function copyChunk(chunk) {
|
|
52
|
+
const copy = new Uint8Array(chunk.length);
|
|
53
|
+
copy.set(chunk);
|
|
54
|
+
return copy;
|
|
55
|
+
}
|
|
56
|
+
function wait(ms) {
|
|
57
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
58
|
+
}
|
|
59
|
+
function getTranscriptDelta(previous, next) {
|
|
60
|
+
if (!previous)
|
|
61
|
+
return next;
|
|
62
|
+
if (next.startsWith(previous))
|
|
63
|
+
return next.slice(previous.length);
|
|
64
|
+
let commonPrefixLength = 0;
|
|
65
|
+
const limit = Math.min(previous.length, next.length);
|
|
66
|
+
while (commonPrefixLength < limit && previous[commonPrefixLength] === next[commonPrefixLength]) {
|
|
67
|
+
commonPrefixLength++;
|
|
68
|
+
}
|
|
69
|
+
return next.slice(commonPrefixLength);
|
|
70
|
+
}
|
|
71
|
+
function setParam(params, name, value) {
|
|
72
|
+
if (value === undefined || value === null || value === '')
|
|
73
|
+
return;
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
if (value.length === 0)
|
|
76
|
+
return;
|
|
77
|
+
params.set(name, JSON.stringify(value));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
params.set(name, String(value));
|
|
81
|
+
}
|
|
82
|
+
function buildStreamingUrl(model, opts) {
|
|
83
|
+
const params = new URLSearchParams();
|
|
84
|
+
params.set('sample_rate', String(opts.audioFormat?.sampleRate || DEFAULT_SAMPLE_RATE));
|
|
85
|
+
params.set('speech_model', model);
|
|
86
|
+
setParam(params, 'mode', opts.mode);
|
|
87
|
+
setParam(params, 'prompt', opts.prompt);
|
|
88
|
+
setParam(params, 'language_code', opts.language_code || opts.languageCode || opts.language);
|
|
89
|
+
setParam(params, 'keyterms_prompt', opts.keyterms_prompt || opts.keytermsPrompt);
|
|
90
|
+
setParam(params, 'min_turn_silence', opts.min_turn_silence || opts.minTurnSilence);
|
|
91
|
+
setParam(params, 'max_turn_silence', opts.max_turn_silence || opts.maxTurnSilence);
|
|
92
|
+
setParam(params, 'vad_threshold', opts.vad_threshold || opts.vadThreshold);
|
|
93
|
+
setParam(params, 'agent_context', opts.agent_context || opts.agentContext);
|
|
94
|
+
return `${ASSEMBLYAI_STREAMING_URL}?${params.toString()}`;
|
|
95
|
+
}
|
|
96
|
+
function isSocketOpen(ws) {
|
|
97
|
+
return ws.readyState === WEBSOCKET_OPEN_STATE;
|
|
98
|
+
}
|
|
99
|
+
export class AssemblyAIProvider extends BaseModelProvider {
|
|
100
|
+
apiKey;
|
|
101
|
+
constructor(apiKey) {
|
|
102
|
+
super('assemblyai');
|
|
103
|
+
this.apiKey = apiKey;
|
|
104
|
+
}
|
|
105
|
+
async *createResponseStream() {
|
|
106
|
+
yield* [];
|
|
107
|
+
throw new Error('AssemblyAI provider only supports streaming transcription');
|
|
108
|
+
}
|
|
109
|
+
async *createTranscription(audio, _agent, model, opts = {}) {
|
|
110
|
+
if (!ASSEMBLYAI_STREAMING_MODELS.has(model)) {
|
|
111
|
+
throw new Error(`Model ${model} does not support AssemblyAI streaming transcription. Supported models: ${Array.from(ASSEMBLYAI_STREAMING_MODELS).join(', ')}`);
|
|
112
|
+
}
|
|
113
|
+
const apiKey = this.apiKey || process.env.ASSEMBLYAI_API_KEY;
|
|
114
|
+
if (!apiKey) {
|
|
115
|
+
throw new Error('Failed to initialize AssemblyAI transcription. Make sure ASSEMBLYAI_API_KEY is set.');
|
|
116
|
+
}
|
|
117
|
+
const { WebSocket } = await import('ws');
|
|
118
|
+
const ws = new WebSocket(buildStreamingUrl(model, opts), {
|
|
119
|
+
headers: { Authorization: apiKey },
|
|
120
|
+
});
|
|
121
|
+
const queue = [];
|
|
122
|
+
let wake;
|
|
123
|
+
let finished = false;
|
|
124
|
+
let socketError;
|
|
125
|
+
const previousTurnTranscripts = new Map();
|
|
126
|
+
const push = (item) => {
|
|
127
|
+
queue.push(item);
|
|
128
|
+
wake?.();
|
|
129
|
+
wake = undefined;
|
|
130
|
+
};
|
|
131
|
+
const markDone = () => {
|
|
132
|
+
if (finished)
|
|
133
|
+
return;
|
|
134
|
+
finished = true;
|
|
135
|
+
push(DONE);
|
|
136
|
+
};
|
|
137
|
+
const connected = new Promise((resolve, reject) => {
|
|
138
|
+
const timeout = setTimeout(() => {
|
|
139
|
+
reject(new Error('AssemblyAI streaming connection timeout'));
|
|
140
|
+
}, 10000);
|
|
141
|
+
ws.once('open', () => {
|
|
142
|
+
clearTimeout(timeout);
|
|
143
|
+
resolve();
|
|
144
|
+
});
|
|
145
|
+
ws.once('error', error => {
|
|
146
|
+
clearTimeout(timeout);
|
|
147
|
+
reject(error);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
ws.on('message', data => {
|
|
151
|
+
let message;
|
|
152
|
+
try {
|
|
153
|
+
message = JSON.parse(data.toString());
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
socketError = error instanceof Error ? error : new Error(String(error));
|
|
157
|
+
push({
|
|
158
|
+
type: 'error',
|
|
159
|
+
timestamp: new Date().toISOString(),
|
|
160
|
+
error: `Failed to parse AssemblyAI message: ${socketError.message}`,
|
|
161
|
+
});
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const timestamp = new Date().toISOString();
|
|
165
|
+
switch (message.type) {
|
|
166
|
+
case 'Begin':
|
|
167
|
+
break;
|
|
168
|
+
case 'SpeechStarted':
|
|
169
|
+
push({
|
|
170
|
+
type: 'transcription_turn_start',
|
|
171
|
+
timestamp,
|
|
172
|
+
});
|
|
173
|
+
break;
|
|
174
|
+
case 'Turn': {
|
|
175
|
+
const transcript = typeof message.transcript === 'string' ? message.transcript : '';
|
|
176
|
+
const turnOrder = typeof message.turn_order === 'number' ? message.turn_order : 0;
|
|
177
|
+
const previousTranscript = previousTurnTranscripts.get(turnOrder) || '';
|
|
178
|
+
const delta = getTranscriptDelta(previousTranscript, transcript);
|
|
179
|
+
previousTurnTranscripts.set(turnOrder, transcript);
|
|
180
|
+
if (delta) {
|
|
181
|
+
push({
|
|
182
|
+
type: 'transcription_turn_delta',
|
|
183
|
+
timestamp,
|
|
184
|
+
delta,
|
|
185
|
+
partial: !message.end_of_turn,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
if (message.end_of_turn) {
|
|
189
|
+
previousTurnTranscripts.delete(turnOrder);
|
|
190
|
+
push({
|
|
191
|
+
type: 'transcription_turn_complete',
|
|
192
|
+
timestamp,
|
|
193
|
+
text: transcript,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
case 'Termination':
|
|
199
|
+
markDone();
|
|
200
|
+
break;
|
|
201
|
+
case 'Error':
|
|
202
|
+
socketError = new Error(message.error || 'AssemblyAI streaming error');
|
|
203
|
+
push({
|
|
204
|
+
type: 'error',
|
|
205
|
+
timestamp,
|
|
206
|
+
error: socketError.message,
|
|
207
|
+
});
|
|
208
|
+
markDone();
|
|
209
|
+
break;
|
|
210
|
+
default:
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
ws.on('error', error => {
|
|
215
|
+
socketError = error instanceof Error ? error : new Error(String(error));
|
|
216
|
+
push({
|
|
217
|
+
type: 'error',
|
|
218
|
+
timestamp: new Date().toISOString(),
|
|
219
|
+
error: socketError.message,
|
|
220
|
+
});
|
|
221
|
+
markDone();
|
|
222
|
+
});
|
|
223
|
+
ws.on('close', (code, reason) => {
|
|
224
|
+
if (!finished && code !== 1000) {
|
|
225
|
+
const detail = reason.toString() || `AssemblyAI streaming socket closed with code ${code}`;
|
|
226
|
+
push({
|
|
227
|
+
type: 'error',
|
|
228
|
+
timestamp: new Date().toISOString(),
|
|
229
|
+
error: detail,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
markDone();
|
|
233
|
+
});
|
|
234
|
+
let audioPump;
|
|
235
|
+
try {
|
|
236
|
+
await connected;
|
|
237
|
+
audioPump = this.streamAudio(ws, audio, opts)
|
|
238
|
+
.then(() => {
|
|
239
|
+
if (isSocketOpen(ws)) {
|
|
240
|
+
ws.send(JSON.stringify({ type: 'Terminate' }));
|
|
241
|
+
}
|
|
242
|
+
})
|
|
243
|
+
.catch(error => {
|
|
244
|
+
socketError = error instanceof Error ? error : new Error(String(error));
|
|
245
|
+
push({
|
|
246
|
+
type: 'error',
|
|
247
|
+
timestamp: new Date().toISOString(),
|
|
248
|
+
error: socketError.message,
|
|
249
|
+
});
|
|
250
|
+
if (isSocketOpen(ws)) {
|
|
251
|
+
ws.close();
|
|
252
|
+
}
|
|
253
|
+
markDone();
|
|
254
|
+
});
|
|
255
|
+
while (true) {
|
|
256
|
+
if (queue.length === 0) {
|
|
257
|
+
await new Promise(resolve => {
|
|
258
|
+
wake = resolve;
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
const item = queue.shift();
|
|
262
|
+
if (!item)
|
|
263
|
+
continue;
|
|
264
|
+
if (item === DONE)
|
|
265
|
+
break;
|
|
266
|
+
yield item;
|
|
267
|
+
}
|
|
268
|
+
if (socketError) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
finally {
|
|
273
|
+
await audioPump?.catch(() => undefined);
|
|
274
|
+
if (isSocketOpen(ws)) {
|
|
275
|
+
ws.close();
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
async streamAudio(ws, audio, opts) {
|
|
280
|
+
const stream = normalizeAudioSource(audio);
|
|
281
|
+
const reader = stream.getReader();
|
|
282
|
+
const sampleRate = opts.audioFormat?.sampleRate || DEFAULT_SAMPLE_RATE;
|
|
283
|
+
const channels = opts.audioFormat?.channels || DEFAULT_CHANNELS;
|
|
284
|
+
const throttleAudio = opts.throttleAudio ??
|
|
285
|
+
(!opts.disableRealtimeThrottle && (audio instanceof ArrayBuffer || audio instanceof Uint8Array));
|
|
286
|
+
const targetBytes = Math.max(1, Math.floor((sampleRate * channels * BYTES_PER_SAMPLE * TARGET_CHUNK_MS) / 1000));
|
|
287
|
+
let buffer = new Uint8Array(0);
|
|
288
|
+
while (true) {
|
|
289
|
+
const { done, value } = await reader.read();
|
|
290
|
+
if (done)
|
|
291
|
+
break;
|
|
292
|
+
if (value?.length) {
|
|
293
|
+
buffer = appendBuffer(buffer, copyChunk(value));
|
|
294
|
+
}
|
|
295
|
+
while (buffer.length >= targetBytes) {
|
|
296
|
+
const chunk = buffer.slice(0, targetBytes);
|
|
297
|
+
buffer = buffer.slice(targetBytes);
|
|
298
|
+
await this.sendAudioChunk(ws, chunk, throttleAudio);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (buffer.length > 0) {
|
|
302
|
+
await this.sendAudioChunk(ws, buffer, throttleAudio);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
async sendAudioChunk(ws, chunk, throttleAudio) {
|
|
306
|
+
if (!isSocketOpen(ws)) {
|
|
307
|
+
throw new Error('AssemblyAI streaming socket closed before audio could be sent');
|
|
308
|
+
}
|
|
309
|
+
await new Promise((resolve, reject) => {
|
|
310
|
+
ws.send(chunk, error => {
|
|
311
|
+
if (error)
|
|
312
|
+
reject(error);
|
|
313
|
+
else
|
|
314
|
+
resolve();
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
if (throttleAudio) {
|
|
318
|
+
await wait(TARGET_CHUNK_MS);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
export const assemblyAIProvider = new AssemblyAIProvider();
|
|
323
|
+
//# sourceMappingURL=assemblyai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assemblyai.js","sourceRoot":"","sources":["../../model_providers/assemblyai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../model_providers/gemini.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAGH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EAInB,mBAAmB,EAEnB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,EAOd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA6NvD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1D;AAmCD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../model_providers/gemini.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAGH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EAInB,mBAAmB,EAEnB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,EAOd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA6NvD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1D;AAmCD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AA8hBD,qBAAa,cAAe,SAAQ,iBAAiB;IACjD,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM;IAS3B,OAAO,KAAK,MAAM,GAejB;IASK,eAAe,CACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;YAmKlB,2BAA2B;IA+BnC,oBAAoB,CACvB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,SAAS,CAAC,EAAE,MAAM,GACnB,cAAc,CAAC,mBAAmB,CAAC;IAukBhC,WAAW,CACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;IAwkBpB,OAAO,CAAC,YAAY;IAsCd,WAAW,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;IAgMpD,OAAO,CAAC,gBAAgB;IA6DjB,mBAAmB,CACtB,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,iBAAiB,GACzB,cAAc,CAAC,kBAAkB,CAAC;IA6S/B,iBAAiB,CACnB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC;CAyB1B;AAyfD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -582,6 +582,24 @@ function isGemmaModel(model) {
|
|
|
582
582
|
const modelId = model.startsWith('models/') ? model.slice('models/'.length) : model;
|
|
583
583
|
return modelId.startsWith('gemma-4-');
|
|
584
584
|
}
|
|
585
|
+
function isGemini25FlashImageModel(model) {
|
|
586
|
+
return model.includes('gemini-2.5-flash-image');
|
|
587
|
+
}
|
|
588
|
+
function isGemini31FlashImageModel(model) {
|
|
589
|
+
return model.includes('gemini-3.1-flash-image');
|
|
590
|
+
}
|
|
591
|
+
function isGemini31FlashLiteImageModel(model) {
|
|
592
|
+
return model.includes('gemini-3.1-flash-lite-image');
|
|
593
|
+
}
|
|
594
|
+
function isGemini3ProImageModel(model) {
|
|
595
|
+
return model.includes('gemini-3-pro-image');
|
|
596
|
+
}
|
|
597
|
+
function isGeminiStreamingImageModel(model) {
|
|
598
|
+
return (isGemini25FlashImageModel(model) ||
|
|
599
|
+
isGemini31FlashImageModel(model) ||
|
|
600
|
+
isGemini31FlashLiteImageModel(model) ||
|
|
601
|
+
isGemini3ProImageModel(model));
|
|
602
|
+
}
|
|
585
603
|
function getSupportedThinkingLevels(model) {
|
|
586
604
|
if (isGemmaModel(model)) {
|
|
587
605
|
return new Set(['HIGH']);
|
|
@@ -589,17 +607,17 @@ function getSupportedThinkingLevels(model) {
|
|
|
589
607
|
if (model.includes('gemini-3.1-pro-preview') || model.includes('gemini-3-pro-preview')) {
|
|
590
608
|
return new Set(['LOW', 'MEDIUM', 'HIGH']);
|
|
591
609
|
}
|
|
610
|
+
if (isGemini31FlashImageModel(model) || isGemini31FlashLiteImageModel(model)) {
|
|
611
|
+
return new Set(['MINIMAL', 'HIGH']);
|
|
612
|
+
}
|
|
613
|
+
if (isGemini3ProImageModel(model)) {
|
|
614
|
+
return new Set(['HIGH']);
|
|
615
|
+
}
|
|
592
616
|
if (model.includes('gemini-3.5-flash') ||
|
|
593
617
|
model.includes('gemini-3.1-flash-lite') ||
|
|
594
618
|
model.includes('gemini-3-flash-preview')) {
|
|
595
619
|
return new Set(['MINIMAL', 'LOW', 'MEDIUM', 'HIGH']);
|
|
596
620
|
}
|
|
597
|
-
if (model.includes('gemini-3.1-flash-image-preview')) {
|
|
598
|
-
return new Set(['MINIMAL', 'HIGH']);
|
|
599
|
-
}
|
|
600
|
-
if (model.includes('gemini-3-pro-image-preview')) {
|
|
601
|
-
return new Set(['HIGH']);
|
|
602
|
-
}
|
|
603
621
|
return null;
|
|
604
622
|
}
|
|
605
623
|
const GEMINI_3_PRO_IMAGE_DIMENSION_PRESETS = {
|
|
@@ -1230,7 +1248,7 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1230
1248
|
const requestId = `req_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
|
|
1231
1249
|
let finalRequestId = requestId;
|
|
1232
1250
|
try {
|
|
1233
|
-
model = model || 'gemini-
|
|
1251
|
+
model = model || 'gemini-3.1-flash-image';
|
|
1234
1252
|
const numberOfImages = opts?.n ?? 1;
|
|
1235
1253
|
if (!Number.isInteger(numberOfImages) || numberOfImages < 1) {
|
|
1236
1254
|
throw new Error('[Gemini] ImageGenerationOpts.n must be a positive integer.');
|
|
@@ -1244,11 +1262,17 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1244
1262
|
}
|
|
1245
1263
|
const explicitWebGrounding = opts?.grounding?.web_search;
|
|
1246
1264
|
const explicitImageGrounding = opts?.grounding?.image_search;
|
|
1247
|
-
const
|
|
1248
|
-
const
|
|
1249
|
-
const
|
|
1250
|
-
|
|
1251
|
-
|
|
1265
|
+
const isGemini31FlashImage = isGemini31FlashImageModel(model);
|
|
1266
|
+
const isGemini31FlashLiteImage = isGemini31FlashLiteImageModel(model);
|
|
1267
|
+
const isGemini3ProImage = isGemini3ProImageModel(model);
|
|
1268
|
+
const supportsWebGrounding = isGemini31FlashImage || isGemini3ProImage;
|
|
1269
|
+
const enableWebGrounding = supportsWebGrounding && (explicitWebGrounding ?? hasGoogleWebSearch ?? false);
|
|
1270
|
+
const enableImageGrounding = explicitImageGrounding === true && isGemini31FlashImage;
|
|
1271
|
+
if ((explicitWebGrounding || hasGoogleWebSearch) && !supportsWebGrounding) {
|
|
1272
|
+
console.warn('[Gemini] Google Search grounding is only available for gemini-3.1-flash-image and gemini-3-pro-image. Ignoring web_search=true.');
|
|
1273
|
+
}
|
|
1274
|
+
if (explicitImageGrounding && !isGemini31FlashImage) {
|
|
1275
|
+
console.warn('[Gemini] Image Search grounding is only available for gemini-3.1-flash-image. Ignoring image_search=true.');
|
|
1252
1276
|
}
|
|
1253
1277
|
const thinkingOptions = opts?.thinking;
|
|
1254
1278
|
const hasThinkingOptionsObject = thinkingOptions !== null && typeof thinkingOptions === 'object' && !Array.isArray(thinkingOptions);
|
|
@@ -1258,11 +1282,12 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1258
1282
|
? thinkingOptions.level
|
|
1259
1283
|
: undefined;
|
|
1260
1284
|
const thinkingLevel = requestedThinkingLevel === 'high' ? 'High' : requestedThinkingLevel ? 'Minimal' : undefined;
|
|
1261
|
-
|
|
1262
|
-
|
|
1285
|
+
const supportsImageThinkingControls = isGemini31FlashImage || isGemini31FlashLiteImage;
|
|
1286
|
+
if (requestedThinkingLevel && !supportsImageThinkingControls) {
|
|
1287
|
+
console.warn('[Gemini] thinking.level is currently supported for gemini-3.1-flash-image and gemini-3.1-flash-lite-image only. Ignoring thinking level.');
|
|
1263
1288
|
}
|
|
1264
|
-
if (hasThinkingOptionsObject && 'include_thoughts' in thinkingOptions && !
|
|
1265
|
-
console.warn('[Gemini] thinking.include_thoughts is currently supported for gemini-3.1-flash-image-
|
|
1289
|
+
if (hasThinkingOptionsObject && 'include_thoughts' in thinkingOptions && !supportsImageThinkingControls) {
|
|
1290
|
+
console.warn('[Gemini] thinking.include_thoughts is currently supported for gemini-3.1-flash-image and gemini-3.1-flash-lite-image only. Ignoring include_thoughts.');
|
|
1266
1291
|
}
|
|
1267
1292
|
let aspectRatio = '1:1';
|
|
1268
1293
|
if (opts?.size === 'landscape')
|
|
@@ -1270,9 +1295,7 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1270
1295
|
else if (opts?.size === 'portrait')
|
|
1271
1296
|
aspectRatio = '2:3';
|
|
1272
1297
|
console.log(`[Gemini] Generating ${numberOfImages} image(s) with model ${model}, prompt: "${prompt.substring(0, 100)}${prompt.length > 100 ? '...' : ''}"`);
|
|
1273
|
-
if (model
|
|
1274
|
-
model.includes('gemini-3.1-flash-image-preview') ||
|
|
1275
|
-
model.includes('gemini-3-pro-image-preview')) {
|
|
1298
|
+
if (isGeminiStreamingImageModel(model)) {
|
|
1276
1299
|
let aggregateMetadata = { model };
|
|
1277
1300
|
const sizeMap = {
|
|
1278
1301
|
'1:1': { ar: '1:1' },
|
|
@@ -1303,7 +1326,7 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1303
1326
|
'1024x1792': { ar: '9:16' },
|
|
1304
1327
|
};
|
|
1305
1328
|
const sm = opts?.size ? sizeMap[String(opts.size)] : undefined;
|
|
1306
|
-
const gemini3ProDimensionPreset =
|
|
1329
|
+
const gemini3ProDimensionPreset = isGemini3ProImage
|
|
1307
1330
|
? GEMINI_3_PRO_IMAGE_DIMENSION_PRESETS[String(opts?.size)]
|
|
1308
1331
|
: undefined;
|
|
1309
1332
|
const imageConfig = {};
|
|
@@ -1312,7 +1335,24 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1312
1335
|
if (gemini3ProDimensionPreset?.ar)
|
|
1313
1336
|
imageConfig.aspectRatio = gemini3ProDimensionPreset.ar;
|
|
1314
1337
|
const qualityKey = typeof opts?.quality === 'string' ? opts.quality.toLowerCase() : '';
|
|
1315
|
-
|
|
1338
|
+
if (isGemini31FlashLiteImage && imageConfig.aspectRatio) {
|
|
1339
|
+
const liteAspectRatios = new Set([
|
|
1340
|
+
'1:1',
|
|
1341
|
+
'2:3',
|
|
1342
|
+
'3:2',
|
|
1343
|
+
'3:4',
|
|
1344
|
+
'4:3',
|
|
1345
|
+
'4:5',
|
|
1346
|
+
'5:4',
|
|
1347
|
+
'9:16',
|
|
1348
|
+
'16:9',
|
|
1349
|
+
'21:9',
|
|
1350
|
+
]);
|
|
1351
|
+
if (!liteAspectRatios.has(imageConfig.aspectRatio)) {
|
|
1352
|
+
throw new Error(`[Gemini] gemini-3.1-flash-lite-image does not support aspect ratio ${imageConfig.aspectRatio}.`);
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
const imageSizeMap = isGemini31FlashImage
|
|
1316
1356
|
? {
|
|
1317
1357
|
low: '0.5K',
|
|
1318
1358
|
standard: '1K',
|
|
@@ -1320,28 +1360,44 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1320
1360
|
hd: '4K',
|
|
1321
1361
|
high: '4K',
|
|
1322
1362
|
}
|
|
1323
|
-
:
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1363
|
+
: isGemini31FlashLiteImage
|
|
1364
|
+
? {
|
|
1365
|
+
low: '1K',
|
|
1366
|
+
standard: '1K',
|
|
1367
|
+
medium: '1K',
|
|
1368
|
+
hd: '1K',
|
|
1369
|
+
high: '1K',
|
|
1370
|
+
}
|
|
1371
|
+
: {
|
|
1372
|
+
low: '1K',
|
|
1373
|
+
standard: '2K',
|
|
1374
|
+
medium: '2K',
|
|
1375
|
+
hd: '4K',
|
|
1376
|
+
high: '4K',
|
|
1377
|
+
};
|
|
1330
1378
|
let imageSize = imageSizeMap[qualityKey];
|
|
1331
1379
|
if (gemini3ProDimensionPreset?.imageSize) {
|
|
1332
1380
|
imageSize = gemini3ProDimensionPreset.imageSize;
|
|
1333
1381
|
}
|
|
1334
|
-
if (
|
|
1382
|
+
if (isGemini31FlashImage && opts?.size === '512x512') {
|
|
1335
1383
|
imageSize = '0.5K';
|
|
1336
1384
|
}
|
|
1385
|
+
if (isGemini31FlashLiteImage) {
|
|
1386
|
+
imageSize = '1K';
|
|
1387
|
+
if (opts?.size === '512x512') {
|
|
1388
|
+
throw new Error('[Gemini] gemini-3.1-flash-lite-image only supports 1K image output.');
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1337
1391
|
const requestImageSize = imageSize === '0.5K' ? '512' : imageSize;
|
|
1338
1392
|
if (requestImageSize)
|
|
1339
1393
|
imageConfig.imageSize = requestImageSize;
|
|
1340
1394
|
const thinkingConfig = {};
|
|
1341
|
-
if (hasThinkingOptionsObject &&
|
|
1395
|
+
if (hasThinkingOptionsObject &&
|
|
1396
|
+
'include_thoughts' in thinkingOptions &&
|
|
1397
|
+
supportsImageThinkingControls) {
|
|
1342
1398
|
thinkingConfig.includeThoughts = includeThoughts;
|
|
1343
1399
|
}
|
|
1344
|
-
if (thinkingLevel &&
|
|
1400
|
+
if (thinkingLevel && supportsImageThinkingControls) {
|
|
1345
1401
|
thinkingConfig.thinkingLevel = thinkingLevel;
|
|
1346
1402
|
}
|
|
1347
1403
|
const searchTypes = {};
|
|
@@ -1657,7 +1713,7 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1657
1713
|
}
|
|
1658
1714
|
}
|
|
1659
1715
|
getImageCost(model, imageSize) {
|
|
1660
|
-
if (model
|
|
1716
|
+
if (isGemini31FlashImageModel(model)) {
|
|
1661
1717
|
if (imageSize === '4K')
|
|
1662
1718
|
return 0.151;
|
|
1663
1719
|
if (imageSize === '2K')
|
|
@@ -1666,10 +1722,13 @@ export class GeminiProvider extends BaseModelProvider {
|
|
|
1666
1722
|
return 0.045;
|
|
1667
1723
|
return 0.067;
|
|
1668
1724
|
}
|
|
1669
|
-
else if (model
|
|
1725
|
+
else if (isGemini31FlashLiteImageModel(model)) {
|
|
1726
|
+
return 0.0336;
|
|
1727
|
+
}
|
|
1728
|
+
else if (isGemini25FlashImageModel(model)) {
|
|
1670
1729
|
return 0.039;
|
|
1671
1730
|
}
|
|
1672
|
-
else if (model
|
|
1731
|
+
else if (isGemini3ProImageModel(model)) {
|
|
1673
1732
|
if (imageSize === '4K')
|
|
1674
1733
|
return 0.24;
|
|
1675
1734
|
return 0.134;
|