From e417460695d14feb0028247e482dffb1621a2888 Mon Sep 17 00:00:00 2001 From: Artemy Belousov Date: Thu, 20 Jun 2024 22:59:43 +0400 Subject: [PATCH] Output handlers docs (#53) * Output handler docs * delete old nblink --- docs/source/basic_api.nblink | 3 - docs/source/examples.rst | 3 +- .../examples/advanced_output_handling.nblink | 3 + docs/source/examples/output_handlers.nblink | 3 - .../examples/validating_agent_output.nblink | 3 + examples/Advanced output handling.ipynb | 566 ++++++++++++++++++ examples/Basic introduction.ipynb | 102 ---- examples/Multi-step research agent.ipynb | 2 +- examples/Quickstart.ipynb | 9 +- ...ut.ipynb => Validating agent output.ipynb} | 4 +- motleycrew/agents/output_handler.py | 2 +- ...cdd12711def9925eefe6d7163d44e2c052b2bf.pkl | Bin 0 -> 2683 bytes ...1287a3d0c56d7b1a692ad20f775c55b97a94f6.pkl | Bin 0 -> 97278 bytes ...8369554bc34f77f60fed42015d2bf2aa25bfa8.pkl | Bin 0 -> 74427 bytes ...93c65baceb5fd00bb449694913f6f0762b0291.pkl | Bin 0 -> 4173 bytes ...bb9a303734251dd6391f31a0b66c2dbeb0ce44.pkl | Bin 0 -> 68825 bytes ...a3a217532d894d30ad60d5b902317f841507c7.pkl | Bin 0 -> 52959 bytes ...f3d49dbf534a6f999d02431db8e8de8145e52b.pkl | Bin 0 -> 85986 bytes ...bd2be9dc164849323b77cb39acc6f39e9ebae2.pkl | Bin 0 -> 41304 bytes ...0c49c9168710c777bde70af36f9719b78f6494.pkl | Bin 0 -> 308597 bytes ...e3ae1639b94a7574e1854346bf5040589365be.pkl | Bin 0 -> 353751 bytes ...9cf7152ce16bd086b7b07bad52d87998206da6.pkl | Bin 0 -> 22582 bytes ...febc9796d48310e6898400e92bf3bc3fed102a.pkl | Bin 0 -> 23243 bytes ...ec4dbaaa1d33e9900cc3edd11bb677cb4dceb5.pkl | Bin 0 -> 55691 bytes ...017c664d1fe036ae6d33c1c82bad569c3ebdcf.pkl | Bin 0 -> 267247 bytes ...21fe4832ba1ee9bf7e755689720e15927812a9.pkl | Bin 0 -> 15302 bytes ...62328b9cd4a68c8e8f8ae3bb296a66f9424475.pkl | Bin 0 -> 236729 bytes ...f1fbc656d7dea57dccb10e67d4857cb7dea29f.pkl | Bin 0 -> 17736 bytes ...46c692907ccd6841b8f1e59f2a17178410a496.pkl | Bin 0 -> 17668 bytes ...8d295dbabff68bd1fa22e3bef8d8ce87d2e60f.pkl | Bin 0 -> 17742 bytes ...81db67ace63db61eb0da2b76e54417d1f8cc26.pkl | Bin 0 -> 17633 bytes ...290d1f1c8a41e45ca98b9495e8dbfa15344f9a.pkl | Bin 0 -> 17556 bytes ...c4cd30d273ba0fde667ca3ebd129dd2e8091b3.pkl | Bin 0 -> 31092 bytes ...8d57e7cdf38a93be78081e62bd4c55d6b1e54f.pkl | Bin 0 -> 32589 bytes ...5bfc627af0d4f4b2da1026321b3e89991b7cf7.pkl | Bin 0 -> 28517 bytes ...61fb54c70693c6207774e9b17885e15b2e00bd.pkl | Bin 0 -> 29738 bytes ...810d930418d2ce1cd86fa543c295cc90f1de19.pkl | Bin 0 -> 27890 bytes .../advanced_output_handling_ipynb.json | 1 + .../validating_agent_output_ipynb.json | 1 + tests/run_integration_tests.py | 2 + 40 files changed, 591 insertions(+), 113 deletions(-) delete mode 100644 docs/source/basic_api.nblink create mode 100644 docs/source/examples/advanced_output_handling.nblink delete mode 100644 docs/source/examples/output_handlers.nblink create mode 100644 docs/source/examples/validating_agent_output.nblink create mode 100644 examples/Advanced output handling.ipynb delete mode 100644 examples/Basic introduction.ipynb rename examples/{Output handlers for validating agent output.ipynb => Validating agent output.ipynb} (99%) create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/07720a3f1c589096bd9c165049cdd12711def9925eefe6d7163d44e2c052b2bf.pkl create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/0e875e7397179704e9c0f59a201287a3d0c56d7b1a692ad20f775c55b97a94f6.pkl create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/142f514247583600c43a67e4328369554bc34f77f60fed42015d2bf2aa25bfa8.pkl create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/194738103260685fcfe14b080193c65baceb5fd00bb449694913f6f0762b0291.pkl create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/38c587c596ba4a7320df077e92bb9a303734251dd6391f31a0b66c2dbeb0ce44.pkl create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/49aefe482900e5529f22f21ffea3a217532d894d30ad60d5b902317f841507c7.pkl create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/a0cc27bc02e7df8d60981c2aacf3d49dbf534a6f999d02431db8e8de8145e52b.pkl create mode 100644 tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/b3c179a00e76ca4c0fcf3b0d09bd2be9dc164849323b77cb39acc6f39e9ebae2.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/0b184b8eb9485c32b27669282f0c49c9168710c777bde70af36f9719b78f6494.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/160405dad77d589a5c94a19b71e3ae1639b94a7574e1854346bf5040589365be.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/490bebac9bd6714c35a1823de29cf7152ce16bd086b7b07bad52d87998206da6.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/77954563ee361cf29831df15f0febc9796d48310e6898400e92bf3bc3fed102a.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/7b152b7e9247ae01ac33a10c5eec4dbaaa1d33e9900cc3edd11bb677cb4dceb5.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/928d25f2f66e3149ca9acc9271017c664d1fe036ae6d33c1c82bad569c3ebdcf.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/96e1448836b6a65774b502277d21fe4832ba1ee9bf7e755689720e15927812a9.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/d78a0f44d55f371cf63687217262328b9cd4a68c8e8f8ae3bb296a66f9424475.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/11083a1f92e1a22d74549199b7f1fbc656d7dea57dccb10e67d4857cb7dea29f.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/1d103b47344b8f5d969c41fb7e46c692907ccd6841b8f1e59f2a17178410a496.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/6ff222918b0d91ac3a3b5523aa8d295dbabff68bd1fa22e3bef8d8ce87d2e60f.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/bf44f0300d6d9bb90b2f7c185a81db67ace63db61eb0da2b76e54417d1f8cc26.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/c0922709ed6277dfa4b469c1de290d1f1c8a41e45ca98b9495e8dbfa15344f9a.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/191cd93437a6a2800383c4c249c4cd30d273ba0fde667ca3ebd129dd2e8091b3.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/1e216e4a265eb5bbe7b6d197c88d57e7cdf38a93be78081e62bd4c55d6b1e54f.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/60b44ba354bee0d3610964f2c15bfc627af0d4f4b2da1026321b3e89991b7cf7.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/c9ee5858fe29e182787d456dde61fb54c70693c6207774e9b17885e15b2e00bd.pkl create mode 100644 tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/f40c543dc685bd2c7b7a1cf2a7810d930418d2ce1cd86fa543c295cc90f1de19.pkl create mode 100644 tests/itest_golden_data/advanced_output_handling_ipynb.json create mode 100644 tests/itest_golden_data/validating_agent_output_ipynb.json diff --git a/docs/source/basic_api.nblink b/docs/source/basic_api.nblink deleted file mode 100644 index 68f65d22..00000000 --- a/docs/source/basic_api.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../examples/Basic introduction.ipynb" -} \ No newline at end of file diff --git a/docs/source/examples.rst b/docs/source/examples.rst index c8a4eed3..a6d38e54 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -7,5 +7,6 @@ Examples examples/blog_with_images examples/research_agent - examples/output_handlers + examples/validating_agent_output + examples/advanced_output_handling autogen diff --git a/docs/source/examples/advanced_output_handling.nblink b/docs/source/examples/advanced_output_handling.nblink new file mode 100644 index 00000000..f1a54cbe --- /dev/null +++ b/docs/source/examples/advanced_output_handling.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../examples/Advanced output handling.ipynb" +} diff --git a/docs/source/examples/output_handlers.nblink b/docs/source/examples/output_handlers.nblink deleted file mode 100644 index a13fe3ff..00000000 --- a/docs/source/examples/output_handlers.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../examples/Output handlers for validating agent output.ipynb" -} diff --git a/docs/source/examples/validating_agent_output.nblink b/docs/source/examples/validating_agent_output.nblink new file mode 100644 index 00000000..22f04e42 --- /dev/null +++ b/docs/source/examples/validating_agent_output.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../examples/Validating agent output.ipynb" +} diff --git a/examples/Advanced output handling.ipynb b/examples/Advanced output handling.ipynb new file mode 100644 index 00000000..ca4bd544 --- /dev/null +++ b/examples/Advanced output handling.ipynb @@ -0,0 +1,566 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Advanced output handling\n", + "\n", + "\n", + "For grasping the basic idea of output handlers, check out this introduction: [validating agent output](validating_agent_output.html).\n", + "\n", + "The purpose of this example is to demonstrate two concepts:\n", + "\n", + "- Obtaining structured output from the agent\n", + "- Validating the output against the prompt that was given to the agent\n", + "\n", + "This should give a good understanding of output handler semantics and prepare you to build your own ones." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from dotenv import load_dotenv\n", + "load_dotenv()\n", + "\n", + "from motleycrew import MotleyCrew\n", + "from motleycrew.agents.langchain.tool_calling_react import ReActToolCallingAgent\n", + "from motleycrew.tasks import SimpleTask\n", + "from motleycrew.common.exceptions import InvalidOutput\n", + "\n", + "from motleycrew.tools import PythonREPLTool\n", + "from motleycrew.tools import LLMTool\n", + "from motleycrew.agents import MotleyOutputHandler" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the [validating agent output](validating_agent_output.html) example, we used a simple tool to receive and check the output.\n", + "\n", + "Here we want to have access to the agent input, so we subclass a special `MotleyOutputHandler` class and implement its `handle_output` method. Inside it, we'll call an LLM critic that will assess the agent's output." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class CoderOutputHandler(MotleyOutputHandler):\n", + " def handle_output(self, code: str, comment: str):\n", + " agent_prompt = self.agent_input[\"prompt\"]\n", + " critic = LLMTool(\n", + " name=\"critic\",\n", + " description=\"improve the agent output\",\n", + " prompt=(\n", + " \"An AI agent was given this prompt: \\n{agent_prompt}\\n\\n\"\n", + " \"Here's the code it generated: \\n```\\n{code}\\n```\\n\\n\"\n", + " \"And the comment it gave: \\n{comment}\\n\\n\"\n", + " \"The code and the comment must be sensible and easily understandable. \"\n", + " \"Give constructive advice on how to improve them unless they are already perfect. \"\n", + " \"In this case, just return a single \\\"OK\\\" without quotes.\"\n", + " )\n", + " )\n", + "\n", + " critic_message = critic.invoke({\"agent_prompt\": agent_prompt, \"code\": code, \"comment\": comment}).content\n", + " print(\"Critic response: \", critic_message)\n", + "\n", + " if critic_message.strip().lower().startswith(\"ok\"):\n", + " return code, comment\n", + " raise InvalidOutput(critic_message) # This will be returned to the agent to make it improve its output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In case the critic is not satisfied, the `InvalidOutput` exception will be returned to the agent, as if a regular tool was called. If everything is OK, we just return the agent's output.\n", + "\n", + "The output schema is inferred automatically from the `handle_output` method signature. You can also specify it directly using the `_args_schema` property (see below)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-06-20 22:44:33,253 - motleycrew - WARNING - No known Cypher type matching annotation typing.Optional[typing.Any], will use JSON string\n", + "2024-06-20 22:44:33,258 - motleycrew - WARNING - No known Cypher type matching annotation typing.List[str], will use JSON string\n" + ] + } + ], + "source": [ + "crew = MotleyCrew()\n", + "\n", + "coder = ReActToolCallingAgent(\n", + " name=\"coder\",\n", + " tools=[PythonREPLTool()],\n", + " output_handler=CoderOutputHandler(),\n", + " verbose=True,\n", + ")\n", + "\n", + "task = SimpleTask(\n", + " crew=crew,\n", + " name=\"Explain and implement the bubble sorting algorithm\",\n", + " description=\"Write a Python program that implements the bubble sorting algorithm \"\n", + " \"and test your implementation using the REPL tool. \\n\"\n", + " \"Return the code and a comment explaining how it works.\",\n", + " agent=coder,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-06-20 22:44:33,289 - motleycrew - WARNING - No known Cypher type matching annotation typing.List[str], will use JSON string\n", + "WARNING:langchain_core.tracers.base:Parent run ac93a7c1-3864-4ffe-9a42-22823bd30134 not found for run a5178a15-aee9-4e14-a0f7-4d3dca6e310c. Treating as a root run.\n", + "WARNING:langchain_experimental.utilities.python:Python REPL can execute arbitrary code. Use with caution.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `python_repl` with `{'command': 'def bubble_sort(arr):\\n n = len(arr)\\n for i in range(n):\\n for j in range(0, n-i-1):\\n if arr[j] > arr[j+1]:\\n arr[j], arr[j+1] = arr[j+1], arr[j]\\n return arr\\n\\n# Test the bubble sort function\\nsample_array = [64, 34, 25, 12, 22, 11, 90]\\nsorted_array = bubble_sort(sample_array)\\nprint(sorted_array)'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3m[11, 12, 22, 25, 34, 64, 90]\n", + "\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `output_handler` with `{'code': 'def bubble_sort(arr):\\n n = len(arr)\\n for i in range(n):\\n for j in range(0, n-i-1):\\n if arr[j] > arr[j+1]:\\n arr[j], arr[j+1] = arr[j+1], arr[j]\\n return arr\\n\\n# Test the bubble sort function\\nsample_array = [64, 34, 25, 12, 22, 11, 90]\\nsorted_array = bubble_sort(sample_array)\\nprint(sorted_array)', 'comment': 'The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array, and the inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. The test case demonstrates the function by sorting a sample array.'}`\n", + "\n", + "\n", + "\u001b[0mCritic response: The code and the comment are generally well-written and understandable. However, there are a few improvements that can be made for clarity and efficiency:\n", + "\n", + "1. **Optimization with a Flag**: The bubble sort algorithm can be optimized by adding a flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early.\n", + "\n", + "2. **Comment Enhancement**: The comment can be expanded to explain the optimization and the purpose of the flag.\n", + "\n", + "Here is the improved code and comment:\n", + "\n", + "```python\n", + "def bubble_sort(arr):\n", + " n = len(arr)\n", + " for i in range(n):\n", + " swapped = False\n", + " for j in range(0, n-i-1):\n", + " if arr[j] > arr[j+1]:\n", + " arr[j], arr[j+1] = arr[j+1], arr[j]\n", + " swapped = True\n", + " if not swapped:\n", + " break\n", + " return arr\n", + "\n", + "# Test the bubble sort function\n", + "sample_array = [64, 34, 25, 12, 22, 11, 90]\n", + "sorted_array = bubble_sort(sample_array)\n", + "print(sorted_array)\n", + "```\n", + "\n", + "Comment:\n", + "The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array. The inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added with a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The test case demonstrates the function by sorting a sample array.\n", + "\u001b[33;1m\u001b[1;3mInvalidOutput: The code and the comment are generally well-written and understandable. However, there are a few improvements that can be made for clarity and efficiency:\n", + "\n", + "1. **Optimization with a Flag**: The bubble sort algorithm can be optimized by adding a flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early.\n", + "\n", + "2. **Comment Enhancement**: The comment can be expanded to explain the optimization and the purpose of the flag.\n", + "\n", + "Here is the improved code and comment:\n", + "\n", + "```python\n", + "def bubble_sort(arr):\n", + " n = len(arr)\n", + " for i in range(n):\n", + " swapped = False\n", + " for j in range(0, n-i-1):\n", + " if arr[j] > arr[j+1]:\n", + " arr[j], arr[j+1] = arr[j+1], arr[j]\n", + " swapped = True\n", + " if not swapped:\n", + " break\n", + " return arr\n", + "\n", + "# Test the bubble sort function\n", + "sample_array = [64, 34, 25, 12, 22, 11, 90]\n", + "sorted_array = bubble_sort(sample_array)\n", + "print(sorted_array)\n", + "```\n", + "\n", + "Comment:\n", + "The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array. The inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added with a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The test case demonstrates the function by sorting a sample array.\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `output_handler` with `{'code': 'def bubble_sort(arr):\\n n = len(arr)\\n for i in range(n):\\n swapped = False\\n for j in range(0, n-i-1):\\n if arr[j] > arr[j+1]:\\n arr[j], arr[j+1] = arr[j+1], arr[j]\\n swapped = True\\n if not swapped:\\n break\\n return arr\\n\\n# Test the bubble sort function\\nsample_array = [64, 34, 25, 12, 22, 11, 90]\\nsorted_array = bubble_sort(sample_array)\\nprint(sorted_array)', 'comment': 'The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array. The inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added with a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The test case demonstrates the function by sorting a sample array.'}`\n", + "\n", + "\n", + "\u001b[0mCritic response: The code and the comment are well-written and clear. However, there are a few minor improvements that can be made for better readability and efficiency:\n", + "\n", + "1. **Code Improvement:**\n", + " - Use more descriptive variable names.\n", + " - Add type hints for better clarity.\n", + " - Separate the test code from the function definition for better modularity.\n", + "\n", + "2. **Comment Improvement:**\n", + " - Add a brief explanation of the time complexity of the algorithm.\n", + " - Mention that the algorithm is not stable and not suitable for large datasets due to its O(n^2) time complexity.\n", + "\n", + "Here is the improved version:\n", + "\n", + "```python\n", + "from typing import List\n", + "\n", + "def bubble_sort(arr: List[int]) -> List[int]:\n", + " n = len(arr)\n", + " for i in range(n):\n", + " swapped = False\n", + " for j in range(0, n - i - 1):\n", + " if arr[j] > arr[j + 1]:\n", + " arr[j], arr[j + 1] = arr[j + 1], arr[j]\n", + " swapped = True\n", + " if not swapped:\n", + " break\n", + " return arr\n", + "\n", + "# Test the bubble sort function\n", + "if __name__ == \"__main__\":\n", + " sample_array = [64, 34, 25, 12, 22, 11, 90]\n", + " sorted_array = bubble_sort(sample_array)\n", + " print(sorted_array)\n", + "```\n", + "\n", + "**Comment:**\n", + "The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements, and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array. The inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added with a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The time complexity of bubble sort is O(n^2) in the worst and average cases, making it inefficient for large datasets. The test case demonstrates the function by sorting a sample array.\n", + "\n", + "These improvements make the code more readable and the comment more informative.\n", + "\u001b[33;1m\u001b[1;3mInvalidOutput: The code and the comment are well-written and clear. However, there are a few minor improvements that can be made for better readability and efficiency:\n", + "\n", + "1. **Code Improvement:**\n", + " - Use more descriptive variable names.\n", + " - Add type hints for better clarity.\n", + " - Separate the test code from the function definition for better modularity.\n", + "\n", + "2. **Comment Improvement:**\n", + " - Add a brief explanation of the time complexity of the algorithm.\n", + " - Mention that the algorithm is not stable and not suitable for large datasets due to its O(n^2) time complexity.\n", + "\n", + "Here is the improved version:\n", + "\n", + "```python\n", + "from typing import List\n", + "\n", + "def bubble_sort(arr: List[int]) -> List[int]:\n", + " n = len(arr)\n", + " for i in range(n):\n", + " swapped = False\n", + " for j in range(0, n - i - 1):\n", + " if arr[j] > arr[j + 1]:\n", + " arr[j], arr[j + 1] = arr[j + 1], arr[j]\n", + " swapped = True\n", + " if not swapped:\n", + " break\n", + " return arr\n", + "\n", + "# Test the bubble sort function\n", + "if __name__ == \"__main__\":\n", + " sample_array = [64, 34, 25, 12, 22, 11, 90]\n", + " sorted_array = bubble_sort(sample_array)\n", + " print(sorted_array)\n", + "```\n", + "\n", + "**Comment:**\n", + "The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements, and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array. The inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added with a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The time complexity of bubble sort is O(n^2) in the worst and average cases, making it inefficient for large datasets. The test case demonstrates the function by sorting a sample array.\n", + "\n", + "These improvements make the code more readable and the comment more informative.\u001b[0m" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-06-20 22:44:34,060 - motleycrew - WARNING - No known Cypher type matching annotation typing.Optional[typing.Any], will use JSON string\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `output_handler` with `{'code': 'from typing import List\\n\\ndef bubble_sort(arr: List[int]) -> List[int]:\\n n = len(arr)\\n for i in range(n):\\n swapped = False\\n for j in range(0, n - i - 1):\\n if arr[j] > arr[j + 1]:\\n arr[j], arr[j + 1] = arr[j + 1], arr[j]\\n swapped = True\\n if not swapped:\\n break\\n return arr\\n\\n# Test the bubble sort function\\nif __name__ == \"__main__\":\\n sample_array = [64, 34, 25, 12, 22, 11, 90]\\n sorted_array = bubble_sort(sample_array)\\n print(sorted_array)', 'comment': 'The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements, and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array. The inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added with a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The time complexity of bubble sort is O(n^2) in the worst and average cases, making it inefficient for large datasets. The test case demonstrates the function by sorting a sample array.'}`\n", + "\n", + "\n", + "\u001b[0mCritic response: OK\n" + ] + } + ], + "source": [ + "crew.run()\n", + "code, comment = task.output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See, the initial code was optimized thanks to the critic!" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
from typing import List\n",
+       "\n",
+       "def bubble_sort(arr: List[int]) -> List[int]:\n",
+       "    n = len(arr)\n",
+       "    for i in range(n):\n",
+       "        swapped = False\n",
+       "        for j in range(0, n - i - 1):\n",
+       "            if arr[j] > arr[j + 1]:\n",
+       "                arr[j], arr[j + 1] = arr[j + 1], arr[j]\n",
+       "                swapped = True\n",
+       "        if not swapped:\n",
+       "            break\n",
+       "    return arr\n",
+       "\n",
+       "# Test the bubble sort function\n",
+       "if __name__ == "__main__":\n",
+       "    sample_array = [64, 34, 25, 12, 22, 11, 90]\n",
+       "    sorted_array = bubble_sort(sample_array)\n",
+       "    print(sorted_array)\n",
+       "
\n" + ], + "text/latex": [ + "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", + "\\PY{k+kn}{from} \\PY{n+nn}{typing} \\PY{k+kn}{import} \\PY{n}{List}\n", + "\n", + "\\PY{k}{def} \\PY{n+nf}{bubble\\PYZus{}sort}\\PY{p}{(}\\PY{n}{arr}\\PY{p}{:} \\PY{n}{List}\\PY{p}{[}\\PY{n+nb}{int}\\PY{p}{]}\\PY{p}{)} \\PY{o}{\\PYZhy{}}\\PY{o}{\\PYZgt{}} \\PY{n}{List}\\PY{p}{[}\\PY{n+nb}{int}\\PY{p}{]}\\PY{p}{:}\n", + " \\PY{n}{n} \\PY{o}{=} \\PY{n+nb}{len}\\PY{p}{(}\\PY{n}{arr}\\PY{p}{)}\n", + " \\PY{k}{for} \\PY{n}{i} \\PY{o+ow}{in} \\PY{n+nb}{range}\\PY{p}{(}\\PY{n}{n}\\PY{p}{)}\\PY{p}{:}\n", + " \\PY{n}{swapped} \\PY{o}{=} \\PY{k+kc}{False}\n", + " \\PY{k}{for} \\PY{n}{j} \\PY{o+ow}{in} \\PY{n+nb}{range}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{,} \\PY{n}{n} \\PY{o}{\\PYZhy{}} \\PY{n}{i} \\PY{o}{\\PYZhy{}} \\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{:}\n", + " \\PY{k}{if} \\PY{n}{arr}\\PY{p}{[}\\PY{n}{j}\\PY{p}{]} \\PY{o}{\\PYZgt{}} \\PY{n}{arr}\\PY{p}{[}\\PY{n}{j} \\PY{o}{+} \\PY{l+m+mi}{1}\\PY{p}{]}\\PY{p}{:}\n", + " \\PY{n}{arr}\\PY{p}{[}\\PY{n}{j}\\PY{p}{]}\\PY{p}{,} \\PY{n}{arr}\\PY{p}{[}\\PY{n}{j} \\PY{o}{+} \\PY{l+m+mi}{1}\\PY{p}{]} \\PY{o}{=} \\PY{n}{arr}\\PY{p}{[}\\PY{n}{j} \\PY{o}{+} \\PY{l+m+mi}{1}\\PY{p}{]}\\PY{p}{,} \\PY{n}{arr}\\PY{p}{[}\\PY{n}{j}\\PY{p}{]}\n", + " \\PY{n}{swapped} \\PY{o}{=} \\PY{k+kc}{True}\n", + " \\PY{k}{if} \\PY{o+ow}{not} \\PY{n}{swapped}\\PY{p}{:}\n", + " \\PY{k}{break}\n", + " \\PY{k}{return} \\PY{n}{arr}\n", + "\n", + "\\PY{c+c1}{\\PYZsh{} Test the bubble sort function}\n", + "\\PY{k}{if} \\PY{n+nv+vm}{\\PYZus{}\\PYZus{}name\\PYZus{}\\PYZus{}} \\PY{o}{==} \\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{\\PYZus{}\\PYZus{}main\\PYZus{}\\PYZus{}}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{:}\n", + " \\PY{n}{sample\\PYZus{}array} \\PY{o}{=} \\PY{p}{[}\\PY{l+m+mi}{64}\\PY{p}{,} \\PY{l+m+mi}{34}\\PY{p}{,} \\PY{l+m+mi}{25}\\PY{p}{,} \\PY{l+m+mi}{12}\\PY{p}{,} \\PY{l+m+mi}{22}\\PY{p}{,} \\PY{l+m+mi}{11}\\PY{p}{,} \\PY{l+m+mi}{90}\\PY{p}{]}\n", + " \\PY{n}{sorted\\PYZus{}array} \\PY{o}{=} \\PY{n}{bubble\\PYZus{}sort}\\PY{p}{(}\\PY{n}{sample\\PYZus{}array}\\PY{p}{)}\n", + " \\PY{n+nb}{print}\\PY{p}{(}\\PY{n}{sorted\\PYZus{}array}\\PY{p}{)}\n", + "\\end{Verbatim}\n" + ], + "text/plain": [ + "from typing import List\n", + "\n", + "def bubble_sort(arr: List[int]) -> List[int]:\n", + " n = len(arr)\n", + " for i in range(n):\n", + " swapped = False\n", + " for j in range(0, n - i - 1):\n", + " if arr[j] > arr[j + 1]:\n", + " arr[j], arr[j + 1] = arr[j + 1], arr[j]\n", + " swapped = True\n", + " if not swapped:\n", + " break\n", + " return arr\n", + "\n", + "# Test the bubble sort function\n", + "if __name__ == \"__main__\":\n", + " sample_array = [64, 34, 25, 12, 22, 11, 90]\n", + " sorted_array = bubble_sort(sample_array)\n", + " print(sorted_array)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display, Markdown, Code\n", + "\n", + "display(Code(code, language=\"python\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "The `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements, and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array. The inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added with a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The time complexity of bubble sort is O(n^2) in the worst and average cases, making it inefficient for large datasets. The test case demonstrates the function by sorting a sample array." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(comment))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "final_result = f\"{code}\\n\\n{comment}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Customizing the output handler\n", + "\n", + "When subclassing `MotleyOutputHandler`, you can override the default name, description and args schema. You can also specify which exceptions will be caught and returned to the agent if raised inside the output handler." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.pydantic_v1 import BaseModel, Field\n", + "\n", + "class CustomOutputHandlerSchema(BaseModel):\n", + " code = Field(str, description=\"Python code demonstrating bubble sort\")\n", + " comment = Field(str, description=\"Comment explaining how the code works\")\n", + "\n", + "\n", + "class MyCustomOutputHandler(MotleyOutputHandler):\n", + " _name = \"Output handler\"\n", + " _description = \"Output handler. ONLY RETURN THE FINAL RESULT USING THIS TOOL!\"\n", + " _args_schema = CustomOutputHandlerSchema\n", + " _exceptions_to_handle = (InvalidOutput, ValueError) # ValueErrors will also be returned to the agent\n", + "\n", + " def handle_output(self, code: str, comment: str):\n", + " ..." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/Basic introduction.ipynb b/examples/Basic introduction.ipynb deleted file mode 100644 index c16da8f7..00000000 --- a/examples/Basic introduction.ipynb +++ /dev/null @@ -1,102 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "87b73640", - "metadata": {}, - "source": [ - "# Basic introduction" - ] - }, - { - "cell_type": "markdown", - "id": "5877df83-f5d8-447e-a200-ec249268210b", - "metadata": {}, - "source": [ - "This is an introduction to the simple version of our API, which allows you to mix and match tools and agents from different frameworks and pass agents as tools to other agents.\n", - "\n", - "After reading this, you might want to continue to the [introduction to the full API](?) to see how you can implement more flexible and powerful dispatch via dynamic knowledge graphs.\n", - "\n", - "Also worth reading is the [introduction to caching and tracing](?)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2596164c", - "metadata": {}, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "import shutil\n", - "import os, sys\n", - "import platform\n", - "\n", - "import kuzu\n", - "from dotenv import load_dotenv\n", - "\n", - "# This assumes you have a .env file in the examples folder, containing your OpenAI key\n", - "load_dotenv()\n", - "\n", - "WORKING_DIR = Path(os.path.realpath(\".\"))\n", - "\n", - "try: \n", - " from motleycrew import MotleyCrew\n", - "except ImportError:\n", - " # if we are running this from source\n", - " motleycrew_location = os.path.realpath(WORKING_DIR / \"..\")\n", - " sys.path.append(motleycrew_location)\n", - "\n", - "if \"Dropbox\" in WORKING_DIR.parts and platform.system() == \"Windows\":\n", - " # On Windows, kuzu has file locking issues with Dropbox\n", - " DB_PATH = os.path.realpath(os.path.expanduser(\"~\") + \"/Documents/research_db\")\n", - "else:\n", - " DB_PATH = os.path.realpath(WORKING_DIR / \"research_db\")\n", - "\n", - "shutil.rmtree(DB_PATH)\n", - "\n", - "from motleycrew import MotleyCrew\n", - "from motleycrew.storage import MotleyKuzuGraphStore\n", - "from motleycrew.common.utils import configure_logging\n", - "from motleycrew.applications.research_agent.question_task_recipe import QuestionTaskRecipe\n", - "from motleycrew.applications.research_agent.answer_task_recipe import AnswerTaskRecipe\n", - "from motleycrew.tool.simple_retriever_tool import SimpleRetrieverTool\n", - "\n", - "configure_logging(verbose=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "03f5fb3d-5c75-441b-9f60-0c4a17974c79", - "metadata": {}, - "outputs": [], - "source": [ - "db = kuzu.Database(DB_PATH)\n", - "graph_store = MotleyKuzuGraphStore(db)\n", - "crew = MotleyCrew(graph_store=graph_store)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/Multi-step research agent.ipynb b/examples/Multi-step research agent.ipynb index 4e982400..e572dc6d 100644 --- a/examples/Multi-step research agent.ipynb +++ b/examples/Multi-step research agent.ipynb @@ -622,7 +622,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.12.2" } }, "nbformat": 4, diff --git a/examples/Quickstart.ipynb b/examples/Quickstart.ipynb index 57da008f..d97db356 100644 --- a/examples/Quickstart.ipynb +++ b/examples/Quickstart.ipynb @@ -32,7 +32,14 @@ "\n", "Motleycrew also supports **delegation**: you can simply give any agent as a tool to any other agent. \n", "\n", - "All the wrappers for tools and agents implement the Runnable interface, so you can use them as-is in LCEL and Langgraph code." + "All the wrappers for tools and agents implement the Runnable interface, so you can use them as-is in LCEL and Langgraph code.\n", + "\n", + "\n", + "### Output handlers\n", + "\n", + "An **output handler** is a special tool that the agent uses for submitting the final output instead of returning it raw. Besides defining a schema for the output, the output handler enables you to implement any validation logic inside it, including agent-based. If your agent returns invalid output, you can raise an exception that will be returned to the agent so that it can retry.\n", + "\n", + "See our usage examples with a [simple validator](examples/validating_agent_output.html) and an [advanced output handler with multiple fields](examples/advanced_output_handling.html).\n" ] }, { diff --git a/examples/Output handlers for validating agent output.ipynb b/examples/Validating agent output.ipynb similarity index 99% rename from examples/Output handlers for validating agent output.ipynb rename to examples/Validating agent output.ipynb index aa41342e..bcf23f68 100644 --- a/examples/Output handlers for validating agent output.ipynb +++ b/examples/Validating agent output.ipynb @@ -237,7 +237,9 @@ ], "source": [ "from IPython.display import display, Markdown\n", - "display(Markdown(task.output[\"checked_output\"]))" + "\n", + "final_result = task.output[\"checked_output\"]\n", + "display(Markdown(final_result))" ] } ], diff --git a/motleycrew/agents/output_handler.py b/motleycrew/agents/output_handler.py index 702459c3..3a1d5c03 100644 --- a/motleycrew/agents/output_handler.py +++ b/motleycrew/agents/output_handler.py @@ -1,6 +1,6 @@ from typing import Optional from abc import ABC, abstractmethod -from langchain_core.tools import StructuredTool, BaseTool +from langchain_core.tools import StructuredTool from langchain_core.pydantic_v1 import BaseModel from motleycrew.agents.abstract_parent import MotleyAgentAbstractParent diff --git a/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/07720a3f1c589096bd9c165049cdd12711def9925eefe6d7163d44e2c052b2bf.pkl b/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/07720a3f1c589096bd9c165049cdd12711def9925eefe6d7163d44e2c052b2bf.pkl new file mode 100644 index 0000000000000000000000000000000000000000..aac74743bbc7552639d19b47193164ee21b92194 GIT binary patch literal 2683 zcmZ8jO>f&q5LM7RaqTuOiuOKb4{=aQvHa}-E#LrYlPa|X$3X)`hO{DAB5iV)*yeFkuM)hn`&ic z@n>=WeQ{N+<*U{Sm)X9r16g$c&F_R#1k%_dY~**I)bDfYrG6Y)SDY64Cw-})6RB}= zm<{vgzL9S-i9OakuHWZ+w-f0?9TfS;&yQZ56!}M)iCOZam&ea$Sn|95%tWv=k_NVA zk$+yoZeux4g#qe(^*R5;i!64~TdO>?Mcyd#yCRL+I+aR9ZC@wFVgA*Fi_QZ-6z&1O z(^$F)z88mwu6SSAVR$=Su7VJ*o)+O}l^ecRPAXSC`sa3|@y<)6wPGx-_mEz{^Nfxq z-n`68<2A{vg?Z^f(ZN%KsB$zBmd4SAROG_QQfhFzdq_R?tBIT>LC>d%hT@H}5ecM( zqlghEP`CJ&G|Yy>Sd!JoA;u))v4(P(kWc|R1e&HgGYc)j&QWGrnDvhzKYvC}>$r_` zkEP2DqmjgUE^P?BCVU>r%QO~|V$D!bD1rmpoZEI!_0$vO;$DTQ)WjxSltwriut$Tz zpr-;ks`2(2@0u{?{==RkJc_=jSgLZVS{Z4erbv+yYAn~(Op>MTM5L(Z|Q_{cq7v^%9PKE>?tdl4}FM>De%4C*=o`z zejD3O>TKX2zfPw~`|H5UQJ2A7xZ+Ngi|cmo_f%>k<<_ptW3fzPPaQC`N{Upx;9QFf z$!R{p^5B};!5nGHPzy$J2my7$z-tU%(6>!bYkJXeN=BxVnG{dSI+>;wd5zA-VTpvB zO_O2l8RYx~c zD4!1uF_UX!s8|vgItl=*<%iNgul+&UF&(Qk@2ONXn} z^T{8eTsXaGUp|b&W)dkRo}@7Gv>O*&&JvsOUdtpTU!9d&yiP0-&# zGkTM0c;5D|(2cwV{W|6WGfrJ=OY_uG_(bJ*({Mk@kjmz8oI!QU5xmADRZONUXg#@S6R{@ zP64nV=!uFo_!1Pqd~*v|02zZu_{x_9(5#D?B z-!0786(TPR*hL=IKH6Su-+!|A_{Gt5XwHTw*+KVgD|xl|_T{U1|ESybnyjIRX9(|1 ziwAx^;HzyPp+RH8erLC{x4*u>xwTX3-H2yvV|`<*wZ7fzY}SgQMz+g&k7I}!9zR|L zqFi!V*-W`o-wm)f6N1?6iXf~-n1yns*;?b;ec`C<)poAt24g)2vxa=Q%HnvwKEiOe zAyO!;=Hw&uI<3^NVC1xPEaQ919E(?7I{HqZgY;P5+}*D1;nFe-)nd0(?>X&6yjb4c o-GTiQpl7FO(Mcaz#?q8ygprKW{+s{jB1 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/0e875e7397179704e9c0f59a201287a3d0c56d7b1a692ad20f775c55b97a94f6.pkl b/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/0e875e7397179704e9c0f59a201287a3d0c56d7b1a692ad20f775c55b97a94f6.pkl new file mode 100644 index 0000000000000000000000000000000000000000..84b065b91c31c08303becfd4ef5fecb912a8f023 GIT binary patch literal 97278 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/142f514247583600c43a67e4328369554bc34f77f60fed42015d2bf2aa25bfa8.pkl b/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/142f514247583600c43a67e4328369554bc34f77f60fed42015d2bf2aa25bfa8.pkl new file mode 100644 index 0000000000000000000000000000000000000000..d033d90ae051aa765aef4913ab66c37850055bc1 GIT binary patch literal 74427 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 EA3{NyIsgCw literal 0 HcmV?d00001 diff --git a/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/38c587c596ba4a7320df077e92bb9a303734251dd6391f31a0b66c2dbeb0ce44.pkl b/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/38c587c596ba4a7320df077e92bb9a303734251dd6391f31a0b66c2dbeb0ce44.pkl new file mode 100644 index 0000000000000000000000000000000000000000..8dc4e20160ee561c199403f8520463ddfebd5247 GIT binary patch literal 68825 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/a0cc27bc02e7df8d60981c2aacf3d49dbf534a6f999d02431db8e8de8145e52b.pkl b/tests/itest_cache/advanced_output_handling_ipynb/api.openai.com/v1_chat_completions/a0cc27bc02e7df8d60981c2aacf3d49dbf534a6f999d02431db8e8de8145e52b.pkl new file mode 100644 index 0000000000000000000000000000000000000000..da42c0c3d35e5b7e7d7e7dea3bf2d1b52343f552 GIT binary patch literal 85986 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/160405dad77d589a5c94a19b71e3ae1639b94a7574e1854346bf5040589365be.pkl b/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/160405dad77d589a5c94a19b71e3ae1639b94a7574e1854346bf5040589365be.pkl new file mode 100644 index 0000000000000000000000000000000000000000..f4a306011fc74ce444e092bcd4cbc16f9b29c9ed GIT binary patch literal 353751 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/77954563ee361cf29831df15f0febc9796d48310e6898400e92bf3bc3fed102a.pkl b/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/77954563ee361cf29831df15f0febc9796d48310e6898400e92bf3bc3fed102a.pkl new file mode 100644 index 0000000000000000000000000000000000000000..2daf3fdb8644f8a184abf5f017d0c04b0c11791d GIT binary patch literal 23243 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/7b152b7e9247ae01ac33a10c5eec4dbaaa1d33e9900cc3edd11bb677cb4dceb5.pkl b/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/7b152b7e9247ae01ac33a10c5eec4dbaaa1d33e9900cc3edd11bb677cb4dceb5.pkl new file mode 100644 index 0000000000000000000000000000000000000000..2208e6c2dbfc0c56845c03a8ead6236a37ba8d77 GIT binary patch literal 55691 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/928d25f2f66e3149ca9acc9271017c664d1fe036ae6d33c1c82bad569c3ebdcf.pkl b/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/928d25f2f66e3149ca9acc9271017c664d1fe036ae6d33c1c82bad569c3ebdcf.pkl new file mode 100644 index 0000000000000000000000000000000000000000..c2ec64bbc673af2fe91de91bbe55da26e5e2f852 GIT binary patch literal 267247 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�wVCOKv??TSK5NhoC%TI_wT zbPp$HVJaabgsh$CGW(3#uh*5YNv-?^gWP(1Ji$i5w)^+HI z$q7cymtb2vqiJ5|&HNbCI2#)@f4RN)^>?p7{4h(}WZ!-J;MvoM-+lPuKmElA{r@hy H$?pFJU@2VO literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/96e1448836b6a65774b502277d21fe4832ba1ee9bf7e755689720e15927812a9.pkl b/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/96e1448836b6a65774b502277d21fe4832ba1ee9bf7e755689720e15927812a9.pkl new file mode 100644 index 0000000000000000000000000000000000000000..e2b9c71894a3653d934066121b4eafd8871fbb6e GIT binary patch literal 15302 zcmeI3TW{OQ6~~QkvztqITNLg4lrNhFWJSI;wiYNL$4RV>BB!>Dz*!l>h#ZNGsTr0t zv@Hh)x=-x`Uy8Di`$_r%+K<)$Au0J1+0nLHplHW{Es;Dkob#J=8+!Q1JAeE8*9-Yi zddD{=I?d9%yFy1wYLWdl`|7*wJbRcv(1x2t_gv+P?8QIR&wRl>5$nufNI%;yzfYy_ z^uj=!>@Z93^@K#5Kn}BZ(ogU9V)2JW;2O2tEx%9OeL51xS6-I>^wrK@Crdv`;*cai z+23tV#*%)~OX2|i3`C5+MV9_NA9fX|!-&Tib^72HeL{;QG-&s*&`f9PLY98PqoArH zA$d@B)hKJHzj}1M^vLzOd4%IA6efV~S-Wkr?=s!@KlSex5c~&+ng4mAhO49z(qx;z zySK3L&KU`<`A}%5&c1!;#3~f{=IF6DV&qhqQ;O5ct~^jl%vAraa7}P5SfH6vj3nZq zpBO<$TAyW{I9$G)jeCGHXZ4pmPJ9=m>>HP}haqe#Sz$10H?+roAFeXiJEE>mUu zS`3m9{l)CW7m`N6q!8YP2Gc=fgngA5<|Z*_%`kC{zq-nrGQwHyt0eTGC*!Ob05y!q z6D?vEmlnxh?(cO-P|0u%Y0{p#JPhfcO5*&0bku?+GR$>`!Xej&1$3vbEN3d`%>xN2 z5I9k>r&-r|7DyhlMh?I0e9eLZ3k>s=(3M=dQG$*VbWV++4vpRC(hEflip7cET@_IKN?v;CAkYqlFLoY>oMb=dx1v;7>Wn|rLY zv(x$wO|NraVHd`RVa3->?TMn9HNZrM9Sh8nCX3_Ha;#x@1uXC}a7o6!V-ANJ(aZoB zYc%Qaa&37P^T1fs!-ZflW=CSo3}(>-m3}Pvk?~<7L!TMp`cj2z7!WXUVUZ#)2>>;~ zP@wsk1*3?&n0o3m_k=+Xy|DP{^l}Ev3NJ<)i%7+oz7Oi$fhi4rQ)ivrr#_DU71o>@ z_K;)p;b_9}AcU=xnn|>1)S?HB&=c-3;uJ$*j~|H@>-dXl zaKRa_Y62H#U%?6DRnCGqg&!NHqCiq;qj8Y|>m-jsxs$cUsUa=%drU0+lFOG~nY$Z2 z4Rhw<9-)B6kZWDhnfm^)Nlk7RDs`0Wpb@_irZ6-FGsH1BLCE?6wl>4Uy0X*=`qL0| zwJ*Y7p_HHqxKxGvw+cUi-CuD9@_;Vl_A<%5fbm11u>agS=+X*Z+Pv%wBy-6frjn~9 znS0h%f0zn%WlNYZHH%{9QY<|Q3_L3jX_N6*o%2H^l@W4rNGW9)nZ;E_&M$Gegim;y z;3FKEI1xBT8Ug}j@R$-)ty-gV6#Q|7gk{E2p0EaqL{3tYx|)8kBgjZT$_3y~R}%$E zdP2K#5akUqn*WZ>K?6fIfN>j?DNyr5%OdsW0x=2!_)MO--#K~C$wjZJR9b(2of1uM zvq?l)z{+FBI*A^Ba%4u=}OsPYaqKi6lal_qSef8VOycX@VQIL$! zTG7UMtrS)Qc2+ z7HeyZODkwl6qG$g-=T;j7@Wa)22pRr?XP(&>+aw&_3Entanz~9u@Mu+sZ+02;G|H` zsZZ(!hieo72GN^Z6veDlm&m#26$cp{(Wj3t=tRZA{Q~V{dbmbxD5MV0@8ADl!a~uo zM}_2daK)VCLhsGd%hv;cWA}M&FbAcpO^#SIzb^#>=eUbrD!Cu=maNCSX`ibzx)H#NKo8n~0SKp+z>okzo

5ThDblLp_4BR1d$ty? zw_mLVeg5QNwISA$H`{jAfQM55*;01)nho@CD(UR1Vb&t|7GQSOF!Qm%EyT)4#5N|r z9}{o#N_tdodCku&|JR!ZHb1cPe=8Q*{K#xkcl}ZD^5vp#v(Y-$%P*h3=)8HnIa+zU ze9$=C8ORM=)cr_B9q8YbK5S7ptEjsLm@VpN7In7}EC0D~6Uem$atkur6l8hL&nw?R zWr58Ptk_^INt1S+b$y++a(SJVJZ)@_n_KJ6 z^f`aI_nl<<<@AMbFbyxTaeLf z6_(fhyz*C2EU@{36|d`9V)GNDGT8E(pBG-P`9Cg$KfL2Re^aO2n~ojglYRH!Ztb+6 M9^Su?_b00V0um|~jsO4v literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/d78a0f44d55f371cf63687217262328b9cd4a68c8e8f8ae3bb296a66f9424475.pkl b/tests/itest_cache/validating_agent_output_ipynb/api.openai.com/v1_chat_completions/d78a0f44d55f371cf63687217262328b9cd4a68c8e8f8ae3bb296a66f9424475.pkl new file mode 100644 index 0000000000000000000000000000000000000000..3a94c1aa582ba3c7ee071abdbe2a184bf1a1c696 GIT binary patch literal 236729 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/1d103b47344b8f5d969c41fb7e46c692907ccd6841b8f1e59f2a17178410a496.pkl b/tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/1d103b47344b8f5d969c41fb7e46c692907ccd6841b8f1e59f2a17178410a496.pkl new file mode 100644 index 0000000000000000000000000000000000000000..6fc687edaec789294d5a3cbfbdaf84d8548b42c1 GIT binary patch literal 17668 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/bf44f0300d6d9bb90b2f7c185a81db67ace63db61eb0da2b76e54417d1f8cc26.pkl b/tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/bf44f0300d6d9bb90b2f7c185a81db67ace63db61eb0da2b76e54417d1f8cc26.pkl new file mode 100644 index 0000000000000000000000000000000000000000..5f368bf19ebe22673527b1076fc5844e1f6f6337 GIT binary patch literal 17633 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/c0922709ed6277dfa4b469c1de290d1f1c8a41e45ca98b9495e8dbfa15344f9a.pkl b/tests/itest_cache/validating_agent_output_ipynb/duckduckgo.com/c0922709ed6277dfa4b469c1de290d1f1c8a41e45ca98b9495e8dbfa15344f9a.pkl new file mode 100644 index 0000000000000000000000000000000000000000..b85ff97155cc48e071e0a245c9e969ece642e07f GIT binary patch literal 17556 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�`droAqVc0*-$E6{V1 z;DAIy6J-0jvBR~QCdCzbW53nq4=TAP_pe@}qEua4Qjd}g!rOXm+5Me;G>y{*kaeO) ziX)AS{n$Tx_NaALeJ3g4$!ghL`kA+&z{7^kN6_h|-0i5_ryY$xX^ z;-JfJnzlX^i~`1Rw$4a3N_wFy_bZ3(tA<)dlqd`qo@qFBkXOK}Ng@{4aHvZ=7l@E$ zB{hzaKvy~Ym3G&G!&_YaXv7MsQq3vq+E=X=Yt@q>*uD9M z9UiqQ4j|K7*;^w*>Rc9>H{s~U&{PQ79$FQ**3n{*=B0Un5!kVwphpENBU|fPJ`+c> zgZgY45Zt?z7C?Rgj9wAbR33oB?hQ-Ov{t;=y)~`=Wz z#4}-$58z~x)M|%T--qlLM8%i4TIoQTC{&2sEc-Qr-U3%o+rw`EuE&YAKQE0S&(5)X zFc$L=8wP{Q%^Q)`kl%w23lg!K!$E4khU zhfE{@GMQVws&-}3tC@p;j<)x0RH znd8P`-L%G4qsG(=w;$<}q?*vCW4jf7TeL9ekwB#$otp(^T1#6R!^(FGD^^eR{bB~tQUW{Z1e zLX3)^n)w#M%Ai*;wL_{N8$qf8*Xw1+bz&TbfsrY=Qj$b)-D^4~18O_QD`gtuVdLirQ+OPkRE#R7j76@#U zK`e}M4;2>=v@*liTA-RFHGYd5b0;#(k1aTA79RBG$B*cifrdz?Vw|o__ii00)hChN zrHpf2A~7$Dbic&qC_40$&U%IvI4&L~m!N<_VQJN(s8`vh-jQCZm7K6kly+>)7fFUd zlz#h&b0`_m*N?TDfFz@g;0;@DkXG-Tyi;oeR+7<=>usKv=C5O_F~E0czgK?GWZnN% z{;f*A;jowX&XlS&t6N|QX2Jje^<*QG%(CL?;OOW|iU9f)UUp~_yPAElU0>DOo}QYv z;|&L{GYBnI*!CTJ6bxh~-<|ePx9guwY2Yq%olVCqJ;!5Vo;-Q+yo1wN+%`DD1;-N^ z>K$qpUE@O%t**$z9f3nN#IClw&Ty#dbe(}thgS+-ua|FHOQdOAtu4ytVOgkuJ7Syp r_M#x>ik4pzCi literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/191cd93437a6a2800383c4c249c4cd30d273ba0fde667ca3ebd129dd2e8091b3.pkl b/tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/191cd93437a6a2800383c4c249c4cd30d273ba0fde667ca3ebd129dd2e8091b3.pkl new file mode 100644 index 0000000000000000000000000000000000000000..af71172eee66b10574f0655008e406ba563621d7 GIT binary patch literal 31092 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 literal 0 HcmV?d00001 diff --git a/tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/60b44ba354bee0d3610964f2c15bfc627af0d4f4b2da1026321b3e89991b7cf7.pkl b/tests/itest_cache/validating_agent_output_ipynb/links.duckduckgo.com/d.js/60b44ba354bee0d3610964f2c15bfc627af0d4f4b2da1026321b3e89991b7cf7.pkl new file mode 100644 index 0000000000000000000000000000000000000000..d7282bb0999f5ba5588f50c83a18aa415fea2773 GIT binary patch literal 28517 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 AdH?_b literal 0 HcmV?d00001 diff --git a/tests/itest_golden_data/advanced_output_handling_ipynb.json b/tests/itest_golden_data/advanced_output_handling_ipynb.json new file mode 100644 index 00000000..5a9b75f6 --- /dev/null +++ b/tests/itest_golden_data/advanced_output_handling_ipynb.json @@ -0,0 +1 @@ +"def bubble_sort(arr):\n n = len(arr)\n for i in range(n):\n swapped = False\n for j in range(0, n-i-1):\n if arr[j] > arr[j+1]:\n arr[j], arr[j+1] = arr[j+1], arr[j]\n swapped = True\n if not swapped:\n break\n return arr\n\n# Test the bubble sort function\nsample_array = [64, 34, 25, 12, 22, 11, 90]\nsorted_array = bubble_sort(sample_array)\nprint(sorted_array)\n\nThe `bubble_sort` function sorts an array using the bubble sort algorithm. It works by repeatedly stepping through the list, comparing adjacent elements and swapping them if they are in the wrong order. This process is repeated until the list is sorted. The outer loop runs `n` times, where `n` is the length of the array, and the inner loop runs `n-i-1` times to avoid re-checking the already sorted elements. An optimization is added by using a `swapped` flag to detect if any swaps were made during an iteration. If no swaps were made, the array is already sorted, and the algorithm can terminate early. The test case demonstrates the function by sorting a sample array." \ No newline at end of file diff --git a/tests/itest_golden_data/validating_agent_output_ipynb.json b/tests/itest_golden_data/validating_agent_output_ipynb.json new file mode 100644 index 00000000..19031866 --- /dev/null +++ b/tests/itest_golden_data/validating_agent_output_ipynb.json @@ -0,0 +1 @@ +"## Comprehensive Analysis of AI Advancements in 2024\n\n### Key Trends in AI\n\n1. **Generative AI Adoption**:\n - Generative AI tools like ChatGPT have reached mass adoption, significantly impacting various industries. In 2024, organizations are not only adopting generative AI but also deriving substantial business value from it. This trend is expected to continue, with more people and businesses utilizing generative AI models for diverse applications.\n\n2. **Multimodal AI**:\n - Multimodal AI, which processes multiple input types such as text, images, and sound, is gaining traction. This approach mimics the human ability to process diverse sensory information and is expected to lead to more sophisticated AI applications.\n\n3. **Smaller and Open Source Models**:\n - There is a shift towards smaller language models and open-source advancements. These models are becoming more accessible, allowing for customized local models and data pipelines. This trend is democratizing AI, making it more available to smaller organizations and individual developers.\n\n4. **Model Optimization**:\n - Model optimization is becoming more accessible, addressing issues like GPU shortages and cloud costs. This trend is crucial for making AI more efficient and cost-effective.\n\n5. **Transfer Learning**:\n - Transfer learning, which uses preexisting models as a starting point for new tasks, is reducing the time and data needed to develop accurate models. This trend is expected to create new job opportunities focused on developing and maintaining these models.\n\n### Breakthrough Technologies\n\n1. **Advanced Generative AI Models**:\n - State-of-the-art generative AI models are becoming more useful for non-tech individuals. This democratization of AI technology is expected to lead to widespread experimentation and innovation.\n\n2. **Claude by Anthropic**:\n - Anthropic, founded by former OpenAI executives, has made significant strides with its large language model, Claude. This model is expected to compete with other leading AI technologies and drive further advancements in the field.\n\n3. **AI in Business Operations**:\n - AI is driving significant reductions in operational expenses, with businesses expecting a 37% reduction in costs in 2024. This is due to AI's ability to lower error rates and improve efficiency.\n\n### Potential Industry Impacts\n\n1. **Economic Transformation**:\n - 2024 is expected to be a pivotal year for AI, with generative AI triggering a metamorphosis across the global economic landscape. Businesses are waking up to the broad potential of AI, leading to transformative changes in various sectors.\n\n2. **Job Market Evolution**:\n - The rise of AI technologies is creating new job opportunities, particularly in developing, maintaining, and optimizing AI models. However, it may also lead to job displacement in certain sectors, necessitating a focus on reskilling and upskilling the workforce.\n\n3. **Environmental and Political Impacts**:\n - The adoption of AI is expected to have significant environmental and political impacts. For instance, AI can contribute to more efficient resource management and decision-making processes, but it also raises concerns about data privacy and ethical considerations.\n\n4. **Industry-Specific Applications**:\n - Different industries are adopting AI at varying rates. For example, sectors like healthcare, finance, and manufacturing are seeing substantial AI integration, leading to improved outcomes and efficiencies.\n\n### AI Applications in Medicine\n\n1. **Multimodal AI in Healthcare**:\n - AI is being used to assimilate information from diverse sources such as medical images, textual clinical reports, and voice data. This multimodal approach is driving new understandings about health and healthcare, leading to more accurate diagnoses and personalized treatment plans.\n\n2. **Improving Health Outcomes**:\n - AI technologies are transforming care delivery by improving health outcomes, patient safety, and the affordability and accessibility of high-quality care. AI is being used to predict patient outcomes, optimize treatment plans, and monitor patient health in real-time.\n\n3. **Complementary Tool in Healthcare**:\n - AI is increasingly seen as a complementary tool rather than a replacement in healthcare. It assists healthcare professionals in making more informed decisions, thereby enhancing the quality of care provided to patients.\n\n4. **Responsible Data Usage**:\n - The responsible usage of patient data is crucial in AI applications in medicine. Ensuring data privacy and security while leveraging AI for healthcare advancements is a key focus area.\n\n### Conclusion\n\nThe advancements in AI in 2024 are marked by significant trends, breakthrough technologies, and transformative industry impacts. Generative AI, multimodal AI, and model optimization are key trends driving the field forward. Breakthrough technologies like advanced generative models and Claude by Anthropic are setting new benchmarks. The industry impacts are profound, with economic transformation, job market evolution, and sector-specific applications leading the way. In healthcare, AI is revolutionizing care delivery, improving health outcomes, and enhancing patient safety. As AI continues to evolve, it is crucial for stakeholders to stay informed and adapt to these changes to harness the full potential of this revolutionary technology." \ No newline at end of file diff --git a/tests/run_integration_tests.py b/tests/run_integration_tests.py index 10aa17f7..853ed073 100644 --- a/tests/run_integration_tests.py +++ b/tests/run_integration_tests.py @@ -40,6 +40,8 @@ "blog_with_images_ipynb": "examples/Blog with Images.ipynb", "multi_step_research_agent_ipynb": "examples/Multi-step research agent.ipynb", "math_via_python_code_with_a_single_agent_ipynb": "examples/Math via python code with a single agent.ipynb", + "validating_agent_output_ipynb": "examples/Validating agent output.ipynb", + "advanced_output_handling_ipynb": "examples/Advanced output handling.ipynb", # "using_autogen_with_motleycrew_ipynb": "examples/Using AutoGen with motleycrew.ipynb" }