Nymbo commited on
Commit
e858ec5
·
verified ·
1 Parent(s): 007a6bb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -94
app.py CHANGED
@@ -557,15 +557,15 @@ def Generate_Speech( # <-- MCP tool #4 (Generate Speech)
557
  fetch_interface = gr.Interface(
558
  fn=Fetch_Webpage, # connect the function to the UI
559
  inputs=[
560
- gr.Textbox(label="URL", placeholder="https://example.com/article"),
561
- gr.Dropdown(label="Verbosity", choices=["Brief", "Standard", "Full"], value="Standard"),
562
- gr.Checkbox(value=True, label="Include Metadata"),
563
- gr.Checkbox(value=True, label="Include Main Text"),
564
- gr.Checkbox(value=True, label="Include Links"),
565
- gr.Slider(400, 12000, value=3000, step=100, label="Max Characters (body text)"),
566
- gr.Slider(0, 100, value=20, step=1, label="Max Links"),
567
  ],
568
- outputs=gr.Markdown(label="Extracted Summary"),
569
  title="Fetch Webpage",
570
  description=(
571
  "<div style=\"text-align:center\">Extract title, key metadata, readable text, and links from webpages. No noisy HTML.</div>"
@@ -584,14 +584,14 @@ fetch_interface = gr.Interface(
584
  concise_interface = gr.Interface(
585
  fn=Search_DuckDuckGo,
586
  inputs=[
587
- gr.Textbox(label="Query", placeholder="topic OR site:example.com"),
588
- gr.Slider(minimum=1, maximum=20, value=5, step=1, label="Max results"),
589
- gr.Checkbox(value=False, label="Include snippets (adds tokens)"),
590
- gr.Slider(minimum=20, maximum=200, value=80, step=5, label="Max snippet chars"),
591
- gr.Checkbox(value=True, label="Dedupe by domain"),
592
- gr.Slider(minimum=20, maximum=120, value=80, step=5, label="Max title chars"),
593
  ],
594
- outputs=gr.Textbox(label="Results (JSONL)", interactive=False),
595
  title="DuckDuckGo Search",
596
  description=(
597
  "<div style=\"text-align:center\">Very concise web search to avoid unnecessary context. Emits JSONL with short keys (t,u[,s]). Defaults avoid snippets and duplicate domains.</div>"
@@ -611,8 +611,8 @@ concise_interface = gr.Interface(
611
  # --- Execute Python tab (simple code interpreter) ---
612
  code_interface = gr.Interface(
613
  fn=Execute_Python,
614
- inputs=gr.Code(label="Python Code", language="python"),
615
- outputs=gr.Textbox(label="Output"),
616
  title="Python Code Executor",
617
  description=(
618
  "<div style=\"text-align:center\">Execute Python code and see the output.</div>"
@@ -628,67 +628,15 @@ code_interface = gr.Interface(
628
  fill_width=True,
629
  )
630
 
631
- CSS_STYLES = """
632
- .gradio-container h1 {
633
- text-align: center;
634
- /* Ensure main title appears first, then our two subtitle lines */
635
- display: grid;
636
- justify-items: center;
637
- }
638
- /* Place bold tools list on line 2, normal auth note on line 3 (below title) */
639
- .gradio-container h1::before {
640
- grid-row: 2;
641
- content: "Fetch Webpage | Search DuckDuckGo | Code Interpreter | Kokoro TTS | Image Generation | Video Generation";
642
- display: block;
643
- font-size: 1rem;
644
- font-weight: 700;
645
- opacity: 0.9;
646
- margin-top: 6px;
647
- white-space: pre-wrap;
648
- }
649
- .gradio-container h1::after {
650
- grid-row: 3;
651
- content: "Authentication is optional but Image/Video Generation require a `HF_READ_TOKEN` in env variables. They are hidden otherwise.";
652
- display: block;
653
- font-size: 1rem;
654
- font-weight: 400;
655
- opacity: 0.9;
656
- margin-top: 2px;
657
- white-space: pre-wrap;
658
- }
659
-
660
- /* Remove inside tab panels so it doesn't duplicate under each tool title */
661
- .gradio-container [role=\"tabpanel\"] h1::before,
662
- .gradio-container [role=\"tabpanel\"] h1::after {
663
- content: none !important;
664
- }
665
-
666
- /* Force full width for the container and all interfaces */
667
- .gradio-container,
668
- .gradio-container > div,
669
- .gradio-container .tab-nav,
670
- .gradio-container .tabitem,
671
- .gradio-container .interface-wrapper {
672
- width: 100% !important;
673
- max-width: none !important;
674
- }
675
-
676
- /* Ensure tab content fills available width */
677
- .gradio-container .tabitem > div {
678
- width: 100% !important;
679
- max-width: none !important;
680
- }
681
- """
682
-
683
  # --- Kokoro TTS tab (text to speech) ---
684
  kokoro_interface = gr.Interface(
685
  fn=Generate_Speech,
686
  inputs=[
687
- gr.Textbox(label="Text", placeholder="Type text to synthesize…", lines=4),
688
- gr.Slider(minimum=0.5, maximum=2.0, value=1.0, step=0.1, label="Speed"),
689
- gr.Textbox(label="Voice", value="af_heart", placeholder="e.g., af_heart"),
690
  ],
691
- outputs=gr.Audio(label="Audio", type="numpy"),
692
  title="Kokoro TTS",
693
  description=(
694
  "<div style=\"text-align:center\">Generate English speech with Kokoro-82M. 30 second max output. Runs on CPU or CUDA if available.</div>"
@@ -793,8 +741,8 @@ def Generate_Image( # <-- MCP tool #5 (Generate Image)
793
  image_generation_interface = gr.Interface(
794
  fn=Generate_Image,
795
  inputs=[
796
- gr.Textbox(label="Prompt", placeholder="Enter a prompt", lines=2),
797
- gr.Textbox(label="Model", value="black-forest-labs/FLUX.1-Krea-dev", placeholder="creator/model-name"),
798
  gr.Textbox(
799
  label="Negative Prompt",
800
  value=(
@@ -803,17 +751,19 @@ image_generation_interface = gr.Interface(
803
  "mutated, ugly, disgusting, blurry, amputation, misspellings, typos"
804
  ),
805
  lines=2,
 
 
806
  ),
807
- gr.Slider(minimum=1, maximum=100, value=35, step=1, label="Steps"),
808
- gr.Slider(minimum=1.0, maximum=20.0, value=7.0, step=0.1, label="CFG Scale"),
809
  gr.Radio(label="Sampler", value="DPM++ 2M Karras", choices=[
810
  "DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"
811
- ]),
812
- gr.Slider(minimum=-1, maximum=1_000_000_000, value=-1, step=1, label="Seed (-1 = random)"),
813
- gr.Slider(minimum=64, maximum=1216, value=1024, step=32, label="Width"),
814
- gr.Slider(minimum=64, maximum=1216, value=1024, step=32, label="Height"),
815
  ],
816
- outputs=gr.Image(label="Generated Image"),
817
  title="Image Generation",
818
  description=(
819
  "<div style=\"text-align:center\">Generate images via Hugging Face Inference. "
@@ -981,18 +931,18 @@ def Generate_Video( # <-- MCP tool #6 (Generate Video)
981
  video_generation_interface = gr.Interface(
982
  fn=Generate_Video,
983
  inputs=[
984
- gr.Textbox(label="Prompt", placeholder="Enter a prompt for the video", lines=2),
985
- gr.Textbox(label="Model", value="Wan-AI/Wan2.2-T2V-A14B", placeholder="creator/model-name"),
986
- gr.Textbox(label="Negative Prompt", value="", lines=2),
987
- gr.Slider(minimum=1, maximum=100, value=25, step=1, label="Steps"),
988
- gr.Slider(minimum=1.0, maximum=20.0, value=3.5, step=0.1, label="CFG Scale"),
989
- gr.Slider(minimum=-1, maximum=1_000_000_000, value=-1, step=1, label="Seed (-1 = random)"),
990
- gr.Slider(minimum=64, maximum=1920, value=768, step=8, label="Width"),
991
- gr.Slider(minimum=64, maximum=1920, value=768, step=8, label="Height"),
992
- gr.Slider(minimum=4, maximum=60, value=24, step=1, label="FPS"),
993
- gr.Slider(minimum=1.0, maximum=10.0, value=4.0, step=0.5, label="Duration (s)"),
994
  ],
995
- outputs=gr.Video(label="Generated Video"),
996
  title="Video Generation",
997
  description=(
998
  "<div style=\"text-align:center\">Generate short videos via Hugging Face Inference Providers. "
@@ -1032,7 +982,6 @@ demo = gr.TabbedInterface(
1032
  tab_names=_tab_names,
1033
  title="Tools MCP",
1034
  theme="Nymbo/Nymbo_Theme",
1035
- css=CSS_STYLES,
1036
  )
1037
 
1038
  # Launch the UI and expose all functions as MCP tools in one server
 
557
  fetch_interface = gr.Interface(
558
  fn=Fetch_Webpage, # connect the function to the UI
559
  inputs=[
560
+ gr.Textbox(label="URL", placeholder="https://example.com/article", scale=2, min_width=300),
561
+ gr.Dropdown(label="Verbosity", choices=["Brief", "Standard", "Full"], value="Standard", scale=1, min_width=150),
562
+ gr.Checkbox(value=True, label="Include Metadata", scale=1, min_width=120),
563
+ gr.Checkbox(value=True, label="Include Main Text", scale=1, min_width=120),
564
+ gr.Checkbox(value=True, label="Include Links", scale=1, min_width=120),
565
+ gr.Slider(400, 12000, value=3000, step=100, label="Max Characters (body text)", scale=2, min_width=200),
566
+ gr.Slider(0, 100, value=20, step=1, label="Max Links", scale=1, min_width=150),
567
  ],
568
+ outputs=gr.Markdown(label="Extracted Summary", scale=1),
569
  title="Fetch Webpage",
570
  description=(
571
  "<div style=\"text-align:center\">Extract title, key metadata, readable text, and links from webpages. No noisy HTML.</div>"
 
584
  concise_interface = gr.Interface(
585
  fn=Search_DuckDuckGo,
586
  inputs=[
587
+ gr.Textbox(label="Query", placeholder="topic OR site:example.com", scale=2, min_width=300),
588
+ gr.Slider(minimum=1, maximum=20, value=5, step=1, label="Max results", scale=1, min_width=150),
589
+ gr.Checkbox(value=False, label="Include snippets (adds tokens)", scale=1, min_width=180),
590
+ gr.Slider(minimum=20, maximum=200, value=80, step=5, label="Max snippet chars", scale=1, min_width=150),
591
+ gr.Checkbox(value=True, label="Dedupe by domain", scale=1, min_width=150),
592
+ gr.Slider(minimum=20, maximum=120, value=80, step=5, label="Max title chars", scale=1, min_width=150),
593
  ],
594
+ outputs=gr.Textbox(label="Results (JSONL)", interactive=False, scale=1),
595
  title="DuckDuckGo Search",
596
  description=(
597
  "<div style=\"text-align:center\">Very concise web search to avoid unnecessary context. Emits JSONL with short keys (t,u[,s]). Defaults avoid snippets and duplicate domains.</div>"
 
611
  # --- Execute Python tab (simple code interpreter) ---
612
  code_interface = gr.Interface(
613
  fn=Execute_Python,
614
+ inputs=gr.Code(label="Python Code", language="python", scale=1, min_width=400),
615
+ outputs=gr.Textbox(label="Output", scale=1, min_width=400),
616
  title="Python Code Executor",
617
  description=(
618
  "<div style=\"text-align:center\">Execute Python code and see the output.</div>"
 
628
  fill_width=True,
629
  )
630
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
631
  # --- Kokoro TTS tab (text to speech) ---
632
  kokoro_interface = gr.Interface(
633
  fn=Generate_Speech,
634
  inputs=[
635
+ gr.Textbox(label="Text", placeholder="Type text to synthesize…", lines=4, scale=2, min_width=300),
636
+ gr.Slider(minimum=0.5, maximum=2.0, value=1.0, step=0.1, label="Speed", scale=1, min_width=150),
637
+ gr.Textbox(label="Voice", value="af_heart", placeholder="e.g., af_heart", scale=1, min_width=150),
638
  ],
639
+ outputs=gr.Audio(label="Audio", type="numpy", scale=1),
640
  title="Kokoro TTS",
641
  description=(
642
  "<div style=\"text-align:center\">Generate English speech with Kokoro-82M. 30 second max output. Runs on CPU or CUDA if available.</div>"
 
741
  image_generation_interface = gr.Interface(
742
  fn=Generate_Image,
743
  inputs=[
744
+ gr.Textbox(label="Prompt", placeholder="Enter a prompt", lines=2, scale=2, min_width=300),
745
+ gr.Textbox(label="Model", value="black-forest-labs/FLUX.1-Krea-dev", placeholder="creator/model-name", scale=2, min_width=250),
746
  gr.Textbox(
747
  label="Negative Prompt",
748
  value=(
 
751
  "mutated, ugly, disgusting, blurry, amputation, misspellings, typos"
752
  ),
753
  lines=2,
754
+ scale=2,
755
+ min_width=300,
756
  ),
757
+ gr.Slider(minimum=1, maximum=100, value=35, step=1, label="Steps", scale=1, min_width=150),
758
+ gr.Slider(minimum=1.0, maximum=20.0, value=7.0, step=0.1, label="CFG Scale", scale=1, min_width=150),
759
  gr.Radio(label="Sampler", value="DPM++ 2M Karras", choices=[
760
  "DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"
761
+ ], scale=1, min_width=200),
762
+ gr.Slider(minimum=-1, maximum=1_000_000_000, value=-1, step=1, label="Seed (-1 = random)", scale=1, min_width=180),
763
+ gr.Slider(minimum=64, maximum=1216, value=1024, step=32, label="Width", scale=1, min_width=150),
764
+ gr.Slider(minimum=64, maximum=1216, value=1024, step=32, label="Height", scale=1, min_width=150),
765
  ],
766
+ outputs=gr.Image(label="Generated Image", scale=1),
767
  title="Image Generation",
768
  description=(
769
  "<div style=\"text-align:center\">Generate images via Hugging Face Inference. "
 
931
  video_generation_interface = gr.Interface(
932
  fn=Generate_Video,
933
  inputs=[
934
+ gr.Textbox(label="Prompt", placeholder="Enter a prompt for the video", lines=2, scale=2, min_width=300),
935
+ gr.Textbox(label="Model", value="Wan-AI/Wan2.2-T2V-A14B", placeholder="creator/model-name", scale=2, min_width=250),
936
+ gr.Textbox(label="Negative Prompt", value="", lines=2, scale=2, min_width=300),
937
+ gr.Slider(minimum=1, maximum=100, value=25, step=1, label="Steps", scale=1, min_width=150),
938
+ gr.Slider(minimum=1.0, maximum=20.0, value=3.5, step=0.1, label="CFG Scale", scale=1, min_width=150),
939
+ gr.Slider(minimum=-1, maximum=1_000_000_000, value=-1, step=1, label="Seed (-1 = random)", scale=1, min_width=180),
940
+ gr.Slider(minimum=64, maximum=1920, value=768, step=8, label="Width", scale=1, min_width=150),
941
+ gr.Slider(minimum=64, maximum=1920, value=768, step=8, label="Height", scale=1, min_width=150),
942
+ gr.Slider(minimum=4, maximum=60, value=24, step=1, label="FPS", scale=1, min_width=120),
943
+ gr.Slider(minimum=1.0, maximum=10.0, value=4.0, step=0.5, label="Duration (s)", scale=1, min_width=150),
944
  ],
945
+ outputs=gr.Video(label="Generated Video", scale=1),
946
  title="Video Generation",
947
  description=(
948
  "<div style=\"text-align:center\">Generate short videos via Hugging Face Inference Providers. "
 
982
  tab_names=_tab_names,
983
  title="Tools MCP",
984
  theme="Nymbo/Nymbo_Theme",
 
985
  )
986
 
987
  # Launch the UI and expose all functions as MCP tools in one server