import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@fastgpt/service/common/response'; import { authCert } from '@fastgpt/service/support/permission/auth/common'; import { withNextCors } from '@fastgpt/service/common/middle/cors'; import { getUploadModel } from '@fastgpt/service/common/file/multer'; import { removeFilesByPaths } from '@fastgpt/service/common/file/utils'; import fs from 'fs'; import { getAIApi } from '@fastgpt/service/core/ai/config'; import { pushWhisperUsage } from '@/service/support/wallet/usage/push'; const upload = getUploadModel({ maxSize: 2 }); export default withNextCors(async function handler(req: NextApiRequest, res: NextApiResponse) { let filePaths: string[] = []; try { const { file, data: { duration } } = await upload.doUpload<{ duration: number; shareId?: string }>(req, res); filePaths = [file.path]; const { teamId, tmbId } = await authCert({ req, authToken: true }); if (!global.whisperModel) { throw new Error('whisper model not found'); } if (!file) { throw new Error('file not found'); } const ai = getAIApi(); const result = await ai.audio.transcriptions.create({ file: fs.createReadStream(file.path), model: global.whisperModel.model }); pushWhisperUsage({ teamId, tmbId, duration }); jsonRes(res, { data: result.text }); } catch (err) { console.log(err); jsonRes(res, { code: 500, error: err }); } removeFilesByPaths(filePaths); }); export const config = { api: { bodyParser: false } };