You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

example.py 3.8 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """This example demonstrates MagenticOne performing a task given by the user and returning a final answer."""
  2. import asyncio
  3. import logging
  4. import os
  5. from autogen_core.application import SingleThreadedAgentRuntime
  6. from autogen_core.application.logging import EVENT_LOGGER_NAME
  7. from autogen_core.base import AgentId, AgentProxy
  8. from autogen_core.components.code_executor import CodeBlock
  9. from autogen_ext.code_executor.docker_executor import DockerCommandLineCodeExecutor
  10. from autogen_magentic_one.agents.coder import Coder, Executor
  11. from autogen_magentic_one.agents.file_surfer import FileSurfer
  12. from autogen_magentic_one.agents.multimodal_web_surfer import MultimodalWebSurfer
  13. from autogen_magentic_one.agents.orchestrator import LedgerOrchestrator
  14. from autogen_magentic_one.agents.user_proxy import UserProxy
  15. from autogen_magentic_one.messages import RequestReplyMessage
  16. from autogen_magentic_one.utils import LogHandler, create_completion_client_from_env
  17. # NOTE: Don't forget to 'playwright install --with-deps chromium'
  18. async def confirm_code(code: CodeBlock) -> bool:
  19. response = await asyncio.to_thread(
  20. input,
  21. f"Executor is about to execute code (lang: {code.language}):\n{code.code}\n\nDo you want to proceed? (yes/no): ",
  22. )
  23. return response.lower() == "yes"
  24. async def main() -> None:
  25. # Create the runtime.
  26. runtime = SingleThreadedAgentRuntime()
  27. # Create an appropriate client
  28. client = create_completion_client_from_env(model="gpt-4o")
  29. async with DockerCommandLineCodeExecutor() as code_executor:
  30. # Register agents.
  31. await Coder.register(runtime, "Coder", lambda: Coder(model_client=client))
  32. coder = AgentProxy(AgentId("Coder", "default"), runtime)
  33. await Executor.register(
  34. runtime,
  35. "Executor",
  36. lambda: Executor("A agent for executing code", executor=code_executor, confirm_execution=confirm_code),
  37. )
  38. executor = AgentProxy(AgentId("Executor", "default"), runtime)
  39. # Register agents.
  40. await MultimodalWebSurfer.register(runtime, "WebSurfer", MultimodalWebSurfer)
  41. web_surfer = AgentProxy(AgentId("WebSurfer", "default"), runtime)
  42. await FileSurfer.register(runtime, "file_surfer", lambda: FileSurfer(model_client=client))
  43. file_surfer = AgentProxy(AgentId("file_surfer", "default"), runtime)
  44. await UserProxy.register(
  45. runtime,
  46. "UserProxy",
  47. lambda: UserProxy(description="The current user interacting with you."),
  48. )
  49. user_proxy = AgentProxy(AgentId("UserProxy", "default"), runtime)
  50. await LedgerOrchestrator.register(
  51. runtime,
  52. "Orchestrator",
  53. lambda: LedgerOrchestrator(
  54. agents=[web_surfer, user_proxy, coder, executor, file_surfer],
  55. model_client=client,
  56. max_rounds=30,
  57. max_time=25 * 60,
  58. return_final_answer=True,
  59. ),
  60. )
  61. # orchestrator = AgentProxy(AgentId("Orchestrator", "default"), runtime)
  62. runtime.start()
  63. actual_surfer = await runtime.try_get_underlying_agent_instance(web_surfer.id, type=MultimodalWebSurfer)
  64. await actual_surfer.init(
  65. model_client=client,
  66. downloads_folder=os.getcwd(),
  67. start_page="https://www.bing.com",
  68. browser_channel="chromium",
  69. headless=True,
  70. )
  71. await runtime.send_message(RequestReplyMessage(), user_proxy.id)
  72. await runtime.stop_when_idle()
  73. if __name__ == "__main__":
  74. logger = logging.getLogger(EVENT_LOGGER_NAME)
  75. logger.setLevel(logging.INFO)
  76. log_handler = LogHandler()
  77. logger.handlers = [log_handler]
  78. asyncio.run(main())