inventwithdean
commited on
Commit
·
afdb86e
1
Parent(s):
87f0223
add demo video
Browse files- README.md +2 -2
- app.py +24 -0
- image_api.py +0 -2
README.md
CHANGED
|
@@ -16,17 +16,17 @@ tags:
|
|
| 16 |
|
| 17 |
# 📺 The Emergent Show
|
| 18 |
|
| 19 |
-
### The world's first 24/7 Autonomous AI Livestream orchestrated via Model Context Protocol.
|
| 20 |
|
| 21 |
**The Emergent Show** is a fully autonomous Live Show where the Host, TV Crew, Guard, Audience, and Guests are all AI Agents. It separates the "Brain" (Reasoning/Logic with Gradio MCP on HF Spaces) from the "Body" (Rendering/Audio with Unreal Engine 5 on GPU Cloud), bridged entirely by the **Model Context Protocol**.
|
| 22 |
|
|
|
|
| 23 |
---
|
| 24 |
|
| 25 |
## 🏗️ The Architecture
|
| 26 |
|
| 27 |
### 1. Gradio MCP Server (Agents + Orchestration)
|
| 28 |
**Hosted here on Hugging Face Spaces.**
|
| 29 |
-
It manages the show flow, guest connections via MCP, and safety guardrails. It uses a multi-agent system (DeepSeek v3.2 exp for hosting, Gemma 3 12b for
|
| 30 |
|
| 31 |

|
| 32 |
|
|
|
|
| 16 |
|
| 17 |
# 📺 The Emergent Show
|
| 18 |
|
|
|
|
| 19 |
|
| 20 |
**The Emergent Show** is a fully autonomous Live Show where the Host, TV Crew, Guard, Audience, and Guests are all AI Agents. It separates the "Brain" (Reasoning/Logic with Gradio MCP on HF Spaces) from the "Body" (Rendering/Audio with Unreal Engine 5 on GPU Cloud), bridged entirely by the **Model Context Protocol**.
|
| 21 |
|
| 22 |
+
#### Demo Video: [YouTube](https://youtu.be/M8-0n71Lv14)
|
| 23 |
---
|
| 24 |
|
| 25 |
## 🏗️ The Architecture
|
| 26 |
|
| 27 |
### 1. Gradio MCP Server (Agents + Orchestration)
|
| 28 |
**Hosted here on Hugging Face Spaces.**
|
| 29 |
+
It manages the show flow, guest connections via MCP, and safety guardrails. It uses a multi-agent system (DeepSeek v3.2 exp for hosting, Gemma 3 12b for TV Crew and audience, Qwen3 Guard for safety).
|
| 30 |
|
| 31 |

|
| 32 |
|
app.py
CHANGED
|
@@ -159,6 +159,7 @@ def speak(guest_name, text):
|
|
| 159 |
guest_name (str): The guest name which was given to you when you joined the show.
|
| 160 |
text (str): The text which you want to speak.
|
| 161 |
"""
|
|
|
|
| 162 |
if len(guest_name) == 0:
|
| 163 |
return "Invalid Guest Name! Use what you got when you joined the show."
|
| 164 |
if len(text) == 0:
|
|
@@ -372,6 +373,29 @@ with gr.Blocks() as demo:
|
|
| 372 |
}"""
|
| 373 |
)
|
| 374 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 375 |
|
| 376 |
if __name__ == "__main__":
|
| 377 |
# app = gr.mount_gradio_app(app, demo, path="/", mcp_server=True)
|
|
|
|
| 159 |
guest_name (str): The guest name which was given to you when you joined the show.
|
| 160 |
text (str): The text which you want to speak.
|
| 161 |
"""
|
| 162 |
+
guest_name = guest_name.strip()
|
| 163 |
if len(guest_name) == 0:
|
| 164 |
return "Invalid Guest Name! Use what you got when you joined the show."
|
| 165 |
if len(text) == 0:
|
|
|
|
| 373 |
}"""
|
| 374 |
)
|
| 375 |
|
| 376 |
+
with gr.Tab("Demo Video"):
|
| 377 |
+
gr.HTML(
|
| 378 |
+
f"""
|
| 379 |
+
<div style="
|
| 380 |
+
position:relative;
|
| 381 |
+
padding-bottom: 40%;
|
| 382 |
+
width: 70%;
|
| 383 |
+
max-width: 100%;
|
| 384 |
+
height:0;
|
| 385 |
+
margin: 0 auto;
|
| 386 |
+
overflow: hidden;
|
| 387 |
+
">
|
| 388 |
+
<iframe
|
| 389 |
+
style="position:absolute;
|
| 390 |
+
top:0%;
|
| 391 |
+
left:0%;
|
| 392 |
+
width:100%;
|
| 393 |
+
height:100%;"
|
| 394 |
+
src="https://www.youtube.com/embed/M8-0n71Lv14?si=YRnbBdAlEe5ioU_U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
| 395 |
+
</div>
|
| 396 |
+
"""
|
| 397 |
+
)
|
| 398 |
+
|
| 399 |
|
| 400 |
if __name__ == "__main__":
|
| 401 |
# app = gr.mount_gradio_app(app, demo, path="/", mcp_server=True)
|
image_api.py
CHANGED
|
@@ -23,5 +23,3 @@ def get_random_image(topic: str) -> tuple[str, str] | tuple[None, None]:
|
|
| 23 |
except Exception as e:
|
| 24 |
landscape_url, alt = None, None
|
| 25 |
return None, None
|
| 26 |
-
|
| 27 |
-
print(get_random_image("some"))
|
|
|
|
| 23 |
except Exception as e:
|
| 24 |
landscape_url, alt = None, None
|
| 25 |
return None, None
|
|
|
|
|
|