From c98be0bdc16370b89849f6945332bd80f5e98752 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 9 Jan 2025 17:31:29 +0000 Subject: [PATCH] transcriptipoin --- docs/public/schemas/llms.json | 4 ++ packages/core/package.json | 1 - packages/core/src/bufferlike.ts | 27 +++++++++ packages/core/src/chat.ts | 3 +- packages/core/src/constants.ts | 1 + packages/core/src/crypto.ts | 1 + packages/core/src/fetch.ts | 21 +++---- packages/core/src/image.ts | 12 +--- packages/core/src/llms.json | 1 + packages/core/src/lm.ts | 1 + packages/core/src/openai.ts | 56 +++++++++++++++--- packages/core/src/runpromptcontext.ts | 14 ++++- packages/sample/genaisrc/transcribe.genai.mjs | 2 + packages/sample/src/audio/helloworld.m4a | Bin 0 -> 71116 bytes packages/sample/src/audio/helloworld.mp3 | Bin 0 -> 63215 bytes yarn.lock | 9 +-- 16 files changed, 116 insertions(+), 37 deletions(-) create mode 100644 packages/core/src/bufferlike.ts create mode 100644 packages/sample/genaisrc/transcribe.genai.mjs create mode 100644 packages/sample/src/audio/helloworld.m4a create mode 100644 packages/sample/src/audio/helloworld.mp3 diff --git a/docs/public/schemas/llms.json b/docs/public/schemas/llms.json index 5a3147842..0db5c7b6f 100644 --- a/docs/public/schemas/llms.json +++ b/docs/public/schemas/llms.json @@ -56,6 +56,10 @@ "type": "boolean", "description": "Indicates if pulling models is supported" }, + "transcribe": { + "type": "boolean", + "description": "Indicates if speech transcription is supported" + }, "openaiCompatibility": { "type": "string", "description": "Uses OpenAI API compatibility layer documentation URL" diff --git a/packages/core/package.json b/packages/core/package.json index 2e8e9bfb2..3ac8074ac 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -44,7 +44,6 @@ "@types/semver": "^7.5.8", "@types/shell-quote": "^1.7.5", "ajv": "^8.17.1", - "cross-fetch": "^4.1.0", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", "diff": "^7.0.0", diff --git a/packages/core/src/bufferlike.ts b/packages/core/src/bufferlike.ts new file mode 100644 index 000000000..f29521c96 --- /dev/null +++ b/packages/core/src/bufferlike.ts @@ -0,0 +1,27 @@ +import { resolveFileBytes } from "./file" +import { TraceOptions } from "./trace" + +export async function resolveBufferLike( + bufferLike: BufferLike, + options?: TraceOptions +): Promise { + // If the URL is a string, resolve it to a data URI + if (typeof bufferLike === "string") + return Buffer.from(await resolveFileBytes(bufferLike, options)) + else if (bufferLike instanceof Blob) + return Buffer.from(await bufferLike.arrayBuffer()) + else if (bufferLike instanceof ReadableStream) { + const stream: ReadableStream = bufferLike + return Buffer.from(await new Response(stream).arrayBuffer()) + } else if (bufferLike instanceof ArrayBuffer) + bufferLike = Buffer.from(bufferLike) + else if ( + typeof bufferLike === "object" && + (bufferLike as WorkspaceFile).content + ) + return Buffer.from( + (bufferLike as WorkspaceFile).content, + (bufferLike as WorkspaceFile).encoding || "utf-8" + ) + throw new Error("Unsupported buffer-like object") +} diff --git a/packages/core/src/chat.ts b/packages/core/src/chat.ts index 7465c48f7..0deb9f534 100644 --- a/packages/core/src/chat.ts +++ b/packages/core/src/chat.ts @@ -141,7 +141,8 @@ export type PullModelFunction = ( ) => Promise<{ ok: boolean; error?: SerializedError }> export type CreateTranscriptionRequest = { - file: BufferLike + file: Blob + model: string } & TranscriptionOptions export type TranscribeFunction = ( diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 8ec905eda..8fe5744a7 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -195,6 +195,7 @@ export const MODEL_PROVIDERS = Object.freeze< bearerToken?: boolean listModels?: boolean pullModel?: boolean + transcribe?: boolean aliases?: Record }[] >(CONFIGURATION_DATA.providers) diff --git a/packages/core/src/crypto.ts b/packages/core/src/crypto.ts index ca336f737..e943a40bb 100644 --- a/packages/core/src/crypto.ts +++ b/packages/core/src/crypto.ts @@ -62,6 +62,7 @@ export async function hash(value: any, options?: HashOptions) { h.push(sep) await append(c) } + else if (v instanceof Uint8Array) h.push(v) else if (v instanceof Buffer) h.push(new Uint8Array(v)) else if (v instanceof ArrayBuffer) h.push(new Uint8Array(v)) else if (v instanceof Blob) diff --git a/packages/core/src/fetch.ts b/packages/core/src/fetch.ts index 795cffe6e..30bc92118 100644 --- a/packages/core/src/fetch.ts +++ b/packages/core/src/fetch.ts @@ -1,4 +1,3 @@ -import crossFetch from "cross-fetch" import wrapFetch from "fetch-retry" import { MarkdownTrace, TraceOptions } from "./trace" import { @@ -53,9 +52,8 @@ export async function createFetch( // We enrich crossFetch with the proxy. const crossFetchWithProxy: typeof fetch = agent - ? (url, options) => - crossFetch(url, { ...(options || {}), agent } as any) - : crossFetch + ? (url, options) => global.fetch(url, { ...(options || {}), agent } as any) + : global.fetch // Return the default fetch if no retry status codes are specified if (!retryOn?.length) return crossFetchWithProxy @@ -66,18 +64,21 @@ export async function createFetch( retries, retryDelay: (attempt, error, response) => { const code: string = (error as any)?.code as string - if (code === "ECONNRESET" || + if ( + code === "ECONNRESET" || code === "ENOTFOUND" || - cancellationToken?.isCancellationRequested) + cancellationToken?.isCancellationRequested + ) // Return undefined for fatal errors or cancellations to stop retries return undefined const message = errorMessage(error) const status = statusToMessage(response) - const delay = Math.min( - maxDelay, - Math.pow(FETCH_RETRY_GROWTH_FACTOR, attempt) * retryDelay - ) * + const delay = + Math.min( + maxDelay, + Math.pow(FETCH_RETRY_GROWTH_FACTOR, attempt) * retryDelay + ) * (1 + Math.random() / 20) // 5% jitter for delay randomization const msg = toStringList( `retry #${attempt + 1} in ${renderWithPrecision(Math.floor(delay) / 1000, 1)}s`, diff --git a/packages/core/src/image.ts b/packages/core/src/image.ts index 2ee288ff1..f71c90748 100644 --- a/packages/core/src/image.ts +++ b/packages/core/src/image.ts @@ -1,4 +1,5 @@ // Import necessary functions and types from other modules +import { resolveBufferLike } from "./bufferlike" import { IMAGE_DETAIL_LOW_HEIGHT, IMAGE_DETAIL_LOW_WIDTH } from "./constants" import { resolveFileBytes } from "./file" import { TraceOptions } from "./trace" @@ -29,18 +30,11 @@ export async function imageEncodeForLLM( // https://platform.openai.com/docs/guides/vision/calculating-costs#managing-images // If the URL is a string, resolve it to a data URI - if (typeof url === "string") - url = Buffer.from(await resolveFileBytes(url, options)) - else if (url instanceof Blob) url = Buffer.from(await url.arrayBuffer()) - else if (url instanceof ReadableStream) { - const stream: ReadableStream = url - url = Buffer.from(await new Response(stream).arrayBuffer()) - } else if (url instanceof ArrayBuffer) url = Buffer.from(url) - + const buffer = await resolveBufferLike(url) // Read the image using Jimp const { Jimp, HorizontalAlign, VerticalAlign, ResizeStrategy } = await import("jimp") - const img = await Jimp.read(url) + const img = await Jimp.read(buffer) const { width, height } = img if (crop) { const x = Math.max(0, Math.min(width, crop.x ?? 0)) diff --git a/packages/core/src/llms.json b/packages/core/src/llms.json index cc3ef14ce..d748d1671 100644 --- a/packages/core/src/llms.json +++ b/packages/core/src/llms.json @@ -5,6 +5,7 @@ "id": "openai", "detail": "OpenAI (or compatible)", "bearerToken": true, + "transcribe": true, "aliases": { "large": "gpt-4o", "small": "gpt-4o-mini", diff --git a/packages/core/src/lm.ts b/packages/core/src/lm.ts index 378418db7..babac1571 100644 --- a/packages/core/src/lm.ts +++ b/packages/core/src/lm.ts @@ -36,5 +36,6 @@ export function resolveLanguageModel(provider: string): LanguageModel { return LocalOpenAICompatibleModel(provider, { listModels: features?.listModels !== false, pullModel: features?.pullModel, + transcribe: features?.transcribe }) } diff --git a/packages/core/src/openai.ts b/packages/core/src/openai.ts index d2d23bebb..8027845ee 100644 --- a/packages/core/src/openai.ts +++ b/packages/core/src/openai.ts @@ -19,7 +19,12 @@ import { TOOL_URL, } from "./constants" import { estimateTokens } from "./tokens" -import { ChatCompletionHandler, LanguageModel, PullModelFunction } from "./chat" +import { + ChatCompletionHandler, + CreateTranscriptionRequest, + LanguageModel, + PullModelFunction, +} from "./chat" import { RequestError, errorMessage, serializeError } from "./error" import { createFetch, iterateBody, traceFetchPost } from "./fetch" import { parseModelIdentifier } from "./models" @@ -44,6 +49,7 @@ import { LanguageModelConfiguration, LanguageModelInfo, } from "./server/messages" +import prettyBytes from "pretty-bytes" export function getConfigHeaders(cfg: LanguageModelConfiguration) { let { token, type, base, provider } = cfg @@ -82,8 +88,6 @@ export const OpenAIChatCompletion: ChatCompletionHandler = async ( const { requestOptions, partialCb, - cache: cacheOrName, - cacheName, retry, retryDelay, maxDelay, @@ -91,8 +95,7 @@ export const OpenAIChatCompletion: ChatCompletionHandler = async ( inner, } = options const { headers = {}, ...rest } = requestOptions || {} - const { token, source, ...cfgNoToken } = cfg - const { provider, model } = parseModelIdentifier(req.model) + const { model } = parseModelIdentifier(req.model) const { encode: encoder } = await resolveTokenEncoder(model) const postReq = structuredClone({ @@ -477,7 +480,7 @@ const pullModel: PullModelFunction = async (modelId, options) => { return { ok: false, status: resPull.status } } 0 - for await (const chunk of iterateBody(resPull, { cancellationToken })) + for await (const {} of iterateBody(resPull, { cancellationToken })) process.stderr.write(".") process.stderr.write("\n") return { ok: true } @@ -488,9 +491,47 @@ const pullModel: PullModelFunction = async (modelId, options) => { } } +const transcribe = async ( + req: CreateTranscriptionRequest, + cfg: LanguageModelConfiguration, + options: TraceOptions & CancellationOptions +): Promise => { + const { trace } = options || {} + const fetch = await createFetch(options) + try { + logVerbose(`${cfg.provider}: transcribe with ${cfg.model}`) + const route = req.translate ? "translations" : "transcriptions" + const url = `${cfg.base}/audio/${route}` + trace.itemValue(`url`, `[${url}](${url})`) + const body = new FormData() + body.append("file", req.file) + body.append("model", req.model) + body.append("response_format", "verbose_json") + if (req.temperature) + body.append("temperature", req.temperature.toString()) + if (req.language) body.append("language", req.language) + + const res = await fetch(url, { + method: "POST", + headers: { + ...getConfigHeaders(cfg), + ContentType: "multipart/form-data", + Accept: "application/json", + }, + body: body, + }) + const j = await res.json() + return j + } catch (e) { + logError(e) + trace?.error(e) + return { text: undefined, error: serializeError(e) } + } +} + export function LocalOpenAICompatibleModel( providerId: string, - options: { listModels?: boolean; pullModel?: boolean } + options: { listModels?: boolean; pullModel?: boolean; transcribe?: boolean } ) { return Object.freeze( deleteUndefinedValues({ @@ -498,6 +539,7 @@ export function LocalOpenAICompatibleModel( id: providerId, listModels: options?.listModels ? listModels : undefined, pullModel: options?.pullModel ? pullModel : undefined, + transcribe: options?.transcribe ? transcribe : undefined, }) ) } diff --git a/packages/core/src/runpromptcontext.ts b/packages/core/src/runpromptcontext.ts index 678815cab..e4fda54c0 100644 --- a/packages/core/src/runpromptcontext.ts +++ b/packages/core/src/runpromptcontext.ts @@ -79,6 +79,9 @@ import { agentAddMemory, agentQueryMemory } from "./agent" import { YAMLStringify } from "./yaml" import { Project } from "./server/messages" import { parametersToVars } from "./vars" +import { resolveBufferLike } from "./bufferlike" +import { fileTypeFromBuffer } from "file-type" +import prettyBytes from "pretty-bytes" export function createChatTurnGenerationContext( options: GenerationOptions, @@ -626,7 +629,7 @@ export function createChatGenerationContext( } const transcribe = async ( - file: BufferLike, + audio: BufferLike, options?: TranscriptionOptions ): Promise => { const transcriptionTrace = trace.startTraceDetails("🎤 transcribe") @@ -656,9 +659,18 @@ export function createChatGenerationContext( ) if (!transcribe) throw new Error("model driver not found for " + info.model) + const data = await resolveBufferLike(audio, { + trace: transcriptionTrace, + }) + const mimeType = await fileTypeFromBuffer(data) + const file = new Blob([data], { type: mimeType.mime }) + trace.itemValue(`model`, configuration.model) + trace.itemValue(`file size`, prettyBytes(file.size)) + trace.itemValue(`file type`, file.type) const res = await transcribe( { file, + model: configuration.model, language: options?.language, translate: options?.translate, }, diff --git a/packages/sample/genaisrc/transcribe.genai.mjs b/packages/sample/genaisrc/transcribe.genai.mjs new file mode 100644 index 000000000..d62389ed6 --- /dev/null +++ b/packages/sample/genaisrc/transcribe.genai.mjs @@ -0,0 +1,2 @@ +const res = await transcribe("src/audio/helloworld.mp3") +console.log(res) diff --git a/packages/sample/src/audio/helloworld.m4a b/packages/sample/src/audio/helloworld.m4a new file mode 100644 index 0000000000000000000000000000000000000000..325a0873742c545f010033281ca7c380a5efa5fe GIT binary patch literal 71116 zcmeFabyOZpwmyuz1Se<+?(Xgy2<{Nv-QC@SyIXK~4^D7*cMb0Fdy_eH=iGDV&V1|p zH>tItYVTd$)m_i7s_uHK`UL_4!ZfsZv9_>gVgLdJKum99XJr9Mk~uh-=xY>0Ju*ZJ zfPc|3Kp29FPXOrQ=;>(aXc!n+7@2A405YnzzKJCu1_Z6jpAj&;gN441Js|CD;b^Q6 z{8I@8w3T1Y{v-L1xW)SqH4qRW!$0%<)cr33p!ti;_df^z+XN`!fI53y9W#Jc!`{qT z9}oloDD#igi+`N-j{}JSb^Jq*qi<{QBmNP7TrQl0 zt@*n@(w%npy5@kizMZ|@kDLAxe&kUAfcoP?e}o_MKLQBQn;(fkV4yRw)3^H}gL->= z;{#$aK#a!0Kw zNkASwt3T;}9P{UMkXbkyI0NkO>}`L>KeGNP>tEOWGX>0NVP*BRjw}rSr;Y#?U@`#c zKkLZ;ANn7;{{S2G{>RAxdBE V~%?5P#SZf2x2$SN|v5PX!p@|DSyX?EPQlzuNyI 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 AcK`qY literal 0 HcmV?d00001 diff --git a/packages/sample/src/audio/helloworld.mp3 b/packages/sample/src/audio/helloworld.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..56e8ab978c7d3e5a2d09f2e29849252ebb6143fd GIT binary patch literal 63215 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 literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index 39573276f..b745e3b91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4405,13 +4405,6 @@ cpu-features@~0.0.10: buildcheck "~0.0.6" nan "^2.19.0" -cross-fetch@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.1.0.tgz#8f69355007ee182e47fa692ecbaa37a52e43c3d2" - integrity sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw== - dependencies: - node-fetch "^2.7.0" - cross-spawn@^6.0.5: version "6.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" @@ -8072,7 +8065,7 @@ node-domexception@1.0.0: resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch@^2.6.7, node-fetch@^2.7.0: +node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==