Studio examples

parent cc5e0b68
...@@ -120,6 +120,20 @@ function buildStudioUrl(path) { ...@@ -120,6 +120,20 @@ function buildStudioUrl(path) {
return `${STUDIO_API_BASE}${path}`; return `${STUDIO_API_BASE}${path}`;
} }
function apiUrl(path) {
const withoutV1 = path.startsWith('/v1/') ? path.slice('/v1'.length) : path;
return STUDIO_IS_GLOBAL_ADMIN
? `/api/v1${withoutV1}`
: `/api/u/${STUDIO_USERNAME}${withoutV1}`;
}
function apiModelId(catalogId) {
if (!catalogId) return '';
const parts = catalogId.split('/');
if (parts.length === 3 && parts[0] === 'provider') return parts[1] + '/' + parts[2];
return catalogId;
}
function buildBindingApiUrl(bindingId) { function buildBindingApiUrl(bindingId) {
return buildStudioUrl(`/function-bindings/${encodeURIComponent(bindingId)}`); return buildStudioUrl(`/function-bindings/${encodeURIComponent(bindingId)}`);
} }
...@@ -1102,8 +1116,8 @@ function previewExportBody(endpoint, body) { ...@@ -1102,8 +1116,8 @@ function previewExportBody(endpoint, body) {
} }
function buildAudioPreviewData() { function buildAudioPreviewData() {
return previewExportBody(buildStudioUrl('/audio/generate'), { return previewExportBody(apiUrl('/v1/audio/generate'), {
model: activeModel?.id || '', model: apiModelId(modelForSub('aud-gen')),
prompt: val('ag-prompt'), prompt: val('ag-prompt'),
duration: fval('ag-dur') || 10, duration: fval('ag-dur') || 10,
temperature: fval('ag-temp') || 1.0, temperature: fval('ag-temp') || 1.0,
...@@ -1116,8 +1130,8 @@ function buildAudioPreviewData() { ...@@ -1116,8 +1130,8 @@ function buildAudioPreviewData() {
} }
function buildTTSPreviewData() { function buildTTSPreviewData() {
return previewExportBody(buildStudioUrl('/audio/speech'), { return previewExportBody(apiUrl('/v1/audio/speech'), {
model: activeModel?.id || '', model: apiModelId(modelForSub('aud-tts')),
input: val('at-text'), input: val('at-text'),
voice: val('at-voice') || undefined, voice: val('at-voice') || undefined,
speed: fval('at-speed') || 1.0, speed: fval('at-speed') || 1.0,
...@@ -1126,9 +1140,8 @@ function buildTTSPreviewData() { ...@@ -1126,9 +1140,8 @@ function buildTTSPreviewData() {
} }
function buildSTTPreviewData() { function buildSTTPreviewData() {
const sttModel = bestModelForCap('speech_to_text') || activeModel; return previewExportBody(apiUrl('/v1/audio/transcriptions'), {
return previewExportBody(buildStudioUrl('/audio/transcriptions'), { model: apiModelId(modelForSub('aud-stt')),
model: sttModel?.id || '',
file: fileOrNull('as-file') ? '<multipart audio/video file>' : undefined, file: fileOrNull('as-file') ? '<multipart audio/video file>' : undefined,
language: val('as-lang') || undefined, language: val('as-lang') || undefined,
prompt: val('as-prompt') || undefined, prompt: val('as-prompt') || undefined,
...@@ -1137,8 +1150,8 @@ function buildSTTPreviewData() { ...@@ -1137,8 +1150,8 @@ function buildSTTPreviewData() {
} }
function buildImageGenPreviewData() { function buildImageGenPreviewData() {
return previewExportBody(buildStudioUrl('/images/generations'), { return previewExportBody(apiUrl('/v1/images/generations'), {
model: activeModel?.id || '', model: apiModelId(modelForSub('img-gen')),
prompt: val('ig-prompt'), prompt: val('ig-prompt'),
negative_prompt: val('ig-neg') || undefined, negative_prompt: val('ig-neg') || undefined,
size: `${ival('ig-w') || 1024}x${ival('ig-h') || 1024}`, size: `${ival('ig-w') || 1024}x${ival('ig-h') || 1024}`,
...@@ -1154,8 +1167,8 @@ function buildImageGenPreviewData() { ...@@ -1154,8 +1167,8 @@ function buildImageGenPreviewData() {
function buildEmbeddingsPreviewData() { function buildEmbeddingsPreviewData() {
const lines = val('em-text').split('\n').filter(l => l.trim()); const lines = val('em-text').split('\n').filter(l => l.trim());
const input = lines.length <= 1 ? (lines[0] || '') : lines; const input = lines.length <= 1 ? (lines[0] || '') : lines;
return previewExportBody(buildStudioUrl('/embeddings'), { return previewExportBody(apiUrl('/v1/embeddings'), {
model: activeModel?.id || '', model: apiModelId(modelForSub('embed')),
input, input,
encoding_format: val('em-enc') || 'float', encoding_format: val('em-enc') || 'float',
dimensions: val('em-dims') ? ival('em-dims') : undefined, dimensions: val('em-dims') ? ival('em-dims') : undefined,
...@@ -1163,9 +1176,9 @@ function buildEmbeddingsPreviewData() { ...@@ -1163,9 +1176,9 @@ function buildEmbeddingsPreviewData() {
} }
function buildAudioUnderstandPreviewData() { function buildAudioUnderstandPreviewData() {
return previewExportBody(buildStudioUrl('/pipelines/audio-understand'), { return previewExportBody(apiUrl('/v1/pipelines/audio-understand'), {
audio: fileOrNull('au-file') ? '<audio/video file data>' : undefined, audio: fileOrNull('au-file') ? '<audio/video file data>' : undefined,
audio_model: activeModel?.id || '', audio_model: apiModelId(modelForSub('aud-understand')),
text_model: val('au-text-model') || undefined, text_model: val('au-text-model') || undefined,
input: val('au-goal') || undefined, input: val('au-goal') || undefined,
language: val('as-lang') || undefined, language: val('as-lang') || undefined,
...@@ -1173,10 +1186,10 @@ function buildAudioUnderstandPreviewData() { ...@@ -1173,10 +1186,10 @@ function buildAudioUnderstandPreviewData() {
} }
function buildMusicDubPreviewData() { function buildMusicDubPreviewData() {
return previewExportBody(buildStudioUrl('/pipelines/audio-music-dub'), { return previewExportBody(apiUrl('/v1/pipelines/audio-music-dub'), {
audio: fileOrNull('amd-file') ? '<audio/video file data>' : undefined, audio: fileOrNull('amd-file') ? '<audio/video file data>' : undefined,
stt_model: getAssignedModelId('aud-music-dub', 'speech_to_text'), stt_model: apiModelId(getAssignedModelId('aud-music-dub', 'speech_to_text')),
tts_model: getAssignedModelId('aud-music-dub', 'text_to_speech'), tts_model: apiModelId(getAssignedModelId('aud-music-dub', 'text_to_speech')),
source_lang: val('amd-slang') || undefined, source_lang: val('amd-slang') || undefined,
target_lang: val('amd-tlang') || undefined, target_lang: val('amd-tlang') || undefined,
notes: val('amd-notes') || undefined, notes: val('amd-notes') || undefined,
...@@ -1184,7 +1197,7 @@ function buildMusicDubPreviewData() { ...@@ -1184,7 +1197,7 @@ function buildMusicDubPreviewData() {
} }
function buildStemPreviewData() { function buildStemPreviewData() {
return previewExportBody(buildStudioUrl('/audio/stems'), { return previewExportBody(apiUrl('/v1/audio/stems'), {
audio: fileOrNull('ast-file') ? '<audio/video file data>' : undefined, audio: fileOrNull('ast-file') ? '<audio/video file data>' : undefined,
stem_mode: val('ast-mode') || 'vocals-instrumental', stem_mode: val('ast-mode') || 'vocals-instrumental',
response_format: 'url', response_format: 'url',
...@@ -1192,7 +1205,7 @@ function buildStemPreviewData() { ...@@ -1192,7 +1205,7 @@ function buildStemPreviewData() {
} }
function buildCleanupPreviewData() { function buildCleanupPreviewData() {
return previewExportBody(buildStudioUrl('/audio/cleanup'), { return previewExportBody(apiUrl('/v1/audio/cleanup'), {
audio: fileOrNull('ac-file') ? '<audio/video file data>' : undefined, audio: fileOrNull('ac-file') ? '<audio/video file data>' : undefined,
noise_reduction: chk('ac-noise'), noise_reduction: chk('ac-noise'),
normalize: chk('ac-level'), normalize: chk('ac-level'),
...@@ -1204,9 +1217,9 @@ function buildCleanupPreviewData() { ...@@ -1204,9 +1217,9 @@ function buildCleanupPreviewData() {
function buildDubPreviewData() { function buildDubPreviewData() {
const preview = buildDubPreferencePreview(); const preview = buildDubPreferencePreview();
return previewExportBody(buildStudioUrl('/video/dub'), { return previewExportBody(apiUrl('/v1/video/dub'), {
stt_model: getAssignedModelId('vid-dub', 'speech_to_text'), stt_model: apiModelId(getAssignedModelId('vid-dub', 'speech_to_text')),
tts_model: getAssignedModelId('vid-dub', 'text_to_speech'), tts_model: apiModelId(getAssignedModelId('vid-dub', 'text_to_speech')),
video: fileOrNull('vd-src') ? '<video file data>' : undefined, video: fileOrNull('vd-src') ? '<video file data>' : undefined,
source_lang: preview.source_lang, source_lang: preview.source_lang,
target_lang: preview.target_lang, target_lang: preview.target_lang,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment