workbench / app.py
GitHub Actions
Initial ZeroGPU deployment with spaces shim
7f9dfed
Raw
History Blame Contribute Delete
2.83 kB
from __future__ import annotations
from typing import cast
import gradio as gr
from core.app_logging import configure_app_logging
from core.deployment import current_policy
from models.model_catalog import load_model_catalog
from ui.agent_tab import build_agent_tab
from ui.chat_tab import build_chat_tab
from ui.dataset_tab import build_dataset_tab
from ui.export_tab import build_export_tab
from ui.notes_tab import build_notes_tab
from ui.status_tab import build_status_tab
from ui.traces_tab import build_traces_tab
from ui.train_tab import build_train_tab
from ui.vision_tab import build_vision_tab
from ui.vllm_tab import build_vllm_tab
APP_THEME = gr.themes.Soft(primary_hue="teal", neutral_hue="slate")
APP_CSS = """
.app-title {
margin-bottom: 0.25rem;
}
.gradio-container {
max-width: 1180px !important;
}
.tabs {
overflow-x: auto;
}
button {
min-height: 2.5rem;
}
textarea,
input,
.wrap {
max-width: 100%;
}
@media (max-width: 720px) {
.gradio-container {
padding-left: 0.75rem !important;
padding-right: 0.75rem !important;
}
.app-title h1 {
font-size: 1.55rem;
line-height: 1.2;
}
}
"""
def build_app() -> gr.Blocks:
configure_app_logging()
policy = current_policy()
catalog = load_model_catalog("config/models.yaml")
with gr.Blocks(title="OpenBMB Local AI Workbench", analytics_enabled=False) as demo:
gr.Markdown(
"""
# OpenBMB Local AI Workbench
Real small-model experimentation for Gradio + Hugging Face Spaces.
""",
elem_classes=["app-title"],
)
if policy.is_space:
gr.Markdown(
"Deployment mode: Space. Placeholder and demo inference are disabled; "
"select a configured real backend before running model calls."
)
with gr.Tabs():
with gr.Tab("Chat"):
build_chat_tab(catalog, policy)
with gr.Tab("Vision"):
build_vision_tab(catalog, policy)
with gr.Tab("Dataset"):
build_dataset_tab()
with gr.Tab("Train"):
build_train_tab()
with gr.Tab("vLLM"):
build_vllm_tab(catalog)
with gr.Tab("Export"):
build_export_tab(catalog)
with gr.Tab("Field Notes"):
build_notes_tab(catalog)
with gr.Tab("Traces"):
build_traces_tab()
with gr.Tab("Agent"):
build_agent_tab()
with gr.Tab("Status"):
build_status_tab(catalog, policy)
return cast(gr.Blocks, demo)
if __name__ == "__main__":
build_app().launch(
server_port=7860,
share=False,
theme=APP_THEME,
css=APP_CSS,
mcp_server=True,
)