Files
gpustack-ui/src/pages/playground/view-code/audio.ts
T

176 lines
4.7 KiB
TypeScript

import _ from 'lodash';
import { MODEL_PROXY, OPENAI_COMPATIBLE } from '../apis';
import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils';
export const generateSpeechToTextCurlCode = ({
api: url,
modelProxy,
routeID,
parameters
}: Record<string, any>) => {
const host = window.location.origin;
// replace url OPENAI_COMPATIBLE with GPUSTACK
const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url;
// ========================= Curl =========================
const curlCode = `
curl ${host}${api} \\
-H "Content-Type: multipart/form-data" \\
-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\
-F model="${parameters.model}" \\
-F file="@/path/to/file/audio.mp3;type=audio/mpeg" \\
${formatCurlArgs(_.omit(parameters, 'model'), true)}`
.trim()
.replace(/\\$/g, '');
return curlCode;
};
export const speechToTextCode = ({
api: url,
parameters
}: Record<string, any>) => {
const host = window.location.origin;
// ========================= Curl =========================
const curlCode = generateSpeechToTextCurlCode({ api: url, parameters });
// ========================= Python =========================
const pythonCode = `
from openai import OpenAI\n
audio_file = open("audio.mp3", "rb")
client = OpenAI(
base_url="${host}/${OPENAI_COMPATIBLE}",
api_key="YOUR_GPUSTACK_API_KEY"
)
response = client.audio.transcriptions.create(\n${formatPyParams({
...parameters,
file: 'audio_file'
}).replace(/"audio_file"/, 'audio_file')})\n
print('response:', response.text)`.trim();
// ========================= Node.js =========================
const jsonParams = fomatNodeJsParams({
...parameters,
file: `fs.createReadStream(audio.mp3)`
});
const params = jsonParams.replace(
/"fs.createReadStream\(audio.mp3\)"/g,
'fs.createReadStream("audio.mp3")'
);
const nodeJsCode = `
const fs = require("fs")
const OpenAI = require("openai");
const openai = new OpenAI({
"apiKey": "YOUR_GPUSTACK_API_KEY",
"baseURL": "${host}/${OPENAI_COMPATIBLE}"
});
async function main() {
const params = ${params};
const response = await openai.audio.transcriptions.create(params);
console.log(response.text);
}
main();`.trim();
return {
curlCode,
pythonCode,
nodeJsCode
};
};
export const generateTextToSpeechCurlCode = ({
api: url,
modelProxy,
routeID,
parameters
}: Record<string, any>) => {
const host = window.location.origin;
const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url;
// ========================= Curl =========================
const curlCode = `
curl ${host}${api} \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\
${formatCurlArgs(parameters, false)} \\\n--output output.${parameters.response_format}`.trim();
return curlCode;
};
export const TextToSpeechCode = ({
api: url,
parameters
}: Record<string, any>) => {
const host = window.location.origin;
// ========================= Curl =========================
const curlCode = generateTextToSpeechCurlCode({ api: url, parameters });
// ========================= Python =========================
const extraBody = _.pickBy(
parameters,
(value: any, key: string) =>
!['model', 'response_format', 'input', 'voice'].includes(key) &&
value !== '' &&
value !== undefined
);
const pythonParams = {
..._.pick(parameters, ['model', 'response_format', 'input', 'voice']),
extra_body: Object.keys(extraBody).length > 0 ? extraBody : undefined
};
const pythonCode = `
from pathlib import Path
from openai import OpenAI\n
output_file_path = Path(__file__).parent / "output.mp3"
client = OpenAI(
base_url="${host}/${OPENAI_COMPATIBLE}",
api_key="YOUR_GPUSTACK_API_KEY"
)
response = client.audio.speech.create(\n${formatPyParams(pythonParams)})\n
with open(output_file_path, "wb") as f:
for chunk in response.iter_bytes():
f.write(chunk)
print(f"Audio saved to {output_file_path}")`.trim();
// ========================= Node.js =========================
const params = fomatNodeJsParams({
...parameters
});
const nodeJsCode = `
const fs = require("fs");
const path = require("path");
const OpenAI = require("openai");
const ouptFile = path.resolve("./output.mp3");
const openai = new OpenAI({
"apiKey": "YOUR_GPUSTACK_API_KEY",
"baseURL": "${host}/${OPENAI_COMPATIBLE}"
});
async function main() {
const params = ${params};
const response = await openai.audio.speech.create(params);
console.log(ouptFile);
const buffer = Buffer.from(await response.arrayBuffer());
await fs.promises.writeFile(ouptFile, buffer);
}
main();`.trim();
return {
curlCode,
pythonCode,
nodeJsCode
};
};