Instructions to use ms180/librispeech_100h_e_branchformer with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ESPnet
How to use ms180/librispeech_100h_e_branchformer with ESPnet:
unknown model type (must be text-to-speech or automatic-speech-recognition)
- Notebooks
- Google Colab
- Kaggle
File size: 3,797 Bytes
cb6ab54 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | """Recipe-local Gradio launcher for ESPnet3 demos."""
from __future__ import annotations
import argparse
import logging
from pathlib import Path
import gradio as gr
from espnet3.publication.demo.session import load_demo_session
from espnet3.utils.logging_utils import configure_logging
logger = logging.getLogger(__name__)
def build_demo(
demo_dir: Path,
demo_config_path: Path | None = None,
):
"""Build the default Gradio Blocks app for one packed demo."""
if demo_config_path is None:
demo_config_path = demo_dir / "demo.yaml"
logger.info(
"Building recipe demo UI | demo_dir=%s demo_config_path=%s",
demo_dir,
demo_config_path,
)
session = load_demo_session(demo_dir, demo_config_path)
logger.info(
"Resolved demo specs | inputs=%s outputs=%s",
session.input_specs,
session.output_specs,
)
inference_fn = session.create_inference_fn(
session.input_specs,
session.output_specs,
)
with gr.Blocks(title=session.title) as app:
if session.title:
gr.Markdown(f"# {session.title}")
input_components = []
with gr.Column():
# Gradio click handlers bind positional values, not a dict keyed by
# spec name. Keep this list in the same order as
# session.input_specs so create_inference_fn(*values) can zip each
# incoming value back to the matching spec/key.
for spec in session.input_specs:
logger.info("Building input component | spec=%s", spec)
# build_input_component() returns one Gradio input component
# instance (for example gr.Audio or gr.Textbox). That component
# object is what Gradio expects in click(..., inputs=[...]).
input_components.append(session.build_input_component(spec))
submit_button = gr.Button("Run")
output_components = []
with gr.Column():
# Outputs also stay positional. inference_fn returns one value per
# spec in this exact order, and Gradio routes each returned value
# to the component at the same list index.
for spec in session.output_specs:
logger.info("Building output component | spec=%s", spec)
# build_output_component() returns one Gradio output component
# instance that Gradio can target from click(..., outputs=[...]).
output_components.append(session.build_output_component(spec))
if session.description:
gr.Markdown(session.description)
logger.info("Binding Run button click handler")
submit_button.click(
fn=inference_fn,
inputs=input_components,
outputs=output_components,
)
logger.info("Recipe demo UI ready")
return app
def main() -> None:
parser = argparse.ArgumentParser(description="Launch an ESPnet3 demo.")
parser.add_argument(
"--demo-dir",
type=Path,
default=Path(__file__).resolve().parent,
help="Path to the demo directory. Defaults to this script's directory.",
)
parser.add_argument(
"--demo-config",
type=Path,
default=None,
help="Optional packed demo config path. Relative paths use --demo-dir.",
)
args = parser.parse_args()
configure_logging(log_dir=args.demo_dir, filename="demo.log")
logger.info("Starting recipe demo CLI | args=%s", args)
demo_config_path = args.demo_config or (args.demo_dir / "demo.yaml")
app = build_demo(
args.demo_dir,
demo_config_path=demo_config_path,
)
logger.info("Launching Gradio app")
app.launch()
if __name__ == "__main__":
main()
|