mcp2-backend / app.py
aymnsk's picture
Update app.py
f574446 verified
raw
history blame
2.49 kB
import gradio as gr
from agents.philosopher import PhilosopherAgent
from agents.historian import HistorianAgent
from agents.hacker import HackerAgent
from agents.comedian import ComedianAgent
from agents.lawyer import LawyerAgent
from agents.scientist import ScientistAgent
from agents.journalist import JournalistAgent
from agents.trader import TraderAgent
from agents.base_agent import ACPMessage
# βœ… Initialize all 8 agents
all_agents = [
PhilosopherAgent(),
HistorianAgent(),
HackerAgent(),
ComedianAgent(),
LawyerAgent(),
ScientistAgent(),
JournalistAgent(),
TraderAgent()
]
# βœ… Map name to agent
agent_map = {agent.name: agent for agent in all_agents}
# βœ… Function to be called from frontend or Replit
def chat(prompt, selected_agents):
responses = {}
for name in selected_agents:
agent = agent_map.get(name)
try:
output = agent.generate([ACPMessage(role="user", content=prompt)])
except Exception as e:
output = f"[ERROR: {e}]"
responses[name] = output
return [responses] # βœ… Gradio requires return as a list
# βœ… Gradio Interface
iface = gr.Interface(
fn=chat,
inputs=[
gr.Textbox(
label="Ask Anything",
lines=4,
placeholder="Ask your question here..."
),
gr.CheckboxGroup(
choices=list(agent_map.keys()),
label="Choose Which Personalities to Ask",
value=list(agent_map.keys()) # βœ… All selected by default
)
],
outputs=gr.JSON(label="Responses"),
title="PerspectiveAI",
description=(
"πŸ€– Ask your question and receive multi-agent wisdom.\n\n"
"Created by Aymn Β· [GitHub](https://github.com/aymnsk) Β· "
"[Instagram](https://instagram.com/damnn_aymn)"
),
theme=gr.themes.Soft(
primary_hue="blue",
secondary_hue="gray",
font=[gr.themes.GoogleFont("Inter")],
radius_size=gr.themes.sizes.radius_md,
spacing_size=gr.themes.sizes.spacing_md
),
css="""
#chat-input textarea {
font-size: 1.1rem;
padding: 12px;
background: #1e1e2f;
color: white;
border-radius: 12px;
}
body {
background-color: #111827;
color: white;
font-family: 'Inter', sans-serif;
}
.gr-box {
border: none;
}
"""
)
iface.launch()