"""Beyond Tokens · Decoding Playground — contrastive, guided and parallel decoding, step by step.""" import sys print(f"[startup] python {sys.version.split()[0]}", flush=True) # progress markers: see where a stuck start hangs import spaces # noqa: F401,E402 (ZeroGPU: must be imported before torch) print("[startup] spaces imported", flush=True) import json # noqa: E402 import logging # noqa: E402 import os # noqa: E402 import tempfile # noqa: E402 import time # noqa: E402 from pathlib import Path # noqa: E402 import gradio as gr # noqa: E402 print("[startup] gradio imported", flush=True) import models # noqa: E402 print("[startup] torch and models module imported", flush=True) logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s") logging.getLogger("httpx").setLevel(logging.WARNING) if os.environ.get("DD_SKIP_INIT") != "1": # scripts/smoke_test.py imports this module only for its renderers models.init() from content import examples as EX # noqa: E402 from content import overview # noqa: E402 from gpu_entry import gpu_run # noqa: E402 from params import DEFAULT_REVERSE # noqa: E402 from viz import inspector, parallel_viz, plots, tokens # noqa: E402 from viz.css import CSS # noqa: E402 LATEX = [{"left": "$$", "right": "$$", "display": True}, {"left": "$", "right": "$", "display": False}] GALLERY = Path(__file__).resolve().parent / "data" / "gallery" FAMILY_CHOICES = [(fam.dropdown_label(), key) for key, fam in models.REGISTRY.items()] DEFAULT_FAMILY = "qwen3" if "qwen3" in models.REGISTRY else (FAMILY_CHOICES[0][1] if FAMILY_CHOICES else None) THEME = gr.themes.Soft( primary_hue="indigo", secondary_hue="violet", neutral_hue="slate", font=[gr.themes.GoogleFont("Inter"), "ui-sans-serif", "system-ui", "sans-serif"], font_mono=[gr.themes.GoogleFont("JetBrains Mono"), "ui-monospace", "monospace"], ) # --------------------------------------------------------------------------- # Shared helpers # --------------------------------------------------------------------------- def call_gpu(paradigm: str, family: str, P: dict) -> dict: if family not in models.REGISTRY: raise gr.Error("No model family is available right now.") try: return gpu_run(paradigm, family, P) except ValueError as exc: raise gr.Error(str(exc)) from None def compact(trace: dict | None) -> dict | None: if not trace: return None return {k: trace.get(k) for k in ("paradigm", "method", "family", "models", "params", "summary", "env")} def trace_file(trace: dict) -> str: fd, path = tempfile.mkstemp(prefix=f"trace-{trace['paradigm']}-{trace['method']}-", suffix=".json") with os.fdopen(fd, "w", encoding="utf-8") as f: json.dump(trace, f, ensure_ascii=False) return path def load_gallery(paradigm: str) -> dict | None: path = GALLERY / f"{paradigm}.json" try: return json.loads(path.read_text(encoding="utf-8")) if path.exists() else None except (OSError, json.JSONDecodeError): return None def html(value="", **kwargs) -> gr.HTML: """gr.HTML without Gradio's default content styles, which in SSR mode override the panel CSS.""" return gr.HTML(value, apply_default_css=False, **kwargs) def strip_box(label: str, colors: dict, legend: bool = False, visible: bool = True) -> gr.HighlightedText: return gr.HighlightedText(label=label, color_map=colors, combine_adjacent=False, show_legend=legend, show_inline_category=False, visible=visible) def select_to_step(evt: gr.SelectData): idx = tokens.select_index(evt) return gr.update(value=idx) if idx is not None else gr.update() def decoding_controls(max_new: int, cap: int, rep: float = 1.0): with gr.Accordion("Settings", open=False): with gr.Row(): mode = gr.Radio([("greedy", "greedy"), ("sampling", "sampling")], value="greedy", label="Decoding") temperature = gr.Slider(0.1, 1.5, value=0.8, step=0.05, label="Temperature") with gr.Row(): max_new_c = gr.Slider(8, cap, value=max_new, step=8, label="Max tokens") seed = gr.Number(value=0, precision=0, minimum=0, label="Seed") rep_c = gr.Slider(1.0, 1.5, value=rep, step=0.05, label="Repetition penalty") raw = gr.Checkbox(value=False, label="Raw prompt (no chat template)") return mode, temperature, max_new_c, seed, rep_c, raw def trace_box(): """Collapsed JSON summary plus a download of the full trace.""" with gr.Accordion("Trace", open=False): summary = gr.JSON(show_label=False) download = gr.DownloadButton("Download", visible=False, size="sm") return summary, download def slider_update(n: int, value: int) -> dict: return gr.update(minimum=0, maximum=max(n - 1, 1), value=max(0, min(value, max(n - 1, 0)))) # --------------------------------------------------------------------------- # ① Contrastive # --------------------------------------------------------------------------- def run_contrastive(family, method, prompt, context, reverse, alpha, beta, tau, bucket, norm, mode, temperature, max_new, seed, rep, raw): P = dict(method=method, prompt=prompt, context=context, reverse_system=reverse, alpha=alpha, beta=beta, tau=tau, bucket=bucket, apply_norm=norm, mode=mode, temperature=temperature, max_new_tokens=max_new, seed=seed, rep=rep, raw=raw) return call_gpu("contrastive", family, P) def render_contrastive(trace): if not trace: return ("", gr.update(value=[]), gr.update(value=[]), gr.update(value=[], visible=False), slider_update(1, 0), inspector.empty(), gr.update(value="", visible=False), None, gr.update(visible=False)) runs = trace["runs"] div = tokens.divergence(runs["baseline"], runs["method"]) steps = runs["method"]["steps"] first = next((s["i"] for s in steps if s["changed"]), 0) third = runs.get("third") base_label, meth_label, third_label = tokens.labels(trace) return ( parallel_viz.cards(trace), gr.update(value=tokens.strip_plain(runs["baseline"], div), label=base_label), gr.update(value=tokens.strip_steps(runs["method"], tokens.CHANGED_LABEL["contrastive"]), label=meth_label), gr.update(value=tokens.strip_plain(third) if third else [], label=third_label or "", visible=bool(third)), slider_update(len(steps), first), inspector.contrastive_step(trace, first), gr.update(value=inspector.dola_overview(trace, first) if trace["method"] == "dola" else "", visible=trace["method"] == "dola"), compact(trace), gr.update(value=trace_file(trace), visible=True), ) def step_contrastive(trace, i): if not trace: return inspector.empty(), gr.update() i = int(i or 0) dola = gr.update(value=inspector.dola_overview(trace, i)) if trace["method"] == "dola" else gr.update() return inspector.contrastive_step(trace, i), dola def replay_steps(trace, label): if not trace: return value = tokens.strip_steps(trace["runs"]["method"], label) for i in range(1, len(value) + 1): yield gr.update(value=value[:i]) time.sleep(0.035) def replay_contrastive(trace): yield from replay_steps(trace, tokens.CHANGED_LABEL["contrastive"]) def contrastive_method_changed(method, alpha, beta): return ( gr.update(visible=method == "cad"), gr.update(visible=method == "rose"), gr.update(visible=method != "dola"), gr.update(visible=method == "cd"), gr.update(visible=method == "dola"), gr.update(visible=method == "dola"), gr.update(value=1.2 if method == "dola" else 1.0), overview.method_card(method, {"alpha": alpha, "beta": beta}), ) def build_contrastive(family): ex = EX.CONTRASTIVE[0] with gr.Row(equal_height=False): with gr.Column(scale=4, min_width=330): method = gr.Radio([("CD", "cd"), ("CAD", "cad"), ("ROSE", "rose"), ("DoLa", "dola")], value=ex["method"], label="Method") prompt = gr.Textbox(ex["prompt"], lines=3, label="Prompt") context = gr.Textbox(ex["context"], lines=3, label="Context (z⁺ only)") reverse = gr.Textbox(DEFAULT_REVERSE, lines=2, label="Reverse system prompt (z⁻)", visible=False) alpha = gr.Slider(0, 3, value=ex["alpha"], step=0.05, label="α · contrast strength") beta = gr.Slider(0, 0.5, value=ex["beta"], step=0.01, label="β · plausibility cutoff") tau = gr.Slider(0.25, 2.0, value=1.0, step=0.05, label="τ · amateur temperature", visible=False) bucket = gr.Radio([("upper", "high"), ("lower", "low")], value="high", label="Candidate layers", visible=False) norm = gr.Checkbox(True, label="Final norm on early exits", visible=False) mode, temperature, max_new, seed, rep, raw = decoding_controls(48, 128) run = gr.Button("Run", variant="primary") with gr.Column(scale=7, min_width=420): note = gr.Markdown(overview.method_card(ex["method"], ex), latex_delimiters=LATEX) cards = html() base_ht = strip_box("Baseline", tokens.COLORS_BASELINE) meth_ht = strip_box("Method", tokens.COLORS_CONTRASTIVE, legend=True) third_ht = strip_box("z⁻ alone", tokens.COLORS_BASELINE) with gr.Row(equal_height=True): step = gr.Slider(0, 1, value=0, step=1, label="Step", scale=6) replay = gr.Button("▶ Replay", scale=1, min_width=90) insp = html(inspector.empty()) dola = html(visible=False) summary, download = trace_box() inputs = [method, prompt, context, reverse, alpha, beta] gr.Examples( examples=[[e["method"], e["prompt"], e.get("context", ""), e.get("reverse_system", DEFAULT_REVERSE), e["alpha"], e["beta"]] for e in EX.CONTRASTIVE], inputs=inputs, example_labels=[e["label"] for e in EX.CONTRASTIVE], label="Examples", ) with gr.Accordion("Papers", open=False): html(overview.papers_html("contrastive")) state = gr.State(None) outputs = [cards, base_ht, meth_ht, third_ht, step, insp, dola, summary, download] method.change(contrastive_method_changed, [method, alpha, beta], [context, reverse, alpha, tau, bucket, norm, rep, note], queue=False) for s in (alpha, beta): s.change(lambda m, a, b: overview.method_card(m, {"alpha": a, "beta": b}), [method, alpha, beta], note, queue=False) run.click(run_contrastive, [family, method, prompt, context, reverse, alpha, beta, tau, bucket, norm, mode, temperature, max_new, seed, rep, raw], state, concurrency_limit=4, concurrency_id="gpu", api_visibility="private" ).success(render_contrastive, state, outputs, queue=False) step.change(step_contrastive, [state, step], [insp, dola], queue=False, show_progress="hidden") meth_ht.select(select_to_step, None, step, queue=False) replay.click(replay_contrastive, state, meth_ht, concurrency_limit=None, api_visibility="private") return state, render_contrastive, outputs # --------------------------------------------------------------------------- # ② Guided # --------------------------------------------------------------------------- def run_guided(family, method, prompt, attribute, target, topic, lam, k, lookahead, pattern, top_k, mode, temperature, max_new, seed, rep, raw): P = dict(method=method, prompt=prompt, attribute=attribute, target=target, topic=topic, lam=lam, k=k, lookahead=lookahead, pattern=pattern, top_k=top_k, mode=mode, temperature=temperature, max_new_tokens=max_new, seed=seed, rep=rep, raw=raw) return call_gpu("guided", family, P) def render_guided(trace): if not trace: return ("", gr.update(value=[]), gr.update(value=[]), slider_update(1, 0), inspector.empty(), gr.update(value=None), None, gr.update(visible=False)) runs = trace["runs"] kind = trace["method"] steps = runs["method"]["steps"] first = next((s["i"] for s in steps if s["changed"]), 0) div = tokens.divergence(runs["baseline"], runs["method"]) insp = inspector.classifier_step(trace, first) if kind == "classifier" else inspector.regex_step(trace, first) base_label, meth_label, _ = tokens.labels(trace) return ( parallel_viz.cards(trace), gr.update(value=tokens.strip_plain(runs["baseline"], div), label=base_label), gr.update(value=tokens.strip_steps(runs["method"], tokens.CHANGED_LABEL[kind]), label=meth_label, color_map={tokens.CHANGED_LABEL[kind]: tokens.COLOR_MAP[tokens.CHANGED_LABEL[kind]]}), slider_update(len(steps), first), insp, gr.update(value=plots.trajectory(trace), visible=kind == "classifier", y_title="P(target)" if trace["summary"].get("attribute") == "sentiment" else "similarity"), compact(trace), gr.update(value=trace_file(trace), visible=True), ) def step_guided(trace, i): if not trace: return inspector.empty() i = int(i or 0) return inspector.classifier_step(trace, i) if trace["method"] == "classifier" else inspector.regex_step(trace, i) def replay_guided(trace): if trace: yield from replay_steps(trace, tokens.CHANGED_LABEL[trace["method"]]) def guided_method_changed(method, lam, pattern): clf = method == "classifier" return ( *(gr.update(visible=clf) for _ in range(5)), # attribute, lam, k, lookahead, attribute row helpers *(gr.update(visible=not clf) for _ in range(3)), # preset, pattern, top_k gr.update(visible=clf), # trajectory plot overview.method_card(method, {"lam": lam}), ) def build_guided(family): ex = EX.GUIDED[0] with gr.Row(equal_height=False): with gr.Column(scale=4, min_width=330): method = gr.Radio([("Classifier", "classifier"), ("Regex", "regex")], value="classifier", label="Method") prompt = gr.Textbox(ex["prompt"], lines=3, label="Prompt") with gr.Group() as clf_group: attribute = gr.Radio([("sentiment", "sentiment"), ("topic", "topic")], value="sentiment", label="Guide by") with gr.Row(): target = gr.Radio([("positive", "positive"), ("negative", "negative")], value="positive", label="Target") topic = gr.Textbox("astronomy", label="Topic", visible=False) lam = gr.Slider(0, 50, value=3.0, step=0.5, label="λ · guidance weight") k = gr.Slider(2, 40, value=10, step=1, label="k · candidates") lookahead = gr.Slider(0, 6, value=0, step=1, label="L · lookahead tokens") preset = gr.Dropdown(list(EX.REGEX_PRESETS), value="ISO date", label="Preset", visible=False) pattern = gr.Textbox(EX.REGEX_PRESETS["ISO date"], label="Pattern", visible=False) top_k = gr.Slider(8, 256, value=64, step=8, label="K · tokens checked", visible=False) mode, temperature, max_new, seed, rep, raw = decoding_controls(40, 96) run = gr.Button("Run", variant="primary") with gr.Column(scale=7, min_width=420): note = gr.Markdown(overview.method_card("classifier", {"lam": 3.0}), latex_delimiters=LATEX) cards = html() base_ht = strip_box("Baseline", tokens.COLORS_BASELINE) meth_ht = strip_box("Method", tokens.COLORS_GUIDED, legend=True) with gr.Row(equal_height=True): step = gr.Slider(0, 1, value=0, step=1, label="Step", scale=6) replay = gr.Button("▶ Replay", scale=1, min_width=90) insp = html(inspector.empty()) traj = gr.LinePlot(None, x="step", y="score", color="run", title="Score of the text so far", height=220) summary, download = trace_box() def fill(e): pat = EX.REGEX_PRESETS.get(e.get("preset", "ISO date"), "") return [e["method"], e["prompt"], e.get("attribute", "sentiment"), e.get("target", "positive"), e.get("topic", "astronomy"), e.get("lam", 3.0), e.get("k", 10), e.get("lookahead", 0), e.get("preset", "ISO date"), pat] gr.Examples(examples=[fill(e) for e in EX.GUIDED], inputs=[method, prompt, attribute, target, topic, lam, k, lookahead, preset, pattern], example_labels=[e["label"] for e in EX.GUIDED], label="Examples") with gr.Accordion("Papers", open=False): html(overview.papers_html("guided")) state = gr.State(None) outputs = [cards, base_ht, meth_ht, step, insp, traj, summary, download] method.change(guided_method_changed, [method, lam, pattern], [clf_group, lam, k, lookahead, attribute, preset, pattern, top_k, traj, note], queue=False) attribute.change(lambda a: (gr.update(visible=a == "sentiment"), gr.update(visible=a == "topic"), gr.update(value=3.0 if a == "sentiment" else 20.0)), attribute, [target, topic, lam], queue=False) lam.change(lambda m, v: overview.method_card(m, {"lam": v}), [method, lam], note, queue=False) preset.change(lambda p, cur: gr.update(value=EX.REGEX_PRESETS.get(p) or cur), [preset, pattern], pattern, queue=False) run.click(run_guided, [family, method, prompt, attribute, target, topic, lam, k, lookahead, pattern, top_k, mode, temperature, max_new, seed, rep, raw], state, concurrency_limit=4, concurrency_id="gpu", api_visibility="private" ).success(render_guided, state, outputs, queue=False) step.change(step_guided, [state, step], insp, queue=False, show_progress="hidden") meth_ht.select(select_to_step, None, step, queue=False) replay.click(replay_guided, state, meth_ht, concurrency_limit=None, api_visibility="private") return state, render_guided, outputs # --------------------------------------------------------------------------- # ③ Parallel # --------------------------------------------------------------------------- def run_parallel(family, method, prompt, gamma, mode, temperature, num_pred, ngram_max, ngram_min, block, init, max_new, seed, raw): P = dict(method=method, prompt=prompt, gamma=gamma, mode=mode, temperature=temperature, num_pred=num_pred, ngram_max=ngram_max, ngram_min=ngram_min, block=block, init=init, max_new_tokens=max_new, seed=seed, raw=raw) return call_gpu("parallel", family, P) def first_interesting_iter(trace) -> int: for it in trace["runs"]["method"].get("iters", []): if any(d[5] == "rej" for d in it["draft"]): return it["k"] return 0 def render_parallel(trace): if not trace: return ("", gr.update(value=[]), gr.update(value=[]), slider_update(1, 0), "", "", gr.update(value=None), gr.update(), gr.update(), None, gr.update(visible=False)) runs = trace["runs"] s = trace["summary"] iters = runs["method"].get("iters", []) k = first_interesting_iter(trace) spec = trace["method"] == "speculative" div = s.get("first_divergence") base_label, meth_label, _ = tokens.labels(trace) return ( parallel_viz.cards(trace), gr.update(value=tokens.strip_plain(runs["baseline"], div), label=base_label), gr.update(value=tokens.strip_kinds(runs["method"]), label=meth_label), slider_update(len(iters), k), parallel_viz.timeline(trace, k), parallel_viz.iteration_detail(trace, k), gr.update(value=plots.speedup_curves(s if spec else None)), gr.update(value=min(max(s.get("alpha_hat", 0.7), 0.0), 1.0) if spec else 0.7), gr.update(value=min(max(s.get("c_hat", 0.5), 0.0), 1.5) if spec else 0.5), compact(trace), gr.update(value=trace_file(trace), visible=True), ) def step_parallel(trace, k): if not trace: return "", "" k = int(k or 0) return parallel_viz.timeline(trace, k), parallel_viz.iteration_detail(trace, k) def select_to_iter(trace, evt: gr.SelectData): idx = tokens.select_index(evt) if not trace or idx is None: return gr.update() tok_iter = trace["runs"]["method"].get("tok_iter", []) return gr.update(value=tok_iter[idx]) if 0 <= idx < len(tok_iter) else gr.update() def replay_parallel(trace): if not trace: return run = trace["runs"]["method"] value = tokens.strip_kinds(run) tok_iter = run.get("tok_iter", []) n_iters = len(run.get("iters", [])) for k in range(n_iters): n_tok = sum(1 for t in tok_iter if t <= k) yield gr.update(value=value[:n_tok]), parallel_viz.timeline(trace, k, upto=k + 1) time.sleep(0.15) yield gr.update(value=value), parallel_viz.timeline(trace, None) def parallel_method_changed(method): spec, pld, jac = method == "speculative", method == "pld", method == "jacobi" return ( gr.update(visible=spec), gr.update(visible=spec), gr.update(visible=spec), gr.update(visible=pld), gr.update(visible=pld), gr.update(visible=pld), gr.update(visible=jac), gr.update(visible=jac), gr.update(visible=spec), overview.method_card(method, {}), ) SPEED_NOTE = ( "At batch size 1 a forward pass costs about the same whatever the model size; speed tracks the number of layers. " "Tokens per target pass is the hardware-independent gain, and the helper's own passes eat into wall-clock time." ) def build_parallel(family): ex = EX.PARALLEL[0] with gr.Row(equal_height=False): with gr.Column(scale=4, min_width=330): method = gr.Radio([("Speculative", "speculative"), ("Prompt lookup", "pld"), ("Jacobi", "jacobi")], value="speculative", label="Method") prompt = gr.Textbox(ex["prompt"], lines=3, label="Prompt") gamma = gr.Slider(1, 10, value=ex["gamma"], step=1, label="γ · draft length") mode = gr.Radio([("greedy", "greedy"), ("sampling", "sampling")], value="greedy", label="Verification") temperature = gr.Slider(0.1, 1.5, value=0.8, step=0.05, label="Temperature") num_pred = gr.Slider(1, 20, value=10, step=1, label="k · tokens copied", visible=False) ngram_max = gr.Slider(1, 5, value=3, step=1, label="Max n-gram", visible=False) ngram_min = gr.Slider(1, 3, value=1, step=1, label="Min n-gram", visible=False) block = gr.Slider(2, 16, value=8, step=1, label="m · block size", visible=False) init = gr.Radio([("repeat", "repeat"), ("random", "random")], value="repeat", label="Initial guess", visible=False) with gr.Accordion("Settings", open=False): max_new = gr.Slider(16, 256, value=96, step=8, label="Max tokens") seed = gr.Number(value=0, precision=0, minimum=0, label="Seed") raw = gr.Checkbox(value=False, label="Raw prompt (no chat template)") run = gr.Button("Run", variant="primary") with gr.Column(scale=7, min_width=420): note = gr.Markdown(overview.method_card("speculative", ex), latex_delimiters=LATEX) cards = html() base_ht = strip_box("Baseline", tokens.COLORS_BASELINE) meth_ht = strip_box("Method", tokens.COLORS_PARALLEL, legend=True) with gr.Row(equal_height=True): step = gr.Slider(0, 1, value=0, step=1, label="Target pass", scale=6) replay = gr.Button("▶ Replay", scale=1, min_width=90) detail = html() timeline = html() with gr.Accordion("Speedup model", open=False) as whatif: gr.Markdown(SPEED_NOTE) curve = gr.LinePlot(None, x="γ (draft length)", y="speedup", color="series", title="Predicted speedup vs γ", height=230) with gr.Row(): w_alpha = gr.Slider(0.0, 1.0, value=0.7, step=0.01, label="α · acceptance") w_c = gr.Slider(0.0, 1.5, value=0.5, step=0.01, label="c · draft cost") summary, download = trace_box() def fill(e): return [e["method"], e["prompt"], e.get("gamma", 4), e.get("mode", "greedy"), e.get("temperature", 0.8), e.get("num_pred", 10), e.get("block", 8)] gr.Examples(examples=[fill(e) for e in EX.PARALLEL], inputs=[method, prompt, gamma, mode, temperature, num_pred, block], example_labels=[e["label"] for e in EX.PARALLEL], label="Examples") with gr.Accordion("Papers", open=False): html(overview.papers_html("parallel")) state = gr.State(None) outputs = [cards, base_ht, meth_ht, step, timeline, detail, curve, w_alpha, w_c, summary, download] method.change(parallel_method_changed, method, [gamma, mode, temperature, num_pred, ngram_max, ngram_min, block, init, whatif, note], queue=False) run.click(run_parallel, [family, method, prompt, gamma, mode, temperature, num_pred, ngram_max, ngram_min, block, init, max_new, seed, raw], state, concurrency_limit=4, concurrency_id="gpu", api_visibility="private" ).success(render_parallel, state, outputs, queue=False) step.change(step_parallel, [state, step], [timeline, detail], queue=False, show_progress="hidden") meth_ht.select(select_to_iter, state, step, queue=False) # .release (not .change): render_parallel sets these sliders to the measured values, and programmatic # updates must not redraw the what-if curve with half-updated inputs. for s in (w_alpha, w_c): s.release(lambda t, a, c: gr.update(value=plots.speedup_curves(t["summary"] if t and t["method"] == "speculative" else None, a, c)), [state, w_alpha, w_c], curve, queue=False, show_progress="hidden") replay.click(replay_parallel, state, [meth_ht, timeline], concurrency_limit=None, api_visibility="private") return state, render_parallel, outputs # --------------------------------------------------------------------------- # Page # --------------------------------------------------------------------------- def trace_api(paradigm: str, family: str, params_json: str) -> dict: """Run one decoding method plus its baseline and return the full trace.""" return call_gpu(paradigm, family, json.loads(params_json or "{}")) with gr.Blocks(title="Beyond Tokens · Decoding Playground", fill_width=True) as demo: with gr.Row(equal_height=True): with gr.Column(scale=3): html(overview.HEADER_HTML) with gr.Column(scale=2, min_width=280): family = gr.Dropdown(FAMILY_CHOICES, value=DEFAULT_FAMILY, label="Model family") if models.LOAD_ERRORS: gr.Markdown("Unavailable: " + "; ".join(models.LOAD_ERRORS) + "") with gr.Tabs(): with gr.Tab("Overview"): html(overview.FIGURE_SVG) html(overview.HOW_TO_HTML) html(overview.methods_html()) with gr.Accordion("📚 Cite the survey", open=True, elem_classes=["dd-cite"]): html(f'
{overview.CITATION_TEXT}
') gr.Code(overview.short_bibtex(), language=None, interactive=False, show_label=False, show_line_numbers=False) html(overview.LICENSES_HTML) with gr.Tab("① Contrastive"): c_state, c_render, c_outputs = build_contrastive(family) with gr.Tab("② Guided"): g_state, g_render, g_outputs = build_guided(family) with gr.Tab("③ Parallel"): p_state, p_render, p_outputs = build_parallel(family) with gr.Tab("Papers"): rows = overview.papers_rows() gr.Markdown(f"{len(rows)} papers from [Awesome-LLM-Decoding]({overview.GITHUB}).") gr.Dataframe(value=rows, headers=["Section", "Paper", "Abbr.", "Venue", "Year", "Model", "Code"], datatype=["str", "markdown", "str", "str", "str", "str", "markdown"], show_search="filter", wrap=True, max_height=680, interactive=False) gr.api(trace_api, api_name="trace", api_visibility="undocumented", concurrency_limit=4, concurrency_id="gpu") for paradigm, st, render, outs in (("contrastive", c_state, c_render, c_outputs), ("guided", g_state, g_render, g_outputs), ("parallel", p_state, p_render, p_outputs)): demo.load(lambda p=paradigm: load_gallery(p), None, st, queue=False).then(render, st, outs, queue=False) demo.queue(max_size=48, default_concurrency_limit=1) if __name__ == "__main__": demo.launch(theme=THEME, css=CSS)