@genkit-ai/compat-oai
Version:
Genkit AI framework plugin for OpenAI APIs.
91 lines • 2.6 kB
JavaScript
import { modelRef, z } from "genkit";
import { model } from "genkit/plugin";
import {
TranscriptionConfigSchema,
toSttRequest,
transcriptionToGenerateResponse
} from "../audio.mjs";
import {
toTranslationRequest,
translationToGenerateResponse
} from "../translate.mjs";
import { maybeCreateRequestScopedOpenAIClient, toModelName } from "../utils.mjs";
const WHISPER_MODEL_INFO = {
supports: {
media: true,
output: ["text", "json"],
multiturn: false,
systemRole: false,
tools: false
}
};
const WhisperConfigSchema = TranscriptionConfigSchema.extend({
/** When true, uses Translation API instead of Transcription. Default: false */
translate: z.boolean().optional().default(false)
});
function defineOpenAIWhisperModel(params) {
const { name, client: defaultClient, pluginOptions, modelRef: modelRef2 } = params;
const modelName = toModelName(name, pluginOptions?.name);
const actionName = modelRef2?.name ?? `${pluginOptions?.name ?? "openai"}/${modelName}`;
return model(
{
name: actionName,
...modelRef2?.info,
configSchema: modelRef2?.configSchema
},
async (request, { abortSignal }) => {
const { translate, ...cleanConfig } = request.config ?? {};
const cleanRequest = { ...request, config: cleanConfig };
const client = maybeCreateRequestScopedOpenAIClient(
pluginOptions,
request,
defaultClient
);
if (translate === true) {
const params2 = toTranslationRequest(modelName, cleanRequest);
const result = await client.audio.translations.create(params2, {
signal: abortSignal
});
return translationToGenerateResponse(result);
} else {
const params2 = toSttRequest(modelName, cleanRequest);
const result = await client.audio.transcriptions.create(
{
...params2,
stream: false
},
{ signal: abortSignal }
);
return transcriptionToGenerateResponse(result);
}
}
);
}
function openAIWhisperModelRef(params) {
const {
name,
info = WHISPER_MODEL_INFO,
configSchema,
config = void 0
} = params;
return modelRef({
name,
configSchema: configSchema || WhisperConfigSchema,
info,
config,
namespace: "openai"
});
}
const SUPPORTED_WHISPER_MODELS = {
"whisper-1": openAIWhisperModelRef({
name: "whisper-1"
})
};
export {
SUPPORTED_WHISPER_MODELS,
WHISPER_MODEL_INFO,
WhisperConfigSchema,
defineOpenAIWhisperModel,
openAIWhisperModelRef
};
//# sourceMappingURL=whisper.mjs.map