From 9216e949e98cab7f62db0152e001c649afa6327c Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Thu, 1 May 2025 21:22:14 -0400 Subject: [PATCH] docs: update multi-agent supervisor tutorial to use handoffs (#4491) --- docs/_scripts/notebook_convert.py | 19 + ...5-2967-484b-881a-114dfac3f534.msgpack.zlib | 1 + ...d-0e11-47f5-aad4-b68d24990e34.msgpack.zlib | 1 - ...9-d9c1-457c-a073-d606d5d3e013.msgpack.zlib | 2 +- ...b-6a9b-460e-bf30-77831976aaf9.msgpack.zlib | 1 + ...0-5fdf-4278-ab26-a59fc949fa91.msgpack.zlib | 1 + ...1-58d0-4b36-8cb3-b69d69e4bdf9.msgpack.zlib | 1 + ...c-6dd2-4b42-93ba-0210ec276132.msgpack.zlib | 1 + .../multi_agent/agent_supervisor.ipynb | 1308 ++++++++++++++--- 9 files changed, 1131 insertions(+), 204 deletions(-) create mode 100644 docs/cassettes/agent_supervisor_0fdc7345-2967-484b-881a-114dfac3f534.msgpack.zlib delete mode 100644 docs/cassettes/agent_supervisor_45a92dfd-0e11-47f5-aad4-b68d24990e34.msgpack.zlib create mode 100644 docs/cassettes/agent_supervisor_71474c5b-6a9b-460e-bf30-77831976aaf9.msgpack.zlib create mode 100644 docs/cassettes/agent_supervisor_882f9e00-5fdf-4278-ab26-a59fc949fa91.msgpack.zlib create mode 100644 docs/cassettes/agent_supervisor_89b77171-58d0-4b36-8cb3-b69d69e4bdf9.msgpack.zlib create mode 100644 docs/cassettes/agent_supervisor_f803943c-6dd2-4b42-93ba-0210ec276132.msgpack.zlib diff --git a/docs/_scripts/notebook_convert.py b/docs/_scripts/notebook_convert.py index 60f4dd708..41c74f194 100644 --- a/docs/_scripts/notebook_convert.py +++ b/docs/_scripts/notebook_convert.py @@ -220,6 +220,24 @@ def _convert_links_in_markdown(markdown: str) -> str: ) +class HideCellTagPreprocessor(Preprocessor): + """ + Removes cells that have '# hide-cell' at the beginning of the cell content. + This allows authors to include cells in the notebook that should not + appear in the generated markdown output. + """ + + def preprocess(self, nb, resources): + # Filter out cells with the '# hide-cell' comment at the beginning + nb.cells = [ + cell + for cell in nb.cells + if not (cell.source.strip().startswith("# hide-cell")) + ] + + return nb, resources + + class EscapePreprocessor(Preprocessor): def __init__(self, markdown_exec_migration: bool = False, **kwargs) -> None: super().__init__(**kwargs) @@ -341,6 +359,7 @@ class ExtractAttachmentsPreprocessor(Preprocessor): exporter = MarkdownExporter( preprocessors=[ + HideCellTagPreprocessor, EscapePreprocessor, ExtractAttachmentsPreprocessor, ], diff --git a/docs/cassettes/agent_supervisor_0fdc7345-2967-484b-881a-114dfac3f534.msgpack.zlib b/docs/cassettes/agent_supervisor_0fdc7345-2967-484b-881a-114dfac3f534.msgpack.zlib new file mode 100644 index 000000000..4a6a9296a --- /dev/null +++ b/docs/cassettes/agent_supervisor_0fdc7345-2967-484b-881a-114dfac3f534.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_supervisor_45a92dfd-0e11-47f5-aad4-b68d24990e34.msgpack.zlib b/docs/cassettes/agent_supervisor_45a92dfd-0e11-47f5-aad4-b68d24990e34.msgpack.zlib deleted file mode 100644 index 847bd700c..000000000 --- a/docs/cassettes/agent_supervisor_45a92dfd-0e11-47f5-aad4-b68d24990e34.msgpack.zlib +++ /dev/null @@ -1 +0,0 @@ -eNrtXQt8E1XWF+QtICoiK+w6G5G20qRJ+i4o9AmlT9ryKATLJJk0Q5OZMDNpGqCACCiiYnkqispbkKcCLiIiD0WeorAriKiwKiILuvKBIgrfuXdmkkmblhaCsDr+9GeSuXPvueeee87/nHvu6fgl5RTH0yzTaDnNCBRHWgT4ws8Zv4SjRrgpXpiw2EkJdta6MD+vsGiBm6MPP2AXBBefFBVFumgdyQh2jnXRFp2FdUaVG6KcFM+TpRS/0MxavZ/e2mmUxklWlAhsGcXwmiTCoDfGRBIauRX8MmSUhmMdFHzSuHmK08BTCwukMAL6KYNmrIRgpwgHKQA1RO+0fIK1EbmUhyhmuTKChMeppIO2sRxDk5GoKUNYSIfFjV7Ab5IwQxhLUzkUDcxaKQfq2OIg3VZKG62N1fIsw1CCVhwBjc97eYFyolbFrJsgOeiD4N0uiiuneZYjBJIvo6yEhxbshJNkyFKaKYUWQDXiJYkYSJgpwUMBKYgAG+twsB7UyAMkQxOYdBhH8RTJWewUFxZJhFmALC5sqI7oTZfXeAuxhZCWIxI+8C6WkYZHDcVOCYElYPEIhqoQdEQ6abHLDzy0w0EA8cAiJ5CJqMdsq94RjQbh3Q6Bx495gRTcvI4YiDhqoxmat1PWasNnZOZmFvbRIZ4JLOsosdhZ2oKWcpRG8LrwmqLf0XOGdOLvBawbxExTKb0iSUC1p/DQSvEWjnYhZqIHA32T5FAT9EGcaaaNYFiZsfAbZcVUyo0UFNKMyy2U8MByJxlAImseTlnwwrtAlClOoLFgAlUwAv5AMW4kDkM0/lUT5dQqfhBH0SABkzvlBQ7WTlOJJorWjuYoK+4Cdzq0snJo5RI7RUIH/Oe3tFtoZ3mhak2NHbWKtFgol6ClGBgL+qtaUTqSdkUSVsqGxHWZBYku3rJVy8ooyqWFrVBOLRbfqlpNulwO2oIlMmo4iPlyaWdpEZU1Hy9DkqaFvcIIVW8my3RE5XtBATCEXhedqNOvrtCCZNCMA3YwbBkgabELP9+ofOAiLWXQj1ZSLlWLxZdXKtuwfNWiHNKSVxjQJeJu1SKSc8bFvKH8nXMzAu2kqpak5tccTnroHy5aZzDoEtcEdMx7GUvVIhvp4Kk1Pib7Xllm1Bujtfo4rd7wZkDXlMB5tRYWRqiap18pM9BBMaWCvWpBfGLsq+KW4KnHFot7ZvxCJBh7Plgiabn5eVn+pb5jYRosXNWmIjcVSRgSiVy2nIChYwi9MUmfkBQbQ/TOKVqeKg1TFHSd1hRxJMPbYK3SZblYYrG7GdBKy1KDSsRhjX/GHIzvoJ20oJV0Cqwj+lq1MEav1x/uWmdLDjYP6AIYcWF0YmLiFfpF20WoWovmpzUYtIbEImmW0YMPE8HeFO2ERM9iRA9Q1KWOln565NZEna1roSdm8DKJaC1trXobPpfoDWkVlMVTNCiRjU4bXOwZYS8sGt47ZvCCcpqsWmbQGYhSli11UKtSM7SpoG4pbSFe/aolacW5yTmZqcsHaQtYMwtsKCKBXQzLUIsLwYZQXNUyi4N1W2ELc9RieL0gubhqbQIVYyHjSZs10RhriaYobfrAgtWyHPjWeSHa/9i2PrpYVDHbf7tvSotb8D+3Fk0tydrWq932zbt7lBCX+57aNOTJ9lWtNE9OKHv9X59aozYdfa3vB57ZaU0qPzs894s9bRPiVn/7Vf6i4jUbHJ3PnRq9bjT788PCqbPH/3trs1/+eUBI15zppW/xztwmYVx793L9t6NTtZHf/eu9SdM0xV2OP585vcfe3ZF7+Y4HX5o5iHz58ZJXR34xoF/X70zUHMtM25tLPvn6kU88Gzf1OLp85cqoI6fXjx3XaCPz4+nRRa2mT7n46upbn3v47g6PTjC9+kX4sM4lrdMqS5pyxy+M/eztdkm9j88Zlrh+RfKLPdduu319wVhNh0Nc8b0/vzp23fyOO1iY5+XLt96ydumavr0a3XJLiIBKY/aPAlT8JkpHpOURuXlFhBWgAeMFrCLYfba6muEVyHLa4S0RXy2RcEAJUjZBjHEyIbYjQAnSDEWw8MRJjwRMBLMDHOR0cRRMjwfFEwmgxOJGGzESs0Dg3ECyVUYaOqI/T9ncDvyiB7HECxNBVhzjGYb3gNHHy4tQKUGawa4T0B8HXCcogEqoi0xk2AnezrodVgBeCKyJ5MGLnDe47a9m6XFL/KnaVJU9IZIcLFtGuF2a+lh6sVMlKJCQhmr8/xjGP84YHVrjH/enMP4xN5nxjwtm/AcWJxoNg/KjPcWDBhhHFOR7jGx5bOL1Nf7mWCqRjG+I8X+vUZnC+lcls0f0rSdefvLd3bq+xz44+eTJT+9O/0gXvv6AvnWzOw5M7lAspA9fes/Pm28v77f2oZYj22/e0Xvu39d+OW92ZeGKU3tP/t8Ts1fuix99dvWSsRfZHWNuuS2pbcxmzR2f3TXog86ljdLHh3dtettDb7bfsk1npun+q3QDt0ZUrTR9HXdqV+Lq1f9eOKP9r6vOdis66WVK2t7uedkc0/zJx/6yoePf92x87GRCp4eenfxql+HM5ofndLj7nsqssLPTz340bPje2Pf3j8htFLUnpW/ain6XWrQyp3yX8NOrj06/4179goLOUcNeZ3nDjsUfvFhe/NHoqJx15S+PNTlXfexuceTE42f0n/97U9svtqRsHXNy2+a/P7N3imV6Zt8i+lKLJc/PmDT/yw9/KAqf+uWxoV3OfL71ifnTRsx8jZwzZki7r+ftnBD99TZ7VvK3S/M/vePnIvPa/FklP564Z2PGhT6Z77Jx+xrfU7mqcumSkz0lrNFjzOe/NWlcF9bYpIQaoi3FOEM0HyLEaNR2lAYel5RRXmxxyx1e7WBXWnJF/IiyATGcjRnIZ6bk2wclUH3z+P4jU8sHZOUgOyPbJk0tyALpHQqpkWjUGoEYybjCO7GRsgkrsYJRsKNuSGs5yVjARmG7aHEAuiixsmgnYUyA7BVVEfRnubVol+FXrE8VDzjSU+LHRNWf0k4JSeEHPgs4aVl/ZHmSseVZL9oTnxaJMuqi4d9VyaIpTA9uCheLj6sWPBj1YC1KcKW8m7Il5W2M119B0zZEt0+s57ALE2MS4q4w7hWMRCIyErIyWYQQWEWATvj0gbY+QFMfmdGIkaYSt6vEh7Q0SYzb4YjUyCstfpMXEIRB45MxAJECLSBcrEmHtWedtAUjvTTKyZZypMsO34sAr1l5Qkvk2Wy0hUKkIMDrI6cQk5MKwFEAiO1A4Frj5gD+auR95fF4dCxv0TFeXSlbHsVRLpYD6bDRDJLlKGy/bRYuipJI0AIJWqufBK2ASYB+ffKpKbKDRSAk6YwkzAAiEYRmWIHAhgOD0CQTk0JZSABHRG+s8glsfxFfj0+YT9A8geKmQLNFcJMOQsKVXoL1MPC+2Su/lclYdJEY3ToBARO19scgwMxyivie1AxEBKwYoNtSjqKcMINIAMw0YFNpAjzhYtHEaKDCQZNm2kEDGQhXO2kehkvyjUdxTh4tARIh6FRnYqotS/pAojivIMvEFBYlF6UTqXk5+UUFednZ6QUmJre4ULlQRJEddARP5IOzQeeSLtZBm5gcUBoEA1qwFAu1iemdXoTAcxbDempf82A9FcDuIlIy866hixyKcZuYK4imiUESRGRgcUIchB1qpXEktwCLGpEBjMygefDYiGJQqEQ6Y4X1zcHeQbQhEu8lGMbpcrBetDpAHIq7plCwtYh8jtIS+TA0hUjIBsfFgeQGvWQElsrzKSARiiNiYmHlczHrPLSVwmuYDzqGZWBwkCPWCULBsR7BrugDlgVt8lygzeEluhh0cTA1oABNwdcqWdz4x8c9z6MeeJ5Ig85gy1uARNbqtghEOPQSgcQaSUI56XBjsXCJT1FnLEeDygHqmFLCxrFOgoRpgvPrRtqHwtNCr+KBwOfjkY6mpb2AHvTXFeqIFDdHkW7Us29hkmF2Xp7mQRxBqChpcRVKK5KgBSS3SFQ5PpKgMK8piseeZRQwCTsvvGITk2YHjgLDtoskWBw+Fuw0bC4XiX2/SMxbK4n1GmrgAJ5QeHMgh7kM+fQkR/NorsjzZG24G5ii3/fCGxX783hTw2Mp1o4UE+qJd+NNin9CL+h8M8LrkM+6UAgA9YTMAs24Rec3jbI4kHPtW7wU5HoKHIkPGdAeZ8p4TP8VZbsI9BMQRzhZFCHAPjRSRCiYTlkosFKEpBThO1JEVolnHGIlKc5YoDhkj+XVCdQYNTYiYWWBjWgRPCQH+g2UFYgQKCIsEjysPuq11E2iZ5QU/sCBAotX7lSQ9CL2/OHtctgLVvDmNTzoRzA3el1ifHR0ojEhBqyREnggY1UZ6TdLtUg6yGOhKKRG4Fs/oAXmiPexGKxRhjEInU4X1CaZKRIbJIby8NgKRZWi0bRWaTSttHO0eD9oYSTtCHEkLbZZyEwFBEy0bpcVWgYYqmRGFHukmDyUmacFH+f7M9hO4Ynw4JSAcDBI/QRRwiB1PGgzB0XyFOjTEDClPyYVa2kHgedNyPOWNYasTxgLh8a1InGOiRG1g3jOhGaRRiPlYUEbDIZwuJ1mmvQpEmTSrYTENdQCURPpt4+w3SxIdi12kimlCJCaUp9uStDF+55DfwO9IIPwDMT7+LjpBl2i8uEAsIvAciJcwGrDEBEpmWLpDUQzjebGo20izkZgraS3vpqNCE9JT47AO4jFL1AVeNMJdlJAQSvEkzAeKRoUz6J5iYcwDD6PYx2YewxeTmC4k+TKKKTupG0LKwKa383Q+KDPBfwEDofDNsNvOlgwXfAcWvt6ENtEoEM9+IbMB8xEhIYW0iXATEQzYKVtNtj+DOqQtOB1lhYQk84BCAddiJvKlAS8I62kk65AfAHP2SodMYoAROrGZzV8E9cRfehSuwP+E0CLheenZUSYmEz5mBoGKUIrxSMB5EFbWdDHNGRtsOXmZSGvRSZ9c5WMnchPv80LQqdvQaQVd4Ay5XATH+5DfBZEOZeWVEeIQFPc2IgbIFSAKdDQoDaks9hyGsmTOA2wSAIpiQVoSqy2kZJwUPAKao5/sVICSTuQEILgAwHQBevm0RKXw+9YhsH6epDuJ3lpccTjXUl3BOgdH3nwEMQUm6ZcWVD8omzBwTAwnJmixfcGe0YyjLu6QJGKp1bpN5cMamgR1MhtxKmD4wFN3GYHPnkmELChKQ5tH6AP5lIqrjH6ArrH7eIxEonV11O5wI5OACkFwWAsgtwdtqcuNyyPBANcKGrECKJ9Rj2S8mYmeemInk8SIVw6U+pALcJlT9DiBrOH1DCF/gceo8UOCEFAPEDt+5BOFw9oBJ4W2MGvJDJ59L7IIEkZgbzngNkjwWMIT4OtBdYUmgebERqC84odoN77Am8pb6QCPaFu8ymG4b2OcpKhSehbaUwTog2GGECyddvSAllT+EAr1nrYQIzGpgNoI4OaSkl/kmJgxKdMowwJCfqE+KhSq0vL2rSwYlo3r7VR4FWTDslswu+wU7ReGE8LYMxCaQ2JifFRAUbSJ5B55Wi7Uh7QBYBUBaC3q4iECMlrBH9HaoJ5AksODh6P9gXoKdRQVPguIA6pG6nbrojBSEH4evE9wltSfEjDZkLqKrBnE4MMJzAdhKqrbGt5f09ZFHhqdClWuFgdgCMARPgOPHwvS6oGv446ZXi3E4xiVyKFI5UT9D1Bv5rxswDKQKyV2rkcQC7oDgWMNzH54D1hY9eVKGQtNAW6zdd9mqx6FLBWotUlvgZcF40WBi0yM1PR9sa8LMD7zd9jMmzdMiUXpImj9vLEfVteWgiZvfghVYH0L5GVnyluYoNer+/ms5EwR0MifPd32JUAM8LRAivONlPmDouxvcQ8AcQeu9aYjZQd0BQ6p2I5hxV5ZqB83CCOFM8HMAL+hdGd3UTlZZEYTpdjuyovJfiKFeC/cCJsRt6GTEIt7EWTik6MxNNiGewa8EC9RJw4UZeDFI0gaBWLgEyBBb7zNLIF2KZgzsTrlf4axkmGWCVzTAzqEmFJwrD1lRya1RE2sLgi+MenD0AV2iS4T6xKgUl0KQOaUFYBhBTjAkan4WfoEbJ5peJ+McucM7tpB95xiDaMNqBTrZXDiVBiOMcL/WI148MpyliWEViiFV2kuoCo8hUJkASAZxODOYF6Q2hP7DAcWpolLxpTYAWVT3I86M5kqxggwD65b5lglnZw+CU4olxA6Yls0LjAZ/0BICTzZT4NChtEOnqUojRY6uGrGGeoRnkg0WloVSTDBY3syI7SUrzBYEQ4GfvjyvmglS3041tEkUnjj0yI3/IERLYCBmMz7QQALLuH2K30v+R3beUAjDcgRNKVSCc5dH7Di3JDwS/ZCKcSvRWOjG/VUmkB3s9wc5gO2VX10+N/JsleEoGOxZ1oV6EMNgQHpHgdIhZn7YkAySe2uJcirK2IGtNlRanBykwxIb9k1iJ5aFUifUgoQLMq54n7kcASIwF2hUeH/AJ4KlonK2XG/RqU/SpcfxETg4pikEb2BRhABHzcNCTGydsmcCq+Fk4KvHkxBID2HAiZQXoBsRV0kJcAjUhJSgbJn5nkYd5+liGxSgVFw4rZAT6Z7ur3iYBJ6EwcgajeoNNHuGlLmQSyYP9gJw8FIqCZDWkyvN/kFAcZmMOSwbqYkQBK0BZ9ThK9Q7AvpJhfAAtHwN4TEONlC5sUCILi42JiY/SGK0UUkv0At1QMxIUODkXr4+Lj46N8eAfhInEQFe+oeEfFO78z3lGtQK1WoAhgH+thHCwpWVYfl9AQg7ILCXE1/TldpB/fSNGCK/WSn9s7FL2kZYSil/yievWSDCKKjnyctNspJu+j5qWwg/2WEgNdWeylqI9CR+H9R1rKUGCDCaZ2AqlT4VtN+IalmKxhqJXCr/AcJIteLZYs+QncNbgVRBCv4nd3HfIsAmuW4vjVnAciXCY/orofccN8PRloaHkXZaFtkknB0XJejHL7klxBKCiLncEGGFMYjo/2cKgbcx6nsuAAJ3rAUBxvp118RMA5UrzRYIw1xl3pGEkMZ4qSPrqe0f46D40QwSjuhWNfWH0HILyrGpDA3h8KiuIPAX0Efqn7AEgKFwaeOtd6OhQT6u4wgg522iQjfBFQBYtNo7HRWSEvKVjepzLlIHeklDOBJFGhZWFDURyIDh8pipIUR8eJFFL2Mo6qi8oBJx5XP4pICgx6KxvkkK7qj2GVCjKSU4sK8Xr5ZpSB7nEV2ilkMESMWT1ODqQEV0c6cdUxMUSygn7MS5YRExOkYwjFqPwV1y8dfpYsUA7OfWMdLGzvgciGgOwpRasnPiGW9AXOTQFITpFlyLTioLofjYXhk2eONrvFY17QLhS6uibyR9IIAXs1JtoYn2CMCeqhiWlJOGWrBKUEa5KMuujoyhBdEQjbcxNdEYgk/EORgHgRJhQCx0OJWeIFNk1mGLgbdsrhwhZesg6yDlZQ48PMtdAEIo96kvPzAzqiA50CngJ9i1JwxQR833VARBGmXnlBsAS4pbwkWPdtBJzMH5C2X480N5SdT1vlAd0leoMxrjA+N55Jpencimyb3ZtFZgmuAk3l0ADm1lzHIdVoF8mrttZDRpmQ4jfBZ1Ook9hMMJZJHkwcoZ6pbLXnspncYAONIU1nk7u8ERlttaa0Bctpq1dSW82EiqvPSVPktV1LJziz7cqpbSHKbbu65LaQZLfVM73Nl98Gkqc3JN7MKW5/nhw3eS3qm+Z2DXluIU50u9GZbiZsJ2sxI9cr7yyIbbma7LNg2jIg/yykCWj/mxloeGdE36gkNDUL7aqy0OQ0tKB5aMpEtMBMNDUV7epT0WQLcnNmo1VLR7s58tGuZ0Ladc1IQ5HqOqxe6FPIgti7mgertZ+sNuRota6z1QYdrl7hdPVqj1frOF8NxQFrnSesV33EWscZa8MOWa/HKevVHrNe0zlrHQet137Seu1HrcqzVpNbryf1yvPWKx861HXqcG3HDvXLMbvGJLNgWWZ1pZnVelhUx2lRncdF9TkvCsg1q55sVu2U6CrTzWocWILmN5k0iniB/5eGHlwGnFz6jy5rO7us4/Cy+ullnceX13B+GXCAWc8ENOXEGpp8UFv2wbWnH1TLP2hIAkKNCV05BaEhmWgNSUW7lly0a0pGu0r8U0fOmApwVICjApybCeCoav3Kaj0kqWUhyi0LUXJZiLLLbkx6mQrXrgzXGpRw9vtmnN0gLyIg7ayOvLMaLsWNdAJ/j+Szeh3t1MwOC4Ll1BwxNUdMzRFzetGWGuqrQw5WsaReyT4oKYgvAUTL+sqZVQ5V66+q9VfV+qs3f/3VRQa9ISEhhBVYE5P0hj9FBdbEm6kCK+J6sAqsfeOMNncKMyjbPNhm4FMrKry5ruxB17cCq9VImklDwyqwahQVWJ89Onxrr3YTSx7Yc67ZtHPND2d167Bs4vn5BUN2GbdPzojfOOf5u80fbJw9qNXpr1+MPjt3m5B/+t1ee0e98PWHp88l5zFn+1968Oe4zX+bJXymS350bem965/4y09NWs35slmj57t1+L/Grb5bfX/zZq0eH9H7ZPjchZ3fDst0L97hXRwbHj7+nh8bf/PGxYl9W+zL+NurPz24rbNz1tR7DhzuvHvvyLNjRg5evnvqL+s/W9nr0R2/jHn8k13rZrV84fiwTse/nXC66rH7+lzq3DS7+ew+Obc169xqTZepU2Z3mbHz1reWtX56lZ5MnpdWOrJJ5eVF4x540Zma4Lo0c2On7Nl93iH0DyctIT6/TL71cq9ux9Je2vLtYetyIu1Ct9wllZfbiIVTZ2/+ZiDb6JoLp7YLaeFUfzqzWjr1akunGm9E6dRYQ4zhGkqngp6JvlLp1PZ311Y6tRapCV3xVMUABViriokyA1HQNIwnUNZsNsmVIpKkEEnQu0XgOeosogOJZh6lj4kyxEVZfJ1LKpvHWRI4IstroW9AE7hvrYSnA++aK2iTMpQQOdIrMgSXgxG4U5+XzWOUaMfBYcrixm6OF7aVlD5HEsgxY/xHroyU4RutSwSwGpDhK2YAknJghZM8vTid4QECp3TgAVHnKGrMctVS5xqQHUfkoZQpAKgoA40GHwUdJ4HLV5MPUm5gXawILFmYGB1nMMRF17fMkmLEEBRaik+IjrlSloxCVNRSS2rpAbX0wA0rPRDkRrdfHTToTrfytdDc6s7BZzfJKKX6ZinJo5xkYC0DBwAN1LV/cyPoIeVziwmyCj0rJnebvQTjdprFfG/fNYzqPUv38eSwvwffsajenSEBxfzjqr+raGODrYXWClk2RGgNEfYTBc4VJRk5hR30H8ghHYCtR7pUD6IP60YGVSRN/Pt4OLZjs6E7WSQheFitmbJyLLrngsLUTikVPZAlBq1EAD61a1gJoD9cqaybpghawBrVtwyaEsXUs2JBHXXQlOgmNsFgMMZca0HmK5wDxIDM17ccc0zd12LQLRg5cK4VA+fSExik5oUZEBQUz2BIzhuAhxp4+6RBaeHS3wJFWvQqb6DEBd5AyaXKSSuJllavMwY+APTCl5HX/e4JkSoGkLWiEGFZDryek1gf5gTg6tiY2NiE6yx4BtDQIaoDXrvgwSABgvc7CxrN8cJVypnBqIsJkCcWyWwaWcYKkrgZlI+VVwwwbckO0kw6bwbxi68PywKKEugTYuMN8Ua1goh6OqyeDt/kFUSiYw0JcfFxsb9/BZHu96oVRNQKImoFEbWCiFpBRK0golYQUSuIqBVE1AoiagURtYKIWkFErSCiVhBRK4ioF2zVC7bqBVu1gohaQUStIKJWEFEriKgVRFSAowIcFeCoFUTUCiJqBRG1gohaQUStIKJWEFFzxNQcsZu7gkg9k6uuXwJT8OuqNVOYYtLiElJI24DsAYPK+qZl2wY7R2YUZ13vFKZQXVINos7Uq6rXclX1Ks9Orv5eqRpcUIMLanDhZgou1OKlKW5XNtRPC3g1dJ6a8grqTRRWD5httcBFCC+i1ui7QVdRa7wd0suotd9GvV7XURsYxv/DnojdTEefQe+mXofLqXUffjYoB/K6XRcNAnPUS6M35NJoKHNi63+L84asv3qXs753OdVomhpNU6Npv2c0rZa4k1qPV63Hq9bj/Z+txxtriNaHth5v/B+/Hi+qS3mT1eOND1aP15CfWEhVkPEkn2ooGOylcoyFg1Myrm89XlB8Zou1QfV4Gyf76/EKhWRZJ0Pr37ptbf/W1ge60IXfVh4ZcKjxgqeebrMrafzIJRujz2UufSDstkWXKw/RWbcdWbJtTN7Hoz58q/mJIQM39rt4znHp69eX7B616bkvdt9e/Ihj1WbtmGeOP1h6sQ3VYak5byXXL+WdXv1XTXKs5BasbW86PWfc0kU7T1oT+5FdX4i0TXnjgmONa2bZhKcPmX47dWzD0o9eNj3y8LqL4/pqWzzWpknfji800tCtFt+9/JXkSTkzVrAtz08bdsIZfnBcxvAfTv7YTXgnr6p90mRXt7hxg5ud6vTOsW6fblm3feO9K1tYDm37aPTIth0qWzzS8XOtbcp7O9uM3f5l98n/WTNpwYGT7w15/2Qmc+4oz7d7dGRv7VNNuu4fZi/oUFh0bJbm/IyZp4iIte8WEDG9mlorNu86/2Tek3cvf+bNJm+mtX7pn+bhT/XNYTbNO5TZmUzrZE8722bSbO8jg5b8UFy+Vlt56YUZH2f1erDpzj1jd+2zF7U6GnNx6OE1W3Pntyl+9sSlYf/eP+1ARVa/Rvcn30NN+Jfnr+nmxx4iD6a+Pu6zlJarxx/98oVGGV/c3uyQ++AhUjiw8Im9f1vY7UTG+20yVm0tHOROj7prXdNO6aeXvvsINTfx/jPk4ybuyLz4Po6HZyzrcXnvMz2+T7vjvoj84uS7iH+1z2q147/pLX/aP//YFqq4YE/U97133f7Vorlv7fhiZuH0vUl3Llv92l9HbFzf/vBDjfr+NPkffx/It5rHLf11wLnHzr6duT5uw/0DBr6898NZM6dbV0WdOLF7x47Nt4jlird01Cx589a6yhU3qNxDs47XVu5BecaGih5EEr5yDKEuBFHbOCnYj2LlW4zY9ktQJZLIhB4Z+bYpBio+31JBlhz8R4gGtr+EE/kkE+NPtkkKuJbtO0sLR/GdCGXsOanaaRtqER2BuirEp2qICJJHl8Sd+Epz0CkjyiV0xLD4EbqbhjxEIjlTgRehXVg5Sr6l0LEeqBcA1xR+B3Ut3V/GKJJCKBsFqOXxEDrTEX1YD2Ayri5O8ZSPQTy+SIxbBiUbXzPmKYdNh+abKYTx6MgCugGCsFstXT6ELsWAsXjHG/vz8i1GAQdreZGzWEowA+WyCWJInIS20jXI6veMcQyYo3l0PzvTpgCn6Mohyws+dOvnNa7wQKKIL4P55iFpgUAQxYHfwk6jUkb8MsxRyuAAgGt8Fxr6C+N8lMhhTjxLLKQkWnnAP2iBaNaq01yrA8G7XSiGy6PwpyhbePGcJEPigAmJ/CF81Rx7WmZK8CCJEUNw6DodagQrVQZNYFOH+QUsLJIIQ9iICxuqI3rjgGrgWzg3T9JF6HYrAlaKKhhip9gzgPViYM/qiHTkikkPPKjEgiynJKZeOnML7IjmfLcp5cuMbhDfgUhpoBuo6L5iteEzMnMzC/v4vKcSi52lLRT2GJR5AcqMhgLwVUDFVQZ3uKSnNZ2rgb5JcqgJ+iDOFOSPYWXGSkcJkf5GCgpreDvV/A9oUs3/YUT9N0pDwVbCzot/1UQlbRU/iKMEODW1+j+406Gqs/OHcHYWGmLjQuzrJPwpfJ34m8zXSQjm6+Q4rfFp0dF8NFXAVAz3Rhdk989IzL2uvk6CPt5oNVIN8XW2/6L40yNTk7O29Wo38fLuF+OfXfj0o5u8d71GrJh4Z9XqLpY+R/csfP6wueWF71+/I3nqWdvn8d/v3f/mMPLZlblvHNj970WnNp6K7f5V8x7H33lw8SetWn/r3F4xUbMyVa9fM3X8XSfT/xrRseM/0m/vcO/3KVN2do24k9Qc7JJ31jnrm8SO9ufaZ255Z+/mfOq8+9k+QxdsTzxIl1/+dd4Bw8bT5f0vu3RzlhR6dX/tSMSnffHSY8fbD41p1rT7rcdmv3/LZ8eb7P6R6TVjx8iUsOzLPVfctiWr1/B2kU2/bzNh3Ytzxz6x7sewaeM2HZnRLOHbEucbQ2exEkZv8nSHo90bhQyjN31IxegqRlcx+v8QRg8CHkUcUsJRLkeJDDurwUiUoYHTfBCVFSi9E0YX4Q0y2ZjPVlY8E5DZJrODl6ouSRVtUN0rsbJKpIkhpH9wWURRYF0wZYGg8Z0oUYiG4Z/CdTpdxDBUQQWlcvAE+BS0VHpLqovF1Ss4j+gNFptHJzjKKSlmCh8B21F41XG1Koud5ARdvcL2eDg1av/HBbLRMYaQAlmD8U8BZBNuLiBrMAYDskZ31si+/UmqsDwmO71iZN/8bA9tKbvOQJay2uLjGvZH9JYpkOw0lj2gb/f+5l0nB0wekJX68f53Nf81z7cTbda23P7FKx90mX1wz0OPHzozIP3CmelvrJ45cP33ZzwjX+p9pt+A547ti0lvH9bz/I9HN/y8NnfVkVPfPfbOwl+mbR427vz+aS9rLGmpHYctmRnVwrJwzXhts38cuDtiz+qirf3XZs86teijPdbZr9nPaZ4Z0K316oOOyVpbz4tjs7RHvaN7GEdfzo44NG34sVf+OiNlZm7LrGFvNjHnzbW30MUNfKXs5z5v/jDUE69/+T2y1frpfTP33tbOtKXTPOuK7rMaf/NGlx7dh3e/f8Ojrz12dHjbES1emmFf0ar07c2G9pfL09svWXXonV/Pn//p5Zx1F00lM86d/ubMa1MnvrePP/2PZd++2n9iaY8PV7zx3LlB3+2a+uJT839KSTQSF/o9vfP529ML1/1w73H93g3tD3Rr+SG378L27s8bn/v1RI+hi3deWHus/d++bNrj8ZmlR3Jfn/tJ4ks9m87esrzn1sd7P5Coc3Uc09S+nJnyzISPfh3b1bJtf0lv0522/8xotf/p+zSn7ut8z4Av2nXa83F4y/zuo0xTPjlF/qO5iLwLPEXbXY1DhrxbTFCRt4q8VeR945H3tVQCD74W1TdceIDkRlTbgPBYKbYRhBuXkhVB0lXU/g7mDfgvzEnoWXM/phLDeLGyozQ8b2IYb0mp1UU8RADVJsZCSt+ASCRb9yPSpUlLEzYx0gepZbjUQzdCfDmCiCKM6F3RD7CZNMl+TsGuHaV4vdJHiUkTEeTGXlwCI8QPSjcPT7M6i2y9LTZPWsXAASG6sVfoxonzNje6gCw5D1ZQRsOGDRO5iqb/P8A3TDHKaLeCD5ZEBL5l1MXH+hszdWSp1cLra8xSUx1Y1YFVHdjQObBGQ0JoT2IM0X8GBxYcxpvLgY0O5sDm9ynylsW5Uqk0Ki6VLio0kownJfn6OrDGaJslTt8wB7bE78BmP9uv7Eh+64mXn2zn7bPFsG/vx2vHdNMKt5/quCB/V3jy09SJ9eu/GrqzLPWDsfe1PTUnbItnId/2U8vy1dv3zXEbLns3bjx78cJthz9hPRsf/+c/c87ub7Jnv+ehqUMcGW0skzKP3PFscUzYiD2rDzw5JHLEgY/z/+swDNmXnX6odF6Lkm/SOz4d9+C+44MufTr2uaTNU0/s6Hf8t1mPXnLNn3Ts/DfNe7yx2XDb6BPxFQf/r9WBnT16Ns9b41yw6y/PFrlynMtjM7s8l9vhwteTO7fp+vcS7eUFnVe2Tpv7WuvRu9/P32Hr4+g1eV7up8l3n5pz15Rtz0T8JTv1jsYH5zw85Kml81pMuf+3p3rufrf96E7O1l0bfXdx4fdr7i89ZP+k8MnF0/59LCKVP/3J5J1Fq9NmDT+deuevYR0v/21Q3FOLWjtfOOb6dfSGHeG/fVn2ycAO2340b9iV37wndWL3tmNR0nnParbozKHQnfc076x6narXqXqdN9rrrEvAi6p5knJG1dW6k4BUAzG/jkjGf3AD5QsFrvcVFqfGH7YSOQW/+oeHheNZ6UY5ll8ADhxbgS7iBKyVmpem5qWpeWmqNxTy47wEY4i9odg/hTcUc5N5Q7HBvKE+NrYiZ0C/flneMra4vMISa+lPlQ28zt4QFZ1obZA3tP2SMi9tS+42fbu0y9S+Z9p3fyD/vilFH6V2C2/RtkX6gNfTGu1o+985H2dc8Hyl6ZJw5j/7XjjccuitTz+8tr/uJyp+1tARh3ft2DbgpTP3jhyyM7bJzwn5b81vl53VruOmnPEt593m6Jz6yk9tiu0H/7V90uuajR+M9zyTULhh8AemiBYHPzckThrz0ph5/9m0wtznID8zZseDs4dvGM5Mmf7Z0LHrVy0ek9S5/2+rJ46LrvzxdKX13um721TNC0v4xWxfHr9x729tvrmQTqy+b1lV9g9nxh703vHt/dNea/lpelnT4xe6P/Qb0e389181Fja8fecPVZeHv2d+aXMj0Vd5rWkG2wM+/z+QO5Hb \ No newline at end of file diff --git a/docs/cassettes/agent_supervisor_56ba78e9-d9c1-457c-a073-d606d5d3e013.msgpack.zlib b/docs/cassettes/agent_supervisor_56ba78e9-d9c1-457c-a073-d606d5d3e013.msgpack.zlib index 56d98e321..a7533e63b 100644 --- a/docs/cassettes/agent_supervisor_56ba78e9-d9c1-457c-a073-d606d5d3e013.msgpack.zlib +++ b/docs/cassettes/agent_supervisor_56ba78e9-d9c1-457c-a073-d606d5d3e013.msgpack.zlib @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/docs/cassettes/agent_supervisor_71474c5b-6a9b-460e-bf30-77831976aaf9.msgpack.zlib b/docs/cassettes/agent_supervisor_71474c5b-6a9b-460e-bf30-77831976aaf9.msgpack.zlib new file mode 100644 index 000000000..d0fed6577 --- /dev/null +++ b/docs/cassettes/agent_supervisor_71474c5b-6a9b-460e-bf30-77831976aaf9.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_supervisor_882f9e00-5fdf-4278-ab26-a59fc949fa91.msgpack.zlib b/docs/cassettes/agent_supervisor_882f9e00-5fdf-4278-ab26-a59fc949fa91.msgpack.zlib new file mode 100644 index 000000000..d95c438cd --- /dev/null +++ b/docs/cassettes/agent_supervisor_882f9e00-5fdf-4278-ab26-a59fc949fa91.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_supervisor_89b77171-58d0-4b36-8cb3-b69d69e4bdf9.msgpack.zlib b/docs/cassettes/agent_supervisor_89b77171-58d0-4b36-8cb3-b69d69e4bdf9.msgpack.zlib new file mode 100644 index 000000000..66db394bc --- /dev/null +++ b/docs/cassettes/agent_supervisor_89b77171-58d0-4b36-8cb3-b69d69e4bdf9.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_supervisor_f803943c-6dd2-4b42-93ba-0210ec276132.msgpack.zlib b/docs/cassettes/agent_supervisor_f803943c-6dd2-4b42-93ba-0210ec276132.msgpack.zlib new file mode 100644 index 000000000..1ef71b1b3 --- /dev/null +++ b/docs/cassettes/agent_supervisor_f803943c-6dd2-4b42-93ba-0210ec276132.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb b/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb index 80aa01e2d..0b34d84c5 100644 --- a/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb +++ b/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb @@ -12,16 +12,17 @@ "source": [ "# Multi-agent supervisor\n", "\n", - "The [previous example](../multi-agent-collaboration) routed messages automatically based on the output of the initial researcher agent.\n", + "[**Supervisor**](../../../concepts/multi_agent#supervisor) is a multi-agent architecture where **specialized** agents are coordinated by a central **supervisor agent**. The supervisor agent controls all communication flow and task delegation, making decisions about which agent to invoke based on the current context and task requirements.\n", "\n", - "We can also choose to use an [LLM to orchestrate](https://langchain-ai.github.io/langgraph/concepts/multi_agent/#supervisor) the different agents.\n", + "In this tutorial, you will build a supervisor system with two agents — a research and a math expert. By the end of the tutorial you will:\n", "\n", - "Below, we will create an agent group, with an agent supervisor to help delegate tasks.\n", + "1. Build specialized research and math agents\n", + "2. Build a supervisor for orchestrating them with the prebuilt [`langgraph-supervisor`](https://langchain-ai.github.io/langgraph/agents/multi-agent/#supervisor)\n", + "3. Build a supervisor from scratch\n", + "4. Implement advanced task delegation\n", "\n", "![diagram](attachment:8ee0a8ce-f0a8-4019-b5bf-b20933e40956.png)\n", "\n", - "To simplify the code in each agent node, we will use LangGraph's prebuilt [create_react_agent](https://langchain-ai.github.io/langgraph/reference/prebuilt/#langgraph.prebuilt.chat_agent_executor.create_react_agent). This and other \"advanced agent\" notebooks are designed to show how you can implement certain design patterns in LangGraph. If the pattern suits your needs, we recommend combining it with some of the other fundamental patterns described elsewhere in the docs for best performance.\n", - "\n", "## Setup\n", "\n", "First, let's install required packages and set our API keys" @@ -35,13 +36,13 @@ "outputs": [], "source": [ "%%capture --no-stderr\n", - "%pip install -U langgraph langchain_community langchain_anthropic langchain_experimental" + "%pip install -U langgraph langgraph-supervisor langchain-tavily \"langchain[openai]\"" ] }, { "cell_type": "code", "execution_count": null, - "id": "30c2f3de-c730-4aec-85a6-af2c2f058803", + "id": "c84adef6-51b3-46c5-8490-c2a1ad967769", "metadata": {}, "outputs": [], "source": [ @@ -54,7 +55,7 @@ " os.environ[var] = getpass.getpass(f\"Please provide your {var}\")\n", "\n", "\n", - "_set_if_undefined(\"ANTHROPIC_API_KEY\")\n", + "_set_if_undefined(\"OPENAI_API_KEY\")\n", "_set_if_undefined(\"TAVILY_API_KEY\")" ] }, @@ -73,183 +74,423 @@ }, { "cell_type": "markdown", - "id": "1ac25624-4d83-45a4-b9ef-a10589aacfb7", + "id": "349a5673-962e-4de9-ac19-70ee426ef433", "metadata": {}, "source": [ - "## Create tools\n", - "\n", - "For this example, you will make an agent to do web research with a search engine, and one agent to create plots. Define the tools they'll use below:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f04c6778-403b-4b49-9b93-678e910d5cec", - "metadata": {}, - "outputs": [], - "source": [ - "from typing import Annotated\n", - "\n", - "from langchain_community.tools.tavily_search import TavilySearchResults\n", - "from langchain_core.tools import tool\n", - "from langchain_experimental.utilities import PythonREPL\n", - "\n", - "tavily_tool = TavilySearchResults(max_results=5)\n", - "\n", - "# This executes code locally, which can be unsafe\n", - "repl = PythonREPL()\n", - "\n", - "\n", - "@tool\n", - "def python_repl_tool(\n", - " code: Annotated[str, \"The python code to execute to generate your chart.\"],\n", - "):\n", - " \"\"\"Use this to execute python code and do math. If you want to see the output of a value,\n", - " you should print it out with `print(...)`. This is visible to the user.\"\"\"\n", - " try:\n", - " result = repl.run(code)\n", - " except BaseException as e:\n", - " return f\"Failed to execute. Error: {repr(e)}\"\n", - " result_str = f\"Successfully executed:\\n```python\\n{code}\\n```\\nStdout: {result}\"\n", - " return result_str" + "## 1. Create worker agents" ] }, { + "attachments": {}, "cell_type": "markdown", - "id": "d32962d2-5487-496d-aefc-2a3b0d194985", + "id": "ad822cf5-56d4-47f7-ad64-d9fd3f57551e", "metadata": {}, "source": [ - "### Create Agent Supervisor\n", + "First, let's create our specialized worker agents — research agent and math agent:\n", "\n", - "It will use LLM with structured output to choose the next worker node OR finish processing." + "* Research agent will have access to a web search tool using [Tavily API](https://tavily.com/)\n", + "* Math agent will have access to simple math tools (`add`, `multiply`, `divide`)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "5e34989a-8989-432e-b6aa-8de91ab83372", + "metadata": {}, + "source": [ + "### Research agent\n", + "\n", + "For web search, we will use `TavilySearch` tool from `langchain-tavily`:" ] }, { "cell_type": "code", "execution_count": 3, - "id": "df2bd80b-c477-4d74-8faa-1c0548622239", + "id": "0fdc7345-2967-484b-881a-114dfac3f534", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mayor Eric Adams has served the people of New York City as an NYPD officer, State Senator, Brooklyn Borough President, and now as the 110th Mayor of the City of New York. He gave voice to a diverse coalition of working families in all five boroughs and is leading the fight to bring back New York City’s economy, reduce inequality, improve public safety, and build a stronger, healthier city that delivers for all New Yorkers. Mayor Eric Adams has served the people of New York City as an NYPD officer, State Senator, Brooklyn Borough President, and now as the 110th Mayor of the City of New York. NYC is a trademark and service mark of the City of New York.\n" + ] + } + ], "source": [ - "from typing import Literal\n", - "from typing_extensions import TypedDict\n", + "from langchain_tavily import TavilySearch\n", "\n", - "from langchain_anthropic import ChatAnthropic\n", - "from langgraph.graph import MessagesState, END\n", - "from langgraph.types import Command\n", + "web_search = TavilySearch(max_results=3)\n", + "web_search_results = web_search.invoke(\"who is the mayor of NYC?\")\n", "\n", - "\n", - "members = [\"researcher\", \"coder\"]\n", - "# Our team supervisor is an LLM node. It just picks the next agent to process\n", - "# and decides when the work is completed\n", - "options = members + [\"FINISH\"]\n", - "\n", - "system_prompt = (\n", - " \"You are a supervisor tasked with managing a conversation between the\"\n", - " f\" following workers: {members}. Given the following user request,\"\n", - " \" respond with the worker to act next. Each worker will perform a\"\n", - " \" task and respond with their results and status. When finished,\"\n", - " \" respond with FINISH.\"\n", - ")\n", - "\n", - "\n", - "class Router(TypedDict):\n", - " \"\"\"Worker to route to next. If no workers needed, route to FINISH.\"\"\"\n", - "\n", - " next: Literal[*options]\n", - "\n", - "\n", - "llm = ChatAnthropic(model=\"claude-3-5-sonnet-latest\")\n", - "\n", - "\n", - "class State(MessagesState):\n", - " next: str\n", - "\n", - "\n", - "def supervisor_node(state: State) -> Command[Literal[*members, \"__end__\"]]:\n", - " messages = [\n", - " {\"role\": \"system\", \"content\": system_prompt},\n", - " ] + state[\"messages\"]\n", - " response = llm.with_structured_output(Router).invoke(messages)\n", - " goto = response[\"next\"]\n", - " if goto == \"FINISH\":\n", - " goto = END\n", - "\n", - " return Command(goto=goto, update={\"next\": goto})" + "print(web_search_results[\"results\"][0][\"content\"])" ] }, { "cell_type": "markdown", - "id": "a07d507f-34d1-4f1b-8dde-5e58d17b2166", + "id": "cc899eb6-b08e-41b8-b92b-75908c44e8b0", "metadata": {}, "source": [ - "## Construct Graph\n", + "To create individual worker agents, we will use LangGraph's prebuilt [agent](../../../agents/agents#basic-configuration)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "15e179e4-1a49-4c76-9235-0ca989eb0d2d", + "metadata": {}, + "outputs": [], + "source": [ + "from langgraph.prebuilt import create_react_agent\n", "\n", - "We're ready to start building the graph. Below, define the state and worker nodes using the function we just defined." + "research_agent = create_react_agent(\n", + " model=\"openai:gpt-4.1\",\n", + " tools=[web_search],\n", + " prompt=(\n", + " \"You are a research agent.\\n\\n\"\n", + " \"INSTRUCTIONS:\\n\"\n", + " \"- Assist ONLY with research-related tasks, DO NOT do any math\\n\"\n", + " \"- After you're done with your tasks, respond to the supervisor directly\\n\"\n", + " \"- Respond ONLY with the results of your work, do NOT include ANY other text.\"\n", + " ),\n", + " name=\"research_agent\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "023ae2f2-517b-4611-a0ca-506b8c0b734e", + "metadata": {}, + "source": [ + "Let's [run the agent](../../../agents/run_agents) to verify that it behaves as expected. \n", + "\n", + "\n", + "??? note \"We'll use `pretty_print_messages` helper to render the streamed agent outputs nicely\"\n", + "\n", + " ```python\n", + " from langchain_core.messages import convert_to_messages\n", + " \n", + " \n", + " def pretty_print_message(message, indent=False):\n", + " pretty_message = message.pretty_repr(html=True)\n", + " if not indent:\n", + " print(pretty_message)\n", + " return\n", + " \n", + " indented = \"\\n\".join(\"\\t\" + c for c in pretty_message.split(\"\\n\"))\n", + " print(indented)\n", + " \n", + " \n", + " def pretty_print_messages(update, last_message=False):\n", + " is_subgraph = False\n", + " if isinstance(update, tuple):\n", + " ns, update = update\n", + " # skip parent graph updates in the printouts\n", + " if len(ns) == 0:\n", + " return\n", + " \n", + " graph_id = ns[-1].split(\":\")[0]\n", + " print(f\"Update from subgraph {graph_id}:\")\n", + " print(\"\\n\")\n", + " is_subgraph = True\n", + " \n", + " for node_name, node_update in update.items():\n", + " update_label = f\"Update from node {node_name}:\"\n", + " if is_subgraph:\n", + " update_label = \"\\t\" + update_label\n", + " \n", + " print(update_label)\n", + " print(\"\\n\")\n", + " \n", + " messages = convert_to_messages(node_update[\"messages\"])\n", + " if last_message:\n", + " messages = messages[-1:]\n", + " \n", + " for m in messages:\n", + " pretty_print_message(m, indent=is_subgraph)\n", + " print(\"\\n\")\n", + " ```" ] }, { "cell_type": "code", "execution_count": 5, - "id": "6a430af7-8fce-4e66-ba9e-d940c1bc48e8", + "id": "bfaa81e6", "metadata": {}, "outputs": [], "source": [ - "from langchain_core.messages import HumanMessage\n", - "from langgraph.graph import StateGraph, START, END\n", - "from langgraph.prebuilt import create_react_agent\n", + "# hide-cell\n", + "from langchain_core.messages import convert_to_messages\n", "\n", "\n", - "research_agent = create_react_agent(\n", - " llm, tools=[tavily_tool], prompt=\"You are a researcher. DO NOT do any math.\"\n", - ")\n", + "def pretty_print_message(message, indent=False):\n", + " pretty_message = message.pretty_repr(html=True)\n", + " if not indent:\n", + " print(pretty_message)\n", + " return\n", + "\n", + " indented = \"\\n\".join(\"\\t\" + c for c in pretty_message.split(\"\\n\"))\n", + " print(indented)\n", "\n", "\n", - "def research_node(state: State) -> Command[Literal[\"supervisor\"]]:\n", - " result = research_agent.invoke(state)\n", - " return Command(\n", - " update={\n", - " \"messages\": [\n", - " HumanMessage(content=result[\"messages\"][-1].content, name=\"researcher\")\n", - " ]\n", - " },\n", - " goto=\"supervisor\",\n", - " )\n", + "def pretty_print_messages(update, last_message=False):\n", + " is_subgraph = False\n", + " if isinstance(update, tuple):\n", + " ns, update = update\n", + " # skip parent graph updates in the printouts\n", + " if len(ns) == 0:\n", + " return\n", "\n", + " graph_id = ns[-1].split(\":\")[0]\n", + " print(f\"Update from subgraph {graph_id}:\")\n", + " print(\"\\n\")\n", + " is_subgraph = True\n", "\n", - "# NOTE: THIS PERFORMS ARBITRARY CODE EXECUTION, WHICH CAN BE UNSAFE WHEN NOT SANDBOXED\n", - "code_agent = create_react_agent(llm, tools=[python_repl_tool])\n", + " for node_name, node_update in update.items():\n", + " update_label = f\"Update from node {node_name}:\"\n", + " if is_subgraph:\n", + " update_label = \"\\t\" + update_label\n", "\n", + " print(update_label)\n", + " print(\"\\n\")\n", "\n", - "def code_node(state: State) -> Command[Literal[\"supervisor\"]]:\n", - " result = code_agent.invoke(state)\n", - " return Command(\n", - " update={\n", - " \"messages\": [\n", - " HumanMessage(content=result[\"messages\"][-1].content, name=\"coder\")\n", - " ]\n", - " },\n", - " goto=\"supervisor\",\n", - " )\n", + " messages = convert_to_messages(node_update[\"messages\"])\n", + " if last_message:\n", + " messages = messages[-1:]\n", "\n", + " for m in messages:\n", + " pretty_print_message(m, indent=is_subgraph)\n", + " print(\"\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "71474c5b-6a9b-460e-bf30-77831976aaf9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Update from node agent:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: research_agent\n", + "Tool Calls:\n", + " tavily_search (call_T4wrj7DKAG5hVtNVhjRYGdei)\n", + " Call ID: call_T4wrj7DKAG5hVtNVhjRYGdei\n", + " Args:\n", + " query: current mayor of New York City\n", + "\n", + "\n", + "Update from node tools:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: tavily_search\n", + "\n", + "{\"query\": \"current mayor of New York City\", \"follow_up_questions\": null, \"answer\": null, \"images\": [], \"results\": [{\"title\": \"List of mayors of New York City - Wikipedia\", \"url\": \"https://en.wikipedia.org/wiki/List_of_mayors_of_New_York_City\", \"content\": \"The mayor of New York City is the chief executive of the Government of New York City, as stipulated by New York City's charter.The current officeholder, the 110th in the sequence of regular mayors, is Eric Adams, a member of the Democratic Party.. During the Dutch colonial period from 1624 to 1664, New Amsterdam was governed by the Director of New Netherland.\", \"score\": 0.9039154, \"raw_content\": null}, {\"title\": \"Office of the Mayor | Mayor's Bio | City of New York - NYC.gov\", \"url\": \"https://www.nyc.gov/office-of-the-mayor/bio.page\", \"content\": \"Mayor Eric Adams has served the people of New York City as an NYPD officer, State Senator, Brooklyn Borough President, and now as the 110th Mayor of the City of New York. He gave voice to a diverse coalition of working families in all five boroughs and is leading the fight to bring back New York City's economy, reduce inequality, improve\", \"score\": 0.8405867, \"raw_content\": null}, {\"title\": \"Eric Adams - Wikipedia\", \"url\": \"https://en.wikipedia.org/wiki/Eric_Adams\", \"content\": \"Eric Leroy Adams (born September 1, 1960) is an American politician and former police officer who has served as the 110th mayor of New York City since 2022. Adams was an officer in the New York City Transit Police and then the New York City Police Department (NYPD) for more than 20 years, retiring at the rank of captain.He served in the New York State Senate from 2006 to 2013, representing the\", \"score\": 0.77731717, \"raw_content\": null}], \"response_time\": 1.31}\n", + "\n", + "\n", + "Update from node agent:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: research_agent\n", + "\n", + "The current mayor of New York City is Eric Adams.\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for chunk in research_agent.stream(\n", + " {\"messages\": [{\"role\": \"user\", \"content\": \"who is the mayor of NYC?\"}]}\n", + "):\n", + " pretty_print_messages(chunk)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "95e76c28-e9c9-42b7-8381-5e2a07f900cb", + "metadata": {}, + "source": [ + "### Math agent\n", "\n", - "builder = StateGraph(State)\n", - "builder.add_edge(START, \"supervisor\")\n", - "builder.add_node(\"supervisor\", supervisor_node)\n", - "builder.add_node(\"researcher\", research_node)\n", - "builder.add_node(\"coder\", code_node)\n", - "graph = builder.compile()" + "For math agent tools we will use [vanilla Python functions](../../../agents/tools#define-simple-tools):" ] }, { "cell_type": "code", "execution_count": 7, - "id": "0175fe14-5854-4197-b7e8-559335d0f81b", + "id": "95910bb8-7144-4015-9ea4-d97d0c22db12", + "metadata": {}, + "outputs": [], + "source": [ + "def add(a: float, b: float):\n", + " \"\"\"Add two numbers.\"\"\"\n", + " return a + b\n", + "\n", + "\n", + "def multiply(a: float, b: float):\n", + " \"\"\"Multiply two numbers.\"\"\"\n", + " return a * b\n", + "\n", + "\n", + "def divide(a: float, b: float):\n", + " \"\"\"Divide two numbers.\"\"\"\n", + " return a / b\n", + "\n", + "\n", + "math_agent = create_react_agent(\n", + " model=\"openai:gpt-4.1\",\n", + " tools=[add, multiply, divide],\n", + " prompt=(\n", + " \"You are a math agent.\\n\\n\"\n", + " \"INSTRUCTIONS:\\n\"\n", + " \"- Assist ONLY with math-related tasks\\n\"\n", + " \"- After you're done with your tasks, respond to the supervisor directly\\n\"\n", + " \"- Respond ONLY with the results of your work, do NOT include ANY other text.\"\n", + " ),\n", + " name=\"math_agent\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0df97bc0-f38b-4893-a135-c16cecbfa759", + "metadata": {}, + "source": [ + "Let's run the math agent:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f803943c-6dd2-4b42-93ba-0210ec276132", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Update from node agent:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: math_agent\n", + "Tool Calls:\n", + " add (call_LqyOrR1Ktr2LVLDlXpbWNAsp)\n", + " Call ID: call_LqyOrR1Ktr2LVLDlXpbWNAsp\n", + " Args:\n", + " a: 3\n", + " b: 5\n", + "\n", + "\n", + "Update from node tools:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: add\n", + "\n", + "8.0\n", + "\n", + "\n", + "Update from node agent:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: math_agent\n", + "Tool Calls:\n", + " multiply (call_IBXYtlEMdZrfDZ8g8bWC31pM)\n", + " Call ID: call_IBXYtlEMdZrfDZ8g8bWC31pM\n", + " Args:\n", + " a: 8\n", + " b: 7\n", + "\n", + "\n", + "Update from node tools:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: multiply\n", + "\n", + "56.0\n", + "\n", + "\n", + "Update from node agent:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: math_agent\n", + "\n", + "56\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for chunk in math_agent.stream(\n", + " {\"messages\": [{\"role\": \"user\", \"content\": \"what's (3 + 5) x 7\"}]}\n", + "):\n", + " pretty_print_messages(chunk)" + ] + }, + { + "cell_type": "markdown", + "id": "dceefc4c-95e1-4565-8946-4c113a11416a", + "metadata": {}, + "source": [ + "## 2. Create supervisor with `langgraph-supervisor`" + ] + }, + { + "cell_type": "markdown", + "id": "eb5637a4-8ecb-4c2c-82f5-3674205e37b5", + "metadata": {}, + "source": [ + "To implement out multi-agent system, we will use [`create_supervisor`][langgraph_supervisor.supervisor.create_supervisor] from the prebuilt `langgraph-supervisor` library:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6f32a820-1f3d-4698-831b-46252e2316bc", + "metadata": {}, + "outputs": [], + "source": [ + "from langgraph_supervisor import create_supervisor\n", + "from langchain.chat_models import init_chat_model\n", + "\n", + "supervisor = create_supervisor(\n", + " model=init_chat_model(\"openai:gpt-4.1\"),\n", + " agents=[research_agent, math_agent],\n", + " prompt=(\n", + " \"You are a supervisor managing two agents:\\n\"\n", + " \"- a research agent. Assign research-related tasks to this agent\\n\"\n", + " \"- a math agent. Assign math-related tasks to this agent\\n\"\n", + " \"Assign work to one agent at a time, do not call agents in parallel.\\n\"\n", + " \"Do not do any work yourself.\"\n", + " ),\n", + " add_handoff_back_messages=True,\n", + " output_mode=\"full_history\",\n", + ").compile()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4c45a3c2-4d9e-4760-87bc-3cc2c007a167", "metadata": {}, "outputs": [ { "data": { - "image/jpeg": "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", + "image/png": "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", "text/plain": [ "" ] @@ -261,7 +502,305 @@ "source": [ "from IPython.display import display, Image\n", "\n", - "display(Image(graph.get_graph().draw_mermaid_png()))" + "display(Image(supervisor.get_graph().draw_mermaid_png()))" + ] + }, + { + "cell_type": "markdown", + "id": "3a94c3d1-3617-4d68-ac9a-b9bb2c05a604", + "metadata": {}, + "source": [ + "Let's now run it with a query that requires both agents:\n", + "\n", + "* research agent will look up the necessary GDP information\n", + "* math agent will perform division to find the percentage of NY state GDP, as requested" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "89b77171-58d0-4b36-8cb3-b69d69e4bdf9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Update from node supervisor:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_to_research_agent\n", + "\n", + "Successfully transferred to research_agent\n", + "\n", + "\n", + "Update from node research_agent:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_back_to_supervisor\n", + "\n", + "Successfully transferred back to supervisor\n", + "\n", + "\n", + "Update from node supervisor:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_to_math_agent\n", + "\n", + "Successfully transferred to math_agent\n", + "\n", + "\n", + "Update from node math_agent:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_back_to_supervisor\n", + "\n", + "Successfully transferred back to supervisor\n", + "\n", + "\n", + "Update from node supervisor:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: supervisor\n", + "\n", + "The US GDP in 2024 was $29.017 trillion, and New York State's GDP was $2.284 trillion. New York State accounted for approximately 7.87% of the total US GDP in 2024.\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for chunk in supervisor.stream(\n", + " {\n", + " \"messages\": [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"find US and New York state GDP in 2024. what % of US GDP was New York state?\",\n", + " }\n", + " ]\n", + " },\n", + "):\n", + " pretty_print_messages(chunk, last_message=True)\n", + "\n", + "final_message_history = chunk[\"supervisor\"][\"messages\"]" + ] + }, + { + "cell_type": "markdown", + "id": "599b8d13-70a9-40f3-99b9-5e3d35cc6f56", + "metadata": {}, + "source": [ + "## 3. Create supervisor from scratch" + ] + }, + { + "cell_type": "markdown", + "id": "e23764f8-f818-45f3-a5ee-4cb7b7002336", + "metadata": {}, + "source": [ + "Let's now implement this same multi-agent system from scratch. We will need to:\n", + "\n", + "1. Set up how the supervisor [communicates](#set-up-agent-communication) with individual agents\n", + "2. Create the [supervisor agent](#create-supervisor-agent)\n", + "3. [Combine]() supervisor and worker agents into a single multi-agent graph." + ] + }, + { + "cell_type": "markdown", + "id": "78d32089-0259-4aa3-a473-077ecce342dd", + "metadata": {}, + "source": [ + "### Set up agent communication" + ] + }, + { + "cell_type": "markdown", + "id": "a6c6b436-e95b-476b-b427-7b02d8384cc5", + "metadata": {}, + "source": [ + "We will need to define a way for the supervisor agent to communicate with the worker agents. A common way to implement this in multi-agent architectures is using **handoffs**, where one agent *hands off* control to another. Handoffs allow you to specify:\n", + "\n", + "- **destination**: target agent to transfer to\n", + "- **payload**: information to pass to that agent\n", + "\n", + "We will implement handoffs via **handoff tools** and give these tools to the supervisor agent: when the supervisor calls these tools, it will hand off control to a worker agent, passing the full message history to that agent." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7873a6c3-7de0-46d1-96ce-2dca7c62245a", + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Annotated\n", + "from langchain_core.tools import tool, InjectedToolCallId\n", + "from langgraph.prebuilt import InjectedState\n", + "from langgraph.graph import StateGraph, START, MessagesState\n", + "from langgraph.types import Command\n", + "\n", + "\n", + "def create_handoff_tool(*, agent_name: str, description: str | None = None):\n", + " name = f\"transfer_to_{agent_name}\"\n", + " description = description or f\"Ask {agent_name} for help.\"\n", + "\n", + " @tool(name, description=description)\n", + " def handoff_tool(\n", + " state: Annotated[MessagesState, InjectedState],\n", + " tool_call_id: Annotated[str, InjectedToolCallId],\n", + " ) -> Command:\n", + " tool_message = {\n", + " \"role\": \"tool\",\n", + " \"content\": f\"Successfully transferred to {agent_name}\",\n", + " \"name\": name,\n", + " \"tool_call_id\": tool_call_id,\n", + " }\n", + " # highlight-next-line\n", + " return Command(\n", + " # highlight-next-line\n", + " goto=agent_name, # (1)!\n", + " # highlight-next-line\n", + " update={**state, \"messages\": state[\"messages\"] + [tool_message]}, # (2)!\n", + " # highlight-next-line\n", + " graph=Command.PARENT, # (3)!\n", + " )\n", + "\n", + " return handoff_tool\n", + "\n", + "\n", + "# Handoffs\n", + "assign_to_research_agent = create_handoff_tool(\n", + " agent_name=\"research_agent\",\n", + " description=\"Assign task to a researcher agent.\",\n", + ")\n", + "\n", + "assign_to_math_agent = create_handoff_tool(\n", + " agent_name=\"math_agent\",\n", + " description=\"Assign task to a math agent.\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "3bc810a4-1866-4915-abd9-12655954e673", + "metadata": {}, + "source": [ + "1. Name of the agent or node to hand off to.\n", + "2. Take the agent's messages and add them to the parent's state as part of the handoff. The next agent will see the parent state.\n", + "3. Indicate to LangGraph that we need to navigate to agent node in a **parent** multi-agent graph." + ] + }, + { + "cell_type": "markdown", + "id": "6a7bd301-c954-4189-87e2-b3bf42d187c1", + "metadata": {}, + "source": [ + "### Create supervisor agent" + ] + }, + { + "cell_type": "markdown", + "id": "ca787ce6-46f9-49c3-8f9f-ddb7ff52cdeb", + "metadata": {}, + "source": [ + "Then, let's create the supervisor agent with the handoff tools we just defined. We will use the prebuilt [`create_react_agent`][langgraph.prebuilt.chat_agent_executor.create_react_agent]:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "de5d1ff8-e7a0-4efe-93fe-d304eaef29b6", + "metadata": {}, + "outputs": [], + "source": [ + "supervisor_agent = create_react_agent(\n", + " model=\"openai:gpt-4.1\",\n", + " tools=[assign_to_research_agent, assign_to_math_agent],\n", + " prompt=(\n", + " \"You are a supervisor managing two agents:\\n\"\n", + " \"- a research agent. Assign research-related tasks to this agent\\n\"\n", + " \"- a math agent. Assign math-related tasks to this agent\\n\"\n", + " \"Assign work to one agent at a time, do not call agents in parallel.\\n\"\n", + " \"Do not do any work yourself.\"\n", + " ),\n", + " name=\"supervisor\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "dd4bc4e2-e133-42fd-a47f-6fb63fa51697", + "metadata": {}, + "source": [ + "### Create multi-agent graph" + ] + }, + { + "cell_type": "markdown", + "id": "8e6dcae1-eb91-4a07-aef8-53cbed14a002", + "metadata": {}, + "source": [ + "Putting this all together, let's create a graph for our overall multi-agent system. We will add the supervisor and the individual agents as [subgraph](../../../concepts/low_level#subgraphs) nodes." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "584443af-587a-44f3-a320-f942868191e4", + "metadata": {}, + "outputs": [], + "source": [ + "from langgraph.graph import END\n", + "\n", + "# Define the multi-agent supervisor graph\n", + "supervisor = (\n", + " StateGraph(MessagesState)\n", + " # NOTE: `destinations` is only needed for visualization and doesn't affect runtime behavior\n", + " .add_node(supervisor_agent, destinations=(\"research_agent\", \"math_agent\", END))\n", + " .add_node(research_agent)\n", + " .add_node(math_agent)\n", + " .add_edge(START, \"supervisor\")\n", + " # always return back to the supervisor\n", + " .add_edge(\"research_agent\", \"supervisor\")\n", + " .add_edge(\"math_agent\", \"supervisor\")\n", + " .compile()\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "12576211-a946-46ec-bf81-24215597a1fe", + "metadata": {}, + "source": [ + "Notice that we've added explicit [edges](../../../concepts/low_level#edges) from worker agents back to the supervisor — this means that they are guaranteed to return control back to the supervisor. If you want the agents to respond directly to the user (i.e., turn the system into a router, you can remove these edges)." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "0175fe14-5854-4197-b7e8-559335d0f81b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display, Image\n", + "\n", + "display(Image(supervisor.get_graph().draw_mermaid_png()))" ] }, { @@ -269,14 +808,12 @@ "id": "d36496de-7121-4c49-8cb6-58c943c66628", "metadata": {}, "source": [ - "## Invoke the team\n", - "\n", - "With the graph created, we can now invoke it and see how it performs!" + "With the multi-agent graph created, let's now run it!" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 16, "id": "56ba78e9-d9c1-457c-a073-d606d5d3e013", "metadata": {}, "outputs": [ @@ -284,95 +821,462 @@ "name": "stdout", "output_type": "stream", "text": [ - "((), {'supervisor': {'next': 'coder'}})\n", - "----\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Python REPL can execute arbitrary code. Use with caution.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(('coder:a0c2a6de-4a2d-3573-4049-cba490183bc1',), {'agent': {'messages': [AIMessage(content=[{'text': \"I'll help you calculate the square root of 42 using Python.\", 'type': 'text'}, {'id': 'toolu_011Nsa2En2Qk1SsYBdG6zveY', 'input': {'code': 'import math\\nprint(math.sqrt(42))'}, 'name': 'python_repl_tool', 'type': 'tool_use'}], additional_kwargs={}, response_metadata={'id': 'msg_016CdBcK9JKm39tsuGH6skhN', 'model': 'claude-3-5-sonnet-20241022', 'stop_reason': 'tool_use', 'stop_sequence': None, 'usage': {'input_tokens': 435, 'output_tokens': 82}}, id='run-f9be84c7-1569-4f53-9063-b1244339755b-0', tool_calls=[{'name': 'python_repl_tool', 'args': {'code': 'import math\\nprint(math.sqrt(42))'}, 'id': 'toolu_011Nsa2En2Qk1SsYBdG6zveY', 'type': 'tool_call'}], usage_metadata={'input_tokens': 435, 'output_tokens': 82, 'total_tokens': 517, 'input_token_details': {}})]}})\n", - "----\n", - "(('coder:a0c2a6de-4a2d-3573-4049-cba490183bc1',), {'tools': {'messages': [ToolMessage(content='Successfully executed:\\n```python\\nimport math\\nprint(math.sqrt(42))\\n```\\nStdout: 6.48074069840786\\n', name='python_repl_tool', id='8b6bd229-5c63-43a4-9d63-e3b4a8468e21', tool_call_id='toolu_011Nsa2En2Qk1SsYBdG6zveY')]}})\n", - "----\n", - "(('coder:a0c2a6de-4a2d-3573-4049-cba490183bc1',), {'agent': {'messages': [AIMessage(content='The square root of 42 is approximately 6.4807 (rounded to 4 decimal places).', additional_kwargs={}, response_metadata={'id': 'msg_01QYQtz84F1Mgqyp2ecw4TEu', 'model': 'claude-3-5-sonnet-20241022', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 561, 'output_tokens': 28}}, id='run-b9dfff5d-f1c4-44d6-98d7-80f0e8548bcd-0', usage_metadata={'input_tokens': 561, 'output_tokens': 28, 'total_tokens': 589, 'input_token_details': {}})]}})\n", - "----\n", - "((), {'coder': {'messages': [HumanMessage(content='The square root of 42 is approximately 6.4807 (rounded to 4 decimal places).', additional_kwargs={}, response_metadata={}, name='coder')]}})\n", - "----\n", - "((), {'supervisor': {'next': '__end__'}})\n", - "----\n" + "Update from node supervisor:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_to_research_agent\n", + "\n", + "Successfully transferred to research_agent\n", + "\n", + "\n", + "Update from node research_agent:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: research_agent\n", + "\n", + "- US GDP in 2024: $29.017 trillion (nominal, current prices)\n", + "- New York state GDP in 2024: $2.284 trillion\n", + "- New York state's share of US GDP in 2024: 7.87%\n", + "\n", + "\n", + "Update from node supervisor:\n", + "\n", + "\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_to_math_agent\n", + "\n", + "Successfully transferred to math_agent\n", + "\n", + "\n", + "Update from node math_agent:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: math_agent\n", + "\n", + "US GDP in 2024: $29.017 trillion\n", + "New York state GDP in 2024: $2.284 trillion\n", + "New York state's share of US GDP: 7.87%\n", + "\n", + "\n", + "Update from node supervisor:\n", + "\n", + "\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: supervisor\n", + "\n", + "US GDP in 2024 was $29.017 trillion. New York state GDP in 2024 was $2.284 trillion. New York state's GDP was about 7.87% of the US GDP.\n", + "\n", + "\n" ] } ], "source": [ - "for s in graph.stream(\n", - " {\"messages\": [(\"user\", \"What's the square root of 42?\")]}, subgraphs=True\n", + "for chunk in supervisor.stream(\n", + " {\n", + " \"messages\": [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"find US and New York state GDP in 2024. what % of US GDP was New York state?\",\n", + " }\n", + " ]\n", + " },\n", "):\n", - " print(s)\n", - " print(\"----\")" + " pretty_print_messages(chunk, last_message=True)\n", + "\n", + "final_message_history = chunk[\"supervisor\"][\"messages\"]" + ] + }, + { + "cell_type": "markdown", + "id": "dac583a8-af2c-402f-801e-15a6bc318e44", + "metadata": {}, + "source": [ + "Let's examine the full resulting message history:" ] }, { "cell_type": "code", - "execution_count": 12, - "id": "45a92dfd-0e11-47f5-aad4-b68d24990e34", + "execution_count": 17, + "id": "1eff504c-7437-477e-ab28-936c1238eaca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "((), {'supervisor': {'next': 'researcher'}})\n", - "----\n", - "(('researcher:7daea379-a5b6-6d3d-ef85-fffc96d7472e',), {'agent': {'messages': [AIMessage(content=[{'text': \"I'll help you search for the GDP data of New York and California using the search tool. Then I'll note the values, but as instructed, I won't perform the mathematical calculation myself.\", 'type': 'text'}, {'id': 'toolu_01S9hPD5nFsW1A2nE4fwCvRc', 'input': {'query': 'latest GDP of New York state 2023'}, 'name': 'tavily_search_results_json', 'type': 'tool_use'}], additional_kwargs={}, response_metadata={'id': 'msg_01RetKetMGpP2Q51w4R8N81e', 'model': 'claude-3-5-sonnet-20241022', 'stop_reason': 'tool_use', 'stop_sequence': None, 'usage': {'input_tokens': 442, 'output_tokens': 107}}, id='run-6e738192-18ae-4c1a-bbc0-f8b8509fe656-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': 'latest GDP of New York state 2023'}, 'id': 'toolu_01S9hPD5nFsW1A2nE4fwCvRc', 'type': 'tool_call'}], usage_metadata={'input_tokens': 442, 'output_tokens': 107, 'total_tokens': 549, 'input_token_details': {}})]}})\n", - "----\n", - "(('researcher:7daea379-a5b6-6d3d-ef85-fffc96d7472e',), {'tools': {'messages': [ToolMessage(content='[{\"url\": \"https://usafacts.org/metrics/gross-domestic-product-gdp-by-state-new-york/\", \"content\": \"Gross domestic product (GDP) state — New York (dollars) Adjustment. None. Adjustment. Frequency. Yearly. Frequency. In 2022 (most recent), Gross domestic product (GDP) was $2,053,179,700,000 in the United States for New York (state). ... August 25, 2023. Suggested citation: Explore in... Less detail\"}, {\"url\": \"https://www.osc.ny.gov/reports/finance/2023-fcr/economic-and-demographic-trends\", \"content\": \"These include, but are not limited to:\\\\nBecause Google Translate™ is intellectual property owned by Google Inc., you must use Google Translate™ in accord with the Google license agreement, which includes potential liability for misuse: Google Terms of Service.\\\\nOffice of the NEW YORK\\\\nSTATE COMPTROLLER\\\\nNYS Comptroller Thomas P. DiNapoli\\\\nMain navigation\\\\nGET to KnowNew York State ComptrollerThomas P. DiNapoli\\\\nRead BIO\\\\nGET to KnowNew York State ComptrollerThomas P. DiNapoli\\\\nMenu\\\\nEconomic and Demographic Trends\\\\n2023 Financial Condition Report For Fiscal Year Ended March 31, 2023\\\\nEmployment Still Below Pre- Pandemic Levels in 2022\\\\nNew York Ranked 45th Nationwide for Personal Income Growth in 2022\\\\nNYS GDP Nearly $1.6 Trillion in 2022\\\\nA state’s Gross Domestic Product (GDP) is the value of production originating from all industries in the state, as defined by the U.S. Bureau of Economic Analysis.\\\\n The State of New York, its officers, employees, and/or agents are not liable to you, or to third parties, for damages or losses of any kind arising out of, or in connection with, the use or performance of such information. New York’s Population Continued to Decline in 2022\\\\nBook traversal links for Economic and Demographic Trends\\\\nTell us more about you to receive content related to your area or interests.\\\\n The Office of the State Comptroller does not warrant, promise, assure or guarantee the accuracy of the translations provided.\"}, {\"url\": \"https://www.statista.com/statistics/188087/gdp-of-the-us-federal-state-of-new-york-since-1997/\", \"content\": \"Industry Overview\\\\nDigital & Trend reports\\\\nOverview and forecasts on trending topics\\\\nIndustry & Market reports\\\\nIndustry and market insights and forecasts\\\\nCompanies & Products reports\\\\nKey figures and rankings about companies and products\\\\nConsumer & Brand reports\\\\nConsumer and brand insights and preferences in various industries\\\\nPolitics & Society reports\\\\nDetailed information about political and social topics\\\\nCountry & Region reports\\\\nAll key figures about countries and regions\\\\nMarket forecast and expert KPIs for 1000+ markets in 190+ countries & territories\\\\nInsights on consumer attitudes and behavior worldwide\\\\nBusiness information on 100m+ public and private companies\\\\nExplore Company Insights\\\\nDetailed information for 39,000+ online stores and marketplaces\\\\nDirectly accessible data for 170 industries from 150+ countries\\\\nand over 1\\xa0Mio. facts.\\\\n Transforming data into design:\\\\nStatista Content & Design\\\\nStrategy and business building for the data-driven economy:\\\\nU.S. real GDP of New York 2000-2022\\\\nReal gross domestic product of New York in the United States\\\\nfrom 2000 to 2022\\\\n(in billion U.S. dollars)\\\\nAdditional Information\\\\nShow sources information\\\\nShow publisher information\\\\nUse Ask Statista Research Service\\\\nMarch 2023\\\\nUnited States\\\\n2000 to 2022\\\\nData presented here is in 2012 chained U.S. dollars.\\\\n Statistics on\\\\n\\\\\"\\\\nNew York\\\\n\\\\\"\\\\nOther statistics that may interest you New York\\\\nPopulation\\\\nEconomy\\\\nEmployment & Earnings\\\\nState & Local Government\\\\nNew York City\\\\nFurther related statistics\\\\nFurther Content: You might find this interesting as well\\\\nStatistics\\\\nTopics Other statistics on the topic\\\\nEconomy\\\\nU.S. real gross domestic product 2022, by state\\\\nPolitics & Government\\\\nU.S. state and local government outstanding debt 2021, by state\\\\nDemographics\\\\nResident population in New York 1960-2022\\\\nEconomy\\\\nU.S. New York metro area GDP 2001-2022\\\\nYou only have access to basic statistics.\\\\n Customized Research & Analysis projects:\\\\nGet quick analyses with our professional research service\\\\nThe best of the best: the portal for top lists & rankings:\\\\n\"}, {\"url\": \"https://www.statista.com/statistics/306777/new-york-gdp-growth/\", \"content\": \"Industry Overview\\\\nDigital & Trend reports\\\\nOverview and forecasts on trending topics\\\\nIndustry & Market reports\\\\nIndustry and market insights and forecasts\\\\nCompanies & Products reports\\\\nKey figures and rankings about companies and products\\\\nConsumer & Brand reports\\\\nConsumer and brand insights and preferences in various industries\\\\nPolitics & Society reports\\\\nDetailed information about political and social topics\\\\nCountry & Region reports\\\\nAll key figures about countries and regions\\\\nMarket forecast and expert KPIs for 1000+ markets in 190+ countries & territories\\\\nInsights on consumer attitudes and behavior worldwide\\\\nBusiness information on 100m+ public and private companies\\\\nExplore Company Insights\\\\nDetailed information for 39,000+ online stores and marketplaces\\\\nDirectly accessible data for 170 industries from 150+ countries\\\\nand over 1\\xa0Mio. facts.\\\\n Other statistics on the topic\\\\nEconomy\\\\nU.S. real gross domestic product 2022, by state\\\\nPolitics & Government\\\\nU.S. state and local government outstanding debt 2021, by state\\\\nDemographics\\\\nResident population in New York 1960-2022\\\\nEconomy\\\\nU.S. New York metro area GDP 2001-2022\\\\nTo download this statistic in XLS format you need a Statista Account\\\\nTo download this statistic in PNG format you need a Statista Account\\\\nTo download this statistic in PDF format you need a Statista Account\\\\nTo download this statistic in PPT format you need a Statista Account\\\\nAs a Premium user you get access to the detailed source references and background information about this statistic.\\\\n Statistics on\\\\n\\\\\"\\\\nNew York\\\\n\\\\\"\\\\nOther statistics that may interest you New York\\\\nPopulation\\\\nEconomy\\\\nEmployment & Earnings\\\\nState & Local Government\\\\nNew York City\\\\nFurther related statistics\\\\nFurther Content: You might find this interesting as well\\\\nStatistics\\\\nTopics U.S. annual GDP growth in New York 2000-2022\\\\nAnnual percent change in the real gross domestic product of New York in the United States from 2000 to 2022\\\\nAdditional Information\\\\nShow sources information\\\\nShow publisher information\\\\nUse Ask Statista Research Service\\\\nOctober 2023\\\\nUnited States (New York)\\\\n2000 to 2022\\\\n Transforming data into design:\\\\nStatista Content & Design\\\\nStrategy and business building for the data-driven economy:\\\\nIndustry-specific and extensively researched technical data (partially from exclusive partnerships).\"}, {\"url\": \"https://www.bea.gov/news/2024/gross-domestic-product-state-and-personal-income-state-4th-quarter-2023-and-preliminary\", \"content\": \"Real gross domestic product (GDP) increased in all 50 states and the District of Columbia in the fourth quarter of 2023, with the percent change ranging from 6.7 percent in Nevada to 0.2 percent in Nebraska (table 1), according to statistics released today by the U.S. Bureau of Economic Analysis (BEA). Current-dollar GDP increased in 49 states and the District of Columbia.\"}]', name='tavily_search_results_json', id='a7ba20fa-57d5-43e9-9d15-29e4e6476edf', tool_call_id='toolu_01S9hPD5nFsW1A2nE4fwCvRc', artifact={'query': 'latest GDP of New York state 2023', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'title': 'Gross domestic product (GDP) - USAFacts', 'url': 'https://usafacts.org/metrics/gross-domestic-product-gdp-by-state-new-york/', 'content': 'Gross domestic product (GDP) state — New York (dollars) Adjustment. None. Adjustment. Frequency. Yearly. Frequency. In 2022 (most recent), Gross domestic product (GDP) was $2,053,179,700,000 in the United States for New York (state). ... August 25, 2023. Suggested citation: Explore in... Less detail', 'score': 0.99883956, 'raw_content': None}, {'title': 'Economic and Demographic Trends - Office of the New York State Comptroller', 'url': 'https://www.osc.ny.gov/reports/finance/2023-fcr/economic-and-demographic-trends', 'content': 'These include, but are not limited to:\\nBecause Google Translate™ is intellectual property owned by Google Inc., you must use Google Translate™ in accord with the Google license agreement, which includes potential liability for misuse: Google Terms of Service.\\nOffice of the NEW YORK\\nSTATE COMPTROLLER\\nNYS Comptroller Thomas P. DiNapoli\\nMain navigation\\nGET to KnowNew York State ComptrollerThomas P. DiNapoli\\nRead BIO\\nGET to KnowNew York State ComptrollerThomas P. DiNapoli\\nMenu\\nEconomic and Demographic Trends\\n2023 Financial Condition Report For Fiscal Year Ended March 31, 2023\\nEmployment Still Below Pre- Pandemic Levels in 2022\\nNew York Ranked 45th Nationwide for Personal Income Growth in 2022\\nNYS GDP Nearly $1.6 Trillion in 2022\\nA state’s Gross Domestic Product (GDP) is the value of production originating from all industries in the state, as defined by the U.S. Bureau of Economic Analysis.\\n The State of New York, its officers, employees, and/or agents are not liable to you, or to third parties, for damages or losses of any kind arising out of, or in connection with, the use or performance of such information. New York’s Population Continued to Decline in 2022\\nBook traversal links for Economic and Demographic Trends\\nTell us more about you to receive content related to your area or interests.\\n The Office of the State Comptroller does not warrant, promise, assure or guarantee the accuracy of the translations provided.', 'score': 0.97339284, 'raw_content': None}, {'title': 'Real GDP New York U.S. 2023 | Statista', 'url': 'https://www.statista.com/statistics/188087/gdp-of-the-us-federal-state-of-new-york-since-1997/', 'content': 'Industry Overview\\nDigital & Trend reports\\nOverview and forecasts on trending topics\\nIndustry & Market reports\\nIndustry and market insights and forecasts\\nCompanies & Products reports\\nKey figures and rankings about companies and products\\nConsumer & Brand reports\\nConsumer and brand insights and preferences in various industries\\nPolitics & Society reports\\nDetailed information about political and social topics\\nCountry & Region reports\\nAll key figures about countries and regions\\nMarket forecast and expert KPIs for 1000+ markets in 190+ countries & territories\\nInsights on consumer attitudes and behavior worldwide\\nBusiness information on 100m+ public and private companies\\nExplore Company Insights\\nDetailed information for 39,000+ online stores and marketplaces\\nDirectly accessible data for 170 industries from 150+ countries\\nand over 1\\xa0Mio. facts.\\n Transforming data into design:\\nStatista Content & Design\\nStrategy and business building for the data-driven economy:\\nU.S. real GDP of New York 2000-2022\\nReal gross domestic product of New York in the United States\\nfrom 2000 to 2022\\n(in billion U.S. dollars)\\nAdditional Information\\nShow sources information\\nShow publisher information\\nUse Ask Statista Research Service\\nMarch 2023\\nUnited States\\n2000 to 2022\\nData presented here is in 2012 chained U.S. dollars.\\n Statistics on\\n\"\\nNew York\\n\"\\nOther statistics that may interest you New York\\nPopulation\\nEconomy\\nEmployment & Earnings\\nState & Local Government\\nNew York City\\nFurther related statistics\\nFurther Content: You might find this interesting as well\\nStatistics\\nTopics Other statistics on the topic\\nEconomy\\nU.S. real gross domestic product 2022, by state\\nPolitics & Government\\nU.S. state and local government outstanding debt 2021, by state\\nDemographics\\nResident population in New York 1960-2022\\nEconomy\\nU.S. New York metro area GDP 2001-2022\\nYou only have access to basic statistics.\\n Customized Research & Analysis projects:\\nGet quick analyses with our professional research service\\nThe best of the best: the portal for top lists & rankings:\\n', 'score': 0.76454014, 'raw_content': None}, {'title': 'Annual GDP growth New York U.S. 2023 | Statista', 'url': 'https://www.statista.com/statistics/306777/new-york-gdp-growth/', 'content': 'Industry Overview\\nDigital & Trend reports\\nOverview and forecasts on trending topics\\nIndustry & Market reports\\nIndustry and market insights and forecasts\\nCompanies & Products reports\\nKey figures and rankings about companies and products\\nConsumer & Brand reports\\nConsumer and brand insights and preferences in various industries\\nPolitics & Society reports\\nDetailed information about political and social topics\\nCountry & Region reports\\nAll key figures about countries and regions\\nMarket forecast and expert KPIs for 1000+ markets in 190+ countries & territories\\nInsights on consumer attitudes and behavior worldwide\\nBusiness information on 100m+ public and private companies\\nExplore Company Insights\\nDetailed information for 39,000+ online stores and marketplaces\\nDirectly accessible data for 170 industries from 150+ countries\\nand over 1\\xa0Mio. facts.\\n Other statistics on the topic\\nEconomy\\nU.S. real gross domestic product 2022, by state\\nPolitics & Government\\nU.S. state and local government outstanding debt 2021, by state\\nDemographics\\nResident population in New York 1960-2022\\nEconomy\\nU.S. New York metro area GDP 2001-2022\\nTo download this statistic in XLS format you need a Statista Account\\nTo download this statistic in PNG format you need a Statista Account\\nTo download this statistic in PDF format you need a Statista Account\\nTo download this statistic in PPT format you need a Statista Account\\nAs a Premium user you get access to the detailed source references and background information about this statistic.\\n Statistics on\\n\"\\nNew York\\n\"\\nOther statistics that may interest you New York\\nPopulation\\nEconomy\\nEmployment & Earnings\\nState & Local Government\\nNew York City\\nFurther related statistics\\nFurther Content: You might find this interesting as well\\nStatistics\\nTopics U.S. annual GDP growth in New York 2000-2022\\nAnnual percent change in the real gross domestic product of New York in the United States from 2000 to 2022\\nAdditional Information\\nShow sources information\\nShow publisher information\\nUse Ask Statista Research Service\\nOctober 2023\\nUnited States (New York)\\n2000 to 2022\\n Transforming data into design:\\nStatista Content & Design\\nStrategy and business building for the data-driven economy:\\nIndustry-specific and extensively researched technical data (partially from exclusive partnerships).', 'score': 0.7212526, 'raw_content': None}, {'title': 'Gross Domestic Product by State and Personal Income by State, 4th ...', 'url': 'https://www.bea.gov/news/2024/gross-domestic-product-state-and-personal-income-state-4th-quarter-2023-and-preliminary', 'content': 'Real gross domestic product (GDP) increased in all 50 states and the District of Columbia in the fourth quarter of 2023, with the percent change ranging from 6.7 percent in Nevada to 0.2 percent in Nebraska (table 1), according to statistics released today by the U.S. Bureau of Economic Analysis (BEA). Current-dollar GDP increased in 49 states and the District of Columbia.', 'score': 0.36139008, 'raw_content': None}], 'response_time': 2.31})]}})\n", - "----\n", - "(('researcher:7daea379-a5b6-6d3d-ef85-fffc96d7472e',), {'agent': {'messages': [AIMessage(content=[{'id': 'toolu_015fdnpWUiuEshsEwn2nBJ1g', 'input': {'query': 'latest GDP of California state 2023'}, 'name': 'tavily_search_results_json', 'type': 'tool_use'}], additional_kwargs={}, response_metadata={'id': 'msg_01Cksgb2aaqcD2bPtam5HDPF', 'model': 'claude-3-5-sonnet-20241022', 'stop_reason': 'tool_use', 'stop_sequence': None, 'usage': {'input_tokens': 2534, 'output_tokens': 66}}, id='run-11d924ba-a494-49d6-b649-ac961e31c79c-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': 'latest GDP of California state 2023'}, 'id': 'toolu_015fdnpWUiuEshsEwn2nBJ1g', 'type': 'tool_call'}], usage_metadata={'input_tokens': 2534, 'output_tokens': 66, 'total_tokens': 2600, 'input_token_details': {}})]}})\n", - "----\n", - "(('researcher:7daea379-a5b6-6d3d-ef85-fffc96d7472e',), {'tools': {'messages': [ToolMessage(content='[{\"url\": \"https://www.gov.ca.gov/2024/04/16/california-remains-the-worlds-5th-largest-economy/\", \"content\": \"California remains the 5th largest economy in the world since 2017. California is the 5th largest economy in the world for the seventh consecutive year, with a nominal GDP of nearly $3.9 trillion in 2023 and a growth rate of 6.1% since the year prior, according to the U.S. Bureau of Economic Analysis (BEA). On a per capita basis, California is\"}, {\"url\": \"https://usafacts.org/metrics/gross-domestic-product-gdp-by-state-california/\", \"content\": \"USAFacts -- In 2022 (most recent), Gross domestic product (GDP) was 3598102700000.0 in the United States for California (state). This increased by 224,862,000,000 or 6.67% from 2021. Highest: 3,598,102,700,000 in 2022.\"}, {\"url\": \"https://www.statista.com/statistics/187834/gdp-of-the-us-federal-state-of-california-since-1997/\", \"content\": \"Industry Overview\\\\nDigital & Trend reports\\\\nOverview and forecasts on trending topics\\\\nIndustry & Market reports\\\\nIndustry and market insights and forecasts\\\\nCompanies & Products reports\\\\nKey figures and rankings about companies and products\\\\nConsumer & Brand reports\\\\nConsumer and brand insights and preferences in various industries\\\\nPolitics & Society reports\\\\nDetailed information about political and social topics\\\\nCountry & Region reports\\\\nAll key figures about countries and regions\\\\nMarket forecast and expert KPIs for 1000+ markets in 190+ countries & territories\\\\nInsights on consumer attitudes and behavior worldwide\\\\nBusiness information on 100m+ public and private companies\\\\nExplore Company Insights\\\\nDetailed information for 39,000+ online stores and marketplaces\\\\nDirectly accessible data for 170 industries from 150+ countries\\\\nand over 1\\xa0Mio. facts.\\\\n Statistics on\\\\n\\\\\"\\\\nCalifornia\\\\n\\\\\"\\\\nOther statistics that may interest you California\\\\nPopulation\\\\nEconomy\\\\nEmployment & Earnings\\\\nState & Local Government\\\\nMetro Areas\\\\nFurther related statistics\\\\nFurther Content: You might find this interesting as well\\\\nStatistics\\\\nTopics Other statistics on the topicCalifornia\\\\nEconomy\\\\nU.S. leading companies headquartered in California 2023, by number of employees\\\\nEconomy\\\\nU.S. average annual wages in California 2018-2026\\\\nEconomy\\\\nU.S. California fastest growing private companies 2023, by three year growth rate\\\\nResidential Real Estate\\\\nHourly wages needed to afford a two-bedroom apartment in California 2021-23, by metro\\\\nYou only have access to basic statistics.\\\\n Additional Information\\\\nShow sources information\\\\nShow publisher information\\\\nUse Ask Statista Research Service\\\\nMarch 2023\\\\nUnited States\\\\n2000 to 2022\\\\nData presented here is in 2012 chained U.S. dollars.\\\\n Transforming data into design:\\\\nStatista Content & Design\\\\nStrategy and business building for the data-driven economy:\\\\nU.S. real GDP of California 2000-2022\\\\nReal gross domestic product of California in the United States from 2000 to 2022\\\\n(in billion U.S. dollars)\\\\n\"}, {\"url\": \"https://www.bea.gov/news/2024/gross-domestic-product-state-and-personal-income-state-4th-quarter-2023-and-preliminary\", \"content\": \"Real gross domestic product (GDP) increased in all 50 states and the District of Columbia in the fourth quarter of 2023, with the percent change ranging from 6.7 percent in Nevada to 0.2 percent in Nebraska (table 1), according to statistics released today by the U.S. Bureau of Economic Analysis (BEA). Current-dollar GDP increased in 49 states and the District of Columbia.\"}, {\"url\": \"https://www.bea.gov/news/2023/gross-domestic-product-state-and-personal-income-state-1st-quarter-2023\", \"content\": \"Real gross domestic product (GDP) increased in all 50 states and the District of Columbia in the first quarter of 2023, with the percent change ranging from 12.4 percent in North Dakota to 0.1 percent in Rhode Island and Alabama (table 1), according to statistics released today by the U.S. Bureau of Economic Analysis (BEA). Current-dollar GDP increased in 47 states and the District of Columbia\"}]', name='tavily_search_results_json', id='77de7955-ba39-4db3-9460-1a2bd7f602fb', tool_call_id='toolu_015fdnpWUiuEshsEwn2nBJ1g', artifact={'query': 'latest GDP of California state 2023', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'title': \"California Remains the World's 5th Largest Economy\", 'url': 'https://www.gov.ca.gov/2024/04/16/california-remains-the-worlds-5th-largest-economy/', 'content': 'California remains the 5th largest economy in the world since 2017. California is the 5th largest economy in the world for the seventh consecutive year, with a nominal GDP of nearly $3.9 trillion in 2023 and a growth rate of 6.1% since the year prior, according to the U.S. Bureau of Economic Analysis (BEA). On a per capita basis, California is', 'score': 0.99338466, 'raw_content': None}, {'title': 'Gross domestic product (GDP) - USAFacts', 'url': 'https://usafacts.org/metrics/gross-domestic-product-gdp-by-state-california/', 'content': 'USAFacts -- In 2022 (most recent), Gross domestic product (GDP) was 3598102700000.0 in the United States for California (state). This increased by 224,862,000,000 or 6.67% from 2021. Highest: 3,598,102,700,000 in 2022.', 'score': 0.99128854, 'raw_content': None}, {'title': 'Real GDP California U.S. 2023 | Statista', 'url': 'https://www.statista.com/statistics/187834/gdp-of-the-us-federal-state-of-california-since-1997/', 'content': 'Industry Overview\\nDigital & Trend reports\\nOverview and forecasts on trending topics\\nIndustry & Market reports\\nIndustry and market insights and forecasts\\nCompanies & Products reports\\nKey figures and rankings about companies and products\\nConsumer & Brand reports\\nConsumer and brand insights and preferences in various industries\\nPolitics & Society reports\\nDetailed information about political and social topics\\nCountry & Region reports\\nAll key figures about countries and regions\\nMarket forecast and expert KPIs for 1000+ markets in 190+ countries & territories\\nInsights on consumer attitudes and behavior worldwide\\nBusiness information on 100m+ public and private companies\\nExplore Company Insights\\nDetailed information for 39,000+ online stores and marketplaces\\nDirectly accessible data for 170 industries from 150+ countries\\nand over 1\\xa0Mio. facts.\\n Statistics on\\n\"\\nCalifornia\\n\"\\nOther statistics that may interest you California\\nPopulation\\nEconomy\\nEmployment & Earnings\\nState & Local Government\\nMetro Areas\\nFurther related statistics\\nFurther Content: You might find this interesting as well\\nStatistics\\nTopics Other statistics on the topicCalifornia\\nEconomy\\nU.S. leading companies headquartered in California 2023, by number of employees\\nEconomy\\nU.S. average annual wages in California 2018-2026\\nEconomy\\nU.S. California fastest growing private companies 2023, by three year growth rate\\nResidential Real Estate\\nHourly wages needed to afford a two-bedroom apartment in California 2021-23, by metro\\nYou only have access to basic statistics.\\n Additional Information\\nShow sources information\\nShow publisher information\\nUse Ask Statista Research Service\\nMarch 2023\\nUnited States\\n2000 to 2022\\nData presented here is in 2012 chained U.S. dollars.\\n Transforming data into design:\\nStatista Content & Design\\nStrategy and business building for the data-driven economy:\\nU.S. real GDP of California 2000-2022\\nReal gross domestic product of California in the United States from 2000 to 2022\\n(in billion U.S. dollars)\\n', 'score': 0.58112484, 'raw_content': None}, {'title': 'Gross Domestic Product by State and Personal Income by State, 4th ...', 'url': 'https://www.bea.gov/news/2024/gross-domestic-product-state-and-personal-income-state-4th-quarter-2023-and-preliminary', 'content': 'Real gross domestic product (GDP) increased in all 50 states and the District of Columbia in the fourth quarter of 2023, with the percent change ranging from 6.7 percent in Nevada to 0.2 percent in Nebraska (table 1), according to statistics released today by the U.S. Bureau of Economic Analysis (BEA). Current-dollar GDP increased in 49 states and the District of Columbia.', 'score': 0.5455884, 'raw_content': None}, {'title': 'Gross Domestic Product by State and Personal Income by State, 1st ...', 'url': 'https://www.bea.gov/news/2023/gross-domestic-product-state-and-personal-income-state-1st-quarter-2023', 'content': 'Real gross domestic product (GDP) increased in all 50 states and the District of Columbia in the first quarter of 2023, with the percent change ranging from 12.4 percent in North Dakota to 0.1 percent in Rhode Island and Alabama (table 1), according to statistics released today by the U.S. Bureau of Economic Analysis (BEA). Current-dollar GDP increased in 47 states and the District of Columbia', 'score': 0.40857172, 'raw_content': None}], 'response_time': 3.04})]}})\n", - "----\n", - "(('researcher:7daea379-a5b6-6d3d-ef85-fffc96d7472e',), {'agent': {'messages': [AIMessage(content=\"Based on the search results, I can provide you with the latest GDP figures for both states:\\n\\nNew York:\\n- GDP: $2.053 trillion (2022 figures)\\n\\nCalifornia:\\n- GDP: $3.9 trillion (2023 figures)\\n\\nAs instructed, I won't calculate the average, but I've provided you with the most recent GDP figures for both states. Note that the figures are from different years (2022 for NY and 2023 for CA), which should be considered when calculating the average.\", additional_kwargs={}, response_metadata={'id': 'msg_013yuy2PoBUNSGNDCYXvUL27', 'model': 'claude-3-5-sonnet-20241022', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 3748, 'output_tokens': 120}}, id='run-d775159b-c114-4db5-b425-416f0f2f957c-0', usage_metadata={'input_tokens': 3748, 'output_tokens': 120, 'total_tokens': 3868, 'input_token_details': {}})]}})\n", - "----\n", - "((), {'researcher': {'messages': [HumanMessage(content=\"Based on the search results, I can provide you with the latest GDP figures for both states:\\n\\nNew York:\\n- GDP: $2.053 trillion (2022 figures)\\n\\nCalifornia:\\n- GDP: $3.9 trillion (2023 figures)\\n\\nAs instructed, I won't calculate the average, but I've provided you with the most recent GDP figures for both states. Note that the figures are from different years (2022 for NY and 2023 for CA), which should be considered when calculating the average.\", additional_kwargs={}, response_metadata={}, name='researcher')]}})\n", - "----\n", - "((), {'supervisor': {'next': 'coder'}})\n", - "----\n", - "(('coder:2c47a596-d75b-143e-9b4a-a99f78779aec',), {'agent': {'messages': [AIMessage(content=[{'text': \"I'll help calculate the average GDP between New York ($2.053 trillion) and California ($3.9 trillion).\", 'type': 'text'}, {'id': 'toolu_019yGU4aBc9H73jfRWr1iKtf', 'input': {'code': 'ny_gdp = 2.053\\nca_gdp = 3.9\\n\\naverage_gdp = (ny_gdp + ca_gdp) / 2\\n\\nprint(f\"New York GDP: ${ny_gdp} trillion\")\\nprint(f\"California GDP: ${ca_gdp} trillion\")\\nprint(f\"Average GDP: ${average_gdp:.3f} trillion\")'}, 'name': 'python_repl_tool', 'type': 'tool_use'}], additional_kwargs={}, response_metadata={'id': 'msg_01PGbexsWGaf4LQbKDH8toJs', 'model': 'claude-3-5-sonnet-20241022', 'stop_reason': 'tool_use', 'stop_sequence': None, 'usage': {'input_tokens': 558, 'output_tokens': 175}}, id='run-355dc875-adcc-436c-b0f3-675dc1c099bd-0', tool_calls=[{'name': 'python_repl_tool', 'args': {'code': 'ny_gdp = 2.053\\nca_gdp = 3.9\\n\\naverage_gdp = (ny_gdp + ca_gdp) / 2\\n\\nprint(f\"New York GDP: ${ny_gdp} trillion\")\\nprint(f\"California GDP: ${ca_gdp} trillion\")\\nprint(f\"Average GDP: ${average_gdp:.3f} trillion\")'}, 'id': 'toolu_019yGU4aBc9H73jfRWr1iKtf', 'type': 'tool_call'}], usage_metadata={'input_tokens': 558, 'output_tokens': 175, 'total_tokens': 733, 'input_token_details': {}})]}})\n", - "----\n", - "(('coder:2c47a596-d75b-143e-9b4a-a99f78779aec',), {'tools': {'messages': [ToolMessage(content='Successfully executed:\\n```python\\nny_gdp = 2.053\\nca_gdp = 3.9\\n\\naverage_gdp = (ny_gdp + ca_gdp) / 2\\n\\nprint(f\"New York GDP: ${ny_gdp} trillion\")\\nprint(f\"California GDP: ${ca_gdp} trillion\")\\nprint(f\"Average GDP: ${average_gdp:.3f} trillion\")\\n```\\nStdout: New York GDP: $2.053 trillion\\nCalifornia GDP: $3.9 trillion\\nAverage GDP: $2.976 trillion\\n', name='python_repl_tool', id='39106042-eb3e-485c-8d62-bb2f572fbf8b', tool_call_id='toolu_019yGU4aBc9H73jfRWr1iKtf')]}})\n", - "----\n", - "(('coder:2c47a596-d75b-143e-9b4a-a99f78779aec',), {'agent': {'messages': [AIMessage(content=\"Based on the calculations:\\n- New York's GDP: $2.053 trillion (2022)\\n- California's GDP: $3.9 trillion (2023)\\n- The average GDP between the two states is $2.976 trillion\\n\\nNote: As mentioned earlier, these GDP figures are from different years (2022 for NY and 2023 for CA), which should be taken into consideration when interpreting the average.\", additional_kwargs={}, response_metadata={'id': 'msg_016GGgrPRH3psSoWUw7TzTQu', 'model': 'claude-3-5-sonnet-20241022', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 877, 'output_tokens': 98}}, id='run-55436cea-0fab-4fa3-a691-3a80a0afb431-0', usage_metadata={'input_tokens': 877, 'output_tokens': 98, 'total_tokens': 975, 'input_token_details': {}})]}})\n", - "----\n", - "((), {'coder': {'messages': [HumanMessage(content=\"Based on the calculations:\\n- New York's GDP: $2.053 trillion (2022)\\n- California's GDP: $3.9 trillion (2023)\\n- The average GDP between the two states is $2.976 trillion\\n\\nNote: As mentioned earlier, these GDP figures are from different years (2022 for NY and 2023 for CA), which should be taken into consideration when interpreting the average.\", additional_kwargs={}, response_metadata={}, name='coder')]}})\n", - "----\n", - "((), {'supervisor': {'next': '__end__'}})\n", - "----\n" + "================================\u001b[1m Human Message \u001b[0m=================================\n", + "\n", + "find US and New York state GDP in 2024. what % of US GDP was New York state?\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: supervisor\n", + "Tool Calls:\n", + " transfer_to_research_agent (call_qxk9abrxWYQT6a9hPNpXiuM0)\n", + " Call ID: call_qxk9abrxWYQT6a9hPNpXiuM0\n", + " Args:\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_to_research_agent\n", + "\n", + "Successfully transferred to research_agent\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: research_agent\n", + "Tool Calls:\n", + " tavily_search (call_A3cVm1BXDD8dYv6uLwO132gg)\n", + " Call ID: call_A3cVm1BXDD8dYv6uLwO132gg\n", + " Args:\n", + " query: US GDP 2024\n", + " search_depth: advanced\n", + " tavily_search (call_77JyoUYwGDXlRNKOwvQFUUYJ)\n", + " Call ID: call_77JyoUYwGDXlRNKOwvQFUUYJ\n", + " Args:\n", + " query: New York state GDP 2024\n", + " search_depth: advanced\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: tavily_search\n", + "\n", + "{\"query\": \"US GDP 2024\", \"follow_up_questions\": null, \"answer\": null, \"images\": [], \"results\": [{\"url\": \"https://tradingeconomics.com/united-states/gdp-growth\", \"title\": \"United States GDP Growth Rate - Trading Economics\", \"content\": \"The US economy expanded an annualized 2.4% in Q4 2024, slightly higher than 2.3% in the previous estimates, primarily reflecting a downward revision to imports. Exports fell slightly less (-0.2% vs -0.5%) and imports declined more than initially anticipated (-1.9% vs -1.2%), leaving the contribution from net trade positive at 0.26 pp (vs 0.12 pp). Government expenditure also rose more (3.1% vs 2.9%) and fixed investment contracted less (-1.1% vs -1.4%), due to equipment (-8.7% vs -9%) while [...] The Gross Domestic Product (GDP) in the United States expanded 2.40 percent in the fourth quarter of 2024 over the previous quarter. GDP Growth Rate in the United States averaged 3.21 percent from 1947 until 2024, reaching an all time high of 35.20 percent in the third quarter of 2020 and a record low of -28.10 percent in the second quarter of 2020. This page provides the latest reported value for - United States GDP Growth Rate - plus previous releases, historical high and low, short-term [...] The Gross Domestic Product (GDP) in the United States expanded 2.40 percent in the fourth quarter of 2024 over the previous quarter. GDP Growth Rate in the United States is expected to be 0.90 percent by the end of this quarter, according to Trading Economics global macro models and analysts expectations. In the long-term, the United States GDP Growth Rate is projected to trend around 2.00 percent in 2026, according to our econometric models.\\n%\\n3Y5Y10YMAX\\nExport API\\nOK\\nLoading...\", \"score\": 0.9071234, \"raw_content\": null}, {\"url\": \"https://www.bea.gov/data/gdp/gross-domestic-product\", \"title\": \"Gross Domestic Product | U.S. Bureau of Economic Analysis (BEA)\", \"content\": \"Real gross domestic product (GDP) increased at an annual rate of 2.4 percent in the fourth quarter of 2024 (October, November, and December), according to the third estimate released by the U.S. Bureau of Economic Analysis. In the third quarter, real GDP increased 3.1 percent. The increase in real GDP in the fourth quarter primarily reflected increases in consumer spending and government spending that were partly offset by a decrease in investment. Imports, which are a subtraction in the\", \"score\": 0.9008183, \"raw_content\": null}, {\"url\": \"https://www.nerdwallet.com/article/finance/gdp-report\", \"title\": \"GDP Report: Final Estimate Shows Growth Increased 2.4% in Q4 2024\", \"content\": \"NerdWallet's content is fact-checked for accuracy, timeliness and relevance. It undergoes a thorough review process involving writers and editors to ensure the information is as clear and complete as possible.\\n\\nAnna Helhoski\\n\\nRick VanderKnyff\\n\\nUpdated on April 7\\n\\nReal gross domestic product increased by an annual rate of 2.4% in the fourth quarter of 2024, according to the third estimate report released on March 27 by the Bureau of Economic Analysis. [...] The third estimate also showed that in 2024, the U.S. GDP grew 2.8% compared to a 2.9% increase in 2023.\\n\\nQ1 2025 GDP forecasts are negative\\n\\nA forecasting tool published by the Atlanta Federal Reserve shows negative growth for the first quarter of 2025; it expects gross domestic product (GDP) to contract by rate of -2.8%, according to data released on March 28. If the forecast is correct, it would be the first quarter where GDP declined since the first and second quarters of 2022. [...] GDP could be the next concern: On March 3, a forecasting tool published by the Atlanta Federal Reserve showed that GDP could contract by a rate of -2.8% in the first quarter of 2025. If GDP does indeed decline, it would be the first time since the first and second quarters of 2022.\\n\\nIn 2024, the U.S. GDP grew 2.8% compared to a 2.9% increase in 2023, according to a second estimate of real gross domestic product from the Bureau of Economic Analysis, released Feb. 27.\", \"score\": 0.89053273, \"raw_content\": null}], \"response_time\": 1.78}\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: tavily_search\n", + "\n", + "{\"query\": \"New York state GDP 2024\", \"follow_up_questions\": null, \"answer\": null, \"images\": [], \"results\": [{\"url\": \"https://en.wikipedia.org/wiki/Economy_of_New_York_(state)\", \"title\": \"Economy of New York (state) - Wikipedia\", \"content\": \"Jump to content\\nMain menu\\nSearch\\nDonate\\nCreate account\\nLog in\\nPersonal tools\\nToggle the table of contents\\nEconomy of New York (state)\\n1 language\\nArticle\\nTalk\\nRead\\nEdit\\nView history\\nTools\\nFrom Wikipedia, the free encyclopedia\\nThis article is about the overall economy of New York State. For the economy of New York City, see Economy of New York City.\\nEconomy of New York\\nNew York City, the economic capital of New York (state)\\nStatistics\\nGDP $2.3 trillion (2024)[1]\\nGDP per capita $117,332 (2024)[2] [...] The economy of the State of New York is reflected in its gross state product in 2024 of $2.284 trillion, ranking third in size behind the larger states of California and Texas. If New York State were an independent nation, it would rank as the 10th largest economy in the world by nominal GDP. However, in 2019, the multi-state, New York City-centered metropolitan statistical area produced a gross metropolitan product (GMP) of $US2.0 trillion, ranking first nationally by a wide margin and would [...] Population below poverty line 13.6%[3]\\nGini coefficient 0.5157 ± 0.0029 (2023)[4]\\nLabour force 9,645,984 (2023)[5]\\nUnemployment 4.4% (August 2024)[6]\\nPublic finances\\nRevenues $63.5 billion[7]\\nExpenses $54.6 billion[8]\", \"score\": 0.9511106, \"raw_content\": null}, {\"url\": \"https://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_GDP\", \"title\": \"List of U.S. states and territories by GDP - Wikipedia\", \"content\": \"GDP per capita also varied widely throughout the United States in 2024, with New York ($117,332), Massachusetts ($110,561), and Washington (state) ($108,468) recording the three highest GDP per capita figures in the U.S., while Mississippi ($53,061), Arkansas ($60,276), and West Virginia ($60,783) recorded the three lowest GDP per capita figures in the U.S. The District of Columbia, though, recorded a GDP per capita figure far higher than any U.S. state in 2024 at $263,220. [...] Overall, in the calendar year 2024, the United States' Nominal GDP at Current Prices totaled at $29.017 trillion, as compared to $25.744 trillion in 2022.\\nThe three U.S. states with the highest GDPs were California ($4.080 trillion), Texas ($2.695 trillion), and New York ($2.284 trillion). The three U.S. states with the lowest GDPs were Vermont ($45.4 billion), Wyoming ($53.0 billion), and Alaska ($69.8 billion).\", \"score\": 0.8947989, \"raw_content\": null}, {\"url\": \"https://edc.nyc/sites/default/files/2025-01/NYCEDC-State-of-the-NYC-Economy-2024-v3.pdf\", \"title\": \"[PDF] State of the New York City Economy - NYCEDC\", \"content\": \"for talent faced a limited supply. STATE OF THE NEW YORK CITY ECONOMY 2024 / 21 STATE OF THE NEW YORK CITY ECONOMY 2024 / 22 After losing nearly a million jobs during the COVID-19 pandemic, New York City is now at record-high levels of private and total employment. The city’s gross city product (GCP) stands at $1.18 trillion as of 2023.24 While legacy sectors such as Finance and Insurance have continued to play a vital part in the city’s economic successes, emerging sectors like Tech, the Green [...] STATE OF THE NEW YORK CITY ECONOMY 2024 / 11 New York City’s economy is the largest in the nation, with $2 trillion in gross metropolitan product (GMP) for the metro area, representing 9% of the total US economy. As such, the city’s economy is closely intertwined with the broader national economic landscape, and US macroeconomic conditions play a significant role in shaping the economic backdrop for the city. National interest rates, inflation, gross domestic product (GDP), and employment [...] 1 Macro Trends STATE OF THE NEW YORK CITY ECONOMY 2024 / 12 Output Has Grown Faster in NYC than Nationally Since 2022 Actual and Projected US Real GDP and NYC Real GCP Growth Rates 2019 2020 2021 2022 2023 2024* 2025* NYC 2.6% -4.2% 5.5% 2.6% 2.8% 3.6% 1.9% US 2.5% -2.2% 5.8% 1.9% 2.5% 2.5% 1.4% Source: NYC OMB and US Bureau of Economic Analysis. Projections for 2024 and and 2025 from NYC OMB.\", \"score\": 0.85797083, \"raw_content\": null}], \"response_time\": 0.63}\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: research_agent\n", + "\n", + "- US GDP in 2024: $29.017 trillion (nominal, current prices)\n", + "- New York state GDP in 2024: $2.284 trillion\n", + "- New York state's share of US GDP in 2024: 7.87%\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: supervisor\n", + "Tool Calls:\n", + " transfer_to_math_agent (call_m5ICqaoAtRXHWb8BI3638dJL)\n", + " Call ID: call_m5ICqaoAtRXHWb8BI3638dJL\n", + " Args:\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: transfer_to_math_agent\n", + "\n", + "Successfully transferred to math_agent\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: math_agent\n", + "Tool Calls:\n", + " divide (call_Sf7nvyvEgIaoDlaioPmkCdqz)\n", + " Call ID: call_Sf7nvyvEgIaoDlaioPmkCdqz\n", + " Args:\n", + " a: 2.284\n", + " b: 29.017\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: divide\n", + "\n", + "0.07871247889168417\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: math_agent\n", + "\n", + "US GDP in 2024: $29.017 trillion\n", + "New York state GDP in 2024: $2.284 trillion\n", + "New York state's share of US GDP: 7.87%\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Name: supervisor\n", + "\n", + "US GDP in 2024 was $29.017 trillion. New York state GDP in 2024 was $2.284 trillion. New York state's GDP was about 7.87% of the US GDP.\n" ] } ], "source": [ - "for s in graph.stream(\n", + "for message in final_message_history:\n", + " message.pretty_print()" + ] + }, + { + "cell_type": "markdown", + "id": "239700cd-d2d3-44be-8cf5-021d15615de2", + "metadata": {}, + "source": [ + "!!! Important\n", + "\n", + " You can see that the supervisor system appends **all** of the individual agent messages (i.e., their internal tool-calling loop) to the full message history. This means that on every supervisor turn, supervisor agent sees this full history. If you want more control over:\n", + "\n", + " * **how inputs are passed to agents**: you can use LangGraph [`Send()`][langgraph.types.Send] primitive to directly send data to the worker agents during the handoff. See the [task delegation](#create-delegation-tasks) example below\n", + " * **how agent outputs are added**: you can control how much of the agent's internal message history is added to the overall supervisor message history by wrapping the agent in a separate node function:\n", + "\n", + " ```python\n", + " def call_research_agent(state):\n", + " # return agent's final response,\n", + " # excluding inner monologue\n", + " response = research_agent.invoke(state)\n", + " # highlight-next-line\n", + " return {\"messages\": response[\"messages\"][-1]}\n", + " ```" + ] + }, + { + "cell_type": "markdown", + "id": "1c2a0aff-935a-46b8-bdcf-7125b80f1f41", + "metadata": {}, + "source": [ + "## 4. Create delegation tasks" + ] + }, + { + "cell_type": "markdown", + "id": "1a13d919-49bf-4cc3-838f-714cd3fb8b26", + "metadata": {}, + "source": [ + "So far the individual agents relied on **interpreting full message history** to determine their tasks. An alternative approach is to ask the supervisor to **formulate a task explicitly**. We can do so by adding a `task_description` parameter to the `handoff_tool` function." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "dc1e4d24-8738-4548-a5e7-8556e476b805", + "metadata": {}, + "outputs": [], + "source": [ + "from langgraph.types import Send\n", + "\n", + "\n", + "def create_task_description_handoff_tool(\n", + " *, agent_name: str, description: str | None = None\n", + "):\n", + " name = f\"transfer_to_{agent_name}\"\n", + " description = description or f\"Ask {agent_name} for help.\"\n", + "\n", + " @tool(name, description=description)\n", + " def handoff_tool(\n", + " # this is populated by the supervisor LLM\n", + " task_description: Annotated[\n", + " str,\n", + " \"Description of what the next agent should do, including all of the relevant context.\",\n", + " ],\n", + " # these parameters are ignored by the LLM\n", + " state: Annotated[MessagesState, InjectedState],\n", + " ) -> Command:\n", + " task_description_message = {\"role\": \"user\", \"content\": task_description}\n", + " agent_input = {**state, \"messages\": [task_description_message]}\n", + " return Command(\n", + " # highlight-next-line\n", + " goto=[Send(agent_name, agent_input)],\n", + " graph=Command.PARENT,\n", + " )\n", + "\n", + " return handoff_tool\n", + "\n", + "\n", + "assign_to_research_agent_with_description = create_task_description_handoff_tool(\n", + " agent_name=\"research_agent\",\n", + " description=\"Assign task to a researcher agent.\",\n", + ")\n", + "\n", + "assign_to_math_agent_with_description = create_task_description_handoff_tool(\n", + " agent_name=\"math_agent\",\n", + " description=\"Assign task to a math agent.\",\n", + ")\n", + "\n", + "supervisor_agent_with_description = create_react_agent(\n", + " model=\"openai:gpt-4.1\",\n", + " tools=[\n", + " assign_to_research_agent_with_description,\n", + " assign_to_math_agent_with_description,\n", + " ],\n", + " prompt=(\n", + " \"You are a supervisor managing two agents:\\n\"\n", + " \"- a research agent. Assign research-related tasks to this assistant\\n\"\n", + " \"- a math agent. Assign math-related tasks to this assistant\\n\"\n", + " \"Assign work to one agent at a time, do not call agents in parallel.\\n\"\n", + " \"Do not do any work yourself.\"\n", + " ),\n", + " name=\"supervisor\",\n", + ")\n", + "\n", + "supervisor_with_description = (\n", + " StateGraph(MessagesState)\n", + " .add_node(\n", + " supervisor_agent_with_description, destinations=(\"research_agent\", \"math_agent\")\n", + " )\n", + " .add_node(research_agent)\n", + " .add_node(math_agent)\n", + " .add_edge(START, \"supervisor\")\n", + " .add_edge(\"research_agent\", \"supervisor\")\n", + " .add_edge(\"math_agent\", \"supervisor\")\n", + " .compile()\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "622bc89a-0787-41ea-bf18-c591be85509b", + "metadata": {}, + "source": [ + "!!! note\n", + "\n", + " We're using [`Send()`][langgraph.types.Send] primitive in the `handoff_tool`. This means that instead of receiving the full `supervisor` graph state as input, each worker agent only sees the contents of the `Send` payload. In this example, we're sending the task description as a single \"human\" message." + ] + }, + { + "cell_type": "markdown", + "id": "4d1dba40-c948-4117-9df6-5bdb1ab162c7", + "metadata": {}, + "source": [ + "Let's now running it with the same input query:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "882f9e00-5fdf-4278-ab26-a59fc949fa91", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Update from subgraph supervisor:\n", + "\n", + "\n", + "\tUpdate from node agent:\n", + "\n", + "\n", + "\t==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\tName: supervisor\n", + "\tTool Calls:\n", + "\t transfer_to_research_agent (call_TtKzjGQBe4X9Xh0VzmjStVgZ)\n", + "\t Call ID: call_TtKzjGQBe4X9Xh0VzmjStVgZ\n", + "\t Args:\n", + "\n", + "\n", + "Update from subgraph research_agent:\n", + "\n", + "\n", + "\tUpdate from node agent:\n", + "\n", + "\n", + "\t==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\tName: research_agent\n", + "\tTool Calls:\n", + "\t tavily_search (call_AfeRYBJxJtmD4EKqifYcx8EI)\n", + "\t Call ID: call_AfeRYBJxJtmD4EKqifYcx8EI\n", + "\t Args:\n", + "\t query: US GDP in 2024\n", + "\t search_depth: advanced\n", + "\t tavily_search (call_n7Dn8QnDLu2ZpEDzswS2MOJ8)\n", + "\t Call ID: call_n7Dn8QnDLu2ZpEDzswS2MOJ8\n", + "\t Args:\n", + "\t query: New York state GDP in 2024\n", + "\t search_depth: advanced\n", + "\n", + "\n", + "Update from subgraph research_agent:\n", + "\n", + "\n", + "\tUpdate from node tools:\n", + "\n", + "\n", + "\t=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "\tName: tavily_search\n", + "\t\n", + "\t{\"query\": \"New York state GDP in 2024\", \"follow_up_questions\": null, \"answer\": null, \"images\": [], \"results\": [{\"url\": \"https://en.wikipedia.org/wiki/Economy_of_New_York_(state)\", \"title\": \"Economy of New York (state) - Wikipedia\", \"content\": \"Jump to content\\nMain menu\\nSearch\\nDonate\\nCreate account\\nLog in\\nPersonal tools\\nToggle the table of contents\\nEconomy of New York (state)\\n1 language\\nArticle\\nTalk\\nRead\\nEdit\\nView history\\nTools\\nFrom Wikipedia, the free encyclopedia\\nThis article is about the overall economy of New York State. For the economy of New York City, see Economy of New York City.\\nEconomy of New York\\nNew York City, the economic capital of New York (state)\\nStatistics\\nGDP $2.3 trillion (2024)[1]\\nGDP per capita $117,332 (2024)[2] [...] The economy of the State of New York is reflected in its gross state product in 2024 of $2.284 trillion, ranking third in size behind the larger states of California and Texas. If New York State were an independent nation, it would rank as the 10th largest economy in the world by nominal GDP. However, in 2019, the multi-state, New York City-centered metropolitan statistical area produced a gross metropolitan product (GMP) of $US2.0 trillion, ranking first nationally by a wide margin and would [...] Population below poverty line 13.6%[3]\\nGini coefficient 0.5157 ± 0.0029 (2023)[4]\\nLabour force 9,645,984 (2023)[5]\\nUnemployment 4.4% (August 2024)[6]\\nPublic finances\\nRevenues $63.5 billion[7]\\nExpenses $54.6 billion[8]\", \"score\": 0.9530353, \"raw_content\": null}, {\"url\": \"https://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_GDP\", \"title\": \"List of U.S. states and territories by GDP - Wikipedia\", \"content\": \"GDP per capita also varied widely throughout the United States in 2024, with New York ($117,332), Massachusetts ($110,561), and Washington (state) ($108,468) recording the three highest GDP per capita figures in the U.S., while Mississippi ($53,061), Arkansas ($60,276), and West Virginia ($60,783) recorded the three lowest GDP per capita figures in the U.S. The District of Columbia, though, recorded a GDP per capita figure far higher than any U.S. state in 2024 at $263,220. [...] Overall, in the calendar year 2024, the United States' Nominal GDP at Current Prices totaled at $29.017 trillion, as compared to $25.744 trillion in 2022.\\nThe three U.S. states with the highest GDPs were California ($4.080 trillion), Texas ($2.695 trillion), and New York ($2.284 trillion). The three U.S. states with the lowest GDPs were Vermont ($45.4 billion), Wyoming ($53.0 billion), and Alaska ($69.8 billion).\", \"score\": 0.89997756, \"raw_content\": null}, {\"url\": \"https://edc.nyc/sites/default/files/2025-01/NYCEDC-State-of-the-NYC-Economy-2024-v3.pdf\", \"title\": \"[PDF] State of the New York City Economy - NYCEDC\", \"content\": \"for talent faced a limited supply. STATE OF THE NEW YORK CITY ECONOMY 2024 / 21 STATE OF THE NEW YORK CITY ECONOMY 2024 / 22 After losing nearly a million jobs during the COVID-19 pandemic, New York City is now at record-high levels of private and total employment. The city’s gross city product (GCP) stands at $1.18 trillion as of 2023.24 While legacy sectors such as Finance and Insurance have continued to play a vital part in the city’s economic successes, emerging sectors like Tech, the Green [...] STATE OF THE NEW YORK CITY ECONOMY 2024 / 11 New York City’s economy is the largest in the nation, with $2 trillion in gross metropolitan product (GMP) for the metro area, representing 9% of the total US economy. As such, the city’s economy is closely intertwined with the broader national economic landscape, and US macroeconomic conditions play a significant role in shaping the economic backdrop for the city. National interest rates, inflation, gross domestic product (GDP), and employment [...] 1 Macro Trends STATE OF THE NEW YORK CITY ECONOMY 2024 / 12 Output Has Grown Faster in NYC than Nationally Since 2022 Actual and Projected US Real GDP and NYC Real GCP Growth Rates 2019 2020 2021 2022 2023 2024* 2025* NYC 2.6% -4.2% 5.5% 2.6% 2.8% 3.6% 1.9% US 2.5% -2.2% 5.8% 1.9% 2.5% 2.5% 1.4% Source: NYC OMB and US Bureau of Economic Analysis. Projections for 2024 and and 2025 from NYC OMB.\", \"score\": 0.8616433, \"raw_content\": null}], \"response_time\": 2.35}\n", + "\n", + "\n", + "Update from subgraph research_agent:\n", + "\n", + "\n", + "\tUpdate from node agent:\n", + "\n", + "\n", + "\t==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\tName: research_agent\n", + "\t\n", + "\t- US GDP in 2024 was $29.017 trillion (nominal, current prices) ([source](https://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_GDP)).\n", + "\t- New York State GDP in 2024 was $2.284 trillion ([source](https://en.wikipedia.org/wiki/Economy_of_New_York_(state))).\n", + "\t\n", + "\tPercentage of US GDP attributed to New York State in 2024: approximately 7.9%.\n", + "\n", + "\n", + "Update from subgraph supervisor:\n", + "\n", + "\n", + "\tUpdate from node agent:\n", + "\n", + "\n", + "\t==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\tName: supervisor\n", + "\tTool Calls:\n", + "\t transfer_to_math_agent (call_oYbIXhQQeTWlj2zvZSoStUgO)\n", + "\t Call ID: call_oYbIXhQQeTWlj2zvZSoStUgO\n", + "\t Args:\n", + "\n", + "\n", + "Update from subgraph math_agent:\n", + "\n", + "\n", + "\tUpdate from node agent:\n", + "\n", + "\n", + "\t==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\tName: math_agent\n", + "\tTool Calls:\n", + "\t divide (call_K5QxmkQYFfCZw5Vzkbz43VIG)\n", + "\t Call ID: call_K5QxmkQYFfCZw5Vzkbz43VIG\n", + "\t Args:\n", + "\t a: 2.284\n", + "\t b: 29.017\n", + "\n", + "\n", + "Update from subgraph math_agent:\n", + "\n", + "\n", + "\tUpdate from node tools:\n", + "\n", + "\n", + "\t=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "\tName: divide\n", + "\t\n", + "\t0.07871247889168417\n", + "\n", + "\n", + "Update from subgraph math_agent:\n", + "\n", + "\n", + "\tUpdate from node agent:\n", + "\n", + "\n", + "\t==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\tName: math_agent\n", + "\t\n", + "\tNew York state's GDP was approximately 7.87% of US GDP in 2024.\n", + "\n", + "\n", + "Update from subgraph supervisor:\n", + "\n", + "\n", + "\tUpdate from node agent:\n", + "\n", + "\n", + "\t==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\tName: supervisor\n", + "\t\n", + "\tHere are the findings:\n", + "\t- US GDP in 2024: $29.017 trillion\n", + "\t- New York State GDP in 2024: $2.284 trillion\n", + "\t- New York State accounted for approximately 7.87% of US GDP in 2024.\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for chunk in supervisor.stream(\n", " {\n", " \"messages\": [\n", - " (\n", - " \"user\",\n", - " \"Find the latest GDP of New York and California, then calculate the average\",\n", - " )\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"find US and New York state GDP in 2024. what % of US GDP was New York state?\",\n", + " }\n", " ]\n", " },\n", " subgraphs=True,\n", "):\n", - " print(s)\n", - " print(\"----\")" + " pretty_print_messages(chunk, last_message=True)" ] } ],