dream-customs / app.py
ADJCJH's picture
Fix Space server binding
a35572f verified
Raw
History Blame
4.79 kB
import os
import gradio as gr
from gradio_client import utils as gradio_client_utils
from dream_customs.app_logic import run_customs_once
_ORIGINAL_SCHEMA_TO_TYPE = gradio_client_utils._json_schema_to_python_type
def _json_schema_to_python_type(schema, defs):
# Gradio 4.44 can pass JSON Schema booleans here on newer dependency sets.
if isinstance(schema, bool):
return "Any" if schema else "None"
return _ORIGINAL_SCHEMA_TO_TYPE(schema, defs)
gradio_client_utils._json_schema_to_python_type = _json_schema_to_python_type
CSS = """
body { background: #f6f1e7; }
.gradio-container {
color: #17272f;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
.dc-shell {
max-width: 1180px;
margin: 0 auto;
}
.dc-title h1 {
font-size: clamp(30px, 5vw, 56px);
line-height: 1;
margin-bottom: 4px;
}
.dc-title p {
color: #49626b;
font-size: 16px;
margin-top: 0;
}
.dc-stamp button {
background: #17313b !important;
border: 0 !important;
color: #fff8ed !important;
font-weight: 800 !important;
}
textarea, input, select {
font-size: 16px !important;
}
@media (max-width: 760px) {
.dc-title h1 { font-size: 34px; }
.dc-title p { font-size: 14px; }
}
"""
def build_demo() -> gr.Blocks:
with gr.Blocks(css=CSS, title="Dream Customs") as demo:
with gr.Column(elem_classes=["dc-shell"]):
gr.Markdown(
"""
# Dream Customs / 梦境海关
夜间来访者入境申报处
""",
elem_classes=["dc-title"],
)
with gr.Row():
with gr.Column(scale=5):
dream_text = gr.Textbox(
label="Dream declaration",
lines=8,
value="我梦见一部迟到的电梯,按钮都融化了,我一直到不了 14 楼。",
)
with gr.Row():
image_input = gr.Image(label="Image evidence", type="filepath")
audio_input = gr.Audio(label="Voice evidence", type="filepath")
mood = gr.Dropdown(
label="Current weather",
choices=["foggy", "anxious", "curious", "tired", "restless", "calm"],
value="foggy",
)
answers = gr.Textbox(
label="Answers to the clerk",
lines=4,
value="我想和它结盟,但今天只想完成一件很小的事。",
)
with gr.Row():
text_backend = gr.Radio(
label="Text engine",
choices=["demo", "ollama"],
value="demo",
)
vision_backend = gr.Radio(
label="Vision engine",
choices=["demo", "ollama"],
value="demo",
)
submit = gr.Button("Stamp clearance", elem_classes=["dc-stamp"])
with gr.Column(scale=6):
negotiation = gr.Textbox(label="Customs questions", lines=7)
pact_text = gr.Textbox(label="Pact manifest", lines=12)
pact_html = gr.HTML(label="Today's pact card")
debug_json = gr.Code(label="Debug manifest", language="json")
submit.click(
run_customs_once,
inputs=[dream_text, image_input, audio_input, mood, answers, text_backend, vision_backend],
outputs=[negotiation, pact_text, pact_html, debug_json],
)
gr.Examples(
examples=[
[
"梦见一间便利店漂在海上,收银员让我用旧日历付款。",
"curious",
"我想知道它到底在保护什么。",
],
[
"I found a tiny border checkpoint inside my pillow. The officer stamped my hand with blue ink.",
"restless",
"I want a small action that makes tomorrow less loud.",
],
],
inputs=[dream_text, mood, answers],
)
return demo
demo = build_demo()
if __name__ == "__main__":
server_name = os.getenv("GRADIO_SERVER_NAME", "0.0.0.0")
server_port = int(os.getenv("GRADIO_SERVER_PORT", "7860"))
demo.launch(server_name=server_name, server_port=server_port, show_api=False, show_error=True)