From a2e44f2f1e29e04a01874ef7fbfe8e27c97e4cc9 Mon Sep 17 00:00:00 2001 From: freddyaboulton Date: Fri, 16 Aug 2024 19:58:38 -0400 Subject: [PATCH 1/9] fix --- client/js/src/helpers/api_info.ts | 4 +- client/js/src/types.ts | 1 + client/js/src/utils/submit.ts | 3 +- js/audio/Index.svelte | 2 + js/audio/interactive/InteractiveAudio.svelte | 11 +++++- js/audio/streaming/StreamAudio.svelte | 36 +++++++++++++++++- js/core/src/Blocks.svelte | 20 +++++++++- js/core/src/init.ts | 10 +++-- js/core/src/lang/en.json | 3 +- js/icons/src/Spinner.svelte | 40 ++++++++++++++++++++ js/icons/src/index.ts | 1 + js/image/Index.svelte | 2 + js/image/shared/ImageUploader.svelte | 2 + js/image/shared/Webcam.svelte | 40 ++++++++++++++++---- 14 files changed, 157 insertions(+), 18 deletions(-) create mode 100644 js/icons/src/Spinner.svelte diff --git a/client/js/src/helpers/api_info.ts b/client/js/src/helpers/api_info.ts index 6d9d5bb37b0a1..b500c539fc018 100644 --- a/client/js/src/helpers/api_info.ts +++ b/client/js/src/helpers/api_info.ts @@ -247,6 +247,7 @@ export function handle_message( | "unexpected_error"; data?: any; status?: Status; + original_msg?: string; } { const queue = true; switch (data.msg) { @@ -373,7 +374,8 @@ export function handle_message( position: 0, success: data.success, eta: data.eta - } + }, + original_msg: "process_starts" }; } diff --git a/client/js/src/types.ts b/client/js/src/types.ts index 01afb0d39b783..bb3d38703e00f 100644 --- a/client/js/src/types.ts +++ b/client/js/src/types.ts @@ -363,6 +363,7 @@ export interface StatusMessage extends Status { type: "status"; endpoint: string; fn_index: number; + original_msg?: string; } export interface PayloadMessage extends Payload { diff --git a/client/js/src/utils/submit.ts b/client/js/src/utils/submit.ts index a109784fa01fa..afcf5e588e41a 100644 --- a/client/js/src/utils/submit.ts +++ b/client/js/src/utils/submit.ts @@ -598,7 +598,7 @@ export function submit( event_id_final = event_id; let callback = async function (_data: object): Promise { try { - const { type, status, data } = handle_message( + const { type, status, data, original_msg } = handle_message( _data, last_status[fn_index] ); @@ -614,6 +614,7 @@ export function submit( endpoint: _endpoint, fn_index, time: new Date(), + original_msg: original_msg, ...status }); } else if (type === "complete") { diff --git a/js/audio/Index.svelte b/js/audio/Index.svelte index 6bced2a49843e..9e9ed23e231ff 100644 --- a/js/audio/Index.svelte +++ b/js/audio/Index.svelte @@ -42,6 +42,7 @@ export let stream_every: number; export let close_stream: () => void; + export let open_stream: () => void; export let set_time_limit: (time: number) => void; export let gradio: Gradio<{ input: never; @@ -246,6 +247,7 @@ {trim_region_settings} {stream_every} bind:close_stream + bind:open_stream bind:set_time_limit upload={gradio.client.upload} stream_handler={gradio.client.stream} diff --git a/js/audio/interactive/InteractiveAudio.svelte b/js/audio/interactive/InteractiveAudio.svelte index 17325c4798896..31a8f77c2bb78 100644 --- a/js/audio/interactive/InteractiveAudio.svelte +++ b/js/audio/interactive/InteractiveAudio.svelte @@ -41,13 +41,19 @@ export let stream_every: number; let time_limit: number | null = null; + let queue_joined = false; export const close_stream: () => void = () => { time_limit = null; + stream_open = false; + queue_joined = false; }; export const set_time_limit = (time: number): void => { if (recording) time_limit = time; }; + export const open_stream: () => void = () => { + if (recording) stream_open = true; + }; $: dispatch("drag", dragging); @@ -60,6 +66,7 @@ let pending_stream: Uint8Array[] = []; let submit_pending_stream_on_pending_end = false; let inited = false; + let stream_open = false; const NUM_HEADER_BYTES = 44; let audio_chunks: Blob[] = []; @@ -167,7 +174,8 @@ pending_stream.push(payload); } else { let blobParts = [header].concat(pending_stream, [payload]); - dispatch_blob(blobParts, "stream"); + if (stream_open || !queue_joined) dispatch_blob(blobParts, "stream"); + queue_joined = true; pending_stream = []; } } @@ -240,6 +248,7 @@ {i18n} {waveform_settings} {waveform_options} + waiting={queue_joined && !stream_open} /> {:else} import { onMount } from "svelte"; import type { I18nFormatter } from "@gradio/utils"; + import { Spinner } from "@gradio/icons"; import WaveSurfer from "wavesurfer.js"; import RecordPlugin from "wavesurfer.js/dist/plugins/record.js"; import type { WaveformOptions } from "../shared/types"; @@ -15,6 +16,8 @@ export let waveform_options: WaveformOptions = { show_recording_waveform: true }; + export let waiting = false; + $: console.log("waiting", waiting); let micWaveform: WaveSurfer; let waveformRecord: RecordPlugin; @@ -48,7 +51,7 @@ /> {/if}
- {#if recording} + {#if recording && !waiting} + {:else if recording && waiting} + {:else}