我想从firebase bucket中获取一个webm文件,并使用openai whisper进行转录。
到目前为止,我正在为bucket中的文件生成一个公共URL,用axios发送一个请求并创建一个blob。
export const getFile = async(publicUrl: string) => {
const response = await axios.get(publicUrl, { responseType: 'blob' })
return new Blob([response.data], { type: 'video/webm' })
}
在官方的openai nodejs包中,我想调用的函数是:
createTranscription(file: File, model: string, prompt?: string, responseFormat?: string, temperature?: number, language?: string, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateTranscriptionResponse, any>>;
根据openai文档:
file必需。要转录的音频文件,格式如下:mp3、mp4、mpeg、mpga、m4a、wav或webm。
我在将此Blob
转换为File
或从firebase存储桶获取File
对象时遇到问题。
我所尝试的
构造文件
const file = new File([blob], "test.webm", {
type: "video/webm",
});
我会得到一个:ReferenceError: File is not defined
,据我所知,我不能使用文件javascript对象。
在blob上添加需要的属性
一个Blob
和一个File
几乎是相同的,所以我尝试添加缺少的属性:
const resp = await openai.createTranscription(
{...blob, lastModified: 0, webkitRelativePath: "", name: "test.webm"},
"whisper-1"
);
不喜欢的类型:
Argument of type '{ lastModified: number; webkitRelativePath: string; name: string; size: number; type: string; arrayBuffer(): Promise<ArrayBuffer>; slice(start?: number | undefined, end?: number | undefined, contentType?: string | undefined): Blob; stream(): ReadableStream<...>; text(): Promise<...>; prototype: Blob; }' is not assignable to parameter of type 'File'.
Type '{ lastModified: number; webkitRelativePath: string; name: string; size: number; type: string; arrayBuffer(): Promise<ArrayBuffer>; slice(start?: number | undefined, end?: number | undefined, contentType?: string | undefined): Blob; stream(): ReadableStream<...>; text(): Promise<...>; prototype: Blob; }' provides no match for the signature 'new (blobParts?: BlobPart[] | undefined, options?: BlobPropertyBag | undefined): Blob'.
1条答案
按热度按时间7y4bm7vi1#
我遇到了类似的问题,输入是一个使用HTML输入类型文件上传的PDF文件,我想从PDF中提取文本并将其传递给openAI模型。
PDF文本提取器需要一个Buffer对象。尝试了多次破解/修复无法转换/解析node.js中的传入文件
最后,我尝试了
Multer
作为中间件,它工作正常。我用的是nextjs,所以这是我的代码。
使用
multer
作为中间件的tl;dr可能会解决您的问题。