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} # ✅ Core response function 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)]) if isinstance(output, list): # Handle output like [msg] output = output[0] except Exception as e: output = f"[ERROR: {e}]" responses[name] = output return [responses] # ✅ Must return list for Gradio API format # That results in: { "data": [ { "Philosopher": "...", ... } ] } # ✅ Interface for direct testing/debugging (optional if using just API) iface = gr.Interface( fn=chat, inputs=[ gr.Textbox( label="Ask Anything", lines=4, placeholder="Ask your question here...", elem_id="chat-input" ), gr.CheckboxGroup( choices=list(agent_map.keys()), label="Choose Which Personalities to Ask", value=list(agent_map.keys()) # ✅ default: all selected ) ], 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; } """ ) # ✅ Launch Gradio — allow API call via /run/predict iface.launch()