@genkit-ai/compat-oai 1.29.0 → 1.30.1
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/lib/{audio-CJ8rzf35.d.mts → audio-Cr0WtG4I.d.mts} +88 -11
- package/lib/{audio-CJ8rzf35.d.ts → audio-Cr0WtG4I.d.ts} +88 -11
- package/lib/audio.d.mts +1 -1
- package/lib/audio.d.ts +1 -1
- package/lib/audio.js.map +1 -1
- package/lib/audio.mjs.map +1 -1
- package/lib/deepseek/deepseek.d.mts +1 -1
- package/lib/deepseek/deepseek.d.ts +1 -1
- package/lib/deepseek/index.d.mts +1 -1
- package/lib/deepseek/index.d.ts +1 -1
- package/lib/embedder.d.mts +1 -1
- package/lib/embedder.d.ts +1 -1
- package/lib/image.d.mts +1 -1
- package/lib/image.d.ts +1 -1
- package/lib/index.d.mts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +8 -0
- package/lib/index.mjs.map +1 -1
- package/lib/model.d.mts +1 -1
- package/lib/model.d.ts +1 -1
- package/lib/openai/dalle.d.mts +1 -1
- package/lib/openai/dalle.d.ts +1 -1
- package/lib/openai/index.d.mts +4 -2
- package/lib/openai/index.d.ts +4 -2
- package/lib/openai/index.js +35 -3
- package/lib/openai/index.js.map +1 -1
- package/lib/openai/index.mjs +39 -3
- package/lib/openai/index.mjs.map +1 -1
- package/lib/openai/stt.d.mts +0 -1
- package/lib/openai/stt.d.ts +0 -1
- package/lib/openai/stt.js +0 -3
- package/lib/openai/stt.js.map +1 -1
- package/lib/openai/stt.mjs +0 -3
- package/lib/openai/stt.mjs.map +1 -1
- package/lib/openai/whisper.d.mts +160 -0
- package/lib/openai/whisper.d.ts +160 -0
- package/lib/openai/whisper.js +112 -0
- package/lib/openai/whisper.js.map +1 -0
- package/lib/openai/whisper.mjs +91 -0
- package/lib/openai/whisper.mjs.map +1 -0
- package/lib/translate.d.mts +10 -0
- package/lib/translate.d.ts +10 -0
- package/lib/translate.js +172 -0
- package/lib/translate.js.map +1 -0
- package/lib/translate.mjs +143 -0
- package/lib/translate.mjs.map +1 -0
- package/lib/utils.d.mts +1 -1
- package/lib/utils.d.ts +1 -1
- package/lib/xai/grok.d.mts +1 -1
- package/lib/xai/grok.d.ts +1 -1
- package/lib/xai/index.d.mts +1 -1
- package/lib/xai/index.d.ts +1 -1
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@ import { EmbedderReference, EmbedderAction, GenerateRequest, z, ModelReference,
|
|
|
2
2
|
import { ModelInfo, ModelAction, ToolDefinition } from 'genkit/model';
|
|
3
3
|
import OpenAI, { ClientOptions } from 'openai';
|
|
4
4
|
import { Response } from 'openai/core.mjs';
|
|
5
|
-
import { SpeechCreateParams, TranscriptionCreateParams, Transcription } from 'openai/resources/audio/index.mjs';
|
|
5
|
+
import { TranslationCreateParams, TranslationCreateResponse, SpeechCreateParams, TranscriptionCreateParams, Transcription } from 'openai/resources/audio/index.mjs';
|
|
6
6
|
import * as genkit_plugin from 'genkit/plugin';
|
|
7
7
|
import { ResolvableAction } from 'genkit/plugin';
|
|
8
8
|
import { ActionType } from 'genkit/registry';
|
|
@@ -275,6 +275,91 @@ declare function compatOaiModelRef<CustomOptions extends z.ZodTypeAny = z.ZodTyp
|
|
|
275
275
|
namespace?: string;
|
|
276
276
|
}): ModelReference<CustomOptions>;
|
|
277
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Copyright 2024 The Fire Company
|
|
280
|
+
* Copyright 2024 Google LLC
|
|
281
|
+
*
|
|
282
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
283
|
+
* you may not use this file except in compliance with the License.
|
|
284
|
+
* You may obtain a copy of the License at
|
|
285
|
+
*
|
|
286
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
287
|
+
*
|
|
288
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
289
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
290
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
291
|
+
* See the License for the specific language governing permissions and
|
|
292
|
+
* limitations under the License.
|
|
293
|
+
*/
|
|
294
|
+
|
|
295
|
+
type TranslationRequestBuilder = (req: GenerateRequest, params: TranslationCreateParams) => void;
|
|
296
|
+
declare const TRANSLATION_MODEL_INFO: ModelInfo;
|
|
297
|
+
declare const TranslationConfigSchema: z.ZodObject<Pick<{
|
|
298
|
+
version: z.ZodOptional<z.ZodString>;
|
|
299
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
300
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
301
|
+
topK: z.ZodOptional<z.ZodNumber>;
|
|
302
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
303
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
304
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
305
|
+
}, "temperature"> & {
|
|
306
|
+
response_format: z.ZodOptional<z.ZodEnum<["json", "text", "srt", "verbose_json", "vtt"]>>;
|
|
307
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<Pick<{
|
|
308
|
+
version: z.ZodOptional<z.ZodString>;
|
|
309
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
310
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
311
|
+
topK: z.ZodOptional<z.ZodNumber>;
|
|
312
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
313
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
314
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
315
|
+
}, "temperature"> & {
|
|
316
|
+
response_format: z.ZodOptional<z.ZodEnum<["json", "text", "srt", "verbose_json", "vtt"]>>;
|
|
317
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<Pick<{
|
|
318
|
+
version: z.ZodOptional<z.ZodString>;
|
|
319
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
320
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
321
|
+
topK: z.ZodOptional<z.ZodNumber>;
|
|
322
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
323
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
324
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
325
|
+
}, "temperature"> & {
|
|
326
|
+
response_format: z.ZodOptional<z.ZodEnum<["json", "text", "srt", "verbose_json", "vtt"]>>;
|
|
327
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
328
|
+
declare function toTranslationRequest(modelName: string, request: GenerateRequest, requestBuilder?: TranslationRequestBuilder): TranslationCreateParams;
|
|
329
|
+
declare function translationToGenerateResponse(result: TranslationCreateResponse | string): GenerateResponseData;
|
|
330
|
+
/**
|
|
331
|
+
* Method to define a new Genkit Model that is compatible with Open AI
|
|
332
|
+
* Translation API.
|
|
333
|
+
*
|
|
334
|
+
* These models are to be used to translate audio to text.
|
|
335
|
+
*
|
|
336
|
+
* @param params An object containing parameters for defining the OpenAI
|
|
337
|
+
* translation model.
|
|
338
|
+
* @param params.ai The Genkit AI instance.
|
|
339
|
+
* @param params.name The name of the model.
|
|
340
|
+
* @param params.client The OpenAI client instance.
|
|
341
|
+
* @param params.modelRef Optional reference to the model's configuration and
|
|
342
|
+
* custom options.
|
|
343
|
+
*
|
|
344
|
+
* @returns the created {@link ModelAction}
|
|
345
|
+
*/
|
|
346
|
+
declare function defineCompatOpenAITranslationModel<CustomOptions extends z.ZodTypeAny = z.ZodTypeAny>(params: {
|
|
347
|
+
name: string;
|
|
348
|
+
client: OpenAI;
|
|
349
|
+
pluginOptions?: PluginOptions;
|
|
350
|
+
modelRef?: ModelReference<CustomOptions>;
|
|
351
|
+
requestBuilder?: TranslationRequestBuilder;
|
|
352
|
+
}): ModelAction<CustomOptions>;
|
|
353
|
+
/** Translation ModelRef helper, with reasonable defaults for
|
|
354
|
+
* OpenAI-compatible providers */
|
|
355
|
+
declare function compatOaiTranslationModelRef<CustomOptions extends z.ZodTypeAny = z.ZodTypeAny>(params: {
|
|
356
|
+
name: string;
|
|
357
|
+
info?: ModelInfo;
|
|
358
|
+
configSchema?: CustomOptions;
|
|
359
|
+
config?: any;
|
|
360
|
+
namespace?: string;
|
|
361
|
+
}): ModelReference<any>;
|
|
362
|
+
|
|
278
363
|
interface PluginOptions extends Partial<Omit<ClientOptions, 'apiKey'>> {
|
|
279
364
|
apiKey?: ClientOptions['apiKey'] | false;
|
|
280
365
|
name: string;
|
|
@@ -355,15 +440,7 @@ declare const openAICompatible: (options: PluginOptions) => genkit_plugin.Genkit
|
|
|
355
440
|
|
|
356
441
|
type SpeechRequestBuilder = (req: GenerateRequest, params: SpeechCreateParams) => void;
|
|
357
442
|
type TranscriptionRequestBuilder = (req: GenerateRequest, params: TranscriptionCreateParams) => void;
|
|
358
|
-
declare const TRANSCRIPTION_MODEL_INFO:
|
|
359
|
-
supports: {
|
|
360
|
-
media: boolean;
|
|
361
|
-
output: string[];
|
|
362
|
-
multiturn: boolean;
|
|
363
|
-
systemRole: boolean;
|
|
364
|
-
tools: boolean;
|
|
365
|
-
};
|
|
366
|
-
};
|
|
443
|
+
declare const TRANSCRIPTION_MODEL_INFO: ModelInfo;
|
|
367
444
|
declare const SPEECH_MODEL_INFO: ModelInfo;
|
|
368
445
|
declare const TranscriptionConfigSchema: z.ZodObject<Pick<{
|
|
369
446
|
version: z.ZodOptional<z.ZodString>;
|
|
@@ -545,4 +622,4 @@ declare function compatOaiTranscriptionModelRef<CustomOptions extends z.ZodTypeA
|
|
|
545
622
|
namespace?: string;
|
|
546
623
|
}): ModelReference<any>;
|
|
547
624
|
|
|
548
|
-
export {
|
|
625
|
+
export { defineCompatOpenAISpeechModel as A, defineCompatOpenAITranscriptionModel as B, ChatCompletionCommonConfigSchema as C, type SpeechRequestBuilder as D, type TranscriptionRequestBuilder as E, TRANSCRIPTION_MODEL_INFO as F, SPEECH_MODEL_INFO as G, toTTSRequest as H, ImageGenerationCommonConfigSchema as I, speechToGenerateResponse as J, toSttRequest as K, transcriptionToGenerateResponse as L, type ModelRequestBuilder as M, type PluginOptions as P, RESPONSE_FORMAT_MEDIA_TYPES as R, SpeechConfigSchema as S, TranscriptionConfigSchema as T, type ImageRequestBuilder as a, IMAGE_GENERATION_MODEL_INFO as b, defineCompatOpenAIImageModel as c, defineCompatOpenAIEmbedder as d, compatOaiImageModelRef as e, toOpenAITool as f, toOpenAITextAndMedia as g, toOpenAIMessages as h, fromOpenAIToolCall as i, fromOpenAIChoice as j, fromOpenAIChunkChoice as k, toOpenAIRequestBody as l, defineCompatOpenAIModel as m, compatOaiModelRef as n, openAIModelRunner as o, type TranslationRequestBuilder as p, TRANSLATION_MODEL_INFO as q, TranslationConfigSchema as r, toTranslationRequest as s, toOpenAIRole as t, translationToGenerateResponse as u, defineCompatOpenAITranslationModel as v, compatOaiTranslationModelRef as w, openAICompatible as x, compatOaiSpeechModelRef as y, compatOaiTranscriptionModelRef as z };
|
|
@@ -2,7 +2,7 @@ import { EmbedderReference, EmbedderAction, GenerateRequest, z, ModelReference,
|
|
|
2
2
|
import { ModelInfo, ModelAction, ToolDefinition } from 'genkit/model';
|
|
3
3
|
import OpenAI, { ClientOptions } from 'openai';
|
|
4
4
|
import { Response } from 'openai/core.mjs';
|
|
5
|
-
import { SpeechCreateParams, TranscriptionCreateParams, Transcription } from 'openai/resources/audio/index.mjs';
|
|
5
|
+
import { TranslationCreateParams, TranslationCreateResponse, SpeechCreateParams, TranscriptionCreateParams, Transcription } from 'openai/resources/audio/index.mjs';
|
|
6
6
|
import * as genkit_plugin from 'genkit/plugin';
|
|
7
7
|
import { ResolvableAction } from 'genkit/plugin';
|
|
8
8
|
import { ActionType } from 'genkit/registry';
|
|
@@ -275,6 +275,91 @@ declare function compatOaiModelRef<CustomOptions extends z.ZodTypeAny = z.ZodTyp
|
|
|
275
275
|
namespace?: string;
|
|
276
276
|
}): ModelReference<CustomOptions>;
|
|
277
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Copyright 2024 The Fire Company
|
|
280
|
+
* Copyright 2024 Google LLC
|
|
281
|
+
*
|
|
282
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
283
|
+
* you may not use this file except in compliance with the License.
|
|
284
|
+
* You may obtain a copy of the License at
|
|
285
|
+
*
|
|
286
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
287
|
+
*
|
|
288
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
289
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
290
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
291
|
+
* See the License for the specific language governing permissions and
|
|
292
|
+
* limitations under the License.
|
|
293
|
+
*/
|
|
294
|
+
|
|
295
|
+
type TranslationRequestBuilder = (req: GenerateRequest, params: TranslationCreateParams) => void;
|
|
296
|
+
declare const TRANSLATION_MODEL_INFO: ModelInfo;
|
|
297
|
+
declare const TranslationConfigSchema: z.ZodObject<Pick<{
|
|
298
|
+
version: z.ZodOptional<z.ZodString>;
|
|
299
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
300
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
301
|
+
topK: z.ZodOptional<z.ZodNumber>;
|
|
302
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
303
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
304
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
305
|
+
}, "temperature"> & {
|
|
306
|
+
response_format: z.ZodOptional<z.ZodEnum<["json", "text", "srt", "verbose_json", "vtt"]>>;
|
|
307
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<Pick<{
|
|
308
|
+
version: z.ZodOptional<z.ZodString>;
|
|
309
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
310
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
311
|
+
topK: z.ZodOptional<z.ZodNumber>;
|
|
312
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
313
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
314
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
315
|
+
}, "temperature"> & {
|
|
316
|
+
response_format: z.ZodOptional<z.ZodEnum<["json", "text", "srt", "verbose_json", "vtt"]>>;
|
|
317
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<Pick<{
|
|
318
|
+
version: z.ZodOptional<z.ZodString>;
|
|
319
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
320
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
321
|
+
topK: z.ZodOptional<z.ZodNumber>;
|
|
322
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
323
|
+
stopSequences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
324
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
325
|
+
}, "temperature"> & {
|
|
326
|
+
response_format: z.ZodOptional<z.ZodEnum<["json", "text", "srt", "verbose_json", "vtt"]>>;
|
|
327
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
328
|
+
declare function toTranslationRequest(modelName: string, request: GenerateRequest, requestBuilder?: TranslationRequestBuilder): TranslationCreateParams;
|
|
329
|
+
declare function translationToGenerateResponse(result: TranslationCreateResponse | string): GenerateResponseData;
|
|
330
|
+
/**
|
|
331
|
+
* Method to define a new Genkit Model that is compatible with Open AI
|
|
332
|
+
* Translation API.
|
|
333
|
+
*
|
|
334
|
+
* These models are to be used to translate audio to text.
|
|
335
|
+
*
|
|
336
|
+
* @param params An object containing parameters for defining the OpenAI
|
|
337
|
+
* translation model.
|
|
338
|
+
* @param params.ai The Genkit AI instance.
|
|
339
|
+
* @param params.name The name of the model.
|
|
340
|
+
* @param params.client The OpenAI client instance.
|
|
341
|
+
* @param params.modelRef Optional reference to the model's configuration and
|
|
342
|
+
* custom options.
|
|
343
|
+
*
|
|
344
|
+
* @returns the created {@link ModelAction}
|
|
345
|
+
*/
|
|
346
|
+
declare function defineCompatOpenAITranslationModel<CustomOptions extends z.ZodTypeAny = z.ZodTypeAny>(params: {
|
|
347
|
+
name: string;
|
|
348
|
+
client: OpenAI;
|
|
349
|
+
pluginOptions?: PluginOptions;
|
|
350
|
+
modelRef?: ModelReference<CustomOptions>;
|
|
351
|
+
requestBuilder?: TranslationRequestBuilder;
|
|
352
|
+
}): ModelAction<CustomOptions>;
|
|
353
|
+
/** Translation ModelRef helper, with reasonable defaults for
|
|
354
|
+
* OpenAI-compatible providers */
|
|
355
|
+
declare function compatOaiTranslationModelRef<CustomOptions extends z.ZodTypeAny = z.ZodTypeAny>(params: {
|
|
356
|
+
name: string;
|
|
357
|
+
info?: ModelInfo;
|
|
358
|
+
configSchema?: CustomOptions;
|
|
359
|
+
config?: any;
|
|
360
|
+
namespace?: string;
|
|
361
|
+
}): ModelReference<any>;
|
|
362
|
+
|
|
278
363
|
interface PluginOptions extends Partial<Omit<ClientOptions, 'apiKey'>> {
|
|
279
364
|
apiKey?: ClientOptions['apiKey'] | false;
|
|
280
365
|
name: string;
|
|
@@ -355,15 +440,7 @@ declare const openAICompatible: (options: PluginOptions) => genkit_plugin.Genkit
|
|
|
355
440
|
|
|
356
441
|
type SpeechRequestBuilder = (req: GenerateRequest, params: SpeechCreateParams) => void;
|
|
357
442
|
type TranscriptionRequestBuilder = (req: GenerateRequest, params: TranscriptionCreateParams) => void;
|
|
358
|
-
declare const TRANSCRIPTION_MODEL_INFO:
|
|
359
|
-
supports: {
|
|
360
|
-
media: boolean;
|
|
361
|
-
output: string[];
|
|
362
|
-
multiturn: boolean;
|
|
363
|
-
systemRole: boolean;
|
|
364
|
-
tools: boolean;
|
|
365
|
-
};
|
|
366
|
-
};
|
|
443
|
+
declare const TRANSCRIPTION_MODEL_INFO: ModelInfo;
|
|
367
444
|
declare const SPEECH_MODEL_INFO: ModelInfo;
|
|
368
445
|
declare const TranscriptionConfigSchema: z.ZodObject<Pick<{
|
|
369
446
|
version: z.ZodOptional<z.ZodString>;
|
|
@@ -545,4 +622,4 @@ declare function compatOaiTranscriptionModelRef<CustomOptions extends z.ZodTypeA
|
|
|
545
622
|
namespace?: string;
|
|
546
623
|
}): ModelReference<any>;
|
|
547
624
|
|
|
548
|
-
export {
|
|
625
|
+
export { defineCompatOpenAISpeechModel as A, defineCompatOpenAITranscriptionModel as B, ChatCompletionCommonConfigSchema as C, type SpeechRequestBuilder as D, type TranscriptionRequestBuilder as E, TRANSCRIPTION_MODEL_INFO as F, SPEECH_MODEL_INFO as G, toTTSRequest as H, ImageGenerationCommonConfigSchema as I, speechToGenerateResponse as J, toSttRequest as K, transcriptionToGenerateResponse as L, type ModelRequestBuilder as M, type PluginOptions as P, RESPONSE_FORMAT_MEDIA_TYPES as R, SpeechConfigSchema as S, TranscriptionConfigSchema as T, type ImageRequestBuilder as a, IMAGE_GENERATION_MODEL_INFO as b, defineCompatOpenAIImageModel as c, defineCompatOpenAIEmbedder as d, compatOaiImageModelRef as e, toOpenAITool as f, toOpenAITextAndMedia as g, toOpenAIMessages as h, fromOpenAIToolCall as i, fromOpenAIChoice as j, fromOpenAIChunkChoice as k, toOpenAIRequestBody as l, defineCompatOpenAIModel as m, compatOaiModelRef as n, openAIModelRunner as o, type TranslationRequestBuilder as p, TRANSLATION_MODEL_INFO as q, TranslationConfigSchema as r, toTranslationRequest as s, toOpenAIRole as t, translationToGenerateResponse as u, defineCompatOpenAITranslationModel as v, compatOaiTranslationModelRef as w, openAICompatible as x, compatOaiSpeechModelRef as y, compatOaiTranscriptionModelRef as z };
|
package/lib/audio.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import 'genkit/model';
|
|
|
3
3
|
import 'openai';
|
|
4
4
|
import 'openai/core.mjs';
|
|
5
5
|
import 'openai/resources/audio/index.mjs';
|
|
6
|
-
export { R as RESPONSE_FORMAT_MEDIA_TYPES,
|
|
6
|
+
export { R as RESPONSE_FORMAT_MEDIA_TYPES, G as SPEECH_MODEL_INFO, S as SpeechConfigSchema, D as SpeechRequestBuilder, F as TRANSCRIPTION_MODEL_INFO, T as TranscriptionConfigSchema, E as TranscriptionRequestBuilder, y as compatOaiSpeechModelRef, z as compatOaiTranscriptionModelRef, A as defineCompatOpenAISpeechModel, B as defineCompatOpenAITranscriptionModel, J as speechToGenerateResponse, K as toSttRequest, H as toTTSRequest, L as transcriptionToGenerateResponse } from './audio-Cr0WtG4I.mjs';
|
|
7
7
|
import 'genkit/plugin';
|
|
8
8
|
import 'genkit/registry';
|
|
9
9
|
import 'openai/resources/images.mjs';
|
package/lib/audio.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import 'genkit/model';
|
|
|
3
3
|
import 'openai';
|
|
4
4
|
import 'openai/core.mjs';
|
|
5
5
|
import 'openai/resources/audio/index.mjs';
|
|
6
|
-
export { R as RESPONSE_FORMAT_MEDIA_TYPES,
|
|
6
|
+
export { R as RESPONSE_FORMAT_MEDIA_TYPES, G as SPEECH_MODEL_INFO, S as SpeechConfigSchema, D as SpeechRequestBuilder, F as TRANSCRIPTION_MODEL_INFO, T as TranscriptionConfigSchema, E as TranscriptionRequestBuilder, y as compatOaiSpeechModelRef, z as compatOaiTranscriptionModelRef, A as defineCompatOpenAISpeechModel, B as defineCompatOpenAITranscriptionModel, J as speechToGenerateResponse, K as toSttRequest, H as toTTSRequest, L as transcriptionToGenerateResponse } from './audio-Cr0WtG4I.js';
|
|
7
7
|
import 'genkit/plugin';
|
|
8
8
|
import 'genkit/registry';
|
|
9
9
|
import 'openai/resources/images.mjs';
|
package/lib/audio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["/**\n * Copyright 2024 The Fire Company\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {\n GenerateRequest,\n GenerateResponseData,\n ModelReference,\n} from 'genkit';\nimport { GenerationCommonConfigSchema, Message, modelRef, z } from 'genkit';\nimport type { ModelAction, ModelInfo } from 'genkit/model';\nimport { model } from 'genkit/plugin';\nimport OpenAI from 'openai';\nimport { Response } from 'openai/core.mjs';\nimport type {\n SpeechCreateParams,\n Transcription,\n TranscriptionCreateParams,\n} from 'openai/resources/audio/index.mjs';\nimport { PluginOptions } from './index.js';\nimport { maybeCreateRequestScopedOpenAIClient, toModelName } from './utils.js';\n\nexport type SpeechRequestBuilder = (\n req: GenerateRequest,\n params: SpeechCreateParams\n) => void;\nexport type TranscriptionRequestBuilder = (\n req: GenerateRequest,\n params: TranscriptionCreateParams\n) => void;\n\nexport const TRANSCRIPTION_MODEL_INFO = {\n supports: {\n media: true,\n output: ['text', 'json'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nexport const SPEECH_MODEL_INFO: ModelInfo = {\n supports: {\n media: false,\n output: ['media'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nconst ChunkingStrategySchema = z.object({\n type: z.string(),\n prefix_padding_ms: z.number().int().optional(),\n silence_duration_ms: z.number().int().optional(),\n threshold: z.number().min(0).max(1.0).optional(),\n});\nexport const TranscriptionConfigSchema = GenerationCommonConfigSchema.pick({\n temperature: true,\n}).extend({\n chunking_strategy: z\n .union([z.literal('auto'), ChunkingStrategySchema])\n .optional(),\n include: z.array(z.any()).optional(),\n language: z.string().optional(),\n timestamp_granularities: z.array(z.enum(['word', 'segment'])).optional(),\n response_format: z\n .enum(['json', 'text', 'srt', 'verbose_json', 'vtt'])\n .optional(),\n // TODO stream support\n});\n\nexport const SpeechConfigSchema = z.object({\n voice: z\n .enum(['alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'])\n .default('alloy'),\n speed: z.number().min(0.25).max(4.0).optional(),\n response_format: z\n .enum(['mp3', 'opus', 'aac', 'flac', 'wav', 'pcm'])\n .optional(),\n});\n\n/**\n * Supported media formats for Audio generation\n */\nexport const RESPONSE_FORMAT_MEDIA_TYPES = {\n mp3: 'audio/mpeg',\n opus: 'audio/opus',\n aac: 'audio/aac',\n flac: 'audio/flac',\n wav: 'audio/wav',\n pcm: 'audio/L16',\n};\n\nexport function toTTSRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: SpeechRequestBuilder\n): SpeechCreateParams {\n const {\n voice,\n version: modelVersion,\n temperature,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: SpeechCreateParams = {\n model: modelVersion ?? modelName,\n input: new Message(request.messages[0]).text,\n voice: voice ?? 'alloy',\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthorugh rest of the config\n };\n }\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport async function speechToGenerateResponse(\n response: Response,\n responseFormat: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm' = 'mp3'\n): Promise<GenerateResponseData> {\n const resultArrayBuffer = await response.arrayBuffer();\n const resultBuffer = Buffer.from(new Uint8Array(resultArrayBuffer));\n const mediaType = RESPONSE_FORMAT_MEDIA_TYPES[responseFormat];\n return {\n message: {\n role: 'model',\n content: [\n {\n media: {\n contentType: mediaType,\n url: `data:${mediaType};base64,${resultBuffer.toString('base64')}`,\n },\n },\n ],\n },\n finishReason: 'stop',\n raw: response,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with the Open AI Audio\n * API. \n *\n * These models are to be used to create audio speech from a given request.\n * @param params An object containing parameters for defining the OpenAI speech\n * model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAISpeechModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: SpeechRequestBuilder;\n pluginOptions: PluginOptions;\n}): ModelAction {\n const {\n name,\n client: defaultClient,\n pluginOptions,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName = `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const ttsRequest = toTTSRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n const result = await client.audio.speech.create(ttsRequest, {\n signal: abortSignal,\n });\n return await speechToGenerateResponse(result, ttsRequest.response_format);\n }\n );\n}\n\n/** Speech generation ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiSpeechModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = SPEECH_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (SpeechConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n\nexport function toSttRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: TranscriptionRequestBuilder\n): TranscriptionCreateParams {\n const message = new Message(request.messages[0]);\n const media = message.media;\n if (!media?.url) {\n throw new Error('No media found in the request');\n }\n const mediaBuffer = Buffer.from(\n media.url.slice(media.url.indexOf(',') + 1),\n 'base64'\n );\n const mediaFile = new File([mediaBuffer], 'input', {\n type:\n media.contentType ??\n media.url.slice('data:'.length, media.url.indexOf(';')),\n });\n const {\n temperature,\n version: modelVersion,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: TranscriptionCreateParams = {\n model: modelVersion ?? modelName,\n file: mediaFile,\n prompt: message.text,\n temperature,\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthrough rest of the config\n };\n }\n const outputFormat = request.output?.format as 'json' | 'text' | 'media';\n const customFormat = request.config?.response_format;\n if (outputFormat && customFormat) {\n if (\n outputFormat === 'json' &&\n customFormat !== 'json' &&\n customFormat !== 'verbose_json'\n ) {\n throw new Error(\n `Custom response format ${customFormat} is not compatible with output format ${outputFormat}`\n );\n }\n }\n if (outputFormat === 'media') {\n throw new Error(`Output format ${outputFormat} is not supported.`);\n }\n options.response_format = customFormat || outputFormat || 'text';\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport function transcriptionToGenerateResponse(\n result: Transcription | string\n): GenerateResponseData {\n return {\n message: {\n role: 'model',\n content: [\n {\n text: typeof result === 'string' ? result : result.text,\n },\n ],\n },\n finishReason: 'stop',\n raw: result,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with Open AI\n * Transcriptions API. \n *\n * These models are to be used to transcribe audio to text.\n *\n * @param params An object containing parameters for defining the OpenAI\n * transcription model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAITranscriptionModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n pluginOptions?: PluginOptions;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: TranscriptionRequestBuilder;\n}): ModelAction {\n const {\n name,\n pluginOptions,\n client: defaultClient,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName =\n modelRef?.name ?? `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const params = toSttRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n // Explicitly setting stream to false ensures we use the non-streaming overload\n const result = await client.audio.transcriptions.create(\n {\n ...params,\n stream: false,\n },\n { signal: abortSignal }\n );\n return transcriptionToGenerateResponse(result);\n }\n );\n}\n\n/** Transcription ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiTranscriptionModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = TRANSCRIPTION_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (TranscriptionConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n"],"mappings":"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","names":["modelRef","params"]}
|
|
1
|
+
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["/**\n * Copyright 2024 The Fire Company\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n GenerateRequest,\n GenerateResponseData,\n ModelReference,\n} from 'genkit';\nimport { GenerationCommonConfigSchema, Message, modelRef, z } from 'genkit';\nimport type { ModelAction, ModelInfo } from 'genkit/model';\nimport { model } from 'genkit/plugin';\nimport OpenAI from 'openai';\nimport { Response } from 'openai/core.mjs';\nimport type {\n SpeechCreateParams,\n Transcription,\n TranscriptionCreateParams,\n} from 'openai/resources/audio/index.mjs';\nimport { PluginOptions } from './index.js';\nimport { maybeCreateRequestScopedOpenAIClient, toModelName } from './utils.js';\n\nexport type SpeechRequestBuilder = (\n req: GenerateRequest,\n params: SpeechCreateParams\n) => void;\nexport type TranscriptionRequestBuilder = (\n req: GenerateRequest,\n params: TranscriptionCreateParams\n) => void;\n\nexport const TRANSCRIPTION_MODEL_INFO: ModelInfo = {\n supports: {\n media: true,\n output: ['text', 'json'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nexport const SPEECH_MODEL_INFO: ModelInfo = {\n supports: {\n media: false,\n output: ['media'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nconst ChunkingStrategySchema = z.object({\n type: z.string(),\n prefix_padding_ms: z.number().int().optional(),\n silence_duration_ms: z.number().int().optional(),\n threshold: z.number().min(0).max(1.0).optional(),\n});\nexport const TranscriptionConfigSchema = GenerationCommonConfigSchema.pick({\n temperature: true,\n}).extend({\n chunking_strategy: z\n .union([z.literal('auto'), ChunkingStrategySchema])\n .optional(),\n include: z.array(z.any()).optional(),\n language: z.string().optional(),\n timestamp_granularities: z.array(z.enum(['word', 'segment'])).optional(),\n response_format: z\n .enum(['json', 'text', 'srt', 'verbose_json', 'vtt'])\n .optional(),\n // TODO stream support\n});\n\nexport const SpeechConfigSchema = z.object({\n voice: z\n .enum(['alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'])\n .default('alloy'),\n speed: z.number().min(0.25).max(4.0).optional(),\n response_format: z\n .enum(['mp3', 'opus', 'aac', 'flac', 'wav', 'pcm'])\n .optional(),\n});\n\n/**\n * Supported media formats for Audio generation\n */\nexport const RESPONSE_FORMAT_MEDIA_TYPES = {\n mp3: 'audio/mpeg',\n opus: 'audio/opus',\n aac: 'audio/aac',\n flac: 'audio/flac',\n wav: 'audio/wav',\n pcm: 'audio/L16',\n};\n\nexport function toTTSRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: SpeechRequestBuilder\n): SpeechCreateParams {\n const {\n voice,\n version: modelVersion,\n temperature,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: SpeechCreateParams = {\n model: modelVersion ?? modelName,\n input: new Message(request.messages[0]).text,\n voice: voice ?? 'alloy',\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthorugh rest of the config\n };\n }\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport async function speechToGenerateResponse(\n response: Response,\n responseFormat: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm' = 'mp3'\n): Promise<GenerateResponseData> {\n const resultArrayBuffer = await response.arrayBuffer();\n const resultBuffer = Buffer.from(new Uint8Array(resultArrayBuffer));\n const mediaType = RESPONSE_FORMAT_MEDIA_TYPES[responseFormat];\n return {\n message: {\n role: 'model',\n content: [\n {\n media: {\n contentType: mediaType,\n url: `data:${mediaType};base64,${resultBuffer.toString('base64')}`,\n },\n },\n ],\n },\n finishReason: 'stop',\n raw: response,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with the Open AI Audio\n * API. \n *\n * These models are to be used to create audio speech from a given request.\n * @param params An object containing parameters for defining the OpenAI speech\n * model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAISpeechModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: SpeechRequestBuilder;\n pluginOptions: PluginOptions;\n}): ModelAction {\n const {\n name,\n client: defaultClient,\n pluginOptions,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName = `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const ttsRequest = toTTSRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n const result = await client.audio.speech.create(ttsRequest, {\n signal: abortSignal,\n });\n return await speechToGenerateResponse(result, ttsRequest.response_format);\n }\n );\n}\n\n/** Speech generation ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiSpeechModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = SPEECH_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (SpeechConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n\nexport function toSttRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: TranscriptionRequestBuilder\n): TranscriptionCreateParams {\n const message = new Message(request.messages[0]);\n const media = message.media;\n if (!media?.url) {\n throw new Error('No media found in the request');\n }\n const mediaBuffer = Buffer.from(\n media.url.slice(media.url.indexOf(',') + 1),\n 'base64'\n );\n const mediaFile = new File([mediaBuffer], 'input', {\n type:\n media.contentType ??\n media.url.slice('data:'.length, media.url.indexOf(';')),\n });\n const {\n temperature,\n version: modelVersion,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: TranscriptionCreateParams = {\n model: modelVersion ?? modelName,\n file: mediaFile,\n prompt: message.text,\n temperature,\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthrough rest of the config\n };\n }\n const outputFormat = request.output?.format as 'json' | 'text' | 'media';\n const customFormat = request.config?.response_format;\n if (outputFormat && customFormat) {\n if (\n outputFormat === 'json' &&\n customFormat !== 'json' &&\n customFormat !== 'verbose_json'\n ) {\n throw new Error(\n `Custom response format ${customFormat} is not compatible with output format ${outputFormat}`\n );\n }\n }\n if (outputFormat === 'media') {\n throw new Error(`Output format ${outputFormat} is not supported.`);\n }\n options.response_format = customFormat || outputFormat || 'text';\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport function transcriptionToGenerateResponse(\n result: Transcription | string\n): GenerateResponseData {\n return {\n message: {\n role: 'model',\n content: [\n {\n text: typeof result === 'string' ? result : result.text,\n },\n ],\n },\n finishReason: 'stop',\n raw: result,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with Open AI\n * Transcriptions API. \n *\n * These models are to be used to transcribe audio to text.\n *\n * @param params An object containing parameters for defining the OpenAI\n * transcription model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAITranscriptionModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n pluginOptions?: PluginOptions;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: TranscriptionRequestBuilder;\n}): ModelAction {\n const {\n name,\n pluginOptions,\n client: defaultClient,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName =\n modelRef?.name ?? `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const params = toSttRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n // Explicitly setting stream to false ensures we use the non-streaming overload\n const result = await client.audio.transcriptions.create(\n {\n ...params,\n stream: false,\n },\n { signal: abortSignal }\n );\n return transcriptionToGenerateResponse(result);\n }\n );\n}\n\n/** Transcription ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiTranscriptionModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = TRANSCRIPTION_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (TranscriptionConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n"],"mappings":"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","names":["modelRef","params"]}
|
package/lib/audio.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["/**\n * Copyright 2024 The Fire Company\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {\n GenerateRequest,\n GenerateResponseData,\n ModelReference,\n} from 'genkit';\nimport { GenerationCommonConfigSchema, Message, modelRef, z } from 'genkit';\nimport type { ModelAction, ModelInfo } from 'genkit/model';\nimport { model } from 'genkit/plugin';\nimport OpenAI from 'openai';\nimport { Response } from 'openai/core.mjs';\nimport type {\n SpeechCreateParams,\n Transcription,\n TranscriptionCreateParams,\n} from 'openai/resources/audio/index.mjs';\nimport { PluginOptions } from './index.js';\nimport { maybeCreateRequestScopedOpenAIClient, toModelName } from './utils.js';\n\nexport type SpeechRequestBuilder = (\n req: GenerateRequest,\n params: SpeechCreateParams\n) => void;\nexport type TranscriptionRequestBuilder = (\n req: GenerateRequest,\n params: TranscriptionCreateParams\n) => void;\n\nexport const TRANSCRIPTION_MODEL_INFO = {\n supports: {\n media: true,\n output: ['text', 'json'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nexport const SPEECH_MODEL_INFO: ModelInfo = {\n supports: {\n media: false,\n output: ['media'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nconst ChunkingStrategySchema = z.object({\n type: z.string(),\n prefix_padding_ms: z.number().int().optional(),\n silence_duration_ms: z.number().int().optional(),\n threshold: z.number().min(0).max(1.0).optional(),\n});\nexport const TranscriptionConfigSchema = GenerationCommonConfigSchema.pick({\n temperature: true,\n}).extend({\n chunking_strategy: z\n .union([z.literal('auto'), ChunkingStrategySchema])\n .optional(),\n include: z.array(z.any()).optional(),\n language: z.string().optional(),\n timestamp_granularities: z.array(z.enum(['word', 'segment'])).optional(),\n response_format: z\n .enum(['json', 'text', 'srt', 'verbose_json', 'vtt'])\n .optional(),\n // TODO stream support\n});\n\nexport const SpeechConfigSchema = z.object({\n voice: z\n .enum(['alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'])\n .default('alloy'),\n speed: z.number().min(0.25).max(4.0).optional(),\n response_format: z\n .enum(['mp3', 'opus', 'aac', 'flac', 'wav', 'pcm'])\n .optional(),\n});\n\n/**\n * Supported media formats for Audio generation\n */\nexport const RESPONSE_FORMAT_MEDIA_TYPES = {\n mp3: 'audio/mpeg',\n opus: 'audio/opus',\n aac: 'audio/aac',\n flac: 'audio/flac',\n wav: 'audio/wav',\n pcm: 'audio/L16',\n};\n\nexport function toTTSRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: SpeechRequestBuilder\n): SpeechCreateParams {\n const {\n voice,\n version: modelVersion,\n temperature,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: SpeechCreateParams = {\n model: modelVersion ?? modelName,\n input: new Message(request.messages[0]).text,\n voice: voice ?? 'alloy',\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthorugh rest of the config\n };\n }\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport async function speechToGenerateResponse(\n response: Response,\n responseFormat: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm' = 'mp3'\n): Promise<GenerateResponseData> {\n const resultArrayBuffer = await response.arrayBuffer();\n const resultBuffer = Buffer.from(new Uint8Array(resultArrayBuffer));\n const mediaType = RESPONSE_FORMAT_MEDIA_TYPES[responseFormat];\n return {\n message: {\n role: 'model',\n content: [\n {\n media: {\n contentType: mediaType,\n url: `data:${mediaType};base64,${resultBuffer.toString('base64')}`,\n },\n },\n ],\n },\n finishReason: 'stop',\n raw: response,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with the Open AI Audio\n * API. \n *\n * These models are to be used to create audio speech from a given request.\n * @param params An object containing parameters for defining the OpenAI speech\n * model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAISpeechModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: SpeechRequestBuilder;\n pluginOptions: PluginOptions;\n}): ModelAction {\n const {\n name,\n client: defaultClient,\n pluginOptions,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName = `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const ttsRequest = toTTSRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n const result = await client.audio.speech.create(ttsRequest, {\n signal: abortSignal,\n });\n return await speechToGenerateResponse(result, ttsRequest.response_format);\n }\n );\n}\n\n/** Speech generation ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiSpeechModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = SPEECH_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (SpeechConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n\nexport function toSttRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: TranscriptionRequestBuilder\n): TranscriptionCreateParams {\n const message = new Message(request.messages[0]);\n const media = message.media;\n if (!media?.url) {\n throw new Error('No media found in the request');\n }\n const mediaBuffer = Buffer.from(\n media.url.slice(media.url.indexOf(',') + 1),\n 'base64'\n );\n const mediaFile = new File([mediaBuffer], 'input', {\n type:\n media.contentType ??\n media.url.slice('data:'.length, media.url.indexOf(';')),\n });\n const {\n temperature,\n version: modelVersion,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: TranscriptionCreateParams = {\n model: modelVersion ?? modelName,\n file: mediaFile,\n prompt: message.text,\n temperature,\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthrough rest of the config\n };\n }\n const outputFormat = request.output?.format as 'json' | 'text' | 'media';\n const customFormat = request.config?.response_format;\n if (outputFormat && customFormat) {\n if (\n outputFormat === 'json' &&\n customFormat !== 'json' &&\n customFormat !== 'verbose_json'\n ) {\n throw new Error(\n `Custom response format ${customFormat} is not compatible with output format ${outputFormat}`\n );\n }\n }\n if (outputFormat === 'media') {\n throw new Error(`Output format ${outputFormat} is not supported.`);\n }\n options.response_format = customFormat || outputFormat || 'text';\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport function transcriptionToGenerateResponse(\n result: Transcription | string\n): GenerateResponseData {\n return {\n message: {\n role: 'model',\n content: [\n {\n text: typeof result === 'string' ? result : result.text,\n },\n ],\n },\n finishReason: 'stop',\n raw: result,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with Open AI\n * Transcriptions API. \n *\n * These models are to be used to transcribe audio to text.\n *\n * @param params An object containing parameters for defining the OpenAI\n * transcription model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAITranscriptionModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n pluginOptions?: PluginOptions;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: TranscriptionRequestBuilder;\n}): ModelAction {\n const {\n name,\n pluginOptions,\n client: defaultClient,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName =\n modelRef?.name ?? `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const params = toSttRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n // Explicitly setting stream to false ensures we use the non-streaming overload\n const result = await client.audio.transcriptions.create(\n {\n ...params,\n stream: false,\n },\n { signal: abortSignal }\n );\n return transcriptionToGenerateResponse(result);\n }\n );\n}\n\n/** Transcription ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiTranscriptionModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = TRANSCRIPTION_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (TranscriptionConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n"],"mappings":"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","names":["modelRef","params"]}
|
|
1
|
+
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["/**\n * Copyright 2024 The Fire Company\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n GenerateRequest,\n GenerateResponseData,\n ModelReference,\n} from 'genkit';\nimport { GenerationCommonConfigSchema, Message, modelRef, z } from 'genkit';\nimport type { ModelAction, ModelInfo } from 'genkit/model';\nimport { model } from 'genkit/plugin';\nimport OpenAI from 'openai';\nimport { Response } from 'openai/core.mjs';\nimport type {\n SpeechCreateParams,\n Transcription,\n TranscriptionCreateParams,\n} from 'openai/resources/audio/index.mjs';\nimport { PluginOptions } from './index.js';\nimport { maybeCreateRequestScopedOpenAIClient, toModelName } from './utils.js';\n\nexport type SpeechRequestBuilder = (\n req: GenerateRequest,\n params: SpeechCreateParams\n) => void;\nexport type TranscriptionRequestBuilder = (\n req: GenerateRequest,\n params: TranscriptionCreateParams\n) => void;\n\nexport const TRANSCRIPTION_MODEL_INFO: ModelInfo = {\n supports: {\n media: true,\n output: ['text', 'json'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nexport const SPEECH_MODEL_INFO: ModelInfo = {\n supports: {\n media: false,\n output: ['media'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nconst ChunkingStrategySchema = z.object({\n type: z.string(),\n prefix_padding_ms: z.number().int().optional(),\n silence_duration_ms: z.number().int().optional(),\n threshold: z.number().min(0).max(1.0).optional(),\n});\nexport const TranscriptionConfigSchema = GenerationCommonConfigSchema.pick({\n temperature: true,\n}).extend({\n chunking_strategy: z\n .union([z.literal('auto'), ChunkingStrategySchema])\n .optional(),\n include: z.array(z.any()).optional(),\n language: z.string().optional(),\n timestamp_granularities: z.array(z.enum(['word', 'segment'])).optional(),\n response_format: z\n .enum(['json', 'text', 'srt', 'verbose_json', 'vtt'])\n .optional(),\n // TODO stream support\n});\n\nexport const SpeechConfigSchema = z.object({\n voice: z\n .enum(['alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'])\n .default('alloy'),\n speed: z.number().min(0.25).max(4.0).optional(),\n response_format: z\n .enum(['mp3', 'opus', 'aac', 'flac', 'wav', 'pcm'])\n .optional(),\n});\n\n/**\n * Supported media formats for Audio generation\n */\nexport const RESPONSE_FORMAT_MEDIA_TYPES = {\n mp3: 'audio/mpeg',\n opus: 'audio/opus',\n aac: 'audio/aac',\n flac: 'audio/flac',\n wav: 'audio/wav',\n pcm: 'audio/L16',\n};\n\nexport function toTTSRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: SpeechRequestBuilder\n): SpeechCreateParams {\n const {\n voice,\n version: modelVersion,\n temperature,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: SpeechCreateParams = {\n model: modelVersion ?? modelName,\n input: new Message(request.messages[0]).text,\n voice: voice ?? 'alloy',\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthorugh rest of the config\n };\n }\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport async function speechToGenerateResponse(\n response: Response,\n responseFormat: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm' = 'mp3'\n): Promise<GenerateResponseData> {\n const resultArrayBuffer = await response.arrayBuffer();\n const resultBuffer = Buffer.from(new Uint8Array(resultArrayBuffer));\n const mediaType = RESPONSE_FORMAT_MEDIA_TYPES[responseFormat];\n return {\n message: {\n role: 'model',\n content: [\n {\n media: {\n contentType: mediaType,\n url: `data:${mediaType};base64,${resultBuffer.toString('base64')}`,\n },\n },\n ],\n },\n finishReason: 'stop',\n raw: response,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with the Open AI Audio\n * API. \n *\n * These models are to be used to create audio speech from a given request.\n * @param params An object containing parameters for defining the OpenAI speech\n * model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAISpeechModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: SpeechRequestBuilder;\n pluginOptions: PluginOptions;\n}): ModelAction {\n const {\n name,\n client: defaultClient,\n pluginOptions,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName = `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const ttsRequest = toTTSRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n const result = await client.audio.speech.create(ttsRequest, {\n signal: abortSignal,\n });\n return await speechToGenerateResponse(result, ttsRequest.response_format);\n }\n );\n}\n\n/** Speech generation ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiSpeechModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = SPEECH_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (SpeechConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n\nexport function toSttRequest(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: TranscriptionRequestBuilder\n): TranscriptionCreateParams {\n const message = new Message(request.messages[0]);\n const media = message.media;\n if (!media?.url) {\n throw new Error('No media found in the request');\n }\n const mediaBuffer = Buffer.from(\n media.url.slice(media.url.indexOf(',') + 1),\n 'base64'\n );\n const mediaFile = new File([mediaBuffer], 'input', {\n type:\n media.contentType ??\n media.url.slice('data:'.length, media.url.indexOf(';')),\n });\n const {\n temperature,\n version: modelVersion,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: TranscriptionCreateParams = {\n model: modelVersion ?? modelName,\n file: mediaFile,\n prompt: message.text,\n temperature,\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = {\n ...options,\n ...restOfConfig, // passthrough rest of the config\n };\n }\n const outputFormat = request.output?.format as 'json' | 'text' | 'media';\n const customFormat = request.config?.response_format;\n if (outputFormat && customFormat) {\n if (\n outputFormat === 'json' &&\n customFormat !== 'json' &&\n customFormat !== 'verbose_json'\n ) {\n throw new Error(\n `Custom response format ${customFormat} is not compatible with output format ${outputFormat}`\n );\n }\n }\n if (outputFormat === 'media') {\n throw new Error(`Output format ${outputFormat} is not supported.`);\n }\n options.response_format = customFormat || outputFormat || 'text';\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nexport function transcriptionToGenerateResponse(\n result: Transcription | string\n): GenerateResponseData {\n return {\n message: {\n role: 'model',\n content: [\n {\n text: typeof result === 'string' ? result : result.text,\n },\n ],\n },\n finishReason: 'stop',\n raw: result,\n };\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with Open AI\n * Transcriptions API. \n *\n * These models are to be used to transcribe audio to text.\n *\n * @param params An object containing parameters for defining the OpenAI\n * transcription model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAITranscriptionModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n client: OpenAI;\n pluginOptions?: PluginOptions;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: TranscriptionRequestBuilder;\n}): ModelAction {\n const {\n name,\n pluginOptions,\n client: defaultClient,\n modelRef,\n requestBuilder,\n } = params;\n const modelName = toModelName(name, pluginOptions?.name);\n const actionName =\n modelRef?.name ?? `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n return model(\n {\n name: actionName,\n ...modelRef?.info,\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const params = toSttRequest(modelName, request, requestBuilder);\n const client = maybeCreateRequestScopedOpenAIClient(\n pluginOptions,\n request,\n defaultClient\n );\n // Explicitly setting stream to false ensures we use the non-streaming overload\n const result = await client.audio.transcriptions.create(\n {\n ...params,\n stream: false,\n },\n { signal: abortSignal }\n );\n return transcriptionToGenerateResponse(result);\n }\n );\n}\n\n/** Transcription ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiTranscriptionModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n namespace?: string;\n}) {\n const {\n name,\n info = TRANSCRIPTION_MODEL_INFO,\n configSchema,\n config = undefined,\n namespace,\n } = params;\n return modelRef({\n name,\n configSchema: configSchema || (TranscriptionConfigSchema as any),\n info,\n config,\n namespace,\n });\n}\n"],"mappings":"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","names":["modelRef","params"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'genkit';
|
|
2
2
|
import { ModelInfo, ModelReference } from 'genkit/model';
|
|
3
|
-
import { M as ModelRequestBuilder } from '../audio-
|
|
3
|
+
import { M as ModelRequestBuilder } from '../audio-Cr0WtG4I.mjs';
|
|
4
4
|
import 'openai';
|
|
5
5
|
import 'openai/core.mjs';
|
|
6
6
|
import 'openai/resources/audio/index.mjs';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'genkit';
|
|
2
2
|
import { ModelInfo, ModelReference } from 'genkit/model';
|
|
3
|
-
import { M as ModelRequestBuilder } from '../audio-
|
|
3
|
+
import { M as ModelRequestBuilder } from '../audio-Cr0WtG4I.js';
|
|
4
4
|
import 'openai';
|
|
5
5
|
import 'openai/core.mjs';
|
|
6
6
|
import 'openai/resources/audio/index.mjs';
|
package/lib/deepseek/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z, ModelReference } from 'genkit';
|
|
2
2
|
import { GenkitPluginV2 } from 'genkit/plugin';
|
|
3
|
-
import { P as PluginOptions } from '../audio-
|
|
3
|
+
import { P as PluginOptions } from '../audio-Cr0WtG4I.mjs';
|
|
4
4
|
import { SUPPORTED_DEEPSEEK_MODELS, DeepSeekChatCompletionConfigSchema } from './deepseek.mjs';
|
|
5
5
|
import 'genkit/model';
|
|
6
6
|
import 'openai';
|
package/lib/deepseek/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z, ModelReference } from 'genkit';
|
|
2
2
|
import { GenkitPluginV2 } from 'genkit/plugin';
|
|
3
|
-
import { P as PluginOptions } from '../audio-
|
|
3
|
+
import { P as PluginOptions } from '../audio-Cr0WtG4I.js';
|
|
4
4
|
import { SUPPORTED_DEEPSEEK_MODELS, DeepSeekChatCompletionConfigSchema } from './deepseek.js';
|
|
5
5
|
import 'genkit/model';
|
|
6
6
|
import 'openai';
|
package/lib/embedder.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import 'genkit';
|
|
2
2
|
import 'openai';
|
|
3
|
-
export { d as defineCompatOpenAIEmbedder } from './audio-
|
|
3
|
+
export { d as defineCompatOpenAIEmbedder } from './audio-Cr0WtG4I.mjs';
|
|
4
4
|
import 'genkit/model';
|
|
5
5
|
import 'openai/core.mjs';
|
|
6
6
|
import 'openai/resources/audio/index.mjs';
|
package/lib/embedder.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import 'genkit';
|
|
2
2
|
import 'openai';
|
|
3
|
-
export { d as defineCompatOpenAIEmbedder } from './audio-
|
|
3
|
+
export { d as defineCompatOpenAIEmbedder } from './audio-Cr0WtG4I.js';
|
|
4
4
|
import 'genkit/model';
|
|
5
5
|
import 'openai/core.mjs';
|
|
6
6
|
import 'openai/resources/audio/index.mjs';
|
package/lib/image.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import 'genkit';
|
|
|
2
2
|
import 'genkit/model';
|
|
3
3
|
import 'openai';
|
|
4
4
|
import 'openai/resources/images.mjs';
|
|
5
|
-
export { b as IMAGE_GENERATION_MODEL_INFO, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, e as compatOaiImageModelRef, c as defineCompatOpenAIImageModel } from './audio-
|
|
5
|
+
export { b as IMAGE_GENERATION_MODEL_INFO, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, e as compatOaiImageModelRef, c as defineCompatOpenAIImageModel } from './audio-Cr0WtG4I.mjs';
|
|
6
6
|
import 'openai/core.mjs';
|
|
7
7
|
import 'openai/resources/audio/index.mjs';
|
|
8
8
|
import 'genkit/plugin';
|
package/lib/image.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import 'genkit';
|
|
|
2
2
|
import 'genkit/model';
|
|
3
3
|
import 'openai';
|
|
4
4
|
import 'openai/resources/images.mjs';
|
|
5
|
-
export { b as IMAGE_GENERATION_MODEL_INFO, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, e as compatOaiImageModelRef, c as defineCompatOpenAIImageModel } from './audio-
|
|
5
|
+
export { b as IMAGE_GENERATION_MODEL_INFO, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, e as compatOaiImageModelRef, c as defineCompatOpenAIImageModel } from './audio-Cr0WtG4I.js';
|
|
6
6
|
import 'openai/core.mjs';
|
|
7
7
|
import 'openai/resources/audio/index.mjs';
|
|
8
8
|
import 'genkit/plugin';
|
package/lib/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import 'genkit/plugin';
|
|
|
2
2
|
import 'genkit';
|
|
3
3
|
import 'genkit/registry';
|
|
4
4
|
import 'openai';
|
|
5
|
-
export { C as ChatCompletionCommonConfigSchema, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, M as ModelRequestBuilder, P as PluginOptions, S as SpeechConfigSchema,
|
|
5
|
+
export { C as ChatCompletionCommonConfigSchema, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, M as ModelRequestBuilder, P as PluginOptions, S as SpeechConfigSchema, D as SpeechRequestBuilder, T as TranscriptionConfigSchema, E as TranscriptionRequestBuilder, r as TranslationConfigSchema, p as TranslationRequestBuilder, e as compatOaiImageModelRef, n as compatOaiModelRef, y as compatOaiSpeechModelRef, z as compatOaiTranscriptionModelRef, w as compatOaiTranslationModelRef, x as default, d as defineCompatOpenAIEmbedder, c as defineCompatOpenAIImageModel, m as defineCompatOpenAIModel, A as defineCompatOpenAISpeechModel, B as defineCompatOpenAITranscriptionModel, v as defineCompatOpenAITranslationModel, x as openAICompatible, o as openAIModelRunner } from './audio-Cr0WtG4I.mjs';
|
|
6
6
|
import 'genkit/model';
|
|
7
7
|
import 'openai/core.mjs';
|
|
8
8
|
import 'openai/resources/audio/index.mjs';
|
package/lib/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import 'genkit/plugin';
|
|
|
2
2
|
import 'genkit';
|
|
3
3
|
import 'genkit/registry';
|
|
4
4
|
import 'openai';
|
|
5
|
-
export { C as ChatCompletionCommonConfigSchema, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, M as ModelRequestBuilder, P as PluginOptions, S as SpeechConfigSchema,
|
|
5
|
+
export { C as ChatCompletionCommonConfigSchema, I as ImageGenerationCommonConfigSchema, a as ImageRequestBuilder, M as ModelRequestBuilder, P as PluginOptions, S as SpeechConfigSchema, D as SpeechRequestBuilder, T as TranscriptionConfigSchema, E as TranscriptionRequestBuilder, r as TranslationConfigSchema, p as TranslationRequestBuilder, e as compatOaiImageModelRef, n as compatOaiModelRef, y as compatOaiSpeechModelRef, z as compatOaiTranscriptionModelRef, w as compatOaiTranslationModelRef, x as default, d as defineCompatOpenAIEmbedder, c as defineCompatOpenAIImageModel, m as defineCompatOpenAIModel, A as defineCompatOpenAISpeechModel, B as defineCompatOpenAITranscriptionModel, v as defineCompatOpenAITranslationModel, x as openAICompatible, o as openAIModelRunner } from './audio-Cr0WtG4I.js';
|
|
6
6
|
import 'genkit/model';
|
|
7
7
|
import 'openai/core.mjs';
|
|
8
8
|
import 'openai/resources/audio/index.mjs';
|
package/lib/index.js
CHANGED
|
@@ -32,16 +32,19 @@ __export(index_exports, {
|
|
|
32
32
|
ImageGenerationCommonConfigSchema: () => import_image.ImageGenerationCommonConfigSchema,
|
|
33
33
|
SpeechConfigSchema: () => import_audio.SpeechConfigSchema,
|
|
34
34
|
TranscriptionConfigSchema: () => import_audio.TranscriptionConfigSchema,
|
|
35
|
+
TranslationConfigSchema: () => import_translate.TranslationConfigSchema,
|
|
35
36
|
compatOaiImageModelRef: () => import_image.compatOaiImageModelRef,
|
|
36
37
|
compatOaiModelRef: () => import_model2.compatOaiModelRef,
|
|
37
38
|
compatOaiSpeechModelRef: () => import_audio.compatOaiSpeechModelRef,
|
|
38
39
|
compatOaiTranscriptionModelRef: () => import_audio.compatOaiTranscriptionModelRef,
|
|
40
|
+
compatOaiTranslationModelRef: () => import_translate.compatOaiTranslationModelRef,
|
|
39
41
|
default: () => index_default,
|
|
40
42
|
defineCompatOpenAIEmbedder: () => import_embedder.defineCompatOpenAIEmbedder,
|
|
41
43
|
defineCompatOpenAIImageModel: () => import_image.defineCompatOpenAIImageModel,
|
|
42
44
|
defineCompatOpenAIModel: () => import_model2.defineCompatOpenAIModel,
|
|
43
45
|
defineCompatOpenAISpeechModel: () => import_audio.defineCompatOpenAISpeechModel,
|
|
44
46
|
defineCompatOpenAITranscriptionModel: () => import_audio.defineCompatOpenAITranscriptionModel,
|
|
47
|
+
defineCompatOpenAITranslationModel: () => import_translate.defineCompatOpenAITranslationModel,
|
|
45
48
|
openAICompatible: () => openAICompatible,
|
|
46
49
|
openAIModelRunner: () => import_model2.openAIModelRunner
|
|
47
50
|
});
|
|
@@ -54,6 +57,7 @@ var import_audio = require("./audio.js");
|
|
|
54
57
|
var import_embedder = require("./embedder.js");
|
|
55
58
|
var import_image = require("./image.js");
|
|
56
59
|
var import_model2 = require("./model.js");
|
|
60
|
+
var import_translate = require("./translate.js");
|
|
57
61
|
const openAICompatible = (options) => {
|
|
58
62
|
let listActionsCache;
|
|
59
63
|
var client;
|
|
@@ -109,15 +113,18 @@ var index_default = openAICompatible;
|
|
|
109
113
|
ImageGenerationCommonConfigSchema,
|
|
110
114
|
SpeechConfigSchema,
|
|
111
115
|
TranscriptionConfigSchema,
|
|
116
|
+
TranslationConfigSchema,
|
|
112
117
|
compatOaiImageModelRef,
|
|
113
118
|
compatOaiModelRef,
|
|
114
119
|
compatOaiSpeechModelRef,
|
|
115
120
|
compatOaiTranscriptionModelRef,
|
|
121
|
+
compatOaiTranslationModelRef,
|
|
116
122
|
defineCompatOpenAIEmbedder,
|
|
117
123
|
defineCompatOpenAIImageModel,
|
|
118
124
|
defineCompatOpenAIModel,
|
|
119
125
|
defineCompatOpenAISpeechModel,
|
|
120
126
|
defineCompatOpenAITranscriptionModel,
|
|
127
|
+
defineCompatOpenAITranslationModel,
|
|
121
128
|
openAICompatible,
|
|
122
129
|
openAIModelRunner
|
|
123
130
|
});
|