Add OpenAI Whisper API
This commit is contained in:
parent
8de343295d
commit
96b87641ca
|
@ -3530,7 +3530,7 @@ async function fetchJSON(url, args = {}) {
|
||||||
// ** END **
|
// ** END **
|
||||||
|
|
||||||
// OpenAI API
|
// OpenAI API
|
||||||
require('./src/openai').registerEndpoints(app, jsonParser);
|
require('./src/openai').registerEndpoints(app, jsonParser, urlencodedParser);
|
||||||
|
|
||||||
// Tokenizers
|
// Tokenizers
|
||||||
require('./src/tokenizers').registerEndpoints(app, jsonParser);
|
require('./src/tokenizers').registerEndpoints(app, jsonParser);
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
const { readSecret, SECRET_KEYS } = require("./secrets");
|
const { readSecret, SECRET_KEYS } = require("./secrets");
|
||||||
const fetch = require('node-fetch').default;
|
const fetch = require('node-fetch').default;
|
||||||
|
const FormData = require('form-data');
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers the OpenAI endpoints.
|
* Registers the OpenAI endpoints.
|
||||||
* @param {import("express").Express} app
|
* @param {import("express").Express} app Express app
|
||||||
* @param {any} jsonParser
|
* @param {any} jsonParser JSON parser
|
||||||
|
* @param {any} urlencodedParser Form data parser
|
||||||
*/
|
*/
|
||||||
function registerEndpoints(app, jsonParser) {
|
function registerEndpoints(app, jsonParser, urlencodedParser) {
|
||||||
app.post('/api/openai/caption-image', jsonParser, async (request, response) => {
|
app.post('/api/openai/caption-image', jsonParser, async (request, response) => {
|
||||||
try {
|
try {
|
||||||
let key = '';
|
let key = '';
|
||||||
|
@ -85,6 +88,54 @@ function registerEndpoints(app, jsonParser) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.post('/api/openai/transcribe-audio', urlencodedParser, async (request, response) => {
|
||||||
|
try {
|
||||||
|
const key = readSecret(SECRET_KEYS.OPENAI);
|
||||||
|
|
||||||
|
if (!key) {
|
||||||
|
console.log('No OpenAI key found');
|
||||||
|
return response.sendStatus(401);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!request.file) {
|
||||||
|
console.log('No audio file found');
|
||||||
|
return response.sendStatus(400);
|
||||||
|
}
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
console.log('Processing audio file', request.file.path);
|
||||||
|
formData.append('file', fs.createReadStream(request.file.path), { filename: 'audio.wav', contentType: 'audio/wav' });
|
||||||
|
formData.append('model', request.body.model);
|
||||||
|
|
||||||
|
if (request.body.language) {
|
||||||
|
formData.append('language', request.body.language);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await fetch('https://api.openai.com/v1/audio/transcriptions', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${key}`,
|
||||||
|
...formData.getHeaders(),
|
||||||
|
},
|
||||||
|
body: formData,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!result.ok) {
|
||||||
|
const text = await result.text();
|
||||||
|
console.log('OpenAI request failed', result.statusText, text);
|
||||||
|
return response.status(500).send(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.rmSync(request.file.path);
|
||||||
|
const data = await result.json();
|
||||||
|
console.log('OpenAI transcription response', data);
|
||||||
|
return response.json(data);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('OpenAI transcription failed', error);
|
||||||
|
response.status(500).send('Internal server error');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
app.post('/api/openai/generate-voice', jsonParser, async (request, response) => {
|
app.post('/api/openai/generate-voice', jsonParser, async (request, response) => {
|
||||||
try {
|
try {
|
||||||
const key = readSecret(SECRET_KEYS.OPENAI);
|
const key = readSecret(SECRET_KEYS.OPENAI);
|
||||||
|
|
Loading…
Reference in New Issue