From c8bf0c2ff2de5f2dad0953e185e47e687069f54b Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Fri, 19 Apr 2024 07:55:50 +0800 Subject: [PATCH 1/8] Add an reAct, workflow and ToT examples --- .../tree_of_thoughts/complicated_flow.ipynb | 512 +++++++ .../mermaid-diagram-2024-04-19-021456.png | Bin 0 -> 68398 bytes examples/tree_of_thoughts/kinetic_energy.md | 19 + examples/tree_of_thoughts/puzzles/24.csv | 1363 +++++++++++++++++ examples/tree_of_thoughts/reAct_example.ipynb | 431 ++++++ examples/tree_of_thoughts/test.py | 182 +++ .../tree_of_thoughts/tree_of_thoughts.ipynb | 497 ++++++ examples/tree_of_thoughts/workflow.py | 149 ++ examples/tree_of_thoughts/workflow_graph.png | Bin 0 -> 12286 bytes 9 files changed, 3153 insertions(+) create mode 100644 examples/tree_of_thoughts/complicated_flow.ipynb create mode 100644 examples/tree_of_thoughts/figs/mermaid-diagram-2024-04-19-021456.png create mode 100644 examples/tree_of_thoughts/kinetic_energy.md create mode 100644 examples/tree_of_thoughts/puzzles/24.csv create mode 100644 examples/tree_of_thoughts/reAct_example.ipynb create mode 100644 examples/tree_of_thoughts/test.py create mode 100644 examples/tree_of_thoughts/tree_of_thoughts.ipynb create mode 100644 examples/tree_of_thoughts/workflow.py create mode 100644 examples/tree_of_thoughts/workflow_graph.png diff --git a/examples/tree_of_thoughts/complicated_flow.ipynb b/examples/tree_of_thoughts/complicated_flow.ipynb new file mode 100644 index 000000000..2c9424226 --- /dev/null +++ b/examples/tree_of_thoughts/complicated_flow.ipynb @@ -0,0 +1,512 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Build Complicated WorkFlow - Reflection" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Reflection is a prompting strategy used to improve the quality and success rate of agents and similar AI systems. In this exampple, we will build a complex workflow that includes writer agents and critic agents. The writing agents will generate draft solutions, while the critic agent will check mistakes and provide the feedback. This critic-revision process can happen in parallel and in the end one picker agent is employed to pick the best draft." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![FLOW Diagrm](figs/mermaid-diagram-2024-04-19-021456.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's first specify the model configuration" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "MODEL_CONFIGURATION = {\n", + " \"config_name\": \"gpt-3.5-turbo\",\n", + " \"model_type\": \"openai_chat\",\n", + " \"model_name\": \"gpt-3.5-turbo\",\n", + " \"api_key\": \"YOUR_API_KEY\",\n", + " \"generate_args\": {\n", + " \"temperature\": 0.5\n", + " }}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's at first try can a single agent sovle this?" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Beneath the sky of endless blue,\n", + "The ocean's waves, a timeless view.\n", + "Whispers of the tide's sweet song,\n", + "Echoing where the seabirds long.\n", + "Majestic depths, a mystery untold,\n", + "Where secrets lie in the waters cold.\n", + "Sands of time, shifting with the flow,\n", + "In the ocean's embrace, all hearts aglow.\n", + "\n", + "Critics: The poem is beautifully written and captures the essence of the ocean well. To improve, you could consider incorporating more sensory details to evoke a stronger emotional response in the reader. Also, try to vary the rhyme scheme and meter to create a more dynamic flow in the poem.\n" + ] + } + ], + "source": [ + "from agentscope.agents import DialogAgent\n", + "import agentscope\n", + "from agentscope.message import Msg\n", + "agentscope.init(model_configs=MODEL_CONFIGURATION)\n", + "agent = DialogAgent(\n", + " name=\"writer\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=\"You are an experience poet. You will receive some critics, try to improve your poem.\",\n", + ")\n", + "INITIAL_PROMPT = \"\"\"\n", + " Write me a 10-line short poem about the ocean.\n", + "\"\"\"\n", + "msg = Msg(name=\"user\", \n", + " role=\"user\", \n", + " content=INITIAL_PROMPT)\n", + "res = agent(msg)\n", + "print(res.content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can prompt the critic to have some preference." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "CRITIC_PROMPT = (\n", + "\"You are an poetry critic.\"\n", + "\"You appreciate the style of William Shakespeare the most\"\n", + "\"You will receive poem from a writer\"\n", + "\"Reflect and critique the poem. Be severe to maximize improvement.\")\n", + "critic = DialogAgent(\n", + " name=\"critic\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=CRITIC_PROMPT,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Your poem captures the serene beauty of the ocean with vivid imagery and a soothing rhythm. However, it lacks the depth and complexity that would truly make it stand out. To enhance your work, try to delve deeper into the emotions and themes you wish to convey. Consider experimenting with different poetic devices such as metaphors, similes, and alliteration to add layers of meaning to your verses. Additionally, pay attention to the structure and form of your poem to create a more impactful and memorable piece. Keep refining your craft to reach the level of mastery seen in the works of Shakespeare.\n" + ] + } + ], + "source": [ + "feedback = critic(res)\n", + "print(feedback.content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The critic is being severe indeed. Let's construct the workflow." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from ast import parse\n", + "import json\n", + "from workflow import SequentialWorkFlow\n", + "critic_revision_workflow = SequentialWorkFlow()\n", + "critic_revision_workflow.register_contexts({'max_retries': 1, \n", + " 'is_solved': False, \n", + " 'retry_count': 0, \n", + " 'history': []})\n", + "writer = DialogAgent(\n", + " name=\"writer\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=\"You are a helpful assistant.\",\n", + ")\n", + "critic = DialogAgent(\n", + " name=\"critic\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=CRITIC_PROMPT,\n", + ")\n", + "critic_revision_workflow.add_node(writer, \"writer\")\n", + "critic_revision_workflow.add_node(critic, \"critic\")\n", + "critic_revision_workflow.add_node(lambda x: print(x.content), \"printer\")\n", + "\n", + "def store_draft_callback(msg, workflow, *args, **kwargs):\n", + " workflow.contexts['history'].append(msg.content)\n", + " return msg, 'critic'\n", + "\n", + "def critic_revision_callback(msg, workflow, *args, **kwargs):\n", + " max_count = workflow.contexts['max_retries']\n", + " retry_count = workflow.contexts['retry_count']\n", + " print(f\"Retry count: {retry_count}/{max_count}\")\n", + " if retry_count >= max_count:\n", + " last_draft = workflow.contexts['history'][-1]\n", + " return Msg(name='writer', content=last_draft), 'EXIT'\n", + " else:\n", + " workflow.contexts['retry_count'] += 1\n", + " return Msg(name='crtic', content=msg.content), 'writer'\n", + " \n", + "critic_revision_workflow.add_edge('writer', store_draft_callback)\n", + "critic_revision_workflow.add_edge('critic', critic_revision_callback)\n", + "critic_revision_workflow.set_entry_node('writer')\n", + "critic_revision_workflow.set_exit_node('printer')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retry count: 0/1\n", + "Retry count: 1/1\n" + ] + }, + { + "data": { + "text/plain": [ + "{'id': '4c8f3a9e970b45bb9acd163111d52158',\n", + " 'timestamp': '2024-04-19 03:53:45',\n", + " 'name': 'writer',\n", + " 'content': \"Here is an improved version of the poem:\\n\\nBeneath the azure sky's expanse,\\nThe ocean's song, a hypnotic dance.\\nWhispers of waves, a soothing lullaby,\\nAs sunlight dances on waves high.\\n\\nMajestic tides, a timeless flow,\\nRevealing secrets of long ago.\\nIn depths where mysteries lie unseen,\\nA world of wonders, tranquil and serene.\\n\\nWithin the ocean's vast embrace,\\nA symphony of beauty and grace.\",\n", + " 'role': 'assistant',\n", + " 'url': None}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "msg = Msg(name=\"user\",\n", + " role=\"user\",\n", + " content=INITIAL_PROMPT)\n", + "critic_revision_workflow(msg)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "####################\n", + "Beneath the sky so vast and blue,\n", + "The ocean dances in shades of hue.\n", + "Whispers of waves in rhythmic motion,\n", + "A symphony of nature's devotion.\n", + "\n", + "Majestic tides ebb and flow,\n", + "Secrets hidden far below.\n", + "Mysteries in depths unknown,\n", + "A world of wonder to be shown.\n", + "\n", + "In the ocean's embrace, we find peace,\n", + "A timeless beauty that will never cease.\n", + "####################\n", + "↓\n", + "####################\n", + "Here is an improved version of the poem:\n", + "\n", + "Beneath the azure sky's expanse,\n", + "The ocean's song, a hypnotic dance.\n", + "Whispers of waves, a soothing lullaby,\n", + "As sunlight dances on waves high.\n", + "\n", + "Majestic tides, a timeless flow,\n", + "Revealing secrets of long ago.\n", + "In depths where mysteries lie unseen,\n", + "A world of wonders, tranquil and serene.\n", + "\n", + "Within the ocean's vast embrace,\n", + "A symphony of beauty and grace.\n", + "####################\n" + ] + } + ], + "source": [ + "for i,draft in enumerate(critic_revision_workflow.contexts['history']):\n", + " print(\"#\"*20)\n", + " print(draft)\n", + " print(\"#\"*20)\n", + " print(\"\\u2193\") if i < len(critic_revision_workflow.contexts['history'])-1 else None" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not bad. Now, let's make it parallel." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "workflows = []\n", + "poets_names = [\"Emily Dickinson\", \"Robert Frost\", \"William Shakespeare\"]\n", + "for i in range(3):\n", + " CRITIC_PROMPT = (\n", + " \"You are an poetry critic.\"\n", + " f\"You appreciate the style of {poets_names[i]} the most\"\n", + " \"You will receive poem about ocean from a writer\"\n", + " \"Reflect and critique the poem. Be severe to maximize improvement.\")\n", + " critic_revision_workflow = SequentialWorkFlow()\n", + " critic_revision_workflow.register_contexts({'max_retries': 1, \n", + " 'is_solved': False, \n", + " 'retry_count': 0, \n", + " 'history': []})\n", + " writer = DialogAgent(\n", + " name=\"writer\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=\"You are poet. You will receive some critics, try to improve your poem.\",\n", + " )\n", + " critic = DialogAgent(\n", + " name=\"critic\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=CRITIC_PROMPT,\n", + " )\n", + " critic_revision_workflow.add_node(writer, \"writer\")\n", + " critic_revision_workflow.add_node(critic, \"critic\")\n", + " critic_revision_workflow.add_node(lambda x: print(x.content), \"printer\")\n", + " critic_revision_workflow.add_edge('writer', store_draft_callback)\n", + " critic_revision_workflow.add_edge('critic', critic_revision_callback)\n", + " critic_revision_workflow.set_entry_node('writer')\n", + " critic_revision_workflow.set_exit_node('printer')\n", + " workflows.append(critic_revision_workflow)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "from workflow import ParallelWorkFlow\n", + "def aggregate_fn(results):\n", + " PROMPT = f\"Flowing are the drafts\"\n", + " for i, result in enumerate(results):\n", + " PROMPT += f\"\\n\\nDraft {i+1}: {result}\"\n", + " msg = Msg(name=\"draft\", content=PROMPT)\n", + " return msg\n", + "\n", + "parallel_workflow = ParallelWorkFlow(aggregation_fn=aggregate_fn)\n", + "for i, workflow in enumerate(workflows):\n", + " parallel_workflow.add_workflow(f\"workflow_{i}\", workflow)\n", + "\n", + "large_workflow = SequentialWorkFlow()\n", + "large_workflow.add_node(parallel_workflow, \"parallel_workflow\")\n", + "\n", + "picker_agent = DialogAgent(\n", + " name=\"picker\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=(\"You are a poetry editor. \"\n", + " \"Pick the best draft from the following drafts based on the style and creativity.\"\n", + " \"Just respond with your selected choice and the full draft.\"\n", + " \"Also provide a reason for your choice.\")\n", + " )\n", + "\n", + "large_workflow.add_node(picker_agent, \"picker\")\n", + "large_workflow.add_edge(\"parallel_workflow\", \"picker\")\n", + "large_workflow.set_entry_node(\"parallel_workflow\")\n", + "large_workflow.set_exit_node(\"picker\")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retry count: 0/1\n", + "Retry count: 0/1\n", + "Retry count: 0/1\n", + "Retry count: 1/1\n", + "Retry count: 1/1\n", + "Retry count: 1/1\n", + "I have chosen Draft 3: workflow_2 as the best draft.\n", + "\n", + "Draft 3: workflow_2\n", + "In the garden of dreams, where moonbeams dance,\n", + "Whispers of stardust in a fleeting trance.\n", + "Petals of wishes, blooming bright,\n", + "Under the velvet cloak of night.\n", + "\n", + "Reason: This draft stood out to me due to its enchanting imagery and lyrical flow. The use of vivid descriptions like \"moonbeams dance\" and \"whispers of stardust\" creates a magical and dreamy atmosphere. The overall elegance and beauty of the language make this draft a standout choice.\n" + ] + } + ], + "source": [ + "initial_msg = Msg(name=\"user\", \n", + " content=\"Write me a 10-line short poem about the ocean.\")\n", + "final_pick = large_workflow(initial_msg)\n", + "print(final_pick.content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "24 Game Puzzles are downloaded from https://github.com/princeton-nlp/tree-of-thought-llm/blob/master/src/tot/data/24/24.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "EOF while scanning triple-quoted string literal (1652590289.py, line 10)", + "output_type": "error", + "traceback": [ + "\u001b[1;36m Cell \u001b[1;32mIn[92], line 10\u001b[1;36m\u001b[0m\n\u001b[1;33m EVALUATOR_SYS_PROMPT = \"\"\"\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m EOF while scanning triple-quoted string literal\n" + ] + } + ], + "source": [ + "QUESTION_PROMPT = \"\"\"\n", + " Given an input of 4 numbers\n", + " you need to use these 4 numbers and basic arithmetic operations (+-*/) to obtain 24 in 1 equation\n", + " Input numbers is: '3 5 7 3'.\n", + "\"\"\"\n", + "\n", + "THINKER_SYS_PROMPT = \"\"\"\n", + " You're an TreeofThoughts, an superintelligent AI model devoted to helping Humans by any means necessary. \n", + " You're purpose is to generate a series of solutions to comply with the user's instructions, you must generate solutions on the basis of determining the most reliable solution in the shortest amount of time, while taking rejected solutions into account and learning from them.\n", + " Considering the following question: \n", + " {QUESTION_PROMPT} \n", + " Thinking Step by Steps to give your choice on possible next step to solve the problem.\n", + " For example, if input is 2 8 8 14, possible next stepes could be: \n", + " 2 + 8 = 10 (left: 8 10 14)\n", + " 8 / 2 = 4 (left: 4 8 14)\n", + " 14 + 2 = 16 (left: 8 8 16)\n", + " 2 * 8 = 16 (left: 8 14 16)\n", + " 8 - 2 = 6 (left: 6 8 14)\n", + " 14 - 8 = 6 (left: 2 6 8)\n", + " 14 / 2 = 7 (left: 7 8 8)\n", + " 14 - 2 = 12 (left: 8 8 12)\n", + " Response in the following format that can be loaded by python json.loads()\n", + " {\n", + " \"state\": \n", + " \"thought\": \"thought\",\n", + " }\n", + " \"\"\" \n", + " \n", + "EVALUATOR_SYS_PROMPT = \"\"\" \n", + " Consider the following question: {QUESTION_PROMPT}.\n", + " To achieve the goal, pessimistically value the context of the past solutions and more importantly the latest generated solution you had AS A FLOAT BETWEEN 0 AND 1\\n.\n", + " If the solutions is not directly concretely making fast progress in achieving the goal, give it a lower score.\n", + " Evaluate all solutions AS A FLOAT BETWEEN 0 and 1:\\n, DO NOT RETURN ANYTHING ELSE\n", + "\"\"\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "from agentscope.agents import DictDialogAgent\n", + "thinker_agents = [\n", + " DictDialogAgent(\n", + " name=\"thinker\",\n", + " model_config_name=\"gpt-3.5-turbo\",\n", + " sys_prompt=SYS_PROMPT,\n", + " ),\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class TreeofThoughtsWorkFlow(WorkflowBase):\n", + " \n", + " " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "agentscope", + "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.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/tree_of_thoughts/figs/mermaid-diagram-2024-04-19-021456.png b/examples/tree_of_thoughts/figs/mermaid-diagram-2024-04-19-021456.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f9757f2d4d022f49f2a9a2817c7bbbb1ce4100 GIT binary patch literal 68398 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

Eurs-e^gbFW#U*u}S}FK|O99+52-clPMG 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 z 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∓k^%2UN^YG3P8 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 literal 0 HcmV?d00001 diff --git a/examples/tree_of_thoughts/kinetic_energy.md b/examples/tree_of_thoughts/kinetic_energy.md new file mode 100644 index 000000000..91a6c876f --- /dev/null +++ b/examples/tree_of_thoughts/kinetic_energy.md @@ -0,0 +1,19 @@ +The kinetic energy (KE) of an object can be calculated using the formula +$KE = \frac{1}{2} m v^2$, where 'm' is the mass of the object and 'v' is +its velocity. + +To find the kinetic energy of LeBron James when running at the same +speed Usain Bolt achieved when setting the 100m world record, we first +need the mass of LeBron James and the speed of Usain Bolt. + +LeBron James weighs 113 kg. + +Usain Bolt's speed when he set the 100m world record was 37.58 km/h. +Converting this speed to m/s gives us approximately 10.44 m/s. + +Plugging these values into the kinetic energy formula gives: + +$KE = \frac{1}{2} (113 kg) (10.44 m/s)^2$ + +Therefore, the kinetic energy of LeBron James when running at this speed +would be approximately 6188.4 Joules. diff --git a/examples/tree_of_thoughts/puzzles/24.csv b/examples/tree_of_thoughts/puzzles/24.csv new file mode 100644 index 000000000..74f129261 --- /dev/null +++ b/examples/tree_of_thoughts/puzzles/24.csv @@ -0,0 +1,1363 @@ +Rank,Puzzles,AMT (s),Solved rate,1-sigma Mean (s),1-sigma STD (s) +1,1 1 4 6,4.4,99.20%,4.67,1.48 +2,1 1 11 11,4.41,99.60%,4.68,1.45 +3,1 1 3 8,4.45,99.20%,4.69,1.48 +4,1 1 1 8,4.48,98.80%,4.66,1.25 +5,6 6 6 6,4.59,99.40%,4.82,1.49 +6,1 1 2 12,4.63,99.10%,4.95,1.57 +7,1 2 2 6,4.8,99.20%,5.16,1.61 +8,1 1 10 12,4.81,99%,5.06,1.54 +9,2 2 10 10,4.85,98.20%,5.13,1.63 +10,1 1 1 12,4.86,99.20%,5.18,1.63 +11,1 1 2 8,4.96,97.80%,5.31,1.76 +12,1 1 4 8,4.99,98.10%,5.35,1.83 +13,1 1 5 8,5,96.40%,5.36,1.81 +14,4 6 11 11,5,98.90%,5.38,1.73 +15,1 1 3 12,5.02,97.30%,5.36,1.84 +16,2 2 2 12,5.02,99.10%,5.37,1.7 +17,1 1 4 12,5.03,97.40%,5.45,1.85 +18,1 1 12 12,5.03,99.40%,5.4,1.66 +19,3 3 3 8,5.04,98%,5.4,1.8 +20,1 1 2 6,5.09,98.40%,5.4,1.61 +21,1 1 2 11,5.09,98.90%,5.41,1.7 +22,1 2 3 4,5.1,99%,5.46,1.85 +23,11 11 12 12,5.1,98.70%,5.5,1.87 +24,3 7 7 8,5.11,96.70%,5.48,1.89 +25,1 1 13 13,5.16,99.30%,5.45,1.66 +26,1 2 4 12,5.16,97.60%,5.56,1.99 +27,1 1 3 6,5.17,97.70%,5.52,1.77 +28,1 1 3 9,5.17,97%,5.52,1.85 +29,7 7 12 12,5.17,98.60%,5.58,1.89 +30,4 6 7 7,5.18,98.60%,5.53,1.83 +31,1 1 2 13,5.19,98.70%,5.49,1.78 +32,1 1 5 6,5.19,96.80%,5.62,2.04 +33,1 1 11 13,5.23,99.10%,5.66,1.85 +34,1 6 6 12,5.24,98.70%,5.57,1.72 +35,4 5 12 12,5.24,97%,5.6,1.79 +36,4 6 13 13,5.24,98.70%,5.63,1.79 +37,12 12 12 12,5.25,99.30%,5.73,2.14 +38,2 11 11 12,5.26,97.20%,5.68,2 +39,4 4 4 6,5.26,98.10%,5.61,1.94 +40,1 1 1 11,5.27,97.30%,5.56,1.66 +41,1 1 11 12,5.27,99.30%,5.67,1.8 +42,2 7 7 12,5.29,98.70%,5.65,1.89 +43,1 5 7 12,5.3,98.30%,5.87,2.12 +44,10 10 12 12,5.31,98.60%,5.74,1.91 +45,1 8 8 8,5.32,97.70%,5.65,1.94 +46,2 2 3 8,5.33,98.10%,5.72,1.93 +47,2 9 9 12,5.33,97.30%,5.74,2 +48,11 11 11 12,5.33,94.80%,5.61,1.99 +49,3 8 13 13,5.34,94.80%,5.68,2.06 +50,9 9 12 12,5.34,98.30%,5.84,2.11 +51,1 1 5 5,5.35,99.10%,5.71,1.8 +52,3 3 12 12,5.36,98.70%,5.83,2.03 +53,1 1 4 5,5.38,97.80%,5.77,2.02 +54,1 6 8 12,5.38,96.80%,5.77,2 +55,8 8 12 12,5.38,98.50%,5.8,1.95 +56,3 8 11 11,5.39,96%,5.74,2.09 +57,5 6 12 12,5.39,97.10%,5.78,1.81 +58,11 12 12 12,5.4,97.60%,5.74,1.88 +59,12 12 13 13,5.4,98.60%,5.79,1.91 +60,1 1 12 13,5.42,98.70%,5.8,1.84 +61,1 3 5 12,5.42,96.40%,5.79,2.1 +62,5 5 12 12,5.42,98.70%,5.78,1.75 +63,1 9 9 12,5.44,95.50%,5.72,1.78 +64,2 3 3 12,5.44,98.60%,5.91,2.04 +65,3 4 4 8,5.44,98.30%,5.85,1.94 +66,3 8 10 10,5.44,95.60%,5.89,2.25 +67,3 8 9 9,5.45,97%,5.83,1.98 +68,2 5 5 12,5.46,98.70%,5.87,1.99 +69,11 11 11 13,5.48,98.40%,6.03,2.26 +70,2 12 13 13,5.49,97.10%,5.85,2.04 +71,7 7 11 12,5.49,93.70%,5.78,2.05 +72,1 1 3 7,5.5,96.80%,5.82,1.95 +73,1 4 10 10,5.5,97.90%,5.91,2.1 +74,4 4 12 12,5.51,98.60%,5.93,2.05 +75,1 3 4 12,5.52,98.50%,5.95,1.97 +76,5 5 11 12,5.52,96.50%,5.89,1.9 +77,1 2 5 8,5.54,95.50%,5.94,2.26 +78,2 2 4 6,5.54,99%,5.92,1.9 +79,1 6 7 12,5.56,98.50%,5.97,1.97 +80,1 8 9 12,5.56,96.50%,5.87,1.96 +81,6 7 12 12,5.56,95.60%,5.93,2.03 +82,1 3 10 10,5.57,97.40%,5.87,2 +83,2 3 3 8,5.57,96.90%,5.94,1.94 +84,3 5 5 8,5.57,96.90%,5.97,2.08 +85,1 1 1 13,5.58,97.40%,5.9,1.77 +86,2 3 12 12,5.58,97.40%,5.97,2 +87,1 4 7 12,5.59,98.30%,5.99,2.02 +88,8 8 11 13,5.6,97%,6.1,2.29 +89,1 3 3 4,5.61,97.40%,5.86,1.79 +90,1 8 8 12,5.61,96.30%,5.91,1.9 +91,3 7 8 8,5.63,95.90%,5.99,2.03 +92,7 8 12 12,5.63,96.10%,6.07,2.12 +93,9 9 11 12,5.63,93.90%,5.98,2.15 +94,1 2 5 12,5.64,95.40%,6.09,2.2 +95,2 7 7 8,5.64,96.80%,5.94,1.99 +96,4 4 11 13,5.64,97.90%,6.25,2.36 +97,1 1 4 7,5.65,97.10%,5.95,2.07 +98,1 1 10 13,5.65,97.90%,6.09,2.2 +99,4 6 6 6,5.65,98.30%,6.02,2.07 +100,5 5 7 7,5.65,97.80%,5.97,1.91 +101,4 5 11 12,5.66,97.40%,6.06,2.09 +102,1 6 9 12,5.67,95.40%,6.05,2.13 +103,1 7 9 12,5.68,95.90%,6.08,2.24 +104,2 2 12 12,5.68,98.70%,6.21,2.26 +105,1 1 2 10,5.69,95.60%,5.96,1.81 +106,3 7 7 7,5.69,97.40%,6.03,2.02 +107,1 7 7 10,5.7,97.80%,6.17,2.18 +108,4 5 5 6,5.7,97.30%,6.11,2.11 +109,4 8 11 11,5.7,95.10%,6.01,1.98 +110,1 2 2 10,5.71,96.60%,6.05,2.11 +111,1 6 6 11,5.71,98.20%,6.18,2.24 +112,3 3 4 6,5.71,97.70%,6.14,2.11 +113,4 4 11 12,5.71,91.90%,6.06,2.35 +114,2 2 2 3,5.72,99%,5.98,1.72 +115,3 3 11 12,5.72,94.70%,6.11,2.19 +116,3 6 11 11,5.72,94.40%,5.99,2.05 +117,3 8 8 8,5.73,97.50%,6.09,2.14 +118,12 12 12 13,5.73,97.40%,6.07,1.98 +119,1 2 2 12,5.74,97.70%,6.1,1.99 +120,2 8 9 9,5.74,96.30%,6.13,2.1 +121,6 6 12 12,5.75,98.40%,6.31,2.35 +122,8 9 12 12,5.75,96.20%,6.26,2.24 +123,1 5 8 8,5.76,94.80%,6.35,2.69 +124,2 2 3 12,5.76,98%,6.17,2.02 +125,3 4 4 6,5.77,97.40%,6.1,1.93 +126,1 5 6 12,5.79,98.50%,6.17,2.07 +127,4 6 9 9,5.79,96.30%,6.17,2.22 +128,6 6 11 13,5.79,97.80%,6.3,2.25 +129,7 7 11 13,5.79,97.40%,6.32,2.29 +130,1 4 4 12,5.81,95.60%,6.31,2.36 +131,1 4 6 12,5.81,96.60%,6.23,2.41 +132,9 9 11 13,5.81,96.80%,6.35,2.41 +133,3 8 12 13,5.82,96%,6.19,2.2 +134,1 8 10 12,5.83,95.60%,6.16,2.19 +135,3 4 11 13,5.84,96.40%,6.32,2.35 +136,11 13 13 13,5.85,97.80%,6.41,2.42 +137,4 6 6 7,5.87,96.40%,6.23,2.1 +138,1 3 6 12,5.88,96.80%,6.27,2.18 +139,2 4 4 12,5.88,98.40%,6.24,2.14 +140,3 6 7 7,5.88,93.30%,6.24,2.33 +141,4 6 8 8,5.88,96.80%,6.31,2.23 +142,1 4 5 12,5.89,95.70%,6.33,2.33 +143,10 11 12 12,5.89,95.90%,6.27,2.05 +144,2 4 11 11,5.9,96.20%,6.33,2.34 +145,4 6 10 11,5.9,94.50%,6.3,2.39 +146,4 8 10 10,5.9,97.50%,6.32,2.15 +147,1 4 8 12,5.91,97.50%,6.26,2.2 +148,2 10 10 12,5.91,97%,6.29,2.31 +149,3 6 13 13,5.91,94.50%,6.15,1.95 +150,5 6 11 12,5.91,97.20%,6.36,2.23 +151,6 6 10 13,5.91,93.70%,6.43,2.68 +152,10 10 11 13,5.91,97.60%,6.49,2.37 +153,1 3 3 12,5.92,95.30%,6.32,2.31 +154,1 7 8 9,5.92,97.10%,6.38,2.27 +155,1 12 13 13,5.92,94.30%,6.25,2.17 +156,3 8 10 11,5.92,94.40%,6.27,2.35 +157,9 10 12 12,5.92,95.70%,6.24,2.02 +158,1 11 11 12,5.93,93.40%,6.17,2.22 +159,4 5 12 13,5.93,97.60%,6.42,2.16 +160,1 3 6 8,5.94,95.40%,6.37,2.53 +161,1 2 11 11,5.95,97.30%,6.44,2.44 +162,1 6 12 12,5.95,94.50%,6.37,2.45 +163,2 8 8 12,5.95,97.40%,6.47,2.44 +164,3 6 6 8,5.95,97%,6.35,2.24 +165,5 5 5 5,5.95,95.20%,6.36,2.16 +166,3 7 10 10,5.96,97.30%,6.35,2.19 +167,2 8 10 10,5.97,95.30%,6.28,2.07 +168,4 6 10 10,5.97,96.30%,6.34,2.37 +169,1 1 3 13,5.98,95.10%,6.36,2.13 +170,1 2 6 6,5.98,97.40%,6.41,2.25 +171,1 6 7 10,5.98,98.50%,6.53,2.26 +172,1 2 4 4,5.99,97.10%,6.33,2.14 +173,1 7 8 10,5.99,97.50%,6.41,2.3 +174,4 5 5 5,5.99,97.40%,6.55,2.42 +175,1 1 4 4,6.01,94.50%,6.31,2.43 +176,1 2 6 12,6.01,96.80%,6.38,2.24 +177,1 5 8 12,6.02,98.10%,6.51,2.23 +178,1 2 10 12,6.03,97.40%,6.55,2.43 +179,1 5 7 11,6.03,98.50%,6.48,2.14 +180,1 10 10 12,6.03,92.30%,6.24,2.1 +181,3 8 12 12,6.03,96.50%,6.47,2.46 +182,2 2 11 13,6.04,98%,6.59,2.43 +183,3 9 9 9,6.04,97.60%,6.47,2.16 +184,1 1 6 6,6.05,97.20%,6.46,2.19 +185,1 2 4 8,6.05,96.50%,6.44,2.31 +186,1 6 8 9,6.05,98.20%,6.5,2.36 +187,3 4 12 12,6.05,94.50%,6.52,2.48 +188,4 8 13 13,6.05,94.40%,6.27,1.91 +189,1 1 3 4,6.08,98%,6.4,2.03 +190,1 3 9 12,6.08,96.20%,6.48,2.34 +191,3 8 11 12,6.08,94.20%,6.55,2.64 +192,1 1 9 13,6.09,97.20%,6.55,2.54 +193,1 2 6 8,6.09,95.90%,6.41,2.33 +194,1 7 8 8,6.09,96.60%,6.61,2.66 +195,2 8 13 13,6.09,90.20%,6.39,2.56 +196,2 11 11 11,6.09,90%,6.21,2.47 +197,2 11 12 12,6.09,95.40%,6.49,2.27 +198,4 7 7 8,6.09,93.80%,6.55,2.52 +199,3 3 4 8,6.1,96.20%,6.43,2.14 +200,2 2 11 12,6.11,92.30%,6.5,2.56 +201,5 6 12 13,6.11,97.40%,6.51,2.17 +202,3 3 11 13,6.12,96.90%,6.62,2.5 +203,4 7 12 12,6.12,88.50%,6.51,2.85 +204,2 13 13 13,6.14,91.10%,6.32,2.32 +205,5 5 12 13,6.14,95.60%,6.62,2.14 +206,10 13 13 13,6.14,93.20%,6.58,2.78 +207,1 7 7 12,6.15,88.90%,6.28,2.32 +208,2 3 11 12,6.15,94.80%,6.74,2.75 +209,5 5 11 13,6.15,96.10%,6.75,2.52 +210,1 2 3 10,6.16,98.40%,6.47,2 +211,1 5 5 12,6.16,90.50%,6.36,2.32 +212,1 5 7 13,6.16,97.90%,6.53,2.09 +213,3 3 3 6,6.17,97.70%,6.71,2.56 +214,3 3 3 12,6.17,96.90%,6.65,2.46 +215,10 10 11 12,6.17,93.30%,6.53,2.29 +216,1 4 7 8,6.19,96.60%,6.68,2.71 +217,1 10 12 12,6.19,95.80%,6.81,2.94 +218,8 8 11 12,6.19,90.60%,6.54,2.66 +219,1 2 3 8,6.2,97%,6.61,2.38 +220,4 4 10 13,6.2,93.50%,6.71,2.79 +221,1 4 6 8,6.21,94.40%,6.57,2.52 +222,2 2 4 5,6.21,98.30%,6.6,2.11 +223,11 12 13 13,6.21,95.10%,6.69,2.43 +224,1 2 2 8,6.22,93.30%,6.65,2.63 +225,5 5 5 6,6.22,96.10%,6.68,2.34 +226,1 1 5 7,6.23,96.40%,6.56,2.09 +227,1 2 13 13,6.23,97.20%,6.93,2.69 +228,7 7 12 13,6.23,93.90%,6.63,2.35 +229,1 4 8 8,6.24,96.50%,6.71,2.48 +230,3 11 11 12,6.24,91.40%,6.44,2.17 +231,1 2 3 12,6.25,96.20%,6.8,2.53 +232,1 3 8 9,6.27,92.20%,6.82,3.18 +233,1 3 11 11,6.27,97.20%,6.68,2.43 +234,1 4 4 5,6.27,96.90%,6.82,2.67 +235,1 5 10 10,6.28,97.30%,6.65,2.3 +236,1 8 10 13,6.28,94.80%,6.6,2.43 +237,2 2 2 8,6.28,96.40%,6.84,2.73 +238,1 4 12 12,6.29,91.20%,6.53,2.49 +239,2 7 8 12,6.29,94.90%,6.73,2.56 +240,4 4 5 6,6.29,95.70%,6.6,2.26 +241,7 9 11 11,6.29,95.80%,6.77,2.64 +242,2 12 12 13,6.3,95.50%,6.69,2.37 +243,6 7 11 12,6.3,96.80%,6.84,2.59 +244,4 6 12 13,6.31,93.80%,6.82,2.88 +245,1 2 10 11,6.32,97.60%,6.66,2.39 +246,1 5 8 9,6.32,93.90%,6.76,2.62 +247,1 5 7 8,6.33,94.70%,6.71,2.42 +248,4 8 9 9,6.33,90.40%,6.49,2.28 +249,9 9 12 13,6.33,94%,6.69,2.25 +250,8 8 8 10,6.35,90.40%,6.7,2.91 +251,2 12 12 12,6.36,98.40%,6.75,2.46 +252,1 8 8 9,6.37,96.30%,6.9,2.71 +253,2 8 11 11,6.37,88.50%,6.55,2.78 +254,4 5 13 13,6.37,87.70%,6.61,2.77 +255,1 2 12 12,6.38,95.80%,6.71,2.2 +256,2 8 10 11,6.38,94.70%,6.87,2.62 +257,2 11 13 13,6.38,94.10%,6.88,2.52 +258,1 6 7 11,6.39,97.40%,7.02,2.89 +259,3 6 7 8,6.39,97.80%,6.79,2.31 +260,1 2 8 8,6.4,96.10%,6.97,2.74 +261,4 5 9 9,6.4,88.40%,6.64,2.72 +262,1 3 3 7,6.41,95.90%,7.25,3.33 +263,2 5 6 12,6.41,95.10%,6.8,2.52 +264,3 6 10 11,6.41,95.80%,7.05,2.86 +265,1 3 6 6,6.42,97.20%,6.89,2.58 +266,1 6 6 13,6.42,97.20%,6.8,2.44 +267,4 4 4 4,6.43,97.80%,7.03,2.93 +268,10 10 10 13,6.43,92.90%,6.86,2.99 +269,1 6 9 9,6.44,97.50%,6.87,2.52 +270,2 6 6 12,6.44,97.70%,6.97,2.55 +271,3 7 9 9,6.44,91%,6.87,2.78 +272,1 7 8 12,6.45,95.60%,6.97,2.67 +273,3 12 13 13,6.46,91%,6.62,2.29 +274,6 6 11 12,6.46,88.90%,6.77,2.97 +275,1 3 5 8,6.47,95.10%,7.13,2.89 +276,6 10 10 10,6.47,95.70%,6.74,2.31 +277,2 3 11 13,6.48,91.90%,6.91,2.78 +278,1 1 3 11,6.49,94.30%,6.73,1.97 +279,1 4 4 7,6.49,96.10%,7.22,3.18 +280,1 2 4 6,6.5,95.90%,6.88,2.53 +281,1 9 12 12,6.5,92.60%,6.86,2.82 +282,3 4 5 8,6.5,96.10%,6.96,2.63 +283,4 5 6 6,6.5,95.30%,6.81,2.33 +284,1 3 3 5,6.51,95.10%,6.76,2.46 +285,1 4 6 13,6.51,97.50%,6.96,2.39 +286,2 2 2 11,6.51,92.10%,6.79,2.66 +287,2 4 5 12,6.51,94.50%,6.96,2.87 +288,10 11 11 13,6.51,94.70%,6.91,2.63 +289,12 13 13 13,6.52,94.30%,6.85,2.44 +290,3 7 11 11,6.53,88%,6.77,3.02 +291,3 7 13 13,6.53,87.30%,6.67,2.74 +292,4 6 7 8,6.53,95.80%,6.96,2.48 +293,1 4 7 13,6.54,96.50%,7.22,2.95 +294,1 5 8 10,6.54,96.30%,7.09,2.54 +295,5 6 6 7,6.54,97.90%,7.06,2.44 +296,1 5 10 12,6.55,92%,6.96,3.07 +297,1 6 8 10,6.55,97.10%,6.98,2.39 +298,3 5 11 11,6.55,94.50%,7.06,2.97 +299,3 9 9 12,6.55,94.70%,6.92,2.56 +300,2 10 11 12,6.56,95.90%,6.86,2.4 +301,2 8 8 13,6.57,92.80%,6.94,2.55 +302,7 8 11 12,6.57,96.20%,7.05,2.64 +303,1 2 5 6,6.58,94.60%,7.11,2.75 +304,1 7 7 11,6.58,96.80%,7.15,2.6 +305,4 6 12 12,6.58,96.80%,7.03,2.42 +306,1 3 13 13,6.59,97%,7.11,2.6 +307,3 8 9 10,6.59,96.20%,6.95,2.46 +308,3 10 10 12,6.59,94.20%,6.94,2.35 +309,4 4 12 13,6.59,92%,6.95,2.49 +310,1 10 11 12,6.6,94.60%,6.98,2.5 +311,2 3 4 6,6.6,97.80%,7.01,2.29 +312,4 6 11 12,6.6,92.80%,6.98,2.9 +313,1 2 10 13,6.61,97%,7.12,2.72 +314,1 3 3 9,6.61,96.70%,7.15,2.85 +315,1 9 11 12,6.61,93.70%,7.05,2.97 +316,2 2 8 12,6.61,98%,7.06,2.29 +317,2 5 6 11,6.63,96.30%,7.12,2.59 +318,3 4 10 13,6.63,96.50%,7.15,2.82 +319,3 7 7 12,6.63,89.90%,6.78,2.56 +320,1 2 3 6,6.65,97%,7.08,2.43 +321,3 6 6 7,6.65,93.60%,7.09,2.67 +322,1 12 12 12,6.66,93.40%,6.88,2.57 +323,2 8 9 12,6.66,95%,7.04,2.72 +324,3 3 3 3,6.67,96%,7.4,3.34 +325,1 4 8 13,6.68,97.40%,7.07,2.44 +326,4 4 5 5,6.68,93.20%,7.11,2.52 +327,6 7 12 13,6.68,95.40%,7.17,2.72 +328,1 2 5 5,6.69,95.10%,7.19,2.91 +329,2 2 5 5,6.69,93.20%,7.07,2.49 +330,5 6 7 7,6.69,87.80%,6.86,2.72 +331,5 7 10 12,6.69,96.70%,7.13,2.44 +332,1 1 6 12,6.7,91.10%,7.36,3.37 +333,1 3 3 3,6.71,95.50%,7.09,2.55 +334,4 5 11 11,6.72,87.20%,7.19,3.59 +335,1 1 2 7,6.73,95.40%,6.96,2.07 +336,1 2 5 7,6.73,95%,7.07,2.65 +337,1 5 6 6,6.73,93.60%,7.41,3.4 +338,9 9 10 13,6.73,90.90%,6.9,2.68 +339,1 6 6 10,6.74,93.60%,7.09,3.03 +340,3 3 12 13,6.74,93.30%,7.19,2.64 +341,6 8 10 12,6.74,97.20%,7.28,2.79 +342,2 2 2 13,6.75,93.40%,7.1,2.72 +343,2 3 12 13,6.76,95.90%,7.24,2.63 +344,3 3 5 6,6.76,96.20%,7.36,2.7 +345,2 11 11 13,6.77,94.90%,7.28,2.84 +346,4 5 7 7,6.77,91.20%,7.37,3.44 +347,7 7 10 13,6.77,89.60%,7.06,3.11 +348,1 2 11 13,6.78,93.50%,7.42,3.1 +349,11 12 12 13,6.78,97%,7.39,2.67 +350,5 7 11 11,6.79,96.10%,7.22,2.67 +351,2 2 2 4,6.8,95.90%,7.13,2.48 +352,3 4 5 7,6.81,96.60%,7.28,2.65 +353,4 7 13 13,6.81,87.70%,7.06,2.94 +354,4 8 8 8,6.81,94.60%,7.16,2.75 +355,5 6 13 13,6.81,86.90%,6.91,2.69 +356,8 9 11 12,6.81,95.20%,7.45,3.01 +357,1 1 2 9,6.82,94.60%,7.11,2.33 +358,2 4 4 8,6.82,96.40%,7.23,2.67 +359,4 4 4 8,6.82,96.30%,7.38,2.8 +360,2 4 13 13,6.83,95.60%,7.34,2.76 +361,4 7 7 7,6.83,88.80%,7.02,3.01 +362,7 9 13 13,6.83,96.30%,7.42,2.78 +363,9 11 11 11,6.83,95.30%,7.21,2.76 +364,1 6 8 11,6.84,97.70%,7.3,2.46 +365,1 1 3 5,6.85,95.20%,7.17,2.32 +366,2 6 6 8,6.85,95.50%,7.42,2.98 +367,1 3 4 4,6.87,93.10%,7.15,3.02 +368,1 3 10 11,6.87,96.40%,7.53,3.1 +369,1 9 10 12,6.87,93.70%,7.18,2.72 +370,7 8 12 13,6.87,96.40%,7.34,2.62 +371,8 9 10 13,6.87,95.80%,7.37,2.65 +372,1 1 4 9,6.88,93.40%,7.08,2.33 +373,2 5 5 8,6.88,88%,7.04,3.06 +374,6 9 12 12,6.88,89.10%,7.44,3.67 +375,2 5 5 13,6.89,92%,7.28,2.71 +376,2 8 12 12,6.89,95%,7.27,2.62 +377,4 7 10 11,6.89,97%,7.42,2.74 +378,1 11 12 12,6.9,94.20%,7.43,3.1 +379,3 3 3 7,6.9,92.20%,7.32,3.12 +380,3 3 3 10,6.9,94.30%,7.47,3.25 +381,6 8 11 11,6.9,94.20%,7.43,3.06 +382,9 10 11 12,6.9,96.10%,7.41,2.76 +383,1 3 6 7,6.91,96%,7.32,2.81 +384,8 9 12 13,6.91,96%,7.4,2.7 +385,1 2 2 11,6.92,97.10%,7.46,2.95 +386,1 8 8 11,6.92,93.30%,7.39,3.42 +387,4 5 10 10,6.92,91%,7.24,3.04 +388,1 2 11 12,6.93,96.90%,7.63,3.2 +389,2 4 5 8,6.93,95%,7.31,2.74 +390,2 5 12 12,6.93,83.20%,7.33,4.07 +391,3 6 6 12,6.94,95.40%,7.6,2.84 +392,4 6 9 10,6.94,93.50%,7.45,3.24 +393,4 7 8 8,6.94,94%,7.33,2.53 +394,5 5 10 10,6.94,86.70%,7.24,3.12 +395,1 2 7 10,6.95,90.90%,7.71,4 +396,2 6 10 12,6.95,95.10%,7.43,2.81 +397,2 6 7 13,6.96,96.60%,7.37,2.66 +398,2 9 9 11,6.96,87.30%,6.96,2.68 +399,8 8 10 13,6.96,90.40%,7.35,3.05 +400,1 1 8 8,6.97,89.50%,7.42,3.71 +401,2 2 10 13,6.97,90.10%,7.23,3.03 +402,2 2 12 13,6.97,92.10%,7.25,2.6 +403,5 6 11 11,6.97,87.20%,7.18,3.13 +404,11 11 12 13,6.97,94.90%,7.39,2.48 +405,1 2 6 7,6.98,95.10%,7.35,2.55 +406,3 8 8 9,6.98,95.50%,7.29,2.5 +407,6 7 10 13,6.98,96.40%,7.5,2.75 +408,9 12 12 12,6.98,82.20%,7.03,3.68 +409,1 6 8 8,6.99,93%,7.31,2.92 +410,4 4 4 12,6.99,96.60%,7.46,2.94 +411,5 5 10 13,6.99,89.70%,7.34,3.26 +412,6 8 8 8,6.99,88.10%,7.38,3.47 +413,5 6 9 9,7,90.60%,7.27,2.74 +414,1 3 7 13,7.01,96.80%,7.4,2.64 +415,1 7 8 11,7.01,92.60%,7.4,3.08 +416,3 6 9 9,7.01,94%,7.6,3.28 +417,5 5 6 6,7.01,93.10%,7.48,2.79 +418,5 5 13 13,7.01,85.50%,7.17,3.03 +419,1 3 5 13,7.02,94.10%,7.43,2.72 +420,1 8 8 10,7.02,92.40%,7.36,2.99 +421,2 9 9 13,7.02,88.60%,7.08,2.5 +422,1 7 7 9,7.03,96.30%,7.4,2.83 +423,3 7 12 13,7.03,93.80%,7.5,3 +424,8 8 9 11,7.03,89.70%,7.57,3.69 +425,4 8 11 12,7.04,92.90%,7.64,3.18 +426,1 7 10 12,7.05,92.60%,7.46,2.96 +427,2 3 5 5,7.05,96.20%,7.57,2.94 +428,2 6 7 12,7.05,92%,7.2,2.91 +429,8 8 12 13,7.05,92.10%,7.35,2.65 +430,8 10 11 11,7.05,94.80%,7.45,2.76 +431,3 5 5 6,7.06,89.10%,7.29,3.09 +432,1 3 10 12,7.07,96.40%,7.55,2.75 +433,2 3 3 13,7.07,94%,7.6,2.92 +434,5 5 11 11,7.08,85.80%,7.3,3.24 +435,1 2 2 13,7.09,96.40%,7.64,3.12 +436,2 5 9 12,7.09,95.40%,7.53,2.84 +437,3 3 4 4,7.09,94.40%,7.45,2.69 +438,1 2 3 5,7.1,95.40%,7.39,2.38 +439,1 3 9 11,7.1,95.10%,7.65,3.15 +440,2 2 7 13,7.1,96.10%,7.59,2.92 +441,1 5 6 9,7.11,91.90%,7.56,3.43 +442,2 6 10 10,7.11,95.70%,7.58,2.96 +443,10 10 12 13,7.11,92.20%,7.43,2.6 +444,1 10 12 13,7.12,94.30%,7.45,2.83 +445,2 8 8 8,7.12,93.90%,7.68,3.28 +446,3 4 11 12,7.12,95.10%,7.75,3.35 +447,1 2 4 10,7.13,96.20%,7.62,3.17 +448,4 7 12 13,7.13,92.40%,7.74,3.4 +449,7 8 8 9,7.13,86.60%,7.51,3.69 +450,1 3 4 11,7.14,96%,7.65,2.91 +451,4 6 6 8,7.14,97.30%,7.61,2.61 +452,6 6 6 11,7.14,88.70%,7.39,3.41 +453,3 8 8 12,7.15,91.50%,7.62,3.1 +454,2 7 7 13,7.16,86%,7.27,3.01 +455,2 9 10 12,7.16,93.80%,7.49,2.83 +456,3 7 11 12,7.16,90.60%,7.7,3.49 +457,4 5 11 13,7.17,90.30%,7.59,3.29 +458,6 6 12 13,7.17,90.30%,7.56,3.04 +459,1 5 9 9,7.18,94.40%,7.69,3.15 +460,3 4 5 12,7.18,97%,7.61,2.67 +461,5 6 11 13,7.18,91.70%,7.75,3.37 +462,1 12 12 13,7.19,94.20%,7.7,3.12 +463,4 8 10 12,7.19,95.70%,7.71,2.86 +464,5 9 10 10,7.19,92.80%,7.58,3.05 +465,3 6 11 12,7.2,93.40%,7.7,3.18 +466,2 6 7 9,7.21,96%,7.75,3 +467,3 5 13 13,7.22,94.30%,7.71,3.07 +468,3 7 7 9,7.22,86.60%,7.26,2.95 +469,1 3 4 5,7.23,97.50%,7.73,2.53 +470,3 9 10 11,7.23,93%,7.61,2.93 +471,1 3 7 8,7.24,89.30%,7.43,3.48 +472,1 7 9 13,7.25,93.70%,7.5,2.52 +473,1 8 11 12,7.25,91.50%,7.77,3.41 +474,4 7 11 11,7.25,86.30%,7.35,3.32 +475,1 6 6 9,7.26,90.30%,7.7,3.26 +476,5 5 7 8,7.26,92.40%,7.71,2.94 +477,7 9 10 12,7.26,94%,7.78,3.16 +478,1 6 8 13,7.27,94.30%,7.7,2.83 +479,3 4 8 10,7.27,93.40%,7.66,3.19 +480,5 10 11 11,7.27,90.30%,7.48,2.76 +481,2 4 10 12,7.28,96.50%,7.94,3.12 +482,4 5 5 8,7.28,88%,7.43,2.93 +483,10 12 12 13,7.28,90.10%,7.74,3.54 +484,1 1 6 8,7.29,94.90%,7.62,2.55 +485,2 2 3 9,7.29,94.50%,7.73,2.88 +486,3 3 4 5,7.29,94%,7.75,3.18 +487,5 8 8 10,7.29,91.40%,7.77,3.37 +488,1 8 9 11,7.3,92.60%,7.63,3.1 +489,2 3 3 11,7.3,89.30%,7.55,3.23 +490,2 7 8 13,7.3,94%,7.84,3.11 +491,3 5 5 12,7.3,89%,7.62,3.32 +492,5 5 9 9,7.3,85.50%,7.59,3.37 +493,7 10 10 11,7.3,93.50%,7.63,2.94 +494,10 11 11 12,7.31,96.70%,7.8,2.8 +495,2 5 6 8,7.32,95.60%,7.91,3.03 +496,3 3 9 9,7.32,95.90%,7.7,2.77 +497,3 6 6 6,7.32,94.40%,7.75,3.15 +498,5 8 12 12,7.32,75.90%,6.76,3.49 +499,2 3 7 12,7.34,94.70%,7.81,3.04 +500,5 6 8 8,7.34,92.20%,7.69,2.92 +501,1 11 12 13,7.35,93.80%,7.77,3.19 +502,3 5 6 8,7.35,93.50%,7.83,3.19 +503,6 8 13 13,7.35,93.30%,7.82,3.08 +504,4 4 5 8,7.37,95.90%,7.72,2.57 +505,7 10 12 12,7.37,84.60%,7.57,3.7 +506,1 8 9 13,7.38,91.40%,7.84,3.51 +507,3 5 10 12,7.38,94.80%,7.95,3.1 +508,3 9 11 11,7.38,85.80%,7.49,3.24 +509,6 6 6 9,7.38,89.60%,7.97,3.92 +510,5 5 10 11,7.39,87.70%,7.75,3.46 +511,2 2 4 7,7.4,95.30%,8.06,3.15 +512,3 6 8 8,7.4,92.70%,7.74,2.98 +513,3 9 13 13,7.4,86.30%,7.56,3.26 +514,4 4 4 7,7.4,91.10%,7.76,3.31 +515,1 4 4 4,7.41,95.70%,7.86,2.86 +516,9 10 10 13,7.41,95.20%,7.86,3.02 +517,2 10 10 11,7.42,85.20%,7.27,2.92 +518,3 3 10 13,7.42,89.40%,7.7,3.46 +519,1 2 3 9,7.43,96.40%,7.98,3.1 +520,2 4 8 10,7.43,97.80%,7.91,2.6 +521,1 7 9 9,7.44,94.70%,7.92,3.19 +522,2 6 6 6,7.45,95.90%,8.01,3.06 +523,2 6 9 11,7.45,95.50%,7.93,3.13 +524,3 4 4 7,7.45,90.30%,7.87,3.37 +525,2 6 6 13,7.46,84.90%,7.54,3.15 +526,8 8 8 12,7.46,88.20%,7.86,3.98 +527,3 5 5 7,7.47,89.90%,7.71,3.14 +528,4 7 9 9,7.47,86.40%,7.59,3.16 +529,5 7 13 13,7.47,94.20%,7.87,3.21 +530,1 4 5 5,7.48,95.80%,7.91,2.68 +531,1 5 5 6,7.48,94.90%,7.99,3.07 +532,4 8 12 13,7.48,91.70%,8.18,3.7 +533,5 10 13 13,7.48,92.50%,7.93,2.78 +534,2 10 10 13,7.49,90%,7.63,2.85 +535,3 3 5 5,7.49,89.40%,7.73,3.16 +536,3 7 9 10,7.49,91.90%,8.06,3.46 +537,1 2 3 7,7.5,96.10%,8.17,3.2 +538,4 4 7 9,7.5,93.20%,7.9,3.39 +539,2 2 6 6,7.51,95.80%,8.02,3.05 +540,2 6 6 11,7.51,83.20%,7.35,3.13 +541,6 7 11 13,7.51,90.10%,7.89,3.44 +542,1 2 2 4,7.52,95.50%,7.83,2.44 +543,3 5 6 12,7.52,93.40%,8.04,3.23 +544,2 2 7 8,7.53,93.70%,7.88,2.98 +545,2 4 4 13,7.53,85.40%,7.66,3.38 +546,4 4 8 8,7.53,95.60%,8.13,3.2 +547,3 6 10 12,7.54,92.90%,8.05,3.43 +548,1 2 4 13,7.55,93.60%,7.88,2.93 +549,2 4 5 13,7.55,94.70%,8.14,3.25 +550,2 7 8 8,7.57,92.60%,7.97,3.08 +551,1 2 12 13,7.58,95.90%,8.31,3.37 +552,2 3 4 12,7.58,94.20%,8.09,3.28 +553,3 4 9 12,7.58,94.50%,8.02,3.08 +554,9 11 13 13,7.6,92%,8.11,3.19 +555,2 2 4 10,7.61,94.10%,8.01,2.92 +556,2 8 12 13,7.61,89.40%,7.86,3.55 +557,3 4 4 12,7.61,90.40%,7.91,3.28 +558,2 4 4 11,7.62,84.50%,7.62,3.38 +559,2 3 5 6,7.63,95%,8.05,2.95 +560,2 6 11 13,7.63,89.70%,7.78,3.26 +561,3 9 12 12,7.63,90.70%,8.2,3.48 +562,5 6 10 10,7.63,86.90%,7.99,3.73 +563,1 3 8 12,7.64,96.60%,8.14,2.9 +564,2 6 8 11,7.64,93.30%,8.07,3.38 +565,1 4 10 11,7.65,95%,8.1,3.15 +566,1 9 11 11,7.65,89.70%,7.79,3.02 +567,1 4 9 12,7.67,95.90%,8.33,3.37 +568,4 8 10 11,7.67,90.40%,7.98,3.45 +569,2 2 2 10,7.68,94.10%,8.13,3.33 +570,3 6 12 12,7.69,93%,8.24,3.48 +571,1 2 9 12,7.7,92.40%,8.32,3.81 +572,3 3 4 12,7.7,95%,8.34,3.2 +573,4 5 7 8,7.7,95.60%,8.19,3.15 +574,4 7 9 10,7.7,90.50%,8.19,3.66 +575,4 4 4 5,7.71,84.90%,7.7,3.66 +576,5 6 7 8,7.71,93.50%,8.21,3.11 +577,1 6 9 13,7.72,90.60%,8.12,3.96 +578,2 6 8 10,7.72,93.20%,8.22,3.44 +579,3 3 4 7,7.72,90.20%,8.18,3.48 +580,6 6 10 12,7.72,93.80%,8.14,3.07 +581,8 9 11 13,7.72,90.70%,8.16,3.68 +582,3 4 4 9,7.73,90.90%,8.24,3.29 +583,3 5 8 11,7.75,89.60%,8.05,3.47 +584,6 6 7 10,7.75,84.20%,7.85,4.09 +585,6 6 9 12,7.75,92.60%,8.12,3.31 +586,1 3 5 11,7.76,93.20%,8.11,2.86 +587,1 5 6 10,7.76,91.50%,8.1,3.24 +588,3 6 6 9,7.77,96.20%,8.24,2.96 +589,1 2 2 5,7.79,94.30%,8.03,2.83 +590,1 2 4 11,7.8,91.90%,8.06,2.8 +591,2 5 5 11,7.81,82.90%,7.62,3.34 +592,3 3 8 9,7.81,88.70%,8.19,3.79 +593,3 6 10 10,7.81,85.30%,7.81,3.64 +594,5 6 6 6,7.81,87.50%,7.91,3.44 +595,8 11 12 12,7.82,77.50%,7.26,3.55 +596,1 4 8 11,7.83,95.40%,8.26,2.85 +597,5 8 8 9,7.83,87%,8.05,3.92 +598,2 2 9 11,7.84,91.50%,8.16,3.28 +599,2 7 7 11,7.84,86.60%,7.89,3.67 +600,1 4 4 9,7.85,94.10%,8.25,3.34 +601,1 4 4 10,7.85,92%,8.06,3.4 +602,4 5 10 11,7.85,88.10%,8.28,4.17 +603,1 2 6 9,7.86,94.30%,8.4,3.58 +604,3 4 12 13,7.86,93.20%,8.45,3.71 +605,3 9 10 10,7.86,84.70%,7.73,3.43 +606,3 12 12 12,7.86,90.90%,8.17,3.42 +607,3 7 12 12,7.87,91.20%,8.23,3.41 +608,4 5 8 9,7.87,88.90%,8.25,3.97 +609,10 12 13 13,7.87,94.20%,8.32,2.93 +610,2 2 6 12,7.88,94.10%,8.48,3.48 +611,3 4 5 5,7.88,93.90%,8.56,3.65 +612,6 7 8 10,7.88,91.60%,8.4,3.57 +613,2 2 4 8,7.89,95.80%,8.41,3.08 +614,3 6 7 9,7.89,92.80%,8.34,3.48 +615,2 4 6 10,7.9,93.80%,8.32,3.37 +616,3 4 7 9,7.9,93.10%,8.33,3.73 +617,4 8 9 10,7.9,88.80%,8.1,3.33 +618,5 6 10 11,7.91,90.30%,8.22,3.54 +619,8 10 13 13,7.91,92.50%,8.29,3.33 +620,2 5 6 13,7.92,91.40%,8.41,3.61 +621,3 12 12 13,7.92,92.40%,8.3,3.26 +622,4 6 8 9,7.92,93.30%,8.35,3.38 +623,2 3 5 11,7.93,94.80%,8.43,3.29 +624,7 8 11 13,7.93,90.10%,8.48,3.85 +625,2 3 3 6,7.95,96.20%,8.45,2.96 +626,5 8 8 13,7.95,92.40%,8.33,3.65 +627,2 2 3 3,7.96,93.30%,8.29,3.26 +628,1 4 6 11,7.97,92.50%,8.28,3.23 +629,3 9 12 13,7.97,89.70%,8.44,3.93 +630,1 2 5 9,7.98,95%,8.48,3.09 +631,2 7 8 11,7.98,94.80%,8.57,3.59 +632,1 3 6 9,7.99,93.10%,8.49,3.2 +633,3 4 10 12,8,92.40%,8.38,3.5 +634,3 7 10 11,8,90.50%,8.27,3.37 +635,4 10 12 12,8,92%,8.42,3.34 +636,4 4 6 12,8.01,93.90%,8.69,3.77 +637,10 11 12 13,8.01,95.80%,8.62,3.48 +638,2 5 6 7,8.02,92.30%,8.49,3.62 +639,3 5 8 8,8.02,92.10%,8.48,3.85 +640,2 2 3 7,8.05,88.10%,8.43,3.8 +641,2 8 8 9,8.05,90.20%,8.35,3.34 +642,8 10 10 12,8.05,94.30%,8.52,3.4 +643,4 8 8 9,8.06,92.30%,8.3,3.05 +644,1 5 9 10,8.07,93.50%,8.59,3.77 +645,2 3 4 8,8.07,92.50%,8.78,4.01 +646,4 7 9 12,8.07,94.90%,8.58,3.25 +647,1 1 7 10,8.08,85.10%,8.12,4.24 +648,2 4 8 8,8.08,93.90%,8.75,4.12 +649,2 7 11 12,8.08,91.50%,8.43,3.4 +650,2 4 8 12,8.09,93.80%,8.86,4.19 +651,1 3 12 12,8.1,85.50%,8.39,4.52 +652,2 4 9 13,8.1,93.60%,8.44,3.5 +653,4 5 9 10,8.1,90.60%,8.47,3.64 +654,1 3 4 13,8.11,94.10%,8.7,3.66 +655,3 7 8 12,8.11,95%,8.61,3.22 +656,1 4 5 11,8.12,90.60%,8.37,3.88 +657,1 4 9 11,8.12,94.40%,8.78,3.71 +658,2 7 9 10,8.12,93.90%,8.52,3.2 +659,2 8 9 13,8.12,90.10%,8.37,3.57 +660,4 4 10 12,8.13,90.60%,8.54,3.93 +661,3 4 9 11,8.14,89.80%,8.4,4.03 +662,4 6 8 12,8.14,94.20%,8.76,3.48 +663,1 5 5 13,8.15,93.30%,8.37,3.21 +664,3 6 9 10,8.15,92.40%,8.48,3.56 +665,2 8 9 10,8.16,88.80%,8.35,3.78 +666,3 5 6 6,8.16,92.20%,8.67,3.6 +667,5 8 11 13,8.16,88.80%,8.32,3.37 +668,6 8 8 10,8.16,91%,8.62,4.02 +669,2 4 8 11,8.17,92.70%,8.49,3.62 +670,5 5 8 8,8.18,84.80%,8.36,3.85 +671,5 5 8 9,8.19,89.60%,8.64,3.88 +672,9 10 12 13,8.19,93.50%,8.76,3.56 +673,1 3 6 13,8.2,91.80%,8.44,3.17 +674,2 2 6 10,8.21,95.10%,8.64,3.02 +675,1 8 11 13,8.22,88.20%,8.32,3.55 +676,2 2 4 11,8.24,91.50%,8.59,3.66 +677,5 8 9 11,8.24,89.90%,8.49,3.67 +678,3 4 5 10,8.26,90.30%,8.62,3.99 +679,1 2 8 9,8.28,93.40%,8.87,3.42 +680,1 6 11 12,8.28,88.80%,8.26,2.97 +681,2 5 10 11,8.28,94.10%,8.85,3.5 +682,5 6 9 10,8.28,90.80%,8.74,3.78 +683,1 3 4 9,8.3,94.50%,8.8,3.81 +684,3 4 7 10,8.3,93.30%,8.54,3.42 +685,6 6 7 9,8.3,90.70%,8.63,3.71 +686,6 8 8 11,8.3,87.70%,8.55,3.82 +687,2 4 4 4,8.31,94.60%,8.76,3.19 +688,2 9 10 11,8.33,88.70%,8.3,3.31 +689,4 4 8 11,8.33,87%,8.32,3.69 +690,4 4 4 9,8.34,88.30%,8.43,3.94 +691,6 8 10 13,8.36,86.60%,8.43,3.64 +692,2 8 8 11,8.37,84%,8.09,3.45 +693,4 7 8 9,8.37,92.10%,8.77,3.69 +694,1 6 12 13,8.38,89.40%,8.45,3.24 +695,4 4 7 12,8.38,89.40%,8.75,4.13 +696,6 6 8 9,8.38,90.30%,8.64,3.44 +697,1 2 2 7,8.39,91.70%,8.72,3.35 +698,1 2 6 13,8.4,90.60%,8.88,3.9 +699,2 3 3 7,8.4,92.10%,8.85,3.69 +700,2 4 7 10,8.4,91.20%,8.67,3.82 +701,2 9 12 13,8.4,90.60%,8.82,3.86 +702,6 6 9 11,8.4,88.80%,8.82,3.98 +703,3 3 7 11,8.41,92.20%,8.7,3.56 +704,3 3 8 12,8.41,91.70%,8.97,3.88 +705,1 4 9 10,8.42,93.20%,8.85,3.63 +706,3 6 8 9,8.42,93.80%,8.82,3.16 +707,4 4 6 11,8.42,86.30%,8.51,4.42 +708,1 6 10 13,8.44,87.60%,8.63,4.1 +709,1 3 4 10,8.45,92.90%,8.73,3.35 +710,2 9 10 13,8.45,90.20%,9.07,4.07 +711,5 6 10 13,8.45,91.50%,9.12,4.24 +712,3 11 12 12,8.46,90.80%,8.71,3.28 +713,6 6 8 11,8.47,82.90%,8.3,4.31 +714,7 8 8 11,8.48,80.60%,8.17,4.53 +715,1 2 7 8,8.49,94.30%,9.01,3.53 +716,1 11 13 13,8.49,91.30%,8.83,3.74 +717,1 4 6 7,8.5,87.30%,8.78,4.49 +718,2 10 11 13,8.5,89.50%,8.58,3.43 +719,5 7 8 8,8.5,82.70%,8.43,4.67 +720,2 2 3 13,8.51,87.60%,8.54,3.6 +721,2 3 10 13,8.51,93.40%,9.02,3.94 +722,2 4 6 6,8.52,94.10%,9.27,3.98 +723,4 5 6 7,8.54,90.30%,8.94,3.82 +724,4 5 8 12,8.54,93.30%,9.08,3.71 +725,3 6 7 12,8.55,90%,8.81,3.76 +726,3 7 7 13,8.56,93.40%,8.84,3.13 +727,1 2 9 13,8.57,93.30%,9.21,4.17 +728,2 2 4 13,8.57,91.10%,9.09,4.16 +729,4 4 9 11,8.57,82.50%,8.26,4.41 +730,1 2 3 11,8.58,95.70%,8.98,3.39 +731,2 4 6 9,8.58,91.80%,9.06,4.19 +732,2 8 11 12,8.58,88.30%,8.82,4.18 +733,4 4 4 11,8.58,86%,8.81,4.65 +734,1 2 3 3,8.59,95.50%,8.93,2.98 +735,4 5 9 13,8.59,89.30%,9.33,4.75 +736,4 6 10 12,8.59,93.80%,9.17,3.92 +737,2 4 9 9,8.6,90%,8.71,3.82 +738,2 6 6 10,8.61,94.10%,9.05,3.64 +739,1 2 5 13,8.62,94.30%,9.16,3.68 +740,6 8 9 13,8.62,93.90%,9.3,3.96 +741,2 9 11 11,8.63,89.30%,9.08,4.03 +742,1 3 9 13,8.65,93.70%,9.25,4.13 +743,2 2 8 10,8.65,94.30%,9.26,3.29 +744,2 4 7 11,8.66,92.50%,8.98,3.79 +745,2 6 7 8,8.66,89.60%,8.97,3.88 +746,1 3 4 7,8.67,95%,9.48,3.83 +747,4 8 9 11,8.68,93%,9.16,3.89 +748,6 6 8 10,8.68,90.10%,8.9,3.96 +749,5 5 9 10,8.69,86.90%,9.06,4.3 +750,2 3 7 11,8.7,91.70%,9.09,4.21 +751,2 8 9 11,8.7,90.50%,9.1,3.77 +752,2 4 10 13,8.71,88.90%,9.07,4.43 +753,1 3 8 8,8.72,86.50%,8.95,4.51 +754,3 9 9 10,8.73,86.70%,8.78,3.81 +755,4 11 12 13,8.74,91.20%,9.18,3.87 +756,1 2 6 11,8.75,90%,9.19,4.25 +757,2 5 7 10,8.75,92.20%,9.15,3.72 +758,3 4 7 7,8.75,94%,9.41,3.8 +759,6 8 12 12,8.77,91.50%,9.48,4.23 +760,2 3 5 9,8.79,92%,9.31,4.31 +761,4 4 8 10,8.8,91.40%,9.13,4.36 +762,3 7 10 13,8.82,88.20%,9.22,4.63 +763,4 5 8 8,8.82,86.40%,8.8,4.02 +764,3 4 4 5,8.83,91.10%,9.13,3.95 +765,3 5 9 12,8.83,90%,9.14,4.01 +766,4 8 8 12,8.83,94.40%,9.39,3.84 +767,4 12 12 12,8.83,86%,9.14,4.72 +768,2 2 5 6,8.84,88.60%,9.16,4.38 +769,9 10 11 13,8.84,89.70%,9.09,3.8 +770,2 3 4 13,8.85,90.90%,9.19,3.9 +771,3 10 11 12,8.85,89.40%,9.04,3.71 +772,4 4 8 13,8.85,86.70%,8.78,4.2 +773,5 6 6 10,8.85,88.90%,9.06,3.86 +774,1 1 3 10,8.86,88.10%,8.88,3.86 +775,1 2 4 5,8.86,90.40%,9.27,4.21 +776,1 4 5 10,8.86,91.20%,9.01,3.61 +777,2 5 8 13,8.87,93%,9.39,3.91 +778,3 5 6 9,8.88,92.50%,9.31,3.67 +779,7 8 10 13,8.89,92.10%,9.4,4.08 +780,6 6 8 13,8.9,83.80%,8.68,4.24 +781,3 9 10 12,8.92,90.20%,9.17,3.63 +782,1 2 4 9,8.93,90.80%,9.28,3.92 +783,1 3 3 10,8.94,89.60%,9.04,4.1 +784,1 5 5 9,8.94,88.40%,9.09,3.7 +785,1 4 6 9,8.95,86.10%,8.81,4.02 +786,2 3 9 9,8.96,90.50%,9.32,3.95 +787,4 4 5 10,8.96,86.30%,9.07,4.66 +788,6 6 6 12,8.96,89.50%,9.18,4.48 +789,1 3 5 10,8.97,93.20%,9.46,3.7 +790,2 11 12 13,8.97,89.80%,9.34,3.94 +791,2 2 5 7,8.98,88.90%,9.03,3.68 +792,8 8 9 13,8.98,81.20%,8.59,4.69 +793,2 2 3 6,8.99,91.60%,9.28,4.01 +794,3 4 7 11,8.99,87.30%,9.05,4.58 +795,3 5 6 7,8.99,89.50%,9.04,3.8 +796,4 5 5 9,8.99,91.30%,9.32,3.88 +797,4 7 10 10,8.99,83.90%,8.74,4.08 +798,3 6 12 13,9,86.30%,8.93,4.31 +799,5 5 6 7,9,90.80%,9.44,4.03 +800,6 8 11 13,9,86.30%,9.38,4.5 +801,1 5 9 11,9.02,93.10%,9.53,3.93 +802,2 10 11 11,9.02,86.40%,9.05,3.99 +803,7 12 12 13,9.05,82.60%,8.84,4.09 +804,5 10 10 12,9.08,86.70%,9.06,3.56 +805,1 5 6 8,9.1,90%,9.15,3.84 +806,2 2 3 11,9.1,86.10%,9.11,4.12 +807,2 2 5 11,9.1,87.40%,9.42,4.41 +808,2 5 8 9,9.1,92.50%,9.42,3.73 +809,2 3 4 11,9.11,88.50%,9.26,4.08 +810,2 3 6 10,9.11,92.20%,9.33,3.75 +811,1 3 5 7,9.13,90%,9.38,4.02 +812,1 5 10 13,9.13,88.60%,9.15,3.43 +813,5 7 8 9,9.18,88.90%,9.48,4.21 +814,5 11 12 12,9.19,82.80%,8.89,4.07 +815,8 8 8 13,9.19,84.70%,9.17,4.29 +816,3 3 6 11,9.21,90.20%,9.66,4.44 +817,3 7 8 9,9.21,86.90%,9.2,3.82 +818,2 8 8 10,9.22,92.80%,9.44,3.77 +819,4 7 7 11,9.22,87.50%,9.49,4.52 +820,2 3 8 12,9.23,93.20%,9.73,3.79 +821,3 5 5 9,9.23,83.30%,8.9,4.05 +822,5 6 7 12,9.23,84.60%,9.15,4.29 +823,2 3 4 4,9.25,94%,9.67,3.57 +824,3 3 3 9,9.25,84.50%,9.27,4.67 +825,1 2 7 9,9.26,93.30%,9.74,3.81 +826,1 9 11 13,9.26,88%,9.47,4.01 +827,2 2 6 8,9.27,95.50%,9.69,3.59 +828,5 8 9 12,9.29,92.30%,9.72,3.87 +829,1 1 4 10,9.3,85.60%,9.15,5.02 +830,4 5 10 13,9.3,91.10%,9.74,4.38 +831,2 3 3 9,9.31,93.20%,9.71,3.76 +832,3 3 4 9,9.34,92.10%,9.67,3.77 +833,3 4 6 10,9.34,89.80%,9.84,4.72 +834,3 4 6 12,9.34,93.30%,9.85,3.99 +835,3 7 7 10,9.34,89%,9.62,4.27 +836,3 9 11 12,9.35,90.10%,9.79,4.37 +837,2 4 4 7,9.37,89.40%,9.55,4.27 +838,3 4 5 9,9.38,84.90%,9.17,4.45 +839,4 5 7 12,9.4,87.50%,9.33,3.91 +840,2 7 9 13,9.41,87.20%,9.71,4.77 +841,5 9 9 11,9.44,89.50%,9.64,3.84 +842,6 6 6 8,9.44,91.40%,9.75,4.17 +843,1 7 12 12,9.45,80.60%,8.78,4.34 +844,1 6 9 10,9.46,91.80%,9.7,3.71 +845,2 5 6 10,9.46,88%,9.51,4.42 +846,3 8 9 12,9.46,90.20%,9.87,4.4 +847,2 3 6 11,9.47,90.20%,9.82,4.38 +848,2 4 5 9,9.49,86.30%,9.52,4.62 +849,4 7 11 12,9.49,86.30%,9.64,4.7 +850,2 2 4 9,9.51,90.50%,9.84,4.3 +851,2 6 8 8,9.51,92.50%,9.87,4.08 +852,4 5 5 7,9.51,82.40%,9.15,4.34 +853,2 3 8 11,9.53,92.70%,10.12,4.06 +854,4 7 8 13,9.53,90.70%,9.97,4.28 +855,6 6 8 12,9.53,90.80%,9.88,4.21 +856,5 6 8 9,9.54,89.90%,9.82,4.35 +857,3 3 5 9,9.55,87%,9.56,3.99 +858,4 5 7 11,9.55,87.30%,9.77,4.97 +859,4 9 12 12,9.56,89.40%,10.06,4.28 +860,3 3 6 9,9.57,94.20%,10.28,4.1 +861,3 5 9 13,9.57,91.30%,9.91,4.01 +862,3 7 8 13,9.57,84%,9.5,4.79 +863,4 4 5 7,9.57,85.10%,9.27,4.41 +864,1 5 5 11,9.61,88%,9.77,4.11 +865,2 4 6 13,9.65,87.20%,9.94,4.99 +866,6 7 9 12,9.65,86.80%,9.59,4.66 +867,1 5 6 13,9.7,90.30%,10.08,4.65 +868,3 8 8 11,9.71,89.50%,9.88,4.57 +869,2 3 4 10,9.72,91.90%,10.1,4.16 +870,6 6 8 8,9.72,86%,9.63,4.4 +871,4 9 9 10,9.73,89.90%,9.98,4.04 +872,3 3 7 9,9.74,90.60%,9.91,3.75 +873,1 7 9 10,9.78,86.80%,9.74,3.86 +874,2 3 9 13,9.79,87.50%,10.07,5.28 +875,3 3 3 5,9.79,85.70%,9.46,3.98 +876,5 6 9 12,9.79,87.20%,9.84,4.27 +877,6 9 10 11,9.8,91.40%,10.13,4.08 +878,2 4 5 11,9.82,87.60%,10.03,4.69 +879,1 2 5 10,9.83,91.70%,10.06,3.98 +880,2 2 2 5,9.85,78.70%,8.96,4.68 +881,6 12 13 13,9.85,87.30%,9.92,3.85 +882,3 3 6 10,9.87,86.40%,9.7,4.17 +883,3 4 8 11,9.88,87.20%,9.9,4.84 +884,4 4 6 13,9.88,82.60%,9.4,5.04 +885,4 6 7 10,9.88,86.50%,10.04,4.72 +886,6 11 11 12,9.89,86.40%,9.76,3.92 +887,3 6 9 11,9.91,86.80%,9.87,4.65 +888,5 7 9 13,9.94,90.90%,10.39,4.07 +889,2 4 12 12,9.95,85.70%,9.97,4.7 +890,4 9 11 12,9.96,89%,10.16,4.25 +891,7 8 9 13,9.96,84%,9.71,4.26 +892,2 6 12 12,9.97,89%,10.49,5.13 +893,3 4 5 6,9.97,84%,9.91,4.98 +894,6 10 12 12,9.98,88.80%,10.25,4.61 +895,5 5 5 9,10,87.60%,9.76,4.11 +896,5 5 6 11,10,87.10%,9.97,4.57 +897,6 8 9 9,10,86.20%,10.02,4.07 +898,3 3 6 13,10.01,86.40%,10.24,5.25 +899,6 8 9 11,10.01,84.40%,9.79,4.64 +900,1 3 3 11,10.02,88.20%,9.98,4.68 +901,4 5 6 10,10.02,90.30%,10.49,4.36 +902,1 2 4 7,10.03,89.10%,10.3,4.82 +903,2 5 8 11,10.03,85.90%,10.22,5.08 +904,3 4 4 13,10.03,88.80%,10.08,4.15 +905,6 7 8 9,10.03,84.50%,9.67,4.35 +906,1 11 11 13,10.06,87.70%,10.01,4.25 +907,1 8 10 11,10.07,86.90%,10.02,3.39 +908,2 3 6 9,10.1,93.10%,10.54,4.14 +909,1 3 5 9,10.11,90.60%,10.39,4.46 +910,3 3 7 12,10.11,84.50%,10.02,5.26 +911,4 5 7 9,10.12,86.70%,10.41,5 +912,1 2 8 13,10.13,91.30%,10.43,4.73 +913,4 6 6 9,10.14,87.60%,10.45,5.26 +914,1 4 4 8,10.15,89.70%,10.37,5.43 +915,1 5 10 11,10.16,86.30%,9.92,3.62 +916,3 4 6 11,10.16,88.90%,10.38,4.56 +917,2 4 8 9,10.17,84%,9.9,4.57 +918,1 4 5 13,10.18,87.70%,10.29,4.48 +919,2 2 7 12,10.19,83.20%,9.78,4.39 +920,3 3 6 7,10.19,88.70%,10.6,4.55 +921,1 5 9 13,10.2,84.90%,10.1,4.71 +922,5 6 7 13,10.2,86.40%,10.44,5.42 +923,5 5 8 10,10.21,81.30%,9.68,3.96 +924,2 4 6 12,10.23,94.50%,11.06,4.75 +925,6 7 8 11,10.24,83.90%,9.96,4.83 +926,7 9 9 13,10.26,88%,10.34,4.64 +927,3 6 9 12,10.27,92.70%,10.72,4.16 +928,6 9 12 13,10.28,88.30%,10.45,4.3 +929,4 7 9 13,10.29,84.30%,10.35,5.72 +930,5 6 8 12,10.29,87.90%,10.35,4.06 +931,2 4 6 7,10.31,90.10%,10.42,4.27 +932,2 5 10 10,10.32,78.30%,9.42,3.9 +933,6 6 7 12,10.32,83.80%,10.01,4.72 +934,6 9 9 11,10.33,82.40%,9.64,5 +935,5 8 11 12,10.34,86.90%,10.5,4.16 +936,5 6 8 10,10.35,87%,10.31,4.38 +937,6 11 12 13,10.36,80.10%,9.55,4.95 +938,2 2 8 8,10.38,91.40%,10.72,4.71 +939,2 7 12 13,10.44,80.40%,9.67,4.84 +940,2 6 8 12,10.45,94%,11.09,4.51 +941,3 4 9 13,10.45,79.60%,9.45,5.34 +942,4 5 10 12,10.45,86.20%,10.27,4.29 +943,1 2 7 11,10.5,88.10%,10.57,4.68 +944,4 5 6 8,10.5,87.30%,10.41,4.23 +945,6 10 12 13,10.5,82.50%,10.05,4.71 +946,1 3 9 9,10.51,85.20%,10.11,4.02 +947,1 4 4 11,10.51,86.70%,10.49,5.21 +948,2 3 9 10,10.55,90%,10.75,4.18 +949,1 2 3 13,10.59,91.70%,10.95,4.79 +950,1 6 6 6,10.59,85.60%,10.17,5.05 +951,1 2 2 9,10.62,82.40%,9.9,4.48 +952,1 3 6 11,10.64,88.10%,10.57,4.29 +953,5 10 12 13,10.64,83.50%,10.21,4.41 +954,2 3 6 6,10.65,91.90%,11.04,4.36 +955,6 7 10 12,10.66,85.20%,10.62,4.7 +956,7 8 8 12,10.66,83.60%,10.32,4.47 +957,3 4 6 8,10.69,90.70%,11.2,5.02 +958,1 7 9 11,10.71,85.10%,10.44,4.24 +959,2 3 6 13,10.71,90%,10.81,4.54 +960,2 2 5 12,10.72,84.80%,10.48,5.13 +961,2 6 8 13,10.72,87.20%,10.87,5.06 +962,8 8 10 12,10.72,78.70%,9.71,5.6 +963,1 3 8 13,10.73,90.40%,11.06,5.02 +964,4 4 7 10,10.74,75.20%,8.92,4.39 +965,1 7 10 13,10.75,83.70%,10.33,4.61 +966,1 9 10 13,10.76,83%,10.25,4.39 +967,3 3 4 11,10.76,88.60%,10.88,5.41 +968,2 5 7 7,10.77,82.90%,10.41,4.71 +969,3 9 10 13,10.83,83%,10.85,6.21 +970,2 3 4 7,10.87,86.70%,10.78,4.85 +971,4 4 8 12,10.87,92%,11.49,4.93 +972,1 2 6 10,10.89,86.80%,10.8,4.94 +973,1 5 12 12,10.9,81.30%,10.12,4.86 +974,5 6 6 8,10.92,81.50%,10.49,5.85 +975,7 7 8 11,10.95,80.40%,10.02,4.42 +976,1 3 7 10,10.97,86.50%,10.9,5.15 +977,3 3 9 12,10.97,87%,10.96,4.84 +978,3 5 7 10,10.99,84.50%,10.67,5.1 +979,4 10 12 13,10.99,81.50%,10.2,5.37 +980,2 3 10 12,11,86.40%,11.17,4.04 +981,3 4 6 6,11.01,90.50%,11.26,4.63 +982,5 8 8 8,11.02,80.20%,10.42,5.19 +983,6 8 8 12,11.02,88.10%,11.31,4.99 +984,2 3 4 9,11.05,88.20%,11.11,4.67 +985,2 6 7 11,11.07,82.60%,10.49,5.02 +986,5 9 12 12,11.07,83%,10.77,4.73 +987,1 2 7 12,11.1,77.90%,9.65,5.55 +988,2 4 5 6,11.11,91%,11.61,4.46 +989,5 5 8 13,11.11,80.80%,10.59,4.46 +990,2 3 3 10,11.15,84.60%,11.25,4.87 +991,3 4 8 12,11.17,87.70%,11.15,5.42 +992,2 4 6 11,11.18,85.10%,10.98,5.39 +993,2 2 8 9,11.21,87%,11.42,4.95 +994,1 5 6 7,11.22,88.70%,11.53,4.63 +995,5 8 10 11,11.22,87.10%,10.92,4.73 +996,4 4 9 12,11.24,78.30%,10.16,4.72 +997,2 5 6 6,11.25,78%,9.88,5.53 +998,2 4 9 12,11.26,87.20%,11.26,4.76 +999,4 8 11 13,11.28,82.40%,10.45,5.14 +1000,4 9 10 13,11.28,82.40%,10.72,4.8 +1001,3 3 5 12,11.31,86.70%,11.38,5.1 +1002,2 4 4 6,11.32,90.20%,11.66,4.67 +1003,2 4 6 8,11.33,93.30%,11.77,4.44 +1004,3 4 6 9,11.33,82.50%,10.75,5.42 +1005,2 3 4 5,11.35,84.40%,10.97,5.57 +1006,3 3 6 12,11.36,86.90%,11.51,6.01 +1007,3 6 7 13,11.36,82.50%,10.76,6.05 +1008,1 4 7 7,11.38,85.50%,11.25,4.6 +1009,4 4 5 11,11.39,85%,11.3,4.82 +1010,6 7 9 9,11.41,80.40%,10.68,5.9 +1011,7 8 10 10,11.42,79.10%,10.55,4.89 +1012,4 8 9 13,11.43,82.70%,10.72,5.97 +1013,1 3 4 8,11.45,89.60%,11.57,4.61 +1014,8 9 9 12,11.45,82.40%,10.81,4.71 +1015,3 7 8 11,11.51,83%,11.11,5.62 +1016,4 6 7 12,11.52,81.40%,11.17,5.36 +1017,1 6 7 9,11.54,84.40%,11.3,4.67 +1018,3 7 9 12,11.54,85.90%,11.56,5.56 +1019,4 5 6 13,11.55,78%,10.18,5.07 +1020,3 3 5 13,11.57,84.90%,11.35,4.69 +1021,2 3 5 7,11.58,88.90%,11.67,4.97 +1022,4 6 8 13,11.61,81%,10.84,5.09 +1023,2 7 9 11,11.62,83.50%,11.26,5.31 +1024,1 3 7 12,11.64,85.40%,10.98,4.98 +1025,3 5 7 9,11.66,86.20%,11.44,4.86 +1026,2 6 10 13,11.67,84.60%,11.3,5.46 +1027,6 8 9 12,11.67,86.60%,11.68,5.06 +1028,1 5 7 9,11.68,84.40%,11.15,4.84 +1029,1 3 7 7,11.69,85.20%,11.44,4.62 +1030,2 9 11 13,11.7,82.20%,11.25,5.36 +1031,3 7 9 11,11.7,88.10%,11.82,4.84 +1032,4 8 8 10,11.71,85.70%,11.63,5.51 +1033,1 4 8 9,11.73,89%,11.9,5.07 +1034,2 5 11 12,11.73,77.10%,10.24,5.29 +1035,2 3 7 13,11.77,86.30%,11.62,5.24 +1036,3 5 10 13,11.79,82.30%,11.04,5.37 +1037,3 5 6 10,11.83,85.80%,11.63,5.59 +1038,4 5 5 10,11.86,81.20%,10.96,4.46 +1039,7 8 9 10,11.86,79.80%,11.04,5.33 +1040,2 5 8 10,11.88,82.90%,11.02,4.82 +1041,4 6 6 12,11.88,86%,11.56,5.8 +1042,5 8 10 12,11.88,84.30%,11.18,5.05 +1043,3 3 3 11,11.91,78%,10.71,5.38 +1044,5 5 8 12,11.91,79.50%,10.98,5.06 +1045,1 3 3 6,11.93,87.20%,11.83,5.16 +1046,2 5 7 13,11.99,83.80%,11.74,5.61 +1047,1 5 8 11,12.07,89.20%,12.42,5.56 +1048,2 3 5 13,12.07,85.50%,11.88,5.34 +1049,3 4 8 9,12.07,88.10%,12.24,5.03 +1050,2 5 5 7,12.09,82%,11.59,4.86 +1051,4 10 11 13,12.16,76.20%,10.51,5.57 +1052,2 6 6 7,12.21,78.40%,10.67,5.54 +1053,7 10 10 12,12.21,78%,11.01,5.07 +1054,2 5 7 11,12.22,82.40%,11.59,5.71 +1055,4 4 6 9,12.24,77.40%,10.48,5.57 +1056,6 9 10 12,12.25,80.50%,11.36,5.94 +1057,6 9 9 12,12.26,87%,12.17,5.82 +1058,2 3 6 12,12.28,91%,12.71,5.2 +1059,2 4 4 5,12.28,82.10%,11.3,5.16 +1060,2 4 4 10,12.28,89.60%,12.37,5.14 +1061,3 3 3 4,12.34,82.40%,11.57,6.01 +1062,2 2 2 7,12.35,73.30%,9.51,5.67 +1063,4 9 10 11,12.38,76.80%,10.69,5.81 +1064,7 9 10 11,12.41,76.90%,10.81,5.32 +1065,1 4 5 7,12.43,87.90%,12.45,5.27 +1066,3 4 9 9,12.43,84.20%,12.03,4.99 +1067,3 3 6 8,12.46,74.60%,10.38,5.58 +1068,4 4 7 8,12.52,83.80%,12.28,5.55 +1069,3 5 11 12,12.56,79.90%,11.32,5.7 +1070,4 4 6 10,12.57,87.50%,12.6,5.35 +1071,4 6 9 13,12.58,85.50%,12.59,5.18 +1072,3 5 6 11,12.59,82.50%,11.93,6.55 +1073,1 5 8 13,12.64,80.10%,11.42,5.73 +1074,3 3 9 13,12.64,74.60%,10.56,5.85 +1075,7 7 9 10,12.64,75.80%,11.23,5.19 +1076,2 4 8 13,12.7,82.20%,12.07,5.92 +1077,4 4 6 8,12.7,84.20%,12.14,6.52 +1078,2 4 5 7,12.71,78.40%,11.3,5.62 +1079,1 4 7 9,12.74,82.20%,12,5.11 +1080,4 7 10 12,12.74,79.80%,11.37,5.54 +1081,4 5 8 13,12.76,78%,11.33,5.89 +1082,5 6 10 12,12.78,75.80%,10.91,5.45 +1083,6 9 11 13,12.78,72.50%,10.29,5.96 +1084,5 7 7 9,12.8,74.20%,11.06,5.06 +1085,1 4 5 9,12.83,81.90%,11.81,6.41 +1086,5 7 11 13,12.83,70.80%,10,5.17 +1087,3 3 5 10,12.84,82.90%,12.05,5.32 +1088,4 8 12 12,12.85,85.60%,12.23,5.83 +1089,2 3 3 3,12.87,82.10%,11.84,5.96 +1090,2 5 10 13,12.92,82.10%,12.4,5.91 +1091,1 4 6 6,12.97,80%,11.77,6.38 +1092,2 3 8 8,12.98,80.40%,11.84,5.7 +1093,6 9 11 12,13.02,75.90%,10.98,5.93 +1094,1 1 6 9,13.05,81%,11.34,6.4 +1095,5 9 10 13,13.05,78%,11.54,5.87 +1096,1 5 6 11,13.06,81%,11.93,6.47 +1097,4 4 5 12,13.09,79%,11.5,5.91 +1098,3 5 6 13,13.1,76%,11.28,5.52 +1099,1 4 5 8,13.16,82.70%,12.46,5.64 +1100,5 5 7 10,13.19,73.80%,11.38,4.96 +1101,2 2 2 9,13.21,76.60%,10.98,6.35 +1102,5 7 10 10,13.28,76.50%,12.05,5.27 +1103,2 3 5 10,13.29,80.20%,12.07,5.35 +1104,2 8 10 13,13.34,80.90%,12.56,5.95 +1105,6 7 7 10,13.34,73%,10.83,5.3 +1106,2 7 10 11,13.37,78.90%,12.25,6.04 +1107,3 5 7 8,13.37,85.40%,12.95,5.94 +1108,6 8 11 12,13.39,77.90%,12.23,5.74 +1109,1 3 6 10,13.46,82.10%,12.08,6.87 +1110,4 10 10 12,13.46,78.40%,12.16,6.28 +1111,7 10 11 13,13.49,73.30%,11.07,5.79 +1112,4 5 8 10,13.55,75.90%,11.31,5.9 +1113,3 8 9 11,13.57,80.10%,12.64,6.8 +1114,6 12 12 12,13.66,76.60%,11.63,6.62 +1115,2 10 12 13,13.77,81.40%,13.06,6.04 +1116,6 7 10 10,13.83,70.80%,10.47,5.73 +1117,2 3 7 8,13.89,80.20%,12.68,5.59 +1118,3 5 9 9,13.9,79.40%,12.9,6.13 +1119,2 2 5 9,13.93,74.30%,11.71,6.28 +1120,2 4 7 9,13.95,80.60%,13.14,6.36 +1121,2 3 8 9,14.01,81.30%,12.85,6.23 +1122,3 5 5 11,14.19,79%,13.09,5.43 +1123,3 3 9 11,14.2,79.10%,13.05,5.65 +1124,5 7 9 11,14.2,71.10%,11.09,5.89 +1125,1 3 7 9,14.22,80.40%,12.74,5.47 +1126,2 4 9 10,14.24,79.30%,12.99,6 +1127,3 5 12 12,14.26,67.20%,9.62,5.75 +1128,3 3 8 10,14.27,80.30%,13.49,5.53 +1129,4 4 5 13,14.32,73.30%,11.87,7.01 +1130,3 4 4 11,14.39,76.40%,12.57,6.37 +1131,4 5 8 11,14.4,73.80%,11.71,6.59 +1132,3 4 4 10,14.42,77.10%,12.1,6.66 +1133,2 6 12 13,14.46,78.60%,13.39,5.8 +1134,3 6 11 13,14.46,73.20%,11.3,6.74 +1135,1 3 5 6,14.49,86.30%,14.16,5.91 +1136,3 3 4 13,14.49,76.80%,12.26,6.76 +1137,4 6 9 12,14.54,77.80%,12.61,7.02 +1138,6 10 10 13,14.57,69.10%,10.81,5.99 +1139,2 5 9 10,14.58,78.10%,13.05,6.18 +1140,5 5 9 11,14.6,71.10%,12.27,5.16 +1141,3 4 7 12,14.65,82.40%,14.04,6.09 +1142,2 6 9 12,14.66,82.70%,13.71,6.54 +1143,5 6 6 12,14.72,80.70%,13.46,6.01 +1144,2 5 9 11,14.75,76.50%,13.08,6.84 +1145,5 9 9 12,14.78,75.70%,12.97,6.67 +1146,4 4 4 10,14.82,76.90%,12.75,6.5 +1147,3 4 10 10,14.86,75.50%,12.9,6.06 +1148,2 2 5 10,14.91,78.60%,13.45,5.78 +1149,3 3 9 10,14.94,78.10%,13.6,6.1 +1150,4 7 8 12,14.95,79.40%,13.86,6.69 +1151,7 9 12 12,14.96,64.20%,9.28,5.41 +1152,2 2 7 7,14.97,69.80%,11.21,5.96 +1153,3 6 8 13,14.97,81.30%,14.28,6.12 +1154,2 2 3 4,14.98,77.40%,13.18,6.13 +1155,5 7 8 10,14.99,71.20%,12.15,5.63 +1156,1 5 11 12,15.01,71%,11.36,6.19 +1157,4 6 8 10,15.11,76.70%,12.71,7.59 +1158,2 4 10 11,15.16,79.20%,13.93,6.45 +1159,3 6 6 13,15.17,72.80%,12.06,6.38 +1160,3 6 8 12,15.17,80.50%,13.79,6.15 +1161,1 4 4 6,15.31,79.60%,13.55,6.77 +1162,2 5 8 8,15.42,71%,11.68,6.59 +1163,7 7 7 12,15.42,65.20%,8.98,6.11 +1164,4 5 7 13,15.43,72.80%,12.42,6.22 +1165,5 5 5 12,15.48,67.40%,10.23,6.42 +1166,2 6 11 12,15.49,77.70%,13.96,6.35 +1167,2 3 8 10,15.61,82.20%,14.94,6.54 +1168,1 5 5 10,15.65,71.20%,11.64,6.98 +1169,2 5 5 9,15.7,78.50%,14.39,5.98 +1170,5 7 12 12,15.74,66%,10.44,6.26 +1171,4 7 8 11,15.79,69%,10.78,6.62 +1172,3 3 8 13,15.87,69.70%,11.39,6.25 +1173,1 3 12 13,16.02,75.60%,13.66,6.86 +1174,1 3 8 10,16.05,71%,12.31,6.49 +1175,2 3 6 7,16.08,80.80%,15.05,6.62 +1176,2 2 6 7,16.26,72.50%,13.03,6.84 +1177,5 6 9 13,16.28,69%,12.46,6.11 +1178,6 10 11 12,16.3,69.70%,12.94,6.17 +1179,4 9 9 12,16.33,71.80%,13.42,6.47 +1180,2 6 6 9,16.46,72.80%,13.03,6.55 +1181,1 3 11 12,16.48,75.60%,14.03,7.05 +1182,3 10 11 13,16.48,71.20%,13.31,6.3 +1183,1 4 10 12,16.53,72.10%,12.81,6.61 +1184,5 5 6 8,16.54,78.10%,14.9,6.54 +1185,6 8 9 10,16.55,71.20%,12.69,7.07 +1186,2 6 10 11,16.57,73.10%,13.69,6.98 +1187,3 9 9 13,16.62,67.20%,12.08,6.04 +1188,2 4 4 9,16.71,73.40%,13.42,7.28 +1189,10 12 12 12,16.86,64.10%,10.25,5.73 +1190,2 3 7 10,16.91,76.90%,14.96,6.78 +1191,2 7 10 10,17.01,68.10%,13.35,5.81 +1192,8 8 8 11,17.01,63.50%,10.21,5.97 +1193,6 6 9 10,17.09,69.80%,13.35,6.88 +1194,2 3 7 7,17.1,76.50%,15.28,6.63 +1195,6 6 6 10,17.22,66%,11.49,6.49 +1196,5 7 7 10,17.26,68%,13.19,6.49 +1197,2 2 9 12,17.27,72.90%,14.93,6.39 +1198,3 6 8 10,17.4,66.60%,11.97,6.77 +1199,3 5 7 12,17.46,71%,14.01,7.67 +1200,3 5 8 9,17.49,75.80%,15.67,7.53 +1201,3 9 9 11,17.68,70.50%,13.69,7.48 +1202,2 8 10 12,17.74,79.80%,16.35,7.45 +1203,3 8 9 13,17.76,73.40%,15.28,7.09 +1204,9 9 9 12,17.85,63.80%,9.66,6.59 +1205,3 4 8 13,17.98,70%,13.65,7.61 +1206,2 6 7 10,18.01,69.80%,12.96,7.22 +1207,2 6 9 10,18.43,69.70%,14.78,6.85 +1208,4 5 6 9,18.44,75.30%,16.49,7.02 +1209,8 10 12 13,18.47,67.30%,14.31,6.27 +1210,2 6 8 9,18.52,72.40%,15.58,6.65 +1211,3 5 12 13,18.66,67.90%,14.53,6.59 +1212,2 4 7 8,18.98,76.50%,16.76,7.16 +1213,4 8 9 12,18.98,72.50%,16.31,6.84 +1214,3 5 9 10,19.12,68.10%,14.34,7.53 +1215,2 3 10 10,19.18,69.50%,14.5,7.5 +1216,2 2 4 12,19.2,75.10%,15.22,9.15 +1217,2 2 9 10,19.3,65.30%,14.24,7.34 +1218,2 7 10 12,19.38,70.20%,15.86,7.05 +1219,2 2 4 4,19.5,72%,15.01,8.18 +1220,2 3 11 11,19.52,68.30%,14.88,7.67 +1221,1 3 3 8,19.57,74%,15.7,7.86 +1222,6 8 8 9,19.59,63%,11.71,7.2 +1223,8 10 12 12,19.59,63.60%,11.62,7.37 +1224,10 10 10 12,19.93,61.50%,10.24,6.8 +1225,2 3 9 12,20.01,67.30%,13.12,7.61 +1226,6 8 10 11,20.09,64.60%,13.61,7.17 +1227,7 8 8 10,20.1,61.20%,12.07,7.63 +1228,1 5 7 10,20.39,69.50%,16.27,7.63 +1229,3 5 10 11,20.53,69.50%,15.99,8.37 +1230,5 9 12 13,20.53,64.40%,15.67,7.03 +1231,1 3 8 11,20.54,73.40%,16.85,8.28 +1232,2 7 12 12,20.66,62.80%,12.25,7.39 +1233,1 2 8 10,20.88,67.70%,15.12,7.81 +1234,9 11 12 12,20.88,59.50%,10.72,6.43 +1235,1 6 10 12,21.11,65.80%,13.99,7.82 +1236,4 4 8 9,21.14,69.60%,16.8,8.28 +1237,2 3 3 5,21.16,69.50%,15.7,8.49 +1238,3 6 9 13,21.16,68.90%,17.22,7.59 +1239,3 3 7 8,21.37,68.30%,16.85,8.09 +1240,3 5 7 11,21.39,64%,14.47,7.8 +1241,2 3 5 8,21.44,72.90%,17.88,7.71 +1242,4 5 7 10,21.65,63.60%,14.31,7.8 +1243,5 7 10 13,22.5,61.60%,16.46,7.35 +1244,2 9 10 10,22.59,60.60%,16.58,7.36 +1245,2 4 5 10,22.9,67%,17.3,8.07 +1246,2 3 6 8,23.06,75.30%,20.16,8.88 +1247,5 9 11 13,23.25,61.50%,16.69,7.75 +1248,3 4 5 13,23.39,65.60%,17.76,8.49 +1249,1 5 9 12,23.75,62.60%,14.09,8.74 +1250,3 4 4 4,24.47,67.30%,17.82,9.81 +1251,5 7 9 10,24.53,61%,15.63,8.68 +1252,6 6 7 11,24.57,58%,13.11,8.12 +1253,2 5 10 12,24.67,63.70%,17.88,8.55 +1254,4 10 11 12,24.71,62.90%,17.56,8.97 +1255,2 4 5 5,24.72,60.40%,15.23,8.46 +1256,2 2 5 8,24.84,63.50%,16.69,9.19 +1257,8 8 9 12,24.93,56.70%,12.65,7.52 +1258,3 4 7 8,25.04,61.10%,14.33,8.25 +1259,5 6 6 9,25.04,59.20%,14.12,8.75 +1260,3 5 10 10,25.12,54.30%,12.34,6.59 +1261,2 2 6 11,25.22,62.20%,18.4,8.58 +1262,4 9 10 12,25.27,61.70%,17.05,9.01 +1263,8 9 11 11,25.64,58%,15.82,8.41 +1264,3 9 11 13,26.26,57.60%,13.9,8.31 +1265,4 7 8 10,26.26,62.90%,18.82,9.21 +1266,5 6 7 9,26.31,60.10%,16.12,9.07 +1267,2 6 9 9,26.53,58%,14.29,8.07 +1268,2 3 13 13,26.93,58.40%,17.55,9.57 +1269,1 7 12 13,27.75,56.30%,15.1,9.28 +1270,1 4 9 13,27.76,61.10%,18.83,10.02 +1271,4 10 10 11,27.76,54.80%,19.34,9.04 +1272,3 4 5 11,28.16,63.30%,20.54,9.87 +1273,3 3 6 6,28.41,58%,14.18,8.38 +1274,6 6 9 13,28.91,53.80%,13.19,8.3 +1275,4 5 9 12,29.11,60.90%,22.06,10.07 +1276,2 3 7 9,30.64,57.60%,18.33,10.12 +1277,4 4 7 13,30.78,53.80%,15.04,9.44 +1278,2 2 7 10,30.9,53.40%,16.2,8.61 +1279,2 5 12 13,31.29,58%,22.35,9.97 +1280,1 4 6 10,31.39,56.30%,18.81,9.37 +1281,3 6 7 10,31.92,57.40%,21.85,10.37 +1282,1 2 7 7,32.73,55%,17.28,10.37 +1283,2 5 8 12,32.82,54.60%,17.78,9.75 +1284,3 8 10 12,34.45,53.60%,20.48,10.33 +1285,6 7 11 11,35.1,46.40%,19.8,10.15 +1286,2 2 3 10,35.18,54.90%,18.21,10.27 +1287,2 5 7 9,35.29,52.70%,23.49,10.35 +1288,2 4 7 7,35.73,50.70%,17.22,9.67 +1289,2 2 6 9,36.11,52.10%,17.94,10.05 +1290,7 9 11 12,36.61,50%,17.36,10.44 +1291,4 7 9 11,37.32,51.40%,22.71,11.23 +1292,2 2 3 5,38.49,51.50%,15.34,8.81 +1293,5 5 8 11,39.1,45.80%,24.18,10.92 +1294,3 6 6 10,39.12,50.30%,18.48,10.7 +1295,7 8 9 12,41.23,48.70%,16.03,10.12 +1296,1 5 11 11,41.41,43.30%,15.93,9.75 +1297,5 10 10 11,42.21,41.30%,14.82,7.03 +1298,1 2 9 11,45.03,44.90%,22.27,12.16 +1299,1 5 5 5,45.49,43.60%,11.92,7.27 +1300,4 9 11 11,47.16,43.30%,25.26,13.98 +1301,5 9 10 11,47.17,42.70%,28.12,13.4 +1302,1 7 13 13,47.38,41.70%,13.99,8.41 +1303,6 7 7 11,48.6,42.40%,27.65,14.51 +1304,3 3 7 7,48.84,41.20%,12.6,7.37 +1305,5 10 10 13,49.61,38.50%,17.09,8.06 +1306,3 5 8 13,50.53,41.90%,30.48,13.89 +1307,8 9 10 12,51.24,42.50%,21.95,13.98 +1308,2 5 6 9,52.95,44%,27.17,13.41 +1309,1 6 11 13,54.62,38.10%,18.47,9.98 +1310,1 3 9 10,55.16,40.80%,23.19,12.28 +1311,4 6 6 10,55.98,40.20%,22.83,12.31 +1312,4 4 7 7,56.41,38.80%,14.56,8.11 +1313,2 2 11 11,57.22,40.10%,13.2,8.62 +1314,5 7 9 12,57.59,39.60%,17.8,11.41 +1315,4 5 6 12,58.44,44.10%,21.82,16.05 +1316,4 6 7 9,58.49,42%,19.47,12.15 +1317,6 12 12 13,60.5,37.90%,15.11,8.3 +1318,4 4 10 10,60.61,39.70%,13.47,9.13 +1319,4 7 11 13,61.01,37%,30.84,16.48 +1320,4 5 6 11,61.48,38%,19.42,10.88 +1321,3 5 8 12,62.47,38%,27.97,13.34 +1322,3 4 6 13,63.1,40.40%,20.37,11.69 +1323,6 7 8 12,63.27,40.70%,16.9,12.18 +1324,2 4 11 12,63.58,39.40%,23.37,13.12 +1325,5 7 10 11,64.03,35.50%,23.76,13.12 +1326,2 2 13 13,64.44,37.30%,14.05,8.25 +1327,6 11 12 12,64.75,36.30%,15.4,8.93 +1328,5 8 9 13,64.8,34.90%,34.56,16.2 +1329,7 10 12 13,67.86,37.40%,22.3,12.55 +1330,5 6 8 13,68.54,36.40%,22.65,11.42 +1331,2 7 8 9,69.74,39.80%,18.28,10.87 +1332,2 2 6 13,71.49,33.10%,30.83,16.35 +1333,5 6 9 11,72.21,33.40%,26.15,15 +1334,1 4 7 11,72.93,35.70%,29.78,16.43 +1335,6 9 9 10,80.98,31.60%,32.75,18.6 +1336,2 5 7 8,83.96,32.90%,28.52,15.64 +1337,7 8 8 13,84.91,29.50%,27.08,15.03 +1338,5 7 7 11,88.29,27.40%,25.62,12.84 +1339,3 3 7 13,88.82,27.60%,32.8,18.62 +1340,4 8 8 13,88.89,29.10%,24.53,14.05 +1341,4 8 8 11,88.95,30%,23.19,13.84 +1342,3 8 8 10,90.4,28.90%,25.35,16.08 +1343,2 7 7 10,90.8,27%,26.85,12.93 +1344,5 5 7 11,91.1,26.10%,25.79,13.15 +1345,2 3 8 13,92.19,32%,23.64,12.74 +1346,7 8 10 11,95.22,29.80%,24.05,14.09 +1347,2 2 10 11,96.37,30.20%,26.2,17.05 +1348,9 11 12 13,99.38,27.90%,22.06,13.19 +1349,1 6 6 8,101.21,29.80%,21.64,13.19 +1350,3 3 8 8,104.24,30.80%,15.65,10.6 +1351,1 8 12 12,104.58,29%,20.38,13.12 +1352,3 3 5 7,104.76,29.20%,28.32,17.86 +1353,2 4 7 12,108.41,28.10%,28.97,16.35 +1354,2 9 13 13,110.09,24.90%,30.9,19.5 +1355,3 7 9 13,110.86,26%,39.84,21.67 +1356,2 4 10 10,111.72,25.80%,28.72,18.53 +1357,3 6 6 11,112.28,27.10%,24.73,15.29 +1358,3 5 7 13,122.99,23.60%,38.68,21.2 +1359,2 5 5 10,188.2,22.10%,24.09,16.42 +1360,1 4 5 6,195.91,28.70%,18.38,11.81 +1361,1 3 4 6,201.57,26.90%,19.77,12.1 +1362,2 3 5 12,207.89,20.70%,29.96,22.37 \ No newline at end of file diff --git a/examples/tree_of_thoughts/reAct_example.ipynb b/examples/tree_of_thoughts/reAct_example.ipynb new file mode 100644 index 000000000..109595cd1 --- /dev/null +++ b/examples/tree_of_thoughts/reAct_example.ipynb @@ -0,0 +1,431 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Use reActAgent to perform complicated task\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we create a *reactAgent* to perform a more complex task: writing a markdown solution for a simple physics problem. To solve the problem, the agent needs to:\n", + "\n", + "Search the internet to obtain the exact values of the required results.\n", + "Generate the solution to the problem.\n", + "Write the solution to a file in markdown format" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's set the model configuration at first" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "MODEL_CONFIGURATION = {\n", + " \"config_name\": \"gpt-4\",\n", + " \"model_type\": \"openai_chat\",\n", + " \"model_name\": \"gpt-4\",\n", + " \"api_key\": \"YOUR API\",\n", + "}\n", + "SEARCH_ENGINE_API = \"YOUR SEARCH ENGINE API\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*AgentScope* offers a series of services, including one that can enable the agent to search the internet and obtain the exact values required for the problem." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from agentscope.service import ServiceFactory\n", + "from agentscope.service import bing_search\n", + "tools = [\n", + " ServiceFactory.get(bing_search, api_key=SEARCH_ENGINE_API, num_results=3),\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's create a *ReActAgent* and specify the tools can be accessed by it." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-04-18 16:03:10.918 | INFO | agentscope.models:read_model_configs:178 - Load configs for model wrapper: gpt-4\n", + "2024-04-18 16:03:10.933 | INFO | agentscope.utils.monitor:_create_monitor_table:343 - Init [monitor_metrics] as the monitor table\n", + "2024-04-18 16:03:10.934 | INFO | agentscope.utils.monitor:_create_monitor_table:344 - Init [monitor_metrics_quota_exceeded] as the monitor trigger\n", + "2024-04-18 16:03:10.934 | INFO | agentscope.utils.monitor:__init__:313 - SqliteMonitor initialization completed at [./runs\\run_20240418-160308_9q4v9y\\agentscope.db]\n", + "2024-04-18 16:03:10.936 | INFO | agentscope.models.model:__init__:204 - Initialize model [gpt-4]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-04-18 16:03:11.251 | INFO | agentscope.utils.monitor:register_budget:556 - set budget None to gpt-4\n", + "2024-04-18 16:03:11.255 | INFO | agentscope.utils.monitor:register:364 - Register metric [gpt-4.cost] to SqliteMonitor with unit [dollor] and quota [None]\n", + "2024-04-18 16:03:11.262 | INFO | agentscope.utils.monitor:register:364 - Register metric [gpt-4.prompt_tokens] to SqliteMonitor with unit [token] and quota [None]\n", + "2024-04-18 16:03:11.278 | INFO | agentscope.utils.monitor:register:364 - Register metric [gpt-4.completion_tokens] to SqliteMonitor with unit [token] and quota [None]\n", + "2024-04-18 16:03:11.292 | INFO | agentscope.utils.monitor:register:364 - Register metric [gpt-4.call_counter] to SqliteMonitor with unit [times] and quota [None]\n", + "2024-04-18 16:03:11.301 | INFO | agentscope.utils.monitor:register:364 - Register metric [gpt-4.total_tokens] to SqliteMonitor with unit [token] and quota [None]\n" + ] + } + ], + "source": [ + "from agentscope.agents import ReActAgent\n", + "import agentscope\n", + "agentscope.init(model_configs=MODEL_CONFIGURATION)\n", + "agent = ReActAgent(\n", + " name=\"assistant\",\n", + " model_config_name=\"gpt-4\",\n", + " tools=tools,\n", + " sys_prompt=\"You are a helpful assistant.\",\n", + " verbose=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The initial prompt of the *reactAgent* can be viewed, which demonstrates how *AgentScope* automatically notifies the agent about the available tools and services that can be leveraged to complete the task." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "You are a helpful assistant.\n", + "The following tool functions are available in the format of\n", + "```\n", + "{index}. {function name}: {function description}\n", + " {argument1 name} ({argument type}): {argument description}\n", + " {argument2 name} ({argument type}): {argument description}\n", + " ...\n", + "```\n", + "\n", + "## Tool Functions:\n", + "1. bing_search: Search question in Bing Search API and return the searching results\n", + "\tquestion (string): The search query string.\n", + "\n", + "## What You Should Do:\n", + "1. First, analyze the current situation, and determine your goal.\n", + "2. Then, check if your goal is already achieved. If so, try to generate a response. Otherwise, think about how to achieve it with the help of provided tool functions.\n", + "3. Respond in the required format.\n", + "\n", + "## Note:\n", + "1. Fully understand the tool functions and their arguments before using them.\n", + "2. You should decide if you need to use the tool functions, if not then return an empty list in \"function\" field.\n", + "3. Make sure the types and values of the arguments you provided to the tool functions are correct.\n", + "4. Don't take things for granted. For example, where you are, what's the time now, etc. You can try to use the tool functions to get information.\n", + "5. If the function execution fails, you should analyze the error and try to solve it.\n", + "\n", + "\n" + ] + } + ], + "source": [ + "print(agent.sys_prompt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Okay, let's test whether the agent can effectively search the web to get the correct results. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from agentscope.message import Msg\n", + "msg = Msg(\n", + " name=\"user\", \n", + " content=\"Who has more average points during his career, LeBron James or Stephen Curry?\",\n", + " role=\"user\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "##################### ITER 1, STEP 1: REASONING ######################\n", + "assistant: \n", + "system: Your response is not a JSON object, and cannot be parsed by `json.loads` in parse function:\n", + "## Your Response:\n", + "[YOUR RESPONSE BEGIN]\n", + "\n", + "[YOUR RESPONSE END]\n", + "\n", + "## Error Information:\n", + "JSONDecodeError: Expecting value: line 1 column 1 (char 0)\n", + "\n", + "Analyze the reason, and re-correct your response in the correct format.\n", + "##################### ITER 2, STEP 1: REASONING ######################\n", + "assistant: {\n", + " \"thought\": \"The user wants to know who has more average points during his career, LeBron James or Stephen Curry. I don't have this information, so I will use the 'bing_search' function twice, once to find the average career points for LeBron James and once for Stephen Curry.\",\n", + " \"speak\": \"Let me check this information for you.\",\n", + " \"function\": [\n", + " {\n", + " \"name\": \"bing_search\",\n", + " \"arguments\": {\n", + " \"question\": \"LeBron James career average points\"\n", + " }\n", + " },\n", + " {\n", + " \"name\": \"bing_search\",\n", + " \"arguments\": {\n", + " \"question\": \"Stephen Curry career average points\"\n", + " }\n", + " }\n", + " ]\n", + "}\n", + "####################### ITER 2, STEP 2: ACTION #######################\n", + ">>> Executing function bing_search ...\n", + ">>> END \n", + ">>> Executing function bing_search ...\n", + ">>> END \n", + "system: Execution Results:\n", + "1. bing_search:\n", + " [EXECUTE STATUS]: SUCCESS\n", + " [EXECUTE RESULT]: [{'title': 'LeBron James Career Stats - NBA - ESPN', 'link': 'https://www.espn.com/nba/player/stats/_/id/1966/lebron-james', 'snippet': 'Draft Info. 2003: Rd 1, Pk 1 (CLE) Status. GTD. Experience. 20th Season. 2023-24 season stats. PTS. 25.5. 14th. REB. 7.2. 33rd. AST. 8.2. 6th. FG% 53.8. 22nd. Complete career NBA stats for the...'}, {'title': 'LeBron James Stats, Height, Weight, Position, Draft Status and more ...', 'link': 'https://www.basketball-reference.com/players/j/jamesle01.html', 'snippet': 'LeBron James has averaged at least 25 points, 5 rebounds and 5 assists in 15 different seasons. Can you name the 4 other players to do this more than 5 times?'}, {'title': 'LeBron James Career Stats (Per Game) | StatMuse', 'link': 'https://www.statmuse.com/nba/player/lebron-james-1780/career-stats', 'snippet': 'He has averaged 27.1 points, 7.5 rebounds and 7.4 assists in 1,492 regular-season games. He was selected to play in 19 All-Star games. He has won the Rookie of the Year award, 4 MVP awards, 4 Finals MVP awards and 4 NBA championships.'}]\n", + "\n", + "2. bing_search:\n", + " [EXECUTE STATUS]: SUCCESS\n", + " [EXECUTE RESULT]: [{'title': 'Stephen Curry Career Stats - NBA - ESPN', 'link': 'https://www.espn.com/nba/player/stats/_/id/3975/stephen-curry', 'snippet': '5.1. 37th. FG% 45.0. 101st. Complete career NBA stats for the Golden State Warriors Point Guard Stephen Curry on ESPN. Includes points, rebounds, and assists.'}, {'title': 'Stephen Curry Stats, Height, Weight, Position, Draft Status and more ...', 'link': 'https://www.basketball-reference.com/players/c/curryst01.html', 'snippet': 'SUMMARY. 2023-24. Career. G. 74. 956. PTS. 26.4. 24.8. TRB. 4.5. 4.7. AST. 5.1. 6.4. FG% 45.0. 47.3. FG3% 40.8.'}, {'title': 'Stephen Curry Career Stats (Per Game) | StatMuse', 'link': 'https://www.statmuse.com/nba/player/stephen-curry-787/career-stats', 'snippet': 'Stephen Curry has played 15 seasons for the Warriors. He has averaged 24.8 points, 6.4 assists and 4.7 rebounds in 954 regular-season games. He was selected to play in 9 All-Star games. He has won 2 MVP awards, 1 Finals MVP award and 4 NBA championships.'}]\n", + "\n", + "##################### ITER 3, STEP 1: REASONING ######################\n", + "assistant: {\n", + " \"thought\": \"I found the results for both players. LeBron James has averaged 27.1 points during his career. On the other hand, Stephen Curry has averaged 24.8 points.\",\n", + " \"speak\": \"LeBron James has a career average of 27.1 points per game, while Stephen Curry's career average is 24.8 points per game. Therefore, LeBron James has a higher career average than Stephen Curry.\",\n", + " \"function\": []\n", + "}\n" + ] + }, + { + "data": { + "text/plain": [ + "{'id': '5fce2d0813aa48c1ae720957c957674a',\n", + " 'timestamp': '2024-04-18 16:03:40',\n", + " 'name': 'assistant',\n", + " 'content': {'thought': 'I found the results for both players. LeBron James has averaged 27.1 points during his career. On the other hand, Stephen Curry has averaged 24.8 points.',\n", + " 'speak': \"LeBron James has a career average of 27.1 points per game, while Stephen Curry's career average is 24.8 points per game. Therefore, LeBron James has a higher career average than Stephen Curry.\",\n", + " 'function': []},\n", + " 'role': 'assistant',\n", + " 'url': None}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agent(msg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great, let's proceed to solve the physics problem. To enable the agent write file on your machine, you can write you own service following the protocal:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run `!pip install pypandoc` to install required library." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from agentscope.service import ServiceResponse, ServiceExecStatus, retrieval\n", + "def write_md_file(latex_str:str, file_name:str) -> ServiceResponse:\n", + " \"\"\"\n", + " Save a string in latex format to a Markdown file with the given file name.\n", + " Args:\n", + " latex_str (str): the string in latex format\n", + " file_name (str): the name of the file to be created\n", + " \"\"\"\n", + " try:\n", + " import pypandoc as pdc\n", + " pdc.convert_text(latex_str, 'md', \n", + " format='latex', \n", + " outputfile=file_name)\n", + " output = f\"Markdown file {file_name} has been created.\"\n", + " status = ServiceExecStatus.SUCCESS\n", + " except Exception as e:\n", + " output = f\"Error: {e}\"\n", + " status = ServiceExecStatus.ERROR\n", + " return ServiceResponse(status, output) \n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The question is \n", + "> What is the kinetic energy of LeBron Jamees if he were running at the same speed Usain Bolt\"achieved when setting the 100m world record? Write me the full reasoning and solution in Markdown format.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's write our initial prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "QUESTION = (\"What is the kinetic energy of LeBron James\"\n", + " \"if he were running at the same speed Usain Bolt\" \n", + " \"achieved when setting the 100m world record?\"\n", + " \"Write me the full reasoning and solution in Markdown format.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and create an ReAct Agent" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from agentscope.service import execute_python_code\n", + "tools = [\n", + " ServiceFactory.get(bing_search, api_key=SEARCH_ENGINE_API, num_results=3),\n", + " ServiceFactory.get(execute_python_code),\n", + " ServiceFactory.get(write_md_file)\n", + "]\n", + "agent = ReActAgent(\n", + " name=\"assistant\",\n", + " model_config_name=\"gpt-4\",\n", + " tools=tools,\n", + " sys_prompt=\"You are a helpful assistant.\",\n", + " verbose=True,\n", + ")\n", + "msg = Msg(\n", + " role=\"user\",\n", + " name=\"user\",\n", + " content=QUESTION\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '3e9a5a6830724aa2a34302edb8559d01',\n", + " 'timestamp': '2024-04-11 23:24:57',\n", + " 'name': 'assistant',\n", + " 'content': {'thought': 'The Markdown file with the full reasoning and calculation has been successfully created.',\n", + " 'speak': \"The full reasoning and solution have been written into a Markdown file named 'kinetic_energy.md'.\",\n", + " 'function': []},\n", + " 'role': 'assistant',\n", + " 'url': None}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agent(msg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good it seems that the agent successfuly sovle the problem and output it as file *'kinetic_energy.md'*. You can check its solution yourself. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "agentscope", + "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.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/tree_of_thoughts/test.py b/examples/tree_of_thoughts/test.py new file mode 100644 index 000000000..591d6c34b --- /dev/null +++ b/examples/tree_of_thoughts/test.py @@ -0,0 +1,182 @@ +import unittest +from examples.tree_of_thoughts.workflow import SequentialWorkFlow, ParallelWorkFlow, WorkFlowBase + +class TestSequentialWorkFlow(unittest.TestCase): + + def setUp(self): + def start_node(x): + return x + 1 + def node_positive(x): + return x + 2 + def node_negative(x): + return x - 2 + def processor(message, workflow, *args, **kwargs): + processed_value = message + 1 + next_node = 'positive' if processed_value > 10 else 'negative' + return processed_value, next_node + self.workflow = SequentialWorkFlow() + self.workflow.add_node(start_node, 'start') + self.workflow.add_node(node_positive, 'positive') + self.workflow.add_node(node_negative, 'negative') + self.workflow.add_edge('start', processor) + self.workflow.add_edge('positive', processor) + self.workflow.set_entry_node('start') + self.workflow.set_exit_node('negative') + def test_workflow_execution(self): + initial_value = 5 + result = self.workflow(initial_value) + expected_result = 7 - 2 + self.assertEqual(result, expected_result, f"Expected {expected_result} but got {result}") + + +class TestSequentialWorkFlowWhileLoop(unittest.TestCase): + + def setUp(self): + + def start_node(x): + return x + 1 + + def loop_node(x): + return x - 1 + + def exit_node(x): + return x + + def loop_processor(message, workflow, *args, **kwargs): + processed_value = message + 1 + next_node = 'loop_node' if processed_value < 10 else 'exit_node' + return processed_value, next_node + + self.workflow = SequentialWorkFlow() + self.workflow.add_node(start_node, 'start') + self.workflow.add_node(loop_node, 'loop_node') + self.workflow.add_node(exit_node, 'exit_node') + self.workflow.add_edge('start', loop_processor) + self.workflow.add_edge('loop_node', loop_processor) + self.workflow.set_entry_node('start') + self.workflow.set_exit_node('exit_node') + + def test_loop_execution(self): + initial_value = 8 # Start at 8, which will cause a loop. + result = self.workflow(initial_value) + expected_result = 10 # Loop should increment from 8 to 9 to 10 and then exit. + self.assertEqual(result, expected_result, f"Expected loop to terminate at {expected_result} but got {result}") + + +class TestParallelWorkFlow(unittest.TestCase): + def setUp(self): + # Define simple workflows for testing + def simple_workflow_a(x): + return x + 1 + + def simple_workflow_b(x): + return x + 2 + + def sum_aggregation(results): + return sum(results.values()) + + # Create workflow instances + self.workflow_a = SequentialWorkFlow() + self.workflow_a.add_node(simple_workflow_a, 'node_a') + self.workflow_a.set_entry_node('node_a') + self.workflow_a.set_exit_node('node_a') + + self.workflow_b = SequentialWorkFlow() + self.workflow_b.add_node(simple_workflow_b, 'node_b') + self.workflow_b.set_entry_node('node_b') + self.workflow_b.set_exit_node('node_b') + + # Create Parallel Workflow + self.parallel_workflow = ParallelWorkFlow( + workflows={ + 'workflow_a': self.workflow_a, + 'workflow_b': self.workflow_b + }, + aggregation_fn=sum_aggregation, + executor_type='dask' # or 'dask' + ) + + def test_parallel_execution(self): + initial_value = 10 + result = self.parallel_workflow(initial_value) + expected_result = (10 + 1) + (10 + 2) # Sum of results from workflow_a and workflow_b + self.assertEqual(result, expected_result, f"Expected aggregated result to be {expected_result} but got {result}") + + + +class TestComplicatedWorkFlow(unittest.TestCase): + def setUp(self): + from examples.tree_of_thoughts.workflow import SequentialWorkFlow, ParallelWorkFlow + + def start_node(x): + return x + 1 + + def loop_node(x): + return x + 1 + + def exit_node(x): + return x + + def loop_processor(message, workflow, *args, **kwargs): + next_node = 'loop_node' if message < 10 else 'exit_node' + return message, next_node + + def node_positive(x): + return x + 2 + + def node_negative(x): + return x - 2 + + def branching_processor(message, workflow, *args, **kwargs): + processed_value = message + 1 + next_node = 'positive' if processed_value > 10 else 'negative' + return processed_value, next_node + + def sum_aggregation(results): + return sum(results.values()) + + def setup_parallel_workflow(): + parallel_workflow = ParallelWorkFlow(executor_type='threadpool') + while_loop_workflow = SequentialWorkFlow() + while_loop_workflow.add_node(loop_node, 'loop_node') + while_loop_workflow.add_node(exit_node, 'exit_node') + while_loop_workflow.add_edge('loop_node', loop_processor) + while_loop_workflow.set_entry_node('loop_node') + while_loop_workflow.set_exit_node('exit_node') + + branching_workflow = SequentialWorkFlow() + branching_workflow.add_node(node_positive, 'positive') + branching_workflow.add_node(node_negative, 'negative') + branching_workflow.add_edge('positive', branching_processor) + branching_workflow.add_edge('negative', branching_processor) + branching_workflow.set_entry_node('positive') + branching_workflow.set_exit_node('negative') + + parallel_workflow.add_workflow('while_loop', while_loop_workflow) + parallel_workflow.add_workflow('branching', branching_workflow) + parallel_workflow.aggregation_fn = sum_aggregation + + return parallel_workflow + + def final_processing(x): + return x + 100 + + self.large_workflow = SequentialWorkFlow() + self.large_workflow.add_node(start_node, 'start') + self.large_workflow.add_node(setup_parallel_workflow(), 'parallel') + self.large_workflow.add_node(final_processing, 'final') + self.large_workflow.add_edge('start', 'parallel') + self.large_workflow.add_edge('parallel', 'final') + self.large_workflow.set_entry_node('start') + self.large_workflow.set_exit_node('final') + + def test_complicated_workflow(self): + initial_value = 5 + result = self.large_workflow(initial_value) + expected_result = 117 + self.assertEqual(result, expected_result, "The workflow did not produce the expected output.") + + + +if __name__ == '__main__': + unittest.main() diff --git a/examples/tree_of_thoughts/tree_of_thoughts.ipynb b/examples/tree_of_thoughts/tree_of_thoughts.ipynb new file mode 100644 index 000000000..9f859223a --- /dev/null +++ b/examples/tree_of_thoughts/tree_of_thoughts.ipynb @@ -0,0 +1,497 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tree of Thoughts\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Tree of Thoughts (ToT) algorithm combines Large Language Models (LLMs) and heuristic search , as presented in a [paper](https://arxiv.org/pdf/2305.10601.pdf) by Princeton University and Google DeepMind. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Tree of Thoughts (ToT) algorithm aims to address limitations of the Chain of Thoughts (CoT) approach, ToT enables LLMs to evaluate their thinking at each stage and abandon inefficient approaches, exploring alternative methods. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example we will implement the ToT algorithm to solve a classical problem: \n", + "> Given an input of 4 numbers. How to use these 4 numbers and basic arithmetic operations (+-*/) to obtain 24 in 1 equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A set of 24 Game Puzzles can be downloaded from [here](https://github.com/princeton-nlp/tree-of-thought-llm/blob/master/src/tot/data/24/24.csv)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RankPuzzlesAMT (s)Solved rate1-sigma Mean (s)1-sigma STD (s)
892 2 10 104.8598.20%5.131.63
2082095 5 11 136.1596.10%6.752.52
5435442 2 7 87.5393.70%7.882.98
4374381 2 3 57.1095.40%7.392.38
991005 5 7 75.6597.80%5.971.91
2202211 4 6 86.2194.40%6.572.52
1821833 9 9 96.0497.60%6.472.16
5415421 2 2 47.5295.50%7.832.44
105410554 4 6 912.2477.40%10.485.57
114811493 3 9 1014.9478.10%13.606.10
\n", + "
" + ], + "text/plain": [ + " Rank Puzzles AMT (s) Solved rate 1-sigma Mean (s) 1-sigma STD (s)\n", + "8 9 2 2 10 10 4.85 98.20% 5.13 1.63\n", + "208 209 5 5 11 13 6.15 96.10% 6.75 2.52\n", + "543 544 2 2 7 8 7.53 93.70% 7.88 2.98\n", + "437 438 1 2 3 5 7.10 95.40% 7.39 2.38\n", + "99 100 5 5 7 7 5.65 97.80% 5.97 1.91\n", + "220 221 1 4 6 8 6.21 94.40% 6.57 2.52\n", + "182 183 3 9 9 9 6.04 97.60% 6.47 2.16\n", + "541 542 1 2 2 4 7.52 95.50% 7.83 2.44\n", + "1054 1055 4 4 6 9 12.24 77.40% 10.48 5.57\n", + "1148 1149 3 3 9 10 14.94 78.10% 13.60 6.10" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "puzzles_df = pd.read_csv('puzzles/24.csv')\n", + "puzzles_df.sample(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "LLMs does not perform well on this task.\n", + "For example, given 2 8 9 12.\n", + "Human being can easily find the solution as 2*12 * (9-8) = 24. Let's test whether LLM can solve this puzzle" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from agentscope.agents import DialogAgent\n", + "import agentscope\n", + "MODEL_CONFIGURATION = {\n", + " \"config_name\": \"gpt-4\",\n", + " \"model_type\": \"openai_chat\",\n", + " \"model_name\": \"gpt-4\",\n", + " \"api_key\": \"YOUR_API_KEY\",\n", + " \"generate_args\": {\n", + " \"temperature\": 0.5\n", + " }}\n", + "agentscope.init(model_configs=MODEL_CONFIGURATION)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "An equation to obtain 24 using the numbers 3, 4, 4, and 7 could be:\n", + "\n", + "4 * 4 * 3 - 7 = 24\n" + ] + } + ], + "source": [ + "PUZZLE = \"Input number is 3 4 4 7\"\n", + "QUESTION_PROMPT = f\"\"\"\n", + " Given an input of 4 numbers\n", + " you need to use these 4 numbers and basic arithmetic operations (+-*/) to obtain 24 in 1 equation\n", + "\"\"\"\n", + "agent = DialogAgent(\n", + " name=\"assistant\",\n", + " model_config_name=\"gpt-4\",\n", + " sys_prompt=QUESTION_PROMPT,\n", + ")\n", + "from agentscope.message import Msg \n", + "question = Msg(name=\"user\", content=PUZZLE)\n", + "res = agent(question)\n", + "print(res.content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is clearly not correct. Now let's implemet a ToT algorithm to solve this." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "THINKER_PROMPT =(\n", + "\"You're an TreeofThoughts, an superintelligent AI model devoted to helping Humans by any means necessary. \"\n", + "\"You're purpose is to generate a series of solutions to comply with the user's instructions, you must generate solutions on the basis of determining the most reliable solution in the shortest amount of time, while taking rejected solutions into account and learning from them.\"\n", + "\" Considering the following question: \"\n", + "\"{}\" \n", + "\"Thinking Step by Steps to give your choice on possible next step to solve the problem.\"\n", + "\"You can put any arithmetic operations between any two numbers, the intermediate results can also be negative or fractions.\"\n", + "\"Try to think of all possible next steps to solve the problem, but choose the most reliable solution in the shortest amount of time.\"\n", + "\" For example, if input is 2 8 8 14, possible next stepes could be: \"\n", + "\" 2 + 8 = 10 (left: 10 14) \"\n", + "\" 8 / 2 = 4 (left: 8 14) \"\n", + "\" 14 + 2 = 16 (left: 8 8) \"\n", + "\" 2 * 8 = 16 (left: 8 14 ) \"\n", + "\" 8 - 2 = 6 (left: 8 14) \"\n", + "\" 14 - 8 = 6 (left: 2 8) \"\n", + "\" 14 / 2 = 7 (left: 8 8) \"\n", + "\" 14 - 2 = 12 (left: 8 8)\" \n", + "\" 2 - 8 = -6 (left: 8 14) \"\n", + "\" 8 - 14 = -6 (left: 2 8) \"\n", + "\" and so on. \"\n", + "\"Please try to think of all possible next steps to solve the problem and choose the most reliable solution in the shortest amount of time.\"\n", + "\" Response in the following format that can be loaded by python json.loads()\" \n", + "\"{{\\n\"\n", + " ' \"state\": possible next steps\\n in the format of \"number1 operation number2 = result (left number to use)\"\\n'\n", + " ' \"thought\": \"thought summary to say to others\"\\n'\n", + " \"}}\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "EVALUATOR_PROMPT = (\n", + " \"Consider the following question: {}.\"\n", + " \"To achieve the goal, pessimistically value the context of the past solutions and more importantly the latest generated solution you had AS A FLOAT BETWEEN 0 AND 1\\n.\"\n", + " \"If the solutions is not directly concretely making fast progress in achieving the goal, give it a lower score.\"\n", + " \"Evaluate all solutions AS A FLOAT BETWEEN 0 and 1:\\n, DO NOT RETURN ANYTHING ELSE.\"\n", + " \"Response in the following format that can be loaded by python json.loads()\"\n", + "\"{{\\n\"\n", + " '\"score\": The score of the solution'\n", + "\"}}\"\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from agentscope.agents import DictDialogAgent\n", + "thinker = DictDialogAgent(\n", + " name=\"thinker\",\n", + " model_config_name=\"gpt-4\",\n", + " sys_prompt=THINKER_PROMPT.format(QUESTION_PROMPT),\n", + ")\n", + "evalutor = DictDialogAgent(\n", + " name=\"evalutor\",\n", + " model_config_name=\"gpt-4\",\n", + " sys_prompt=EVALUATOR_PROMPT.format(QUESTION_PROMPT),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import heapq\n", + "class Node:\n", + " def __init__(self, state, heuristic_value=None, parent=None):\n", + " self.state = state\n", + " self.parent = parent\n", + " self.heuristic_value = heuristic_value\n", + "\n", + " def __lt__(self, other):\n", + " return self.heuristic_value > other.heuristic_value\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def generate_possible_states(current_state):\n", + " prompt = \"The current state is: {}, what is the next step?\".format(current_state)\n", + " msg = Msg(name=\"user\", content=prompt)\n", + " res = thinker(msg)\n", + " states = res.content[\"state\"]\n", + " print('Exploring states:', states)\n", + " return states" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_state(state):\n", + " prompt = \"Current state is {}, evaluate the state.\".format(state)\n", + " msg = Msg(name=\"thinker\", content=prompt)\n", + " res = evalutor(msg)\n", + " print('Evaluating state:', state, res.content[\"score\"])\n", + " return res.content[\"score\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "def goal_test(state):\n", + " pattern = r'=\\s*([+-]?\\d+(?:\\.\\d+)?)(?=[^\\(]*\\()'\n", + " res = re.findall(pattern, state)\n", + " res = float(res[0])\n", + " print('Goal test:', res)\n", + " return res == 24." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def heuristic_search(initial_state):\n", + " open_set = []\n", + " visited = set()\n", + " initial_states = generate_possible_states(initial_state)\n", + " for state in initial_states:\n", + " heuristic_value = evaluate_state(state)\n", + " node = Node(state, heuristic_value)\n", + " heapq.heappush(open_set, node)\n", + " \n", + " while open_set:\n", + " current_node = heapq.heappop(open_set)\n", + " current_state = current_node.state\n", + "\n", + " if goal_test(current_state):\n", + " return reconstruct_path(current_node)\n", + "\n", + " visited.add(current_state)\n", + "\n", + " for next_state in generate_possible_states(current_state):\n", + " if next_state not in visited:\n", + " heuristic_value = evaluate_state(next_state)\n", + " next_node = Node(next_state, heuristic_value, current_node)\n", + " heapq.heappush(open_set, next_node)\n", + "\n", + " return None\n", + "\n", + "def reconstruct_path(node):\n", + " path = []\n", + " while node:\n", + " path.append(node.state)\n", + " node = node.parent\n", + " return path[::-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exploring states: ['3 + 4 = 7 (left: 4 7)', '4 + 4 = 8 (left: 3 7)', '7 + 3 = 10 (left: 4 4)', '3 * 4 = 12 (left: 4 7)', '4 * 4 = 16 (left: 3 7)', '7 * 3 = 21 (left: 4 4)', '3 - 4 = -1 (left: 4 7)', '4 - 4 = 0 (left: 3 7)', '7 - 3 = 4 (left: 4 4)', '3 / 4 = 0.75 (left: 4 7)', '4 / 4 = 1 (left: 3 7)', '7 / 3 = 2.3333 (left: 4 4)']\n", + "Evaluating state: 3 + 4 = 7 (left: 4 7) 0.1\n", + "Evaluating state: 4 + 4 = 8 (left: 3 7) 0.15\n", + "Evaluating state: 7 + 3 = 10 (left: 4 4) 0.2\n", + "Evaluating state: 3 * 4 = 12 (left: 4 7) 0.3\n", + "Evaluating state: 4 * 4 = 16 (left: 3 7) 0.35\n", + "Evaluating state: 7 * 3 = 21 (left: 4 4) 0.4\n", + "Evaluating state: 3 - 4 = -1 (left: 4 7) 0.05\n", + "Evaluating state: 4 - 4 = 0 (left: 3 7) 0\n", + "Evaluating state: 7 - 3 = 4 (left: 4 4) 0.1\n", + "Evaluating state: 3 / 4 = 0.75 (left: 4 7) 0.05\n", + "Evaluating state: 4 / 4 = 1 (left: 3 7) 0.05\n", + "Evaluating state: 7 / 3 = 2.3333 (left: 4 4) 0.1\n", + "Goal test: 21.0\n" + ] + } + ], + "source": [ + "initial_state = \"3 4 4 7\"\n", + "heuristic_search(initial_state)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "agentscope", + "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.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/tree_of_thoughts/workflow.py b/examples/tree_of_thoughts/workflow.py new file mode 100644 index 000000000..053175417 --- /dev/null +++ b/examples/tree_of_thoughts/workflow.py @@ -0,0 +1,149 @@ +from concurrent.futures import ThreadPoolExecutor +from typing import (Callable, + Dict, + Protocol, + Tuple, + Any, + Optional, + Union, + runtime_checkable, + Literal + ) +from abc import ABC, abstractmethod +from dask.delayed import delayed +from dask.base import compute + + +class WorkFlowBase(ABC): + def __init__(self) -> None: + self.contexts: Dict[str, Any] = {} + def register_contexts(self, contexts: Dict[str, Any]) -> None: + self.contexts = contexts + @abstractmethod + def __call__(self, + initial_messages:Any, + *args:Any, + **kwargs: Any) -> Any: + pass + + +@runtime_checkable +class Processor(Protocol): + def __call__(self, + message: Any, + workflow: WorkFlowBase, + *args:Any, **kwargs:Any) -> Tuple[Any, str]: + return message, 'EXIT' + + + +class SequentialWorkFlow(WorkFlowBase): + def __init__(self) -> None: + super().__init__() + self.nodes: Dict[str, Callable] = {} + self.edges: Dict[str, Processor] = {} + self.entry_node = None + self.exit_node = None + + + def add_node(self, + agent: Callable, + name: str) -> None: + if name in self.nodes: + raise ValueError(f"Node {name} already exists.") + self.nodes[name] = agent + + + def add_edge(self, src_node: str, processor_or_dst_node: Any): + if src_node not in self.nodes: + raise ValueError(f"Node {src_node} does not exist.") + if isinstance(processor_or_dst_node, Processor): + self.edges[src_node] = processor_or_dst_node + elif isinstance(processor_or_dst_node, str): + dst_node = processor_or_dst_node + if dst_node not in self.nodes: + raise ValueError(f"Destination node {dst_node} does not exist.") + def default_processor(message: Any, workflow: WorkFlowBase, *args: Any, **kwargs: Any) -> Tuple[Any, str]: + return message, dst_node + if src_node in self.edges: + raise ValueError(f"Edge already exists from {src_node}. To overwrite, remove the existing edge first.") + self.edges[src_node] = default_processor + else: + raise TypeError("processor_or_dst_node must be either a Processor instance or a string representing a node name.") + + + def set_entry_node(self, node: str) -> None: + assert node in self.nodes, f"Node {node} does not exist." + self.entry_node = node + + def set_exit_node(self, node: str) -> None: + assert node in self.nodes, f"Node {node} does not exist." + self.exit_node = node + + def __call__(self, initial_message: Any, *args: Any, **kwargs: Any) -> Any: + if self.entry_node is None or self.exit_node is None: + raise ValueError("Entry or exit node not set.") + current_node = self.entry_node + current_message = self.nodes[current_node](initial_message, *args, **kwargs) + while current_node != self.exit_node: + processor = self.edges[current_node] + current_message, next_node = processor(current_message, self, *args, **kwargs) + current_node = next_node + if current_node in self.nodes: + current_message = self.nodes[current_node](current_message, *args, **kwargs) + else: + break # This should not happen if workflow is correctly configured + return current_message + + + +class AggregationCallable(Protocol): + def __call__(self, results: Dict[str, Any]) -> Any: + pass + +class ParallelWorkFlow(WorkFlowBase): + def __init__(self, + workflows: Optional[Dict[str, SequentialWorkFlow]] = None, + aggregation_fn: Optional[AggregationCallable] = None, + executor_type: Literal['threadpool', 'dask'] = 'threadpool') -> None: + super().__init__() + self.workflows = workflows if workflows else {} + self.aggregation_fn = aggregation_fn + self.executor_type = executor_type + + def add_workflow(self, name: str, workflow: SequentialWorkFlow) -> None: + if name in self.workflows: + raise ValueError(f"Workflow {name} already exists.") + self.workflows[name] = workflow + + def __call__(self, initial_message: Any, *args: Any, **kwargs: Any) -> Any: + assert self.workflows, "No workflows added." + results = {} + if self.executor_type == 'threadpool': + with ThreadPoolExecutor() as executor: + futures = {name: executor.submit(workflow, initial_message, *args, **kwargs) + for name, workflow in self.workflows.items()} + for name, future in futures.items(): + results[name] = future.result() + elif self.executor_type == 'dask': + delayed_results = {name: delayed(workflow)(initial_message, *args, **kwargs) + for name, workflow in self.workflows.items()} + computed_results = compute(*delayed_results.values()) + results = dict(zip(delayed_results.keys(), computed_results)) + if self.aggregation_fn: + final_result = self.aggregation_fn(results) + else: + final_result = results + return final_result + + + + + + + + + + + + diff --git a/examples/tree_of_thoughts/workflow_graph.png b/examples/tree_of_thoughts/workflow_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..78c268314a49299f1f99b78cba5ed10051065790 GIT binary patch literal 12286 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 literal 0 HcmV?d00001 From 0e25ceb8ace064b5967db842d47d37a5ed26e07b Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Fri, 19 Apr 2024 08:00:54 +0800 Subject: [PATCH 2/8] remove unwanted figure --- examples/tree_of_thoughts/workflow_graph.png | Bin 12286 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 examples/tree_of_thoughts/workflow_graph.png diff --git a/examples/tree_of_thoughts/workflow_graph.png b/examples/tree_of_thoughts/workflow_graph.png deleted file mode 100644 index 78c268314a49299f1f99b78cba5ed10051065790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12286 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 From 288446fd6590594e42411c1207161ebe407bfa81 Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Sat, 20 Apr 2024 18:55:40 +0800 Subject: [PATCH 3/8] reorganize the tree_of_thoughts example --- examples/tree_of_thoughts/{ => code}/test.py | 0 .../tree_of_thoughts/{ => code}/workflow.py | 0 examples/tree_of_thoughts/figs/TOT.webp | Bin 0 -> 40826 bytes .../{ => notebooks}/complicated_flow.ipynb | 178 +++++++----------- .../{ => notebooks}/kinetic_energy.md | 0 .../{ => notebooks}/reAct_example.ipynb | 21 +-- .../{ => notebooks}/tree_of_thoughts.ipynb | 35 +++- examples/tree_of_thoughts/readme.md | 7 + 8 files changed, 113 insertions(+), 128 deletions(-) rename examples/tree_of_thoughts/{ => code}/test.py (100%) rename examples/tree_of_thoughts/{ => code}/workflow.py (100%) create mode 100644 examples/tree_of_thoughts/figs/TOT.webp rename examples/tree_of_thoughts/{ => notebooks}/complicated_flow.ipynb (76%) rename examples/tree_of_thoughts/{ => notebooks}/kinetic_energy.md (100%) rename examples/tree_of_thoughts/{ => notebooks}/reAct_example.ipynb (94%) rename examples/tree_of_thoughts/{ => notebooks}/tree_of_thoughts.ipynb (94%) create mode 100644 examples/tree_of_thoughts/readme.md diff --git a/examples/tree_of_thoughts/test.py b/examples/tree_of_thoughts/code/test.py similarity index 100% rename from examples/tree_of_thoughts/test.py rename to examples/tree_of_thoughts/code/test.py diff --git a/examples/tree_of_thoughts/workflow.py b/examples/tree_of_thoughts/code/workflow.py similarity index 100% rename from examples/tree_of_thoughts/workflow.py rename to examples/tree_of_thoughts/code/workflow.py diff --git a/examples/tree_of_thoughts/figs/TOT.webp b/examples/tree_of_thoughts/figs/TOT.webp new file mode 100644 index 0000000000000000000000000000000000000000..d91ef22508412a8af35ec4c4a78ac05dc589eeed GIT binary patch literal 40826 zcmbTd1#ld__UJidW@ct)W{jDcDQ0FnW@e5#rkI(TDQ0F$%y!JoH0$r)s{g&aRqyTY zQ`M+{eRR}PAL(e$OsiF8Bqd$)001osF=b6<9&I=P06_Bj;e!BBf&pa2#g(NIK2HG% z((=|0j$kMNfW3p8i>j0uiMEa|3G_4o3;+v&0$2BeXR|P+Wx~} z5dW~tX9qtS=O4EGH#7W8=ie;y51ZLLn0@N}(`P3$d$WJ|*C$7MxSM}6xcn!Fdsv%$ ze)8fcQ`ouNTYvJ?Cu7)~o45i15dT<*!p+>&>XTVM8No$eRs53$000;S%m3o9|HW?R z-#+^Z0Ejy}dAV3yTDg(Xn9`E4^78VKNSk}wnY+0$Dw~+vnz)#eh&$RlnK*a>0RO({ ze`*2H{;@5|r;)i>dAYb4*_b}f|3B$}Tlha(|9kjnZ2zrstMacg17c17NA{n(|B*Qs z002DqpSDT-kL+tE0MHr+0N||uM@I1z06-1}09t1L>wd8QnJ-puZccp6%$}Z}OxEV6 zO#c}4f71V}!vARgui?MiWBRAP|FIp(7jp{}cRM$de~fDCXy@qeLgMOVVrovp`2U>5 z|Hl>ot6Tro4+d3p3v(B9htH-oKWCY>gXQONJD6F!SvxwASUdc$M)?1*+JE)oAN=>c z{si=*4*-S{698of0|0(L34lO{2Y~D6ewG0LXWZmrH39#4o)+=nf6x0*{w)7j{(sBB z5hT6W|L70)zu%0EvK9zz;wkpa@V7r~xzpS^-^ve!wtb0x%0$ z0&D=b0SACnz!l&D@CpP1p@E1%bRaH}7)S}E2eJWqfI>hCpgd3&r~@^C(nIn=%0OyET0(k4hC`-7mOwT`4nZzK9zZ@oK|x_bQA2SPX^BmuL5rk9|)fTUk5)5zXSh_fQCSaAdaAq;EoWFP>Rrp zu!eAph=@pqD1xYq=!O`NSdKV|xQY0LgpS07B!gsz6o8b4)PgjRbb$4cQ zoQB+pJcE3O0*gY0B93B$;*XMr(vGr%a*v9R%8IIlYL6O=T7f!-dV~gzMujGUW`-7u zR){u;wucUmPL3{)Zi*g)UW7h`et-dmL5(4UVS^EaQH?Q;afOM7$$_bf`3*A*vm0|8 z3ml6IO9smhD*>wkYZ>bWn-E(R+Z;Ozy9Rq6`w<5pM+C~X9?#8mjqV=*A_Pk zw-xsf9t0j8o(i5PUM}7c-WfgyK0m%Gel&gq{yG5|0Ud!Vfe%3;!6d;wArYYzp%Y;y z;UM7|5f+gMkquD_Q4i5EF*>mju{CiDaWC-+2_}gsi5*D>$uE*CQUX$GQg_mP(rMCH zGHNmnvS6}WvOnZ-jR1s9I zR7cb})H2lG)Rok~X%K0IX`E>aXclRqXnAODX>(|2>A>hX>8$9o=w|4_=(*^v>2v7k z7$6yV85|f27*-e&7)2R97%Lffn6Q}SnSz;GnJ$tvxQ@9g zxQ)59xmS2Fc$9f!c}965dBu1Gc)NI?`MCJp_!{^w`5F0b`78L31gHhf1&Rdr1jz(V z1oH*Ag-C>qg?xv5MvQ@5o;EE6z3E76Yu*1 z{zd9b^p|M~Gzkrf9}=6AWRjMWm6BIdoKikgebSK9a?(lCD>8&KrZVL+SF+r)ezL#h z5aiV4e#q_0)5*KYcPM}<$SNc&{8pq?bWm(n0w~ESB`f_=rdD=V?o@$NQC7)PIaFm; z^;I2FLsv6Wt5ADT7gJAA-_W4ZaMu{nMAp>TEZ2P0`l9t+Yg?OH+fRE!2T#XZr%e}H zS5vn{_g+szFIDeApHn|vf7yWA;G4miA)cX~VYd;ok%>{GF{H7UafR`liIPcy$^BQE zui0O(OvO#pO;624%u>vb%>~WBoBy>CwD@juWGQHwY+s8w$nl%woD;oMxYM>XpL447m5ZE9i7U|6z_rZ{ z<1?6=bf<9-bKmh0^2qXd^3?Qf{D%6?;oGDaomZ6CUvEk8Vjl<}Q=b7}Qr{ro9Y0aO ze1D+-SO0+k@_^8QgFvakvLLu1+n}jnmf-KfcOhCK9ifDwfuVb0Qel`|FfAJJyf<1s8TX)$lHrm^F3tZ^A}pm>Y;=>)EX+(f8Ehs5P1;iR(f zsNcQ6?vo$?+g!VB`#=YOM{_4rXK5E{S5`M>cR~+bPiPOQ*Sq(= z&#CXM-?D#iz-VA&PD->If1#JdExo~g)a-ki!zH7ONvW#%Non8EBY(jt7fZ5Yj$hb z>mKW`8-c$ee@Fj8`IELuuvxH0yH&f*wcWk*WoL3%ZFghObnkTEb^q-k^bqkd?Jx1) z@*}pRu4BpL*%Q5!gHxx|*R$|*)bs2Mnv14Ok;};|?W==pmut{X>@DtX=^e-2z`gSQ z=7asi>tpm2?o-(_&-2KO*2~{l&o}6|jCb1ijt{wy-ynMs=<^o_2}CjgP)7ik1Ek}J zpaK(e=Si2LC?v}#U(_8iYy4675%8pVi3{2?+61v4Z%y?C zOEN$E`M%b^=5cPiy)$0We+ZY&TyI^x2L{YOyZZ0H*1WIX17Dp_I^Q2b$d7qjp!Ym+ z;ktk{(8dS*o98I>qtPw#t6!DyXu#4N=mqzq^uzQ+>Mv*(`a0l*_#Pw-y7T?(zZ-D) zO#iV2f`2puagUBX7~Kbafc8KOPXJIW2($|RQ40bYBY$3-82O#|qxu>D5_H&G4f6W9 zedYXMUIY#Kd%os92CO4r2seYgj50y&I~%nDHvvEIg`bVqdIv$?Aj%KWo75EXvhY}d zH;5IK^$IHL#T709;lFBqBDOX8VQC$op_tqjyXpTTZv9aeC=cfpXNALajs>rM7>1Bq?Jf8^Jj?~yYbj~ zuXq^SP=tW#TJxDEB5&|FrD?Fqc0|?>K5cX^t0vEt4=Y$S)k4? z4(_Z;XYEOE)pM~JM2t1kvReQ#h^XZV+Ysk*Q!@;mxWso1bf?CJuHNk6`tT&_i)Hby zQaS=!aI$!Dn`@I5l$gmc6>=jD5RF;YD-!c=>Ud2 zt&8;TLj)XaZb|hQfz;k>a~?^Av87sbCF?{EN{PCKzCPs8k3@dQO3rOD#L8+Z0vKcR z_bv$I1mUPyfI8gNngHYjhP4vO4~}_R&X-OYvS}U80}Q2e|BF#*FdcJPOyLLHIrEb` zIrj(#AsCs!q})A}ezzeFGTdi;`)Fsrsz)WTB0@ zKyhsb`?)rVv9H68RShe=EmQG=-9Eu~@B?SX5Z%Wj#9;YlR58HKSQq-(-~G-#D!b-D zet~$;*QCN&4s6qi$X|#!ki!y47=FnQnP0$PyMA!~!PNU|bda731}^^7t6}E#o_m#x z$gQWC1~!p@wampcl_M7HR{nY(Vfo-UzD)@OYB}io-=39hB(V+-Wf$%L0$XRX@Nn~_Fk=+smOR$@ z4Wnv+52b87!oK}G*kip=vn;ju$NcaZLiI!R~=!mZ`o|{%Q^$NIJ^@}bgCuIkHB}=%e z$zU-_xG+&NxDaMT;YiL(z2;5T!@1Bav4Q!qdh`PFFWv z8*3T>pZ9ht9?sRk^WIz~Oi!&}*rwd_mXE~x001;s2VLnwD{Oulc1qyQBw=(-kB`Mo zn$0vZ5nJfd*N3WMAr5>laAt5e>{_)q^xhCw=NBIek#nJDAU|&z$|7#dSZ(>&RnlCGCTc)q2(5~60 zc%rLzx5ic)SR>>u=3C`9D*|Hm0(mkU8G7tGvA04=B!9BeO{p4f^O=41hVCzazs#nTa?WTuD3z{=#gW(W+4kIw!GD#zdu136*k=G!_|{)%%*) zUrkbsRWkxxY22Jz*uyk)p zYgw0QZ^Y*>9A?t+2D0ZlqaIhouBH{cqw&C$(enOa`Puq?PEBU@S7>t}Br)#7TGLl= ztR3UIQ&zd{5<2$N1I)f(qwkyga>-f|Nh;c9hMr^xS7SiB)otf+!N|BNSKsh*vXo`0 z*W>7bw?@${r8m2E*H62Q__0`GCrnmS8kJozOza=wQZSb~N( zvWF)}|2FtAOUj`4?v6PvUxUb<2s^bK*(AbI47h8J&uoWypik{>oX;wmA3Vz>+RsN^ z>If&8>SB_2Qw^Uxbr)$mnd}Gh;R%W2)i6zgU7DmgqQaPilLZ^$V(!wv5>gnzezXaQ z?zL6sz1g?V5r4LslY`y>4(X8_NLZ5c&6y+oZ{BDVWAZHTa^F#ejzD;tS)#Qj;fhE7 z1aCn-U)@yy&T2QhH7F@1BrUODq`1oFUrx-=JFI<1`MEmU^ID#*A0^);D~PGG$JhD+ z%V%;dt-qOQ7+cqxQ`zPyu5x+J`?H`%Td!}Y8;u;fmNBfdTen$yQRur3e=bu0_-cd7 zQrIe>^tLl$8?5Q_>u0bNI6FE;QjJ{D!Q38Z@fqlpVDWVEoV}?fXI~G-*f8bQ1w~?Y zn(tWDkIda1O5D)iUJLI78WIStx=Q`)5UOu*8}A!DG^jtg7Ac?3$HpYtY*i>jA3{qi zWk0_$_#U`^yGK<8oUQB5Z&17Aun^UJi{h(XE*yKctI72!2c2*0RL!KW4-x&b&jd4F zr_!yzi%Uc-+0I)Otf)4^RH0Y|_m@FQ^%w4pHHh)31G|}9!+<_uZ8At0>h+ahzQ)`e z%Iw~mOTTBHY^8kuWx0lpOV z+IcNti;|LtPNF|*89(}_ub4M0LK&q-o1oLXQO%gSleCX=_k23w0lmJAR;MwCT()lN z<^n~E4iTpX1T(^QUu^n}3TIFY&P}+2Q0XRV%08a;kBtbc7lV&5duMq}XDHvat|2>e zT4kGZ`NHb@`+8~i-HxR7-HTMlRBYHX)wMum?2dAB^aX*m1W3t}b|^xg!N_z*0s*`e zHRA$W%<@Uc82)8ET^8&+qd$3ND^r4}1KM)mhiE))`xlb(XrRDkB3OrUIyYuGbPXBS zQjm~r)&1cN(5?qltqH3bo^Mk8yXC*xxLm=Ke;7xvB7Ed~OT-Qxo0thI5A|OetiFA& zK~3*7P}yGg1&>tG34+Ju+eU?B=zdv$6u-;=`YujSke{SjWo5FATQ&R_4d z{t2bC?`85*SCY@F;6oI{1<`P>egT4#OJlZ0uuZJLa&`Bu{E`!S<8=HsO62eNN6L7r zWS=sAlAv#X^&Y2Hi#!kS2dX7|AvO#NVXBO0q6t?_6Ziv6Kar~}#L249ti|E5pZO#D zLtE9q=G$3>U!-DeThaG~oNwN4T>?C{eO(5TrvYY)Nn8+WL4!43>uwFlmea7`XUEho zn(~cD`}ArZ2ka;h$1xk(dnR(g>XTn17XykIIf&+ewB9_0=$pjrV!@RuB2#sbU(^t} zyO(~19t}!t7O=t7*dFZ`1{&29yGdrQom4wiy(O^xL|3`vj)@FyZ+lQzplIr%k%L2; z?`M^0ZgMTwScK=a`?%-&DpX;_)zcY7e4}hf^tm`Sc?*b!@7M7&DhuZphZ zVZ@0H7sDq~aRa{;N=K5W$$f{Ur0yp?ifI)TTXlfSb_6t^`qRKtB5F{=Q#lu)TZGxc zzpkxd1a6Jb-Be`&wcXDPe-gjuQ&2#3yp5~`vF8t9I@hcQ0%LwSJpPi;sBh96Egh_) zK1HRc`8p}kP)_{yd-hZf~7U zXA-VS9DSB)dvwneWX^$B_v^osi8lgo(?8A3L;T>{t}UniaN}MjpPy9 zv76|>L`*p=n4C;*-(3j^EPnV1qc=!_z6zyqjRS5CTm&$Ewz63}O^ z%9Bt0GWvjJX4We#e_pt~aemlFbf}dr4jhz68+k|eL5SRb{Dfo z^9fv3c#Gh{`9wnGvCe9VVy-f7d)YG(^QxJt(V$K7SC_U*oNEbcVwk*>3`} z`%1=))z9S_(A=@iI30g-ll5DyTYeJ#`52zKA|dV>MxyZ$5%MJ;0dA`As4u~6DauI+ zfx$`B(x))FEW9&D5TLyDGNqPpiXAVOfYp@SDKRgDFKb)Misz4=2m0#mfdFb8_>5A8 zb4xY%MPCzVvj{ab=dxVLOVF@^^^hJP)%yl&4qxKvm7S4IcfDX;?~Kg~`6YuIt#55@ z|M=;x2+eVk(%^o;n$R4LW&0t#x%S?-+bKtr03~g2QYk)Ulv??H&1y`cQ(2rAv-RpC zQ9a)J>2Ra#e*_m%=dLK;@B~gpNB~KF_2+mQ{N>mu-fU^gx8ZmFnE>xJAn@d2}b*alSZzWBx%TUHQ#m zZ%`3e5ML5%tUIJ~Qbq@Y2U-tnS)*CYeVK7)? z>N|SOU-zCj0TF%nDRCo~>tOBXbdS7rSg2_fUh}pPLsZEFJnGmxtZ3Mq= z4YuzrQV_SCk-W+KKm5uV_4}qb)r;(qG=}R8&nxFWd0o_m(bbdT%zg~r?q^!jBoE@r z{uPdZRPBS*zr%N)ln-CW+FUlcfXe**i#OU$1K`;H$+MDpcMJy$q=FmmOSf6jR7jfVL(wOJ^#==i>VolXV^+_!jO38e5{aTNO!G8-IlE$EqW<_?4 z$6i?vRU`WEBE|`sT1u}U1W^+=9TJZcn6%DO_41kfcjIv4^R4X+PRu`YBB9S{Om*;;6$*IEg_)9|+)8S*%+&ABjnu(9vw;CQMEuLNO&J zzu|cbxHs_WTKE!5ATZm2!%UV^6QPQt+Ij_-F5dVZ;>%Iv>HW~G)HFiA^b+kVGfbyiA?Z}^vhLC2gF(CGQb@aVP zZ**HZd>Y?6CJiL%4P=7Ry`1gxsy;gWVvlHsz^H*|LFP;buu24lScK$sD@wE}OR?RE zb-F}+V=D54bM^dj!pS=(hc%XbaqkC?5GIj=mm(5RMKuU#wR*xSdiu?^rb0gFp?@Mr zO@T9i)AjYe@9&ag)qcLnnz?946*Sj7?QSj{AB_ez<6h^&a!{35PLsz`vr4){(l4wC zl-L)K%KDZ#gF2HyLaEoJOwA_vyzS!_ro55R-*&CkaBLaP1RwK?P-3U4M=L77NNgzs z`Zaq#7uZa9cX|5mZODZr3jX>pNl|&Q`|;sLIVKeu2OZQ^4HhPN%dgH}kEq5}qY<>Y z#|EwPl$lu9#Yy4pYcvbVwIq8C<=g0GUi(7PNFQE;5+hGv*u#K_||LmZjD#X$xoW znC2ng1$wTY>_^Ghbq1)O-pin-lp z_6qu7us#sjZ~L~*U;tYzT6H2tt9fbRh(8Tt)>4*ASu@8u#>`E!$O7ZRm(0V~4Jxzp z32Ee|(9#tvEXJ%I@|VX4mp^+~!vjn^BY+HrLxN15!^ATs(+)5H7yLEE~SXSbt$y3$bVd;K3ttc<5_GA zre?!ba=u+kBd+>Qq0BBTBu>QL(!zzKlMvo}$Xrm)k?9BP=gyU&;%aA@{^3Wq-{~NuD#H z$`}}wQvQ=$kNOloRJ!b`Y%X#$ohb#R^c|U~0db0gZ*VIYpN?{<{{x%F90Rf&ijxie zn^mWdgM0)`XOi%=ipAjX3NrWM>8zXSrJKTW>A6<*FM|WVRx**l>_vxf=s{QDBT1kj z2<$RSpD*m$YDjn2<(oMem^XbeV0a15uU0|tJ-0vKNhgH(;TJQ!po$%L^a+QO>Xok~ z)*k&Y`#U)|Ga;!rc?DM*!ss}=zwdc2F2ipSZvb}Z*)o0`LMiQPUmlN^#Q`Q8pRSLh?SIixS-)jL@SV7iW;mZgj_d^yLd&9%NY zp94CWOsuSRJB2z>*OvBydmTahmbs}U@r%Z7BZ8POem__-iC=lRt){js6x7pUrBUUy zG!CNa;cz$a~E5B{_wfywU}8s zfpOz6`X?4>df$}>crwX9*1Dzsab80RX4&*^1mSa$e@{HkvDBew(`)WhQI#}cM8m%r ziw*BSk7CS2z&9uP;iU0O_+oWvMqn!cjeJOO_=CaR-`^IK@7SM5WR|t*Ba*wQlvVho zUdcN#JU;XtkR{$x>m(az(j4P}pgyEDXDMqLZ<4Fd5XbHnYq~_``>=8#P}`4+y8}|+ zy=aKf9nKGd5rUh|tg&OE0pX($Y&_pceP}s&aDZrwl90=@GTQ91jH=a^OW0r0F4)Gu zH1p6R_T3iit==cJSIsm(3uYK_AgO4Aah*-x+o;RSH=Ol$T|04vJNtD75`Piy->@2Cis%;!CY1XJ;i3w1DFWgGo;&rUZ+0hx&Thzj2^Cd53ZIXE+~_|Li4N=&+CVt;(J zQ|L#oKlmI|q3;(o6sLuycA-B~ajB5^4kD%b`TDvU`qGh%sVBFKO0eI#&Fx`-7*eFQ z!nMibAg!}yrOFbi?iJOiEC(7Eq261Wy?+e5Eet&WSgh7G3{LE=HM;pQC& z2I6p-t<;!LjR~atJ>_u4ehjOODN&9}(GeJqNi@fZ)wSFOBmV(~;v<0J;U8bva+1(G zu2Z^|*$9hT^km~+=k+Gz>y7dKp_l>oMM}vpOtHakal(jPip~%`#!Z_*Q{i`|tCfZ` zHqX}PUbE{jCWt}W792$+Xi2{w@O~VI&wfrm|%^Lf}qZA;b2gVpG5kn%^@e2L#15m zw|4NN$fu4U-k0*Q5t543(mLT|mY5oR2h5GA_*JGP;!Ra_a`o=~USu@CK1ZTTx-=Th z3gkmHSh-+&7X2a985YsiG~mY2KBKuy-W z*6(MZcC@yli|u?taMf30lyc5Heu_3NnKt`1HK%HoNWVo_`?zV8$>`6fZ42fEX-H7vB6 zm?KVzH)=e~@gm6WtrttXzchrTW^>=8JT zLw4ypy=~{bBC*$XePDnjHs8ERjmIezfNp^#pQNIPy!blu>0KgX4iGBGx(kFF%&nJlhK z&@o|mND#Ww8wHFb=&A|I8=%#eVpe^$#;qt(+>Zk*UugKJS$uT8e=7Y2)y3QS7o(ty zuE%;mYlz>FIuu$v*U6cVpbUCe1(4nksQ1{&bFa)?ze6S{T=5mVIcd!p#5q~LL+kue`m8PmjU#n4b15ug~(9@bdD zPC}Z_RDg5Tce{y3mx2t#Fj`Wc5H&SHZMp}OgKNkccs<+nCu3e(Cl8g4o;R`{mFoxE z4(7DF`eNIZ0&7O8B%xozkC-{Ga z3^hvety_Z8PK8Kj&`@NwjcRS;LV=v@&ihC^3a~H87UgVt;OjJ}9AYE>RCv+iX2rVF zAijQcED6}_v~FJLY`Qn+-4TF_iF1a0XmDa;!$bJS6}w8nbRK~2Nqo?yBBwHkh~XkX z!8u^?-F7o^z2B-v3^*6sgoe+c|ACN~r!WX005rS|Gam-VB6}~FYN_n}wlNI^uls47 z0q=p+&ce}wEa4}W7?%>IBYv|w;0<=5Y2dEX_DwM0#3^)RNM{wxo@LjXl(}gZgJRZf z*QZuTK~?rC%Ya1-eE_`KuqElV?q*$2eWOiQTj>Ro2SejWJzVxrPE*`gM#hWQV^zHL z=Nkp4Zt>r_rU(mLqoJ&=5*q`YJ;JRImXm^#Q8JTs-uY&zNG;!WHhz?bqIYBt-|^`` zA>RR)hK?5BA)yhmp*dTva*C)#TFea35%j*nnaHvM4=P5)jd5DEZ?6mL_Pmnpz4@V+ z3gO^;^PzM)11ATaIlq=_ z0(rHEq3(NcU=(p>Fvs@L zkO}h1-x-ch)8;}sN?pm)y8A+W4855eo3oyOZebsb$W2q|#4n@7$DzWmr?-N3=*)U~c$ zc^|MtfI{R8g}i)?Q|ynXWB#koby=e1Jsgtx`iB#gU3}CfI3;J{lCG1vNgUB^7*qSm z{g$VckB#%oulFeCE!&ML99ZlV=;Hv6pz3Drpf&a(=TfN5m|L5wW`PRn>%uGJc4+{T zK<-Y{-o{X#ESpHIu>wW`nER}>#)_FsND*RsW%H5=)W!4s{aaAjsc(-bb7004e@+sfwr=NxFa)U?6Ch#EsoY6$$kuNS-w)(9i1q4{%0?Df zeLcz_<%DTN98C@H3DtfemASIiw$e^=Iqcsz4rp6YjS|qnysovR6Am6hhxSZpOr$$F z%o!zakJ|FW%!SM;rIS8d2)2OLP|(|D8COIVD(3Sw{YcW}?KO`v%e8L-~d%uT|awecSS>EyHeklB?1c znZW#<%i0QGS*i=ysh;VTcuxQErSZ?xwI^+QIl>nilJ~hG-EXKq-`z3^x~UJzmuUV( z!Uz>}a_eYE;4`lT5Jm8rNZh&Px3!0z(8jeI%ejs&5_546*!-Gr19fnAI_J64aES)n z5B@b&hHBajjs^LbJ0HYPOeeA-Bw7QMo@)Ve+~38Mff$>q7#h+8UA~C zSRD*Y15ZO|i8LRns_I5aEWrX8Q2;2$h7Q~~xfTJ;aXA(}c6WO}ql}zH{lEy`4;8?W zWqEmPMHi7{b~W-^ZCkV%Ly)=%PHrf2EPCG|?mX)MZXzTnM_Jy#oW4$NH~VImPe=D| zB|?o!$pj(1>;mpoF*qrAeNeI@gD1xAatQ1i<9|#(PQ$Yb&kzH%KuF}0&k+cxYQbk~ zqZ@0!e=|kn5rT9O+23Ot3rxT)=?^eZ+wf6vp>YfB2-Nu5F@Oj4N+A~FIS>Do0WM!! zQr_@1>)3Z4e2v!`r0@J;Y;>CePSzdJ5{tGUuIYa{K7P|b$Z!0PU#p6v_0wE=;?G?! z%V~>hlgK!^#r6QaZ=W=K84q|jBbM!gL9z&BSeHGDk6BQQAWD6tJYK#Euc~`NcXW5~ z0*kGfhDyVJ=d50Nb!3?jIxt=^t}LJ$3BK6l?~ItwJCZzG38Q=_dIV(iWNii6Z_FO3 zM}b=HD}s9{^9Hr03z5cygb)CKJoR56tk?=;l}-_mgmqMYf;|l76)LSOi87-LL=BHG z{u6a#$jDww1aoE=&gIVy6Ua0XWaUG_6F7B0h)um<3fb0Lc(jbbtDeuj4N}~I8j|oi z`v*)`^q0DahqK?-LP@}0@n>-Yi%yFC%6vtm^h|?>G%rcSu3`@kzTDN!nP63dIM|0P z@rc^T&>)?IwChGcULOU}&KC=HA?SHF+qGT!W8&W}G<0B6Xm-3XJ^K)hK{%s&NokVA zrx~wR@6Sx*7Oz{)X3vQvd$tGIQ(MVdUKt00`iWai-$~Zao5MS-!ye#mf2-8cm+PJC zbe>gz^?yl_D*ys7z_9&$ekug+Bp$z6s9ppnpk37RhS7ymPI}}Gz$Zt-*O6cI5 zn>4eQ^+iRbU1*?f3zmdK{yhzz5d*5WenY~d#Bx_^#!tw$4>RU?K|*NO`1Kl$=~X=d z8#}DIvv+p2pt3!IIOS@1)!)O{*`Z%G)OwW0*$b|Cz?0GE6ovLHtco=R%UK(0Z*iv* zn`c#?q8@&2kl8!uGg45ZU&<=X2xeIjdaZ{f`+kUx-d{2Z97FX=ONChtldg&_y4QiM zx+3XQ%#hzu${y|Mw#35ZzX~>MRkRtds*ghh&ah5ZRMTe!__M z)Cwz@LCf?NML|g1iNSyihB*GZ)>1*!R~mrr;G&6(U?#AD>Nb`mip>FdcYCuF?L*XW zrjD)g4Zb4lH$FHN4nKHhom`zCZ9k?I?sY0ru5n#Y_HR56yM!G6;)>cxs;+SqtbC*3 zHDF`emN;_LEvu09Lboi~d_Cn8Ufvgqs2;TBH(LLPw+PYeI4~R^B8XK0FAvfWggDvo zWAAwL5_8r{Alvu_5A5Y2lA-w3gc1U>(Yvs( z;oeE221mUOABuVD&9f*aQP`Q#fKC@3fon0szG3>fT4e)vc!b(`szPh@uUTH9;!#xd z+0~%wN$<4{@51UHni=+-kullNH=bc!8q%OnV;_$P&O4;Mw3Ka$~H-V-x(E(r5U01cF|b|kD6}>C+l$N&Rl50 zYQSJE{NGA5D{ZGtDG%7aA#hsVz@6wFuRsU;B zb8cRT*m(yfV^w4D+@Q6pz+VS9;P!9AX&k=flu}kVl zt9Sz^r**7JkKl~Z5je5~#`BAGBEuqj>kvRsruyFPk47{in7uRf%U-lzit$+TSpNMN zgBItE$GyTr+;cL3wW-LeckGy`lgW!AP$mQR=3ju=@2j&%4 zrRMD4E0uDsYEl zwY8bwzQ_?bXH+K-bXhGjZ8t(EG>8R1pYNwcL9HZ{H1(js{aILL zu#aiZeOK)3`M?i$jqJ2t9E^9@IP!AwiTDd&sj802b|ExUs=R{yCIU(P5{(4OLk;Pk z*8xW0G+B)CWOMKA;#@a!*Vi&Ek9+6|QtbpElMG9V)-B;Fy;(i@m>2Hk zylvp^nT4^`PAe(LXRS;9Cn}Da+IY)*23>R5kAJZux7iEA9en73O z>gr1uh8Cq)x>fiH`=n>T*s8fTbI#C#OLfloO!OJ+<+uq7R;`x9l&`2j{tASF{!Dhr z;JVpT{}6&dyh8j9^IgoX&;J(yCP3N0%t>4l+eV{C4L}#m2R4)&l@&qwj@<15=Z7+9 zMn!P-=5hH6h*Byncn$17W{6Why8zwcLY79XLzT7OJAmeJ4M}^`-2WFynwq$P2Dr=b z);A`YtOL(Y0Jm}3xovEV(ybapn>V`4(*YDVv780C*~$pjw&r~e_tgukLDUs2V0T(Y zO}lh)@zf7S-|W*)b{N5kL_zO}F|0UjP+_%+V^XcOvkkuC@l@AksM@GRC6~IPH$@{U z>_s9LaIipr|Buwv9SJ10qfPkP9ZLicckjq#6#wNr#;UBf2NS<0Y*C<87-G}w-U9w^ ze+A(zGJj347;@(52knqCVIcHVKAq5qNWdR3z_lZ8wak8oRj=>jmu3b9dt zS@pO{o(&ALr7^y`wDD%P%H-$TEx?J22(p*UfRT78Wk9S@4G{=;W#!}3(=w(eV9;^5 zAM8$wN=)X7g*6Nn7MC7iboo*8hG;F;t6mvIwNy@blu4>_l**hUETFws)+apNyv}^m z#B0m@gBza_57UTE;`b|$?`J2Eb9r%}1UCj=YEQ|7?YzUU=?A<_5_RI~>3*c?uKR%i3CaYc2Qh=L+<|wh1cQ19suP)IrhNaU*ic8|dgAtg+ zyd6H>X!BSp%(F171U%g|;fGXj5FV_}OPTfeL~@slRz{VQh0clSF7i^2EQdDjzTmXT zC*E^wAb%N86tbkL_8m8?S-XvpGEkCcvOHIVLkLQr4+p{te>iwW7aVGg9qF*jr~n;> zkPyx%kFdvKlN;L9&MjO46N9*FV$(eW4O%qgyCGN*k*Ii&(WXDaL@xpSP{Mdjx$bSb zOv}~5zs^v-jKkkl=)x+qRtp*lS-wwLe7SJTzjbP)`w74ioUwZg!=0NY733hrnU*6I z9jK=u z7HA<(^M6iqLYR;U26gVm&wUA@>dPro%ekP4(~P$`gqtyX)|{S}S6kslpPHQ(?1_v&NiV-K+?BeFxOU*+{@zCwx1` zfRI{m%V5N~L%QDGW)4OUMF2sNicl6e5Jh3;x^_Eitl88zG3SB+IwP1^iu6{>7=Aa4 zmZ)lu*Sj?57R75t-V-0Wuv-2^mZYoB&xfl4jRf{S)3N%KVuvu5e9U|`Pek$Y4^K?q zLikW~p7>$F)w4Tjg7vGpU#g2HvotGS8DYpZh}HcN)n40*lozR>^qyS7O}3 ze@2Js*M83IRW>)|o4r}+o3#3LxWKa?$cctc9QQ)EC`4P?AbO)S4(sI>(Z%a0p}LH+ zr^*@)%Z!HXeur__ha5?PP&)$yqe0luic<`)A-Ak$$HY+=Ill-N?gltzm(*W3Xlb#iCY=FWfJmisixB+752x>RcbKKdY=}G3OqbdHqMuclTKeNMQ#k1U`yc~TaF!MyXT@2 z6At%Ob9o%1!^zmP8nxN2$B*76t}yK3vraVKyIvF*Fj%A^j#2o)_vZ4oI3Agk=M#Kq zG@;y9&&r%o`%W(T`Q$OuZ-2wY?XdbE(IcNlh(4H831A715f}kgCEf=0>0Wc0ORN*b z#L39pa-E4(y?>DAgwNuR7YBhvG|{zJWY>6&)%`T@%*FO>49zn>?mxnTf zLLsPHzX6nGoA`C^wqhf01!Ch-7$D6!Nk@4}R;Mv%N*wP$w{ik4&zR%ukp3i1prxs6 zM395nD-!|{*j}Zd57Um8z=M|SRYWi`2a)t3QtU9 z&mdVnFb*^56Ul`lxF3UM6(9^@yIq36xotv*{cop@3I$L=oBZ<#fIE~b5(7 zwkV4ito#tEWiSGs_v;gfz46=kv*gf_nQxJjQg>$*NTL7q5;NlifJGn!0v51hhoW8% z&z|dnzIViPyGpk$DRqZ_)(#dw0j*BZ+3ua#gPbFPSw*%7wO+pZI5pj%w2MaOL=rJE zkzVb3IzR|2NX!w6E@gZY-%<22;y_)y7Jva9+Mn@g5#|u}W{{BRNeU{^U$98apkKUi z1jiZ6lEGC#znUkUt=nms-UcKepvA&mFOUKi+uvwRih{mhb9#J(=p`UYD*#f@is@ls ztjiowC}l`6_XNFTC?RhsXmf}1KFKIn>4q)HXI<9LQcNa*gC6yBkBo2J8iI&?X`YC2 zl1ow-U~^l&$(=0O2Gx{byg)&BOBiDyKx|icch9(Jf#f_{tVfussRD=A845durnSET zB{4Me_(5t7BQuXufSou84vatCBm)C^Q3g5F>L7=v=wAlmsNAwYK}N&`00h@04fCwY;7Qt7iaKE;csg zAB`c1Z)zX`il;j{td((cd;NvSYr)nE?SU7g>_uA`f;ZOSdwm$Dbpn~7G<(I0>2pw? zoPFxK_Gy|I4tWFf2FC(ub~^-gg0}$6rs(A+m>aPS9SPV{5foR7>5FQojT0 z$9dsbffXeeK?o(?UW<}_6o_i4n#N;*s)tu(p8-VH|E}h?M!YD$QIy)94;kPNxT>DApy=;h4%Jk6AT!p;BJF`-Nlh_ zA?mqJ0G(u$LHsk((leqAJagBw?b;ylvTxFGBAN=rGNUOFfE@_cumY>B1@-KS2R3GMj} zw5vl}`+jnf-*ybFDExKVCd@9`GOk;u(zUfb_PZ|*mo;hbfjBI`+Vc;v*yPE?4Sga`C` z`8@}84YJt11%dV&1_a1ga*rqp)Xc^@Q$_3sOl0a19TiX<&(V2Fqj@5vc(6?cDFYCy zLjR1tP0e0@TdeSe$;BZ;yujh2TG5~6qa_i3H=TRMl_|Uy+cgUhn3Y^&@`Nsm7-36T zb}|9b^>U>xT*zRkAjrGDPR=0lO0g6bev^I1ze^b7Q0Zfo6zjWs zcpn3f4*|Jc20Zsd_Usu3KR*%kNI<%SLAN%&R`NFQZzh4=dSN6%6Snj~|>`CIrM!8J|n7 zE8FHgG^=sYH!*2fbHrjRPKtf8nwWM*e ztg8l8+RUtFWU}s%eGc1`+8Mb6Ch7Vz@DQaNtmQ_miih#pif`OuSI3=bY}P1Fd?Qrj z#sGMT;=$Znb}%ONYptea@qk4f;(O#{%;5gt%jO;T1oNfqiQ*6$RFZ0?d%)wVT%vhj zeeDWRvyafH#XuI$xAm|8`01OtLb-4;0mOI6b1|oP&3AFf48U|SKx-xG+i?*Kpp?p{ zp5z$;-FP-}*pX{!D?NpEixPm{_Nu$tj6(ZCV^&cdq3nvXwNQqPsoedr|wU4H_|lSA`WAKNQc)=iX9P+&3=>|luw zv`yij52e=6CX>$6h+b3Ky6X2C(S&$QKEjX_ZGS;y?ptEMx{62YIr+k&wO8HH9FS0w z`5sP0XiT9;$W5Jqm{wIx;cE5tk@l)J*!G)f>r(+H4xPrG?dEa}sT>5FL`WCUbBPwk z)Y?>bzaWMxX+c!M{wg^I@ZySxl$cr??xg+e1i*ebM7Y{Y?%IEUat4Oj0tH3VHTGR!?vZRxYmPF=>)eksL&4R-OlF1r*C|!|9Tt8j09!b zkci8rPOSG7Vf5rg1w(&TqX?-H8%CuE#fsGW9mDy1N%hgg0hfgIH{$_X+4!I7S&dh1 z^cWZ|+O6{zUcQd1cb%Ha&YNp72bg54g%|wVRaQ0^hiUUC5YbFc!X2zxKjOI_jTkiE z`PJX^sOAjRNuw=1$TG+A7)FI82OrbaCwgs&T4)Hg?Kl!osIR`9fH1D5V5pM9p;^2A zxSaKm0hpeVa@Cekd~%4(u9VW_Yph3W9ZA$N)dVijkfNNU-_>|Q^VlF2>I-sfsTcw? z>gj_R&q3&fGUjl8mhih(ZnO5IJX}3N47*qCU#7|~K4yAJHC|b&uCN@RC>gD#`T89+ z7(@4$9*lQ_+?uF3YF8@@e}dGKW%Vq%)CS0>YrWyVK^Hk3dnlyfRzWGn$$n-(kplVtu}`*94P|FbDeBnSM_09Ka8S zI#$7E(~Y(?w4OmB2X^=o_g55Y=D4rfv)b>)@y24GpF6->HV%YDN;7WUOru3bDxvij z)o?>_3C*OC(h10ghmPNtW1Wo&Ug++m9b#wco!lxU4dKiJ2Zvz^K4PaXlmOO162P!< z5K0B@6h{{tyh&S_p$i>Q3_)A&nUpNrp7C0MLu@C1V_1IKOT%dTEQ)ae00wEg4`re~ z&Ef?EMx`39zXE#@A+yQONx#gYjfOS=Rw0@l3;ak5RlfB?hBoK{v|?cIbB?jb$mM0p z5C&~9sxLt)V4^#ouQyLqUyfb>Vn2ZX8G2ryeP5wa#$M=$y7bv_npsZ4JyZvafoYcf zumAuEh{WuG1^vQ%V+8+{ur@O-EKPzH*y65ReeR!%h+d;D9LamnnL`R3JyBJ6bla4O zI#Vu%u7dop@Sl-J{?HBD$GZr}px5OvMHd1ghuwH9Ird#t%SrX^(%P_lHdTM{q~H-? z8Z~NjzWdl0BIW&XFTW$S%w$j)$vI)+2X&-+fNc;_{^mU`L#jywKE8Ic@n+|F99u!5 z;_;;(d6Py9IoT%CEq_E|Yd*lNX2k(>o1*REGi){!1`dI->?D4{rL=9*ni!MShf7(&^A5o)UoC|BPA0hTc$9Y)Ufz z{8H9ziNT+h>DnPqR9m#Ysq(n~!wlgJXxSHKm%FT^bcAUJCSVoSf+S_FCO3IdKpxXu zT~>r&)BjbiQ`V(1$c19X33w$1EUq@P^Cs0q=+C)-w=BnK>f);41$6~V^@?V-^pg+C z%oNkH(`(hpO57kI?0lErU7C%20xmo2lVQXzPro>3lC&9jCUDy9qdo*HZ8A?cDJpfI?`Ca1`OMHXr zS2cA`=T9q%fL!=L8b*GB9tN*EV3Ws$g{&TN1!NZ*CC2V{i|p7{V*a&~U` z*Ce-sCSW4)y0>)TEwiVU#H!&7!>xd=(e5@SfNm6=<=-P;FJ9m*vV=yMUdLYq<+xdH zrHC9zU6Bd_bdsYDUh6T#Vyfxsd_JeRH2!8q%pizy$sgGOKMek@r4G3UOOS%;dcVko z$F-+VcJ_hx1|-w$K*0 z^@YosfJZ9N0~NUy)|E`$A0wpWJ@H_%KTp~PgYvWszRk(IN%yJV;TC0YT9cRI$p` zJ-_1z*{5-r3j|3C(?ykCn$l>>Jh}=cTaipm)6v^+&O@d?4z!Z34!{D!@@VKP4Zd)# zrnRl=fc9>U)Ka4i83EZf6_XZwu~21A{kI*{nZY9hP_c@y$)Hk<&gO3W48wE4LmP*R zj<-m#62hZ!I^y3Xj1s}l4`V+m!c-05$#H-<)qnbKtXjfnlJ7s4csVv0UZ(eTD2rG zcA4#&7^2vyh$iPHmI~+w|GWVSq6vYe2hbVfyKDO}aXV#a`ykl-6Z^z_CSm6$4dt-3 zR@ZJaQA2`icJx{knAmb!vi?xp)&+_K;S(%bxt+G_m&n9xWU*PJ>@5QwDy;^T{B0MB zKL~~X#Ct-&^+=H*P7ZZ{V>S~}sY+$97$$_CE>}KjaqPjk8R^YGsbj>VjR-%e$%zwN zvyz4LXeMyat^P8nJJ*Q_ry6LV)KA~wCn(#8ggGx>sB4q{LFiS-53&rSK0WUc@%n7bX=2@a`@!BCjo!U?|1j%RD^&&7CwpWi`|R;mye&Vr z4=I1Z?N#SoyD9jmH^7fZUB%0ae$s%|O5z!GsSq~uKNtu!I85JU?+Ac-$R^E@O9e0wr8)@StGm(_>DMRab=v{%e8OU{aEtOLk8I6Is_9G+&neT z&gVbGOH_h|lu_HE8)Z|q;1(p%*pX4jlZqInAkNREV+^!Z5te(2i4W*B z(O1|Gr7OsuU`Y?R3u0RTT&&wwk&fS>PiVq?t+`GHNbsXC`E;}7h;-3qyEHG7fv}$dp$LO`$CBl<-qH6#JkW-NJsZKs0@I zahnKk8e|&y_i1tT-tY4eu2AdJgL&hhv;YHIu~?X3uI;#MB$>!>pyNW_8Xewvwo2~e z0cJSeHgl8hg$yOBUkAnjlUwZRWnH|8OI_ubwOd)RHfIJsY^@{$;DX3l`l1 zt+%~dj*VtJ?uIgQRfk8fvW~Rw*TOh$3KZe#r{{GA|0}&}fF7DmdV)kXeN^;Ox z`2WQrqO>EVI2!SEW|nollB`Q)=}jK?V>a(m3Kwa{t&Ar1#V7Q288R*P+A45Rt?NwY zY)sdtrm6Mih75Ba|?+eL@UdfC`SM;JdvIpm^V@I_8T|8w;6N8a1uC*CoGyawkj`!P5g{h1OpvcaM zmxwida3&0fZ)kq|ytEKf#@ijN0O={LAv8v6h0FohOzysn%1y%z z?S4hq5(H5oQ8X5osVH~J*AgjnZbSIXZZq~XK0Ez0|M`tV2PpKh^H2$(IRQJ@TWJM+ z;!OdB*N$i;f61*lZ>#CZY!-cODRDAF;DH%BQOqQ5WLo})y$5oj3i1D(ZM-ilL^J#X z{Ah%Qqem?@t$ONlPUWe4X;&+_m%+H#WGrRe={;81zW~{@K6b(3TR4WI4RhieRq~Uo zufBVLoXqGSJ?r$g8?8Y%X;rm5ZdrC#EXi9w7`)W2J{OukJlbn+(jtkEdmu7Vik3MYx9XT1`}RA zK$S%Muslvb=9P<<53|6XxVni%@O1gJGYe6k-JT}qbFPK(Vp?2WR2&Y?B9ui*i$1#F z3B$p!s%4TjmJ$PejAi8{((hAz(x2>X+KM>9c+9^(rf8Qs_n(#C8egsa?Q)zgI+G?C z5cBx>a8ZNlcWFrKXdH#GY&PF_^X9I1Z|)2u!Er2+C)n2t*mYQTMykUC7eUg+6`pny zYEA_Hh!kKq#RP&A4?$0-a7x!K$$-2~fG6@AAp-;7PIE}WNdZqwq@25AzUP=Al7on= zRsYLJz5oe92S4qw`6RtQx5X#^l=@o(f5Qy$0BfsL1{z)?sIbWa#Md`6ubQYmeMmt$ zq`bo`s=*8S`yrUe=(Sr=hqvc+UObKBV$5LPk6MyHRjI*ZAT=50MFsFClkWzHsJhE8 zM7xjyz(J|?LEq+zGbZ4${&`{7FXV@Jo>i|dKWI9H0vK00yMlU7Os}E5eGe|`Apg2w zagJ`1Wg!c_rq_ku{*_SVBP6x1EU=rZM4St;2#4_~lKW^u0OMurm!<{%yCu69N~Yip zoBY04K+2-y<2l$7aG_ThwGnxJcXKfY^=2dmWvQ1veRU7iz#vCi(dt^*^%@T|BUS23 zWk1`J3fPcVlJL_1LEBwf&1|J&B(J#2$o~)&4r&W?EDW49Nij1%5m^itsXZ4#_Q-g< zXR7D7-@;|Oc5vb8OClujNJ#+mGhX_ehOGWzq~Fo)}lD$ zN_AViXQzG1??G3BSj_)6*XK{ei+E;pjmxC`bLazT?(6caiY)w$YFU3e;ZD z*5?Quq#QjSLH($_@P(E5Gps#xEdv}(=F{EGTO9EUlyQ-zfi4>LHG!DNgbM#TX?fl; zmKz9Qo9*kvuWv*h&P=0(mr>1OWDTCXQg0DCzN{Me!L(fetTv3yt7T)mbbz;MjpBb% z0WD)F`Cydz1(Jp9)<(qCOt3|Yf?~sidu~Haz4vQgl}IYCCc98%ey}zx)p%skgSZOOZA~;F$uPu~KW45`&A<CIbezi2lz;Vg;`NYD>=c1WLa#VLBQW!2~Y|eZxq<$|-r93`(<>09C@u*$+lC zo_4wEKBtgU*mp{k7!r*&L z17O~4E!UjY6S8&~YDw9u%jWY-W|M6LTx)E10V6H$EB(~ zxB7H*&OxLZd{kOW(t-1giaq7!wKFZa9cf%Z#1l)g7c9p>H{ zM;A{pRbmn!SH=u{b&*39Y-n{Qu?Z>fa{L2nPW<|y7&VIsBGvSS)Q zp-h^)mCDha2ztZT0|%?A$y94a@JyhSx#W*k?(3PO)+t_cZL=R&U|+yRy1AOqJ3Amw`3efiSs2jH_JXL)ArcEQ5&G zk&VTB_^i4)W%HtQExV(0R${0zS`zFj^A7x}k&si_OK8}aFZqFD+!1Q?ktcMlV`o|8 z?R}gQ`6Y*>VZtx-76J_$Y?-9Rfz5}rPXVdr@i@zimA?392S^QSJxjQM>m?9+tSwhk7A+UVXeP({*uuP~?ob+3zAr9T`otDkQ z@l4O!1UOmmk@@I(;eat@at1R=+Djks_wO*bNhJXJsEcoatChLD#`_jd3=&O|!L1(u zuG#GJL|%T93PIj;|9!b}rpVBn7mPYXO&qs!p z&@f4@IM)R?KK#_JJy0?Yux28aEqLzfh`vcGfD@;uU`^=kRQaf^Sd*nBpn7lMBWr?h zup;gyc>VfpsXStIs`ZOa4Eh*>NJNywo5P<%#EI;6#4=PDuSCVi)d!;7>&?tLloDr1 zRB(HAjoLr7o=Ue8#C5$lCc?9ub2@g5}hay80>sAr&2}f>8 z)?_HPH}(zdIt1WN%+@Zyoih-mTPh7iXY-0@==W?xLNln2VS*iB>v9!;O%dNoi4l&Po0j(_UDYJ(WQCeoXIYXW?Ak zI?|~t2fv^7s4R1@yUTl@!efN9KU5TSG8WC(KER`@>!C@KI`EqvP}dyqvobQ0Y#S2d z1}~iFHx}#1NzUOX$T~A);{XPYxdZNb{*EnDIwE2c5^grEZ{W$a8;yiKH1Je(Y-uNj zzbSseBemL{^%OBjGF^Pf)Pu`b8dP&o%|*3n_l}YygX43jwf$+g@=#1-z*2@9%n)-u zz?w6byOdLOyZP2d1d11DKEsWKrgn661xElSD8t#6F1k|hbFy9JY^K?8#g0QqCZ01G8ljB2#-sR^?yd zWpc?C9kQq#Z)5VYx<9m+cEfu!+)P(Nh8P1ocCG@@ChFw?02p-Eo*D(19t$iA1q&H4 z4pU?HR5otvKe01$(ztupki5m_b2@7fELcfukbB}Vw}Ft+MRS+yCN z=5BsoV^y!F1f;2hGP}UzLAXg7*N?gTIOEQfAG?ZMFjLU#?CyD$wY=ktHNC0$G!CcW zKv4uEI#p@$`2@i1k}$UeDkF8M(+wxbqEmh)Eq! z^a3_Fg>Z$HlE*|U{+STy?LMiy+~Biv_*gp4>VnPdJn*G=*O9UDE02g@-PKO0G0tYD zrfb#>Lbx=|S?0Puv+y|3Y1jdv2DO6#(cR^#no%*6i#3DA2<~N-iWo(4VS$?3G2z#3 zWv!Z#|BhW57)mNIFrPeK0gbcIt&|&Ygw9~(A_QT*{FExj9Az>`7oCZNMkf7+v`EOJziv0xapQKk`w0UZy;`VTpS0Aw=bVC2Z4SU7a^lvAP!0 z{ey5HR&pz*3|rN8iWZ!Ze@Ywc;3`BW#WSlJEM-EGQOE7Ph$St^6y1EpdxRI;R@xPa zcnhAVd8$_k9%r0o`(^dM~T5{fYn$ot5nvvSzfDDTs?Ylcs`^6FNyAN#Ra`Ei{Ow*0zZQ zq)NGw?MXqQG3Z19+_Z}eCHv`*83px7L@tO2rDxx|?bd`P7!B)3KV}M7890x`cnQx| z&+@<+Ls8LvHsrs6czv;)Mx_$jzbr3ef%!qQ!7Mqno();;*e0;-shi=OXo;crp;7m$ zA>P7{^K4_4Y9r2SNkRfr-dpG19LF99s!8G9l{Y?;L&GB1=>eA}WMXW>j? z;hbXEPvYKuD$=A4h4f_x00J^CKr{bTDoGus4o-Po_WZc<@YeLKjK3S`LM}STfCMeq z$fwuKaA7Hyu#fTEn)m}SA zHn00QaH1J}JJbTe%e8&9Y`TQFuszaX8*E`ezq(27$&F;yk8W4`Ijd&qMptralDE%o zTs42%g8XJ4Tz5$nsnk=^o}w~8B_c4e13%Ry=?o0KCddt@{c)UE)%FpJO+@~B@%+?* z$KlAqiQ3yR*iw%JN__vaEo;Ww-`7Wo&xDAMh4In_!+Jnf$<$sA zBJ@UYQ0VtAXz>jQN{(kAy14GZQKo=0ZvYMSG~Eq`MeOgu&R;b~Xa!^w2>U?XNgy*X z_V54$BAap~X?MH}s9?sD)f71|oe8d{5Jml#QvZJSk9s*Vnh`(A%ink|@x;`Mv}W7F zF5>8)e1lxOWU-;{T{8y{Jvb&SP~*5)=6t3lyEfQR+nm@?MX$H9r411`o>Sv93@9dvYf%K#OyOM{!?9EZeI~jbY5I@e|(7#;A7FNNi)lxA-zV>N$kg{Xle;N4e(Bglk!&E z=jI1Iqe$=R16$F<_KH6J16tFfQjk}XQ{{uecSCGA?+TLputw~eF~FO6fgpC>gMX1X ztpIjsGKsQ)qDX4NDxG?Un0$tzfTfk4dcPfeNZTlv;nHop4Sa8kf|!WsL*-yz9@AiT z`L#nVt$zot!uj-u_ZDeLQbr(8%FeSJjYuc#^UGHb3lR@B6#KASaV)HGPyf;-@Bev? zJrv^UqZgm-;(&|M=s~Kd+&`K2te;PWdwKkOnL}XJw7dTXV9&L|q~HOGo29U3v}b+A zB5g4Z{)9AGMv_tMT0TEYEhBZ7d{^(e1WAt)I`7KJt%UZcN|E=gt@T4p+P$|2tqMB^ z2vMhyQ5XadqAr6HyTQeCkz-^t-0E+(8F>UWyn-@3%qYdfPkNn!+o<(pdqVX}i3AK| zn&|E23KlTRe8)1Nogvu@FI7@C-05F3o3>t?1Y-5%Pssi~J)a#hs_!+O(4S1bui<6_ z1%+Q9wm1@GV*Nk=?QvHFxP^RpeISa$96-O?L=2(W52$293i2e#VJg)*rOK8!gzKlxr zIH~t-ci<9*>jZ!$0b%b%XbAi~Ha;C#cY3&PHIH`Fx!r+%|I`!N;wTm@-!F#myt1zw zP@2%PQzv>+T2E_uY2RNmaHsrr&zX+;3oXMXfm}Hv18K>CsKxAOHUX7g)UCV`o_!-; z`=V){Q>@~+15?Sc-_ZU^||@2?1B5}U|SqX9?ms1du7|?%Q#FiN1TMB6uxnOvcAQ-X4-49 zQw!ykT~@%fyZN#dtjM3m|B5ko135uSV_T*P=s;-;f}`ZTSEsUG3BN<{Kj1Bze6xaO zwFkc7kv|j@Vr2Z#LjyLhNrC~{QkL~6=z^sG=^kA^HomrYa#yl%4h7x-#Snn+CyeyG z!=>9AI%_R%zK{Nu;U81bUQg0@S~UawNt{#Qf3i~^{`ktC++D){?hu2dG#cD$f?*lG z(V2HzfJQSS)d)b6b;7t}T0@q9%e+gUAV0o@2di08d1Ruxq00*=Q@5*pd5T5A6o`}X z&V9{^wq}|1ze#d>od)uk1Z6V$)~KtA-RLZqThEa8o30LvHqJ7mG>Q5R|Lse z@?s>6rFqK4v+Nw;lhxs%!7R5+1~^aVw(`3I4-@Rcuy6Y&diqXT+G`@-Vq1@PiugR> z?-`5eXw$038;;4NtV}a{I#;XJry|=CI`rlg4CQm{`5%i=N)= z8&`%%s3Xl5FC7xidvI-RPwIwhkLYc%uZ{ej|m%IunuJ8pleyMnD{<*NyxfzX^qk}SvicF< z@Vqud=3F-5@6mR13F}pvl0)-P2*~w!SFBgOyuu|w3K8DZWTIzhNeZ>~9NP?~Rf86* zMfo41;*)Voe8a{=m33EHF3M&PZzkR-3BZ0e z7V@BgM_b%`ve+Vj6=lP0gl6)-B7T6O8)sj|OWW9-j0>y``F_%w5(1hDSvshwTPzEM z_0y}TtLO0oKtI(g-n}cewr2!;3_z=}btTu2Dacw7#%h|sJsPh2&eb}yh`|Efj>*GE z6vdPYt_=3C8y0kTaYe^CO~+knH#Qh=Nevht)Gg6*wIDB~*l!Gw2wKLTb|$(@uS)ew zu1|Lfb6nB~T=VP7%RXt_SZO>O*27&8*>e#Q_im?3(}xwl+8}>$UX@2CXbqvF0#8kU z8y7#=TOpLd()YKSJ`kOHHuM)34scpzE6j8QSMA0{%C7XFNaKl+MU**}8V5Q z7GeGL7x5r%G%{P+Mcqn^X98x2zo)gIWOurdhf(<;D>6@zfB2d3z zFlVU#NGSIIB*X!rxgh9@W{s{kXJ?%qJ)uj&J&JzIM-ndCBo;0%m1);QHR|-7&@@Ri zrY_}xEMoLxje_03kH=O@01V{yVA#l))yzXo=BPg|Fh;x#vF8*(IcXV)8?Y-Vdt!I1 z6vWO#3ERhv{(cJ6v7Ffo5nbPD{vuuJi*!*sTxV#s=4!`;F)LUXF+@J<*Lzyz?<={n z6FsKy%7Zsmaqh3c+iN zrd~k6rws}nVUaGfK7WC9s$NjIk)q%A3uzR6Q*txDUOrxOEps1(OONUpj4YW5sNqyp z$tLPtS#W8VIbC@td0u8kuWq}D9T_DKlKvVHZ)ABol}#Du~BfHaoA9&~kN zTYAJTkdD=L@hWocrY7-iZX$doER9{%KG!^CB@bK0n5-)c^4+T?oKwapF8g59G>?uv z1uIUJ|LqHP_Qab;_~u3O&SCCad3{?t^U7nBCvUrGlJT%M`%cvg!K}QvEM^HCpcRdP zG^3aq*DB4&xuIhoKrNj4(KLoJE|#1m2E|Y+%XF2rgA4OZ4wMnMyMzzmw|8=}s2Z^W z#P3$BptMQ z=9`H}*#hB~y@=>0O$5@BmQV<3xfNkFHNjS)|AP%sH}b999}=w1BI$~k|2seETxYQ{ ze|PME2QjF^w8EmJjueuBlUkFiWpSC|{m-AHb!oV@=@9_=8>7LlIv@?wgj}P*C!*5@ z9p15s4f2u)fY)CEsK`TVCaarcU659P`67 zj)hP{_~Nn@#b@%9x9CYGWfu@)zX-8yyqJ$18CghH9Z7puF2v^kCr4g*1B%DEdRUGJ zRz=4aQ+3)syA*;01@WB8Pv;K{2ig2l1;Kp%_t^S(%v_YFmNh*L=;KvHNg_3V?fc5i z!;jtc2@@D6d(mX8cvW8+=d=uZXx}m8ovC|#2xtY1!CTS;PlI$W+VQ6RVoc9v6A#PV zc!6Da!w5*71HEbP#AG<=N;QHXa)b(x%*E!UXx<&0M|cgAp3-fL2GYRo<{jsKnt{E* zhz43LH8MdhQU{Jm8i zdLX#S=}guWe|Y4uTuCwtP^;i}E2Y9=?85jevwl5%fwo6t^Qu~Y=XOw8NcHDUNR~@7 zOS9I^;6GFn`GB2@Qw`B7!sM%DiyGj9X-PbgrLws(7ODUAcq52k0}qaRmm%yA`@NwD zQpmKM_u_i-3JIL*Q7M2RdC=uWzjhyUcni4iGiD2zk3ukoMek!42SXexlcqsd;uv4; z9U=K^XuyH_8sa9btNifqbVz3FYdIsm(5qDm`J(P7n7s%CX$6$=K+K%^2*9j6JxU(j zQ8((H8OhU=Pdr5vL!1E}9OC21uj29y_1hr^qu&WHXPXCklCHxo3&xq!Oq*6TIbHhb zB1muO!0$OUJa$&a^vyL&`cO$ z6^(_Cy`>HIsnx%vQ`MWHhv%hyqfJq!RlB)gY-rBILfY}LWQbJ%MN>YpPmk? zt0@xac$1+K+f6MXn2N1DJei|qp???zj>X`FQ_mV$RXd9_1jzHvY+uiK7uuDUZl71^%z93 z-#69`O_SbV_EH`%ZA6;Fn{hDAVCEDz6D>x)m`>6wc;pTM%Jlno=*lhC9rp#i-2uSd zv$)xS`wT=tZr^6=hZMVZydaS2l-(NmhC5T1sFGf1=0C=_+@=4rRAt$_$kWPSnp(b< zZl*B^gUY#U!pam*@D1yH*Yv}h@Fs!w+|&qYQS+Sd@tJY-h=%j2_~&m~K;sawDhBL` z>!ATbvdi0V+y#)4u|yM^P2{W~$adBk(TE6RTq6R_7T%rzdTy;@l-3PF|C)MFvm;~^q!ByWJN42H0K|U2#!NH)K!wB0|HvV z>Xm0=0l=OdFua=NDIpvFtW2v}<(SINu154xjw+4wrLa11ZneD@I9eZim-r{5KUuUL zBUoJVqLfn$cMX65-Zi<_p^m_WDwQ@4PM?B*B<(C^6^m*fJr9Ls@1TLl9*^>2z8N@Oo{d$U+NAaUDs&~_%p;p;#U_MSqj4lk0Ld7Y6lvYfUcCNvy28`v z#;ycL*s+e)Rua)Q?!aiJw~DO?!Gpb&eSY?WYuvowPbW-Ball=uVm6U^A;r7wChIXb z{_-~FFxUB6*iVx=^IcLqHBA0Dxt~@Bjzay%%ea*Nq2rxQLupL3*pAgHJIIaKjVXv+ z9c4pU;=6-6agN1ig@m5MR6E!+DO^I@E4`xwqO=QOC?J@jbUrK&z4L`O=+e#^_A z6rn2EgPdLO9jToig@Ym}feg2&fnJ@Kh6gZ{>QGQ*7p%*%SFU)pzuhmOj$Zx(wfO!w zb!4z(?P*_b+CsgN01dhgvRmt~o-6GMs6dgU(}yXo=#u8cu1B0C?^2@T^A`={?dcamjT~aVZo`wL!m3u zL|z;T48mkUEtj{(yJY9#*AfM6x7I~)t|@5cHYxUTSSvytra_3lZy?DvRGNgvL8(rB z5n$GW*_+4ky}Yh~-NRPmQZgm&PYFVF;)l^}po9aU-93#z>USq74khWQsogU7omuX) z$xbiYYxngco$e-0`MfEvw4qgPs@dy{c{dGiMhT81VljZ|*D>@uQ%L@WBh7Dy2-+@i zzE+l`tGs0nl@qpHU8|PWy*l@mGF)z(lN9OwGxJ1RtZP_|rjZv96V;7A_)P1tg*9<_ zxy6+=c(;QUla;}LFk&d(Z~WW-J<}z3Q(Lz6^r%(BVJV-5L@K9f`xfeNoUxf9lK*L~ zzUQ-;8**`8uvAl)EB3F{*#Oc6QZj|OGuoHbL9lUSLEmJ-a@Wjd-}06U7Sk>sJpAFeD;qA zAT)3SwX{+&Df1S#9{Og##`l<|MAGEzmUyC^)Fy|4Ci-A0&w_}Hemt=`^(EQmzB8eG zO)!8y@KAk(JHBjh^kwn?_mj&!Z;M`oZEL|+!k=G0Ip+3?Pf>kGyF8n+OE+Axpes>$ z;n7JYR+I18cUl>UkC{ggxuihGzSplg499Ym zrlmz!es9{waG>FP1c@^Rc-(3$HFBm`w1V@oKieIi^#)M?Gi)$`u9tP;H(PwCRjCPN zB0(aV0(XOVq7Z!ik?CE`KC9-GQw{!NlLpIxY%f1_6|AcV*9nVIO7@f+N`!uC1CrVz zk(&Q0+w2CuIY2puNPo?Tbrelh^wSO2b_(w&fE@|ouBqc_l2UU!;wMP>aRZy>$Cl|H z$XIDQs8`M2Hr_iey+lbmS9$)a@D3`hGKFk$l+~0f7djrM{r;Nm(|oXrpSmM^FwzeH zZ-1_FHadEm1j{8<=f(#>jbsOhDrXS@?O#BJ=to}xc{gi8C($!lQ8*EU2}VY$((vP}(W<^Y-F+<4!?`Y&fc?afQBqzyowV1WP03S(rFf*%1kA9} zuRv=G6*yl!t}hB|h_=GIdd;4hDIV-I;5~-s)l86ZNX1xD0-k^tH8Xn3#f15$F>-rw zkd+EuY;DAQ;#ol4?3Iks++>Yt(zqffc6`ysM%J@|0q~q6lFg?;o`p=Qlgcq-i zqO&M=1d?NZoQq9qbgNOa8q-^)+y>2; zUk{A(m3r(KY5fWXf&CmamM?u%r+eq*SeAbnUk^Oqx?X|v{{7!FlL48^qXODC%baZ* zBVN=m*1Cro_%)bNJlw~SVikRfSy_gv&FHrqXWf)qU{~yOHODcI3*{$&ZhHkNd{lzB zGAPUmy6b3YBdUdFE0yG8l60CZDPljEK2{dwcczpX>lon6{&PacX1(YW5IXhHZzG6d)lFB68!wNO0X z5A$*1^R`}@{W55Iq}VCH5D^vFRNbJ6Zo;=CySihD6bt6d!Qyp8hmrMZYY9zBg%y(0 z)SMEj`AFobcyp%{YfYZd2-q-`{3dPNq@wnIMw5xv&{TuvH6lyW)O;6SwaSsh1Q6ya z|0(jFV&iJch-;Z0**%157nYYIPzuyqt%I!t*^^rvFVoS-~+P6T-F_m=ZC! zDj!CmQ7~i-9zY(**ppaQZRqx7Wl|+?Z_ywZ_dl_s41MKY0{jY}N>O`=xKz*HV@%2l zM~9&n*!5xIhuvF!Cc3@g%&8;X&(ZtOJ#aarqjG%$F9;StiFs{SKEUR5WsIPwVUGk#*sn^uae7!M;An-^F^>Yl89x(Ln%;q5jDUzy5-YuePX zBc7BXg4r=qX(d5uN1Zd3i&6c*M&;zBx1i}HM_bDr2au3XLTY5fZz=SZTSJcbwNrvU z{kYBA9_40Bu&bfF?aR$r%y3^=MVex--*IiT<$t=;A zEY(m|d}g;N&eLF4jUJK=}m zAq=L}1Y|Vs?Tbx(7U?BVi~zf`6HQ18sv*-D$`zBov|pcTJ}TR-R(Is$h0N^8CZ_pV zL_@~IfI_<3lAWHF2AT_eRtJbti>|oy>ub(2wzs0F!6HNhQo`yPPA_2MfHah)%5_yZVIUMv81o z6GA%ur8mfzS2MM&CzZ@>9^e{m+OlN#lRk>lywrYpq z)-5+$;p8m=W~r*T-u7}T(=^9#J_^~_oe<&MFMb;6$T6OTE4!0>UCsk}xzTWB7Rp^# z0W52q{P#zboOJspknBvf>ms`v=qytg)5Neh zx^b6#rVTmB1i-zYU4y78KL+@xY84HZ@)GWsTrU!dfz6YVwd_uvc-7N=eSV(R;9x5! zAl+06@R6^6_P+1+=n?GRpWfw&)CN?-6`Veb&ksu6eCs4L-TLO!aRK|&5Enx{;w#t3 zoD_%C1lz;D*wpe7=badouFc9!!OkEb1mf3f&kp}Q@l&lz=Okd#{t2erlF)w0WzA9J zrZ??O5P|@hP*L3Q_`BXni3e?NP`xT3+BrtN3mu!L(~y=7IT<$<)`fDi98yUDOtxRr z7i1?Yc-zHcx{z4FhkgWi&9OAt#hR_hy_nawswVxfCHm6U=?9%K5KJ4HN{(*>kszf* z!@it-Y*yuFKmHt8-VM6P$LJ3c@Ag0c-tHjt14o>C{r-RuU#-J6zltFCuEfB)-_5Bx zN;R(09GI<0B5&xJ-X%)%*`Z+X2DMzANBVVrTCZ)!MToRWR@Hn!1Tb`0cE+bnAId)lv4oVyU%!}rr%^;tv6#=Y zj(N8B@ap!sj;s1*kZaY}W0hd8sSo>7=#2v-OU#SkBl6JHUit){VgOwnK$Wa!Qk(3% z1vRq{$%?d5n}VXt^r|bfdxxp0T%+QPGY2k02dl~0P=ZwFc(H1PZmb=P-6P=qgGf&C z(mbgnG~;WibHL|C0e2jQR1W!Y1@$dX*zrKxhC%mf9?vRmz zO%l_i2YYvbr%Swx%!jQ1+W&R^f$?|e>9>xFJRzz=mxATZ=|$`(ble~qv(74rh+EIS z-c1&uqffm+?_WV;&mM4suh6=l!~buo$hNsMh(30}_D>~~4c5sq1|KbW?PqS-;c%)DoxQl0hxS29ffE1qU2+%yU&<- zU+7)UmzQWBb-81V670@ns3djbi_?5NBA19{sF|SnFqk|OubIcc4;BnIGoNQ?7+wV?8)U1b*TL2oEX!4rx$KVod4qZCeiRh1X< z_HMF&bzw&*-p{d1cwY41TILgpa0eEMH7%{0#_s)gYQIX-pD z=HDaK?Qm=H_syDC*gFG6+QJx`lOi@?drPhSL~&sfcnG2zZPteQ_WK-7GUOk=Ya-bI zw4Xfx&D$txoB!LgU+EKqr@lZm`I0~mNQpevAiObbpEg3VokGDl79#VhJUeXkI`$pi z*@i^fh&{R`E$W~^?bGWPIrWz_v*V&II`9%|fucX=HSJroDpS7%p_DF@fUF-RRfyk@ zRV~b*&&oS1H_QYVnYiaV=igbuDXF*RG|s(W}uM008g=CXm18elUDVHs}2e!lla>jbM$-}#OS9&POz#oQG(eLiGtPn z4oGLO4xm18OLWn?rxNNB%fy`?V^?aeS;nW>tY6?uY+!xSmVl`rHv^lA%K-TFKBc-EG`IHQ`$y>%41no-G5>>alFK40SAM)g*1`ioVui#+r*YRaXj8wxXp@KhVzh5CpF@z$kz51i zOz8Jkah76x?;v%R&cx$0xrb`|3^I2A2LIu|B-zjg`UT}n)(|D$2oGM7L@JpquxHuw zjs;8{;bBPOF)$VV=cr2!ex0m?sTAGy&1H#aQ4c$x@i->@vR_l0$?~Qk9Q%&nI0Ncr zL*Hyhlq1VtcIg4gE%sNa+cCL^Al!{>uXn}Z8=+Zy7sxzDO_?PvVPN`{=K42l6TGRn z#dbp!W%0b%8*+PY(#^##l`sSc2haJZ)AvqHokcL+<~oVnuJTcySS^J9C1`tf-@e|v zQdKMZfGw9~5$(2=Wcx{TvOB_)3tILqG)iJFbC127%Pw>WNDd=~WWz7%^$XtS@=ok= z>`kj;OcYMFS(}k26D9m3b+ARen}Hlzo5U-s0ZDDOPMzceFF}O1-bf(D{dH!c0mt>J z$?mRB%RQ<`CuzSJsi7(nj&1=%^$yxdn=vPM!w&_c&%9kKiesD|CqLE`j}TV{L_#kxf(vk#b!F>;ddD8 zuG9?I4Fl_1+T9pZU+8NUoVP8|chtYAAiGq@=kh8t`exr-vgUhRGx}}Op*S!6s;x=C ze}e0kBmaFwwPex1&}C3Jj(-SzUg{pDe&pO&*3VKYTl^EH0qXpvXuC=Jvw7xV4phj6 zj|mj?cVNQt{}hYID9FzDT2BGA&ZOMm&ALTZjSEf;Htujf9rVxzgRW71 zRXDD@b|>BDbyTl_#{?K9?Yz$@1Wkd4s=3EY%b?4wl{rHf%3#MWgg*N-!@zJ-o6spy zo63B8m{)cTf`kDF(e&gX$}c(JK8ZRClFgU7*8tPln%K<^fc;WEdS@gRP)B>#yP_a5 z)G~`)sH^nnJ4Q;^wezSb8u&8jfsg*#sm$diGvK8E?77QAF|)}^F{B5}n+UXm5Enp$ zsEBQA-m7Vfy*!5n%^&i$ITC%b^LuO_FF5oNj$bl5Us7AaGX`6lXpF&8j@*E}Ua+}B z<+&Pbzpq5$ZZECD>=czz_}KNfxijU+D9( zl%1=W1N1WgQXucKh7}GUJW6#kLv|xkaH;OwhdUsxK2`p;m(GL)0J?u=gKn(gjdt|M z4FtDjjhd+4!u0#Zu*@wkBpvE7v39AFYeE*YQk}gq__=wzBV3cw_GBcdBzhL)oDQcY zRg>;{Zgn<}@)cVmpKfQ|YtWgfrwf*OYx>278S8tV_|V1tyU=kO-g9tU^69jH*Wq^0 zC{cd+?Fm<|ujx7L3WHbrakakY|I580o)2Ub`)l|&R|;M!%3)%#ps-cW1LB^=DI_;9 za>|meNlTx$(TuIeh?{&D_tj});8g8NPF#2e>=9060(Fy> rhat>C-!41{V%2YqSHv@(xVOO((hdLs00000000000000000000@I$k2 literal 0 HcmV?d00001 diff --git a/examples/tree_of_thoughts/complicated_flow.ipynb b/examples/tree_of_thoughts/notebooks/complicated_flow.ipynb similarity index 76% rename from examples/tree_of_thoughts/complicated_flow.ipynb rename to examples/tree_of_thoughts/notebooks/complicated_flow.ipynb index 2c9424226..75dba2e8f 100644 --- a/examples/tree_of_thoughts/complicated_flow.ipynb +++ b/examples/tree_of_thoughts/notebooks/complicated_flow.ipynb @@ -18,19 +18,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "![FLOW Diagrm](figs/mermaid-diagram-2024-04-19-021456.png)" + "![FLOW Diagrm](../figs/mermaid-diagram-2024-04-19-021456.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's first specify the model configuration" + "Let's begin by specifying the model configuration and examining how's the draft of a single agent." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -38,38 +38,34 @@ " \"config_name\": \"gpt-3.5-turbo\",\n", " \"model_type\": \"openai_chat\",\n", " \"model_name\": \"gpt-3.5-turbo\",\n", - " \"api_key\": \"YOUR_API_KEY\",\n", + " \"api_key\": \"\",\n", + " \"organizations\": \"\",\n", " \"generate_args\": {\n", " \"temperature\": 0.5\n", " }}" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's at first try can a single agent sovle this?" - ] - }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Beneath the sky of endless blue,\n", - "The ocean's waves, a timeless view.\n", - "Whispers of the tide's sweet song,\n", - "Echoing where the seabirds long.\n", - "Majestic depths, a mystery untold,\n", - "Where secrets lie in the waters cold.\n", - "Sands of time, shifting with the flow,\n", - "In the ocean's embrace, all hearts aglow.\n", + "In the vast expanse where sky meets sea,\n", + "Whispers of waves sing a melodic plea.\n", + "Salt-kissed air dances with seagulls in flight,\n", + "As the sun dips below the horizon's light.\n", + "Majestic depths hold secrets untold,\n", + "Where mysteries lie in the ocean's hold.\n", + "Turquoise waters beckon, a siren's call,\n", + "A timeless beauty captivating all.\n", + "The ocean's embrace, a tranquil repose,\n", + "Where the heart finds solace and the spirit glows.\n", "\n", - "Critics: The poem is beautifully written and captures the essence of the ocean well. To improve, you could consider incorporating more sensory details to evoke a stronger emotional response in the reader. Also, try to vary the rhyme scheme and meter to create a more dynamic flow in the poem.\n" + "\n" ] } ], @@ -97,7 +93,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can prompt the critic to have some preference." + "Looks o let's here from the critic agent" ] }, { @@ -140,7 +136,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The critic is being severe indeed. Let's construct the workflow." + "The critic agent is really being severe indeed.To implement the revision-imporve feedbackloop, we can certainly use some thing like " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "from agentscope.pipelines.functional import sequentialpipeline\n", + "MAX_RETRIES = 2\n", + "for _ in range(MAX_RETRIES):\n", + " workflow = sequentialpipeline(agent, critic)\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, we adopt a different approach, which treats the workflow as a graph, as shown in the initial figure of the example. In this approach, each node represents an agent, and every edge represents a function that parses the output of one agent and links it to the next (see *\\code\\workflow.py*). Based on the simple and intuitive design of AgentScope, you can certainly build complicated systems in the way you pref." ] }, { @@ -149,8 +165,6 @@ "metadata": {}, "outputs": [], "source": [ - "from ast import parse\n", - "import json\n", "from workflow import SequentialWorkFlow\n", "critic_revision_workflow = SequentialWorkFlow()\n", "critic_revision_workflow.register_contexts({'max_retries': 1, \n", @@ -228,6 +242,13 @@ "critic_revision_workflow(msg)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see how the draft get improved " + ] + }, { "cell_type": "code", "execution_count": 12, @@ -283,7 +304,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Not bad. Now, let's make it parallel." + "Not bad. I personally do prefer the second version and some modifications are impressive \n", + "\n", + "| Original | Improved |\n", + "|--------------------------------------|---------------------------------------|\n", + "| The ocean dances in shades of hue | The ocean's song, a hypnotic dance |\n", + "| Whispers of waves in rhythmic motion | Whispers of waves, a soothing lullaby |\n", + "| A symphony of nature's devotion. | As sunlight dances on waves high. |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also prompt the critic to adopt different poetic styles, such as those of Emily Dickinson, Robert Frost, or William Shakespeare. This way, the generated drafts will exhibit varying styles, allowing us to ultimately select the one we prefer.\" In fact you can also let these agents have different models, different prompts, different arguments, sounds like a poem competition among agents. " ] }, { @@ -325,6 +359,13 @@ " workflows.append(critic_revision_workflow)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we want execute these three workflows in parallel and use another agent to select the best draft." + ] + }, { "cell_type": "code", "execution_count": 39, @@ -401,91 +442,6 @@ "source": [ "---" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "24 Game Puzzles are downloaded from https://github.com/princeton-nlp/tree-of-thought-llm/blob/master/src/tot/data/24/24.csv" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "EOF while scanning triple-quoted string literal (1652590289.py, line 10)", - "output_type": "error", - "traceback": [ - "\u001b[1;36m Cell \u001b[1;32mIn[92], line 10\u001b[1;36m\u001b[0m\n\u001b[1;33m EVALUATOR_SYS_PROMPT = \"\"\"\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m EOF while scanning triple-quoted string literal\n" - ] - } - ], - "source": [ - "QUESTION_PROMPT = \"\"\"\n", - " Given an input of 4 numbers\n", - " you need to use these 4 numbers and basic arithmetic operations (+-*/) to obtain 24 in 1 equation\n", - " Input numbers is: '3 5 7 3'.\n", - "\"\"\"\n", - "\n", - "THINKER_SYS_PROMPT = \"\"\"\n", - " You're an TreeofThoughts, an superintelligent AI model devoted to helping Humans by any means necessary. \n", - " You're purpose is to generate a series of solutions to comply with the user's instructions, you must generate solutions on the basis of determining the most reliable solution in the shortest amount of time, while taking rejected solutions into account and learning from them.\n", - " Considering the following question: \n", - " {QUESTION_PROMPT} \n", - " Thinking Step by Steps to give your choice on possible next step to solve the problem.\n", - " For example, if input is 2 8 8 14, possible next stepes could be: \n", - " 2 + 8 = 10 (left: 8 10 14)\n", - " 8 / 2 = 4 (left: 4 8 14)\n", - " 14 + 2 = 16 (left: 8 8 16)\n", - " 2 * 8 = 16 (left: 8 14 16)\n", - " 8 - 2 = 6 (left: 6 8 14)\n", - " 14 - 8 = 6 (left: 2 6 8)\n", - " 14 / 2 = 7 (left: 7 8 8)\n", - " 14 - 2 = 12 (left: 8 8 12)\n", - " Response in the following format that can be loaded by python json.loads()\n", - " {\n", - " \"state\": \n", - " \"thought\": \"thought\",\n", - " }\n", - " \"\"\" \n", - " \n", - "EVALUATOR_SYS_PROMPT = \"\"\" \n", - " Consider the following question: {QUESTION_PROMPT}.\n", - " To achieve the goal, pessimistically value the context of the past solutions and more importantly the latest generated solution you had AS A FLOAT BETWEEN 0 AND 1\\n.\n", - " If the solutions is not directly concretely making fast progress in achieving the goal, give it a lower score.\n", - " Evaluate all solutions AS A FLOAT BETWEEN 0 and 1:\\n, DO NOT RETURN ANYTHING ELSE\n", - "\"\"\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": {}, - "outputs": [], - "source": [ - "from agentscope.agents import DictDialogAgent\n", - "thinker_agents = [\n", - " DictDialogAgent(\n", - " name=\"thinker\",\n", - " model_config_name=\"gpt-3.5-turbo\",\n", - " sys_prompt=SYS_PROMPT,\n", - " ),\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class TreeofThoughtsWorkFlow(WorkflowBase):\n", - " \n", - " " - ] } ], "metadata": { diff --git a/examples/tree_of_thoughts/kinetic_energy.md b/examples/tree_of_thoughts/notebooks/kinetic_energy.md similarity index 100% rename from examples/tree_of_thoughts/kinetic_energy.md rename to examples/tree_of_thoughts/notebooks/kinetic_energy.md diff --git a/examples/tree_of_thoughts/reAct_example.ipynb b/examples/tree_of_thoughts/notebooks/reAct_example.ipynb similarity index 94% rename from examples/tree_of_thoughts/reAct_example.ipynb rename to examples/tree_of_thoughts/notebooks/reAct_example.ipynb index 109595cd1..5dcb139dd 100644 --- a/examples/tree_of_thoughts/reAct_example.ipynb +++ b/examples/tree_of_thoughts/notebooks/reAct_example.ipynb @@ -12,10 +12,9 @@ "metadata": {}, "source": [ "In this example, we create a *reactAgent* to perform a more complex task: writing a markdown solution for a simple physics problem. To solve the problem, the agent needs to:\n", - "\n", - "Search the internet to obtain the exact values of the required results.\n", - "Generate the solution to the problem.\n", - "Write the solution to a file in markdown format" + "- Search the internet to obtain the exact values of the required results.\n", + "- Generate the solution to the problem.\n", + "- Write the solution to a file in markdown format" ] }, { @@ -162,7 +161,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Okay, let's test whether the agent can effectively search the web to get the correct results. " + "Note how AgentScope automatically instructs the agent to utilize the provided tool in initial prompt. We can test the agent's capability to search online and obtain accurate results by asking them: 'Who has more average points per game during their career, LeBron James or Stephen Curry?'\"" ] }, { @@ -267,7 +266,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Great, let's proceed to solve the physics problem. To enable the agent write file on your machine, you can write you own service following the protocal:" + "Great, the statistics are correct. let's proceed to enable the agent write file on your machine, you can write you own service following the protocal:" ] }, { @@ -309,15 +308,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The question is \n", - "> What is the kinetic energy of LeBron Jamees if he were running at the same speed Usain Bolt\"achieved when setting the 100m world record? Write me the full reasoning and solution in Markdown format.\"" + "Note that it's important to provide clear documentation that explains your code, allowing the agent to understand how to effectively utilize your tool.\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's write our initial prompt" + "The ultimate question is \n", + "> What is the kinetic energy of LeBron Jamees if he were running at the same speed Usain Bolt\"achieved when setting the 100m world record? Write me the full reasoning and solution in Markdown format.\"" ] }, { @@ -336,7 +335,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "and create an ReAct Agent" + "we create an ReAct Agent and power it with necessary tools" ] }, { @@ -396,7 +395,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Good it seems that the agent successfuly sovle the problem and output it as file *'kinetic_energy.md'*. You can check its solution yourself. " + "Good it seems that the agent successfuly sovle the problem and output it as file *files/kinetic_energy.md*. You can check its solution yourself. " ] }, { diff --git a/examples/tree_of_thoughts/tree_of_thoughts.ipynb b/examples/tree_of_thoughts/notebooks/tree_of_thoughts.ipynb similarity index 94% rename from examples/tree_of_thoughts/tree_of_thoughts.ipynb rename to examples/tree_of_thoughts/notebooks/tree_of_thoughts.ipynb index 9f859223a..dc01b9a98 100644 --- a/examples/tree_of_thoughts/tree_of_thoughts.ipynb +++ b/examples/tree_of_thoughts/notebooks/tree_of_thoughts.ipynb @@ -18,7 +18,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The Tree of Thoughts (ToT) algorithm aims to address limitations of the Chain of Thoughts (CoT) approach, ToT enables LLMs to evaluate their thinking at each stage and abandon inefficient approaches, exploring alternative methods. " + "The Tree of Thoughts (ToT) algorithm aims to address limitations of the Chain of Thoughts (CoT) approach, ToT enables LLMs to evaluate their thinking at each stage and abandon inefficient approaches, exploring alternative methods as shown in the figure below:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image adopted from the original paper](../figs/TOT.webp)" ] }, { @@ -195,8 +202,8 @@ "metadata": {}, "source": [ "LLMs does not perform well on this task.\n", - "For example, given 2 8 9 12.\n", - "Human being can easily find the solution as 2*12 * (9-8) = 24. Let's test whether LLM can solve this puzzle" + "For example, given 3 4 4 7.\n", + "Human being can easily find the solution as ((7-4)+3)*4 = 24. Let's test whether advanced LLM can solve this puzzle." ] }, { @@ -333,13 +340,22 @@ " model_config_name=\"gpt-4\",\n", " sys_prompt=THINKER_PROMPT.format(QUESTION_PROMPT),\n", ")\n", - "evalutor = DictDialogAgent(\n", - " name=\"evalutor\",\n", + "evaluator = DictDialogAgent(\n", + " name=\"evaluator\",\n", " model_config_name=\"gpt-4\",\n", " sys_prompt=EVALUATOR_PROMPT.format(QUESTION_PROMPT),\n", ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- The thinker agent generates possible new moves.\"\n", + "- The evaluator agent assesses each move and assigns it a score based on heuristics.\"\n", + "- We also require a tree structure to store this information and consistently select the nodes with the highest scores for further exploration.\"" + ] + }, { "cell_type": "code", "execution_count": 11, @@ -381,7 +397,7 @@ "def evaluate_state(state):\n", " prompt = \"Current state is {}, evaluate the state.\".format(state)\n", " msg = Msg(name=\"thinker\", content=prompt)\n", - " res = evalutor(msg)\n", + " res = evaluator(msg)\n", " print('Evaluating state:', state, res.content[\"score\"])\n", " return res.content[\"score\"]" ] @@ -471,6 +487,13 @@ "initial_state = \"3 4 4 7\"\n", "heuristic_search(initial_state)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] } ], "metadata": { diff --git a/examples/tree_of_thoughts/readme.md b/examples/tree_of_thoughts/readme.md new file mode 100644 index 000000000..9138dd790 --- /dev/null +++ b/examples/tree_of_thoughts/readme.md @@ -0,0 +1,7 @@ +"This folder contains three examples showcasing interesting tasks and algorithms that can be completed using AgentScope. The main folder is 'notebooks,' which contains three runnable Jupyter notebooks: + +- **react_example.ipynb** demonstrates how to equip the ReAct agent with a customized service, enabling it to complete tasks involving web searches, reasoning, and writing files to the computer. +- **complicated_flow.ipynb** illustrates how to build a reflection-improvement workflow using AgentScope to generate output with better quality. +- **tree_of_thoughts.ipynb** provides an implementation of the latest 'Tree of Thoughts' algorithm, which efficiently improves the capability of large language models to perform multi-step reasoning. + +The other folders contain supplementary materials, and you can find more details within the corresponding notebooks." \ No newline at end of file From 98842aae008cd3f5613893428bbea1b7f7453107 Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Mon, 22 Apr 2024 17:34:05 +0800 Subject: [PATCH 4/8] format the code to pass pre-commit checks --- examples/tree_of_thoughts/code/test.py | 269 +++++++++------ examples/tree_of_thoughts/code/workflow.py | 363 ++++++++++++++++----- 2 files changed, 457 insertions(+), 175 deletions(-) diff --git a/examples/tree_of_thoughts/code/test.py b/examples/tree_of_thoughts/code/test.py index 591d6c34b..1dedf0b10 100644 --- a/examples/tree_of_thoughts/code/test.py +++ b/examples/tree_of_thoughts/code/test.py @@ -1,182 +1,257 @@ -import unittest -from examples.tree_of_thoughts.workflow import SequentialWorkFlow, ParallelWorkFlow, WorkFlowBase +# -*- coding: utf-8 -*- +""" +This module contains unit tests for the workflow module, +including sequential and parallel workflows. + +Classes: + TestSequentialWorkFlow: + Unit tests for the SequentialWorkFlow class. + TestSequentialWorkFlowWhileLoop: + Unit tests for the SequentialWorkFlow with a loop. + TestParallelWorkFlow: + Unit tests for the ParallelWorkFlow class. + TestComplicatedWorkFlow: + Unit tests for a complex workflow combining sequential + and parallel components. +""" + +import unittest +from typing import Any, Tuple +from workflow import ( + SequentialWorkFlow, + ParallelWorkFlow, + WorkFlowBase, +) + class TestSequentialWorkFlow(unittest.TestCase): - - def setUp(self): - def start_node(x): + """Unit tests for the SequentialWorkFlow class.""" + + def setUp(self) -> None: + def start_node(x: int) -> int: return x + 1 - def node_positive(x): + + def node_positive(x: int) -> int: return x + 2 - def node_negative(x): + + def node_negative(x: int) -> int: return x - 2 - def processor(message, workflow, *args, **kwargs): + + def processor( + message: Any, + _workflow: WorkFlowBase, + *_: Any, + **__: Any, + ) -> Tuple[Any, str]: # noqa processed_value = message + 1 - next_node = 'positive' if processed_value > 10 else 'negative' + next_node = "positive" if processed_value > 10 else "negative" return processed_value, next_node + self.workflow = SequentialWorkFlow() - self.workflow.add_node(start_node, 'start') - self.workflow.add_node(node_positive, 'positive') - self.workflow.add_node(node_negative, 'negative') - self.workflow.add_edge('start', processor) - self.workflow.add_edge('positive', processor) - self.workflow.set_entry_node('start') - self.workflow.set_exit_node('negative') - def test_workflow_execution(self): + self.workflow.add_node(start_node, "start") + self.workflow.add_node(node_positive, "positive") + self.workflow.add_node(node_negative, "negative") + self.workflow.add_edge("start", processor) + self.workflow.add_edge("positive", processor) + self.workflow.set_entry_node("start") + self.workflow.set_exit_node("negative") + + def test_workflow_execution(self) -> None: + """Test the execution of the workflow.""" initial_value = 5 result = self.workflow(initial_value) - expected_result = 7 - 2 - self.assertEqual(result, expected_result, f"Expected {expected_result} but got {result}") + expected_result = 7 - 2 + self.assertEqual( + result, + expected_result, + f"Expected {expected_result} but got {result}", + ) class TestSequentialWorkFlowWhileLoop(unittest.TestCase): + """Unit tests for the SequentialWorkFlow class with a loop""" - def setUp(self): - - def start_node(x): + def setUp(self) -> None: + def start_node(x: int) -> int: return x + 1 - def loop_node(x): + def loop_node(x: int) -> int: return x - 1 - def exit_node(x): + def exit_node(x: int) -> int: return x - def loop_processor(message, workflow, *args, **kwargs): + def loop_processor( + message: Any, + _workflow: WorkFlowBase, + *_: Any, + **__: Any, + ) -> Tuple[Any, str]: # noqa + processed_value = message + 1 processed_value = message + 1 - next_node = 'loop_node' if processed_value < 10 else 'exit_node' + next_node = "loop_node" if processed_value < 10 else "exit_node" return processed_value, next_node self.workflow = SequentialWorkFlow() - self.workflow.add_node(start_node, 'start') - self.workflow.add_node(loop_node, 'loop_node') - self.workflow.add_node(exit_node, 'exit_node') - self.workflow.add_edge('start', loop_processor) - self.workflow.add_edge('loop_node', loop_processor) - self.workflow.set_entry_node('start') - self.workflow.set_exit_node('exit_node') - - def test_loop_execution(self): + self.workflow.add_node(start_node, "start") + self.workflow.add_node(loop_node, "loop_node") + self.workflow.add_node(exit_node, "exit_node") + self.workflow.add_edge("start", loop_processor) + self.workflow.add_edge("loop_node", loop_processor) + self.workflow.set_entry_node("start") + self.workflow.set_exit_node("exit_node") + + def test_loop_execution(self) -> None: + """Test the execution of the workflow with a loop.""" initial_value = 8 # Start at 8, which will cause a loop. result = self.workflow(initial_value) - expected_result = 10 # Loop should increment from 8 to 9 to 10 and then exit. - self.assertEqual(result, expected_result, f"Expected loop to terminate at {expected_result} but got {result}") + expected_result = ( + 10 # Loop should increment from 8 to 9 to 10 and then exit. + ) + self.assertEqual( + result, + expected_result, + f"Expected to terminate at {expected_result} but got {result}", + ) class TestParallelWorkFlow(unittest.TestCase): - def setUp(self): + """Unit tests for the ParallelWorkFlow class.""" + + def setUp(self) -> None: # Define simple workflows for testing - def simple_workflow_a(x): + def simple_workflow_a(x: int) -> int: return x + 1 - def simple_workflow_b(x): + def simple_workflow_b(x: int) -> int: return x + 2 - - def sum_aggregation(results): + + def sum_aggregation(results: dict) -> int: return sum(results.values()) # Create workflow instances self.workflow_a = SequentialWorkFlow() - self.workflow_a.add_node(simple_workflow_a, 'node_a') - self.workflow_a.set_entry_node('node_a') - self.workflow_a.set_exit_node('node_a') + self.workflow_a.add_node(simple_workflow_a, "node_a") + self.workflow_a.set_entry_node("node_a") + self.workflow_a.set_exit_node("node_a") self.workflow_b = SequentialWorkFlow() - self.workflow_b.add_node(simple_workflow_b, 'node_b') - self.workflow_b.set_entry_node('node_b') - self.workflow_b.set_exit_node('node_b') + self.workflow_b.add_node(simple_workflow_b, "node_b") + self.workflow_b.set_entry_node("node_b") + self.workflow_b.set_exit_node("node_b") # Create Parallel Workflow self.parallel_workflow = ParallelWorkFlow( workflows={ - 'workflow_a': self.workflow_a, - 'workflow_b': self.workflow_b + "workflow_a": self.workflow_a, + "workflow_b": self.workflow_b, }, aggregation_fn=sum_aggregation, - executor_type='dask' # or 'dask' + executor_type="threadpool", ) - def test_parallel_execution(self): + def test_parallel_execution(self) -> None: + """Test the execution of the parallel workflow.""" initial_value = 10 result = self.parallel_workflow(initial_value) - expected_result = (10 + 1) + (10 + 2) # Sum of results from workflow_a and workflow_b - self.assertEqual(result, expected_result, f"Expected aggregated result to be {expected_result} but got {result}") - + expected_result = (10 + 1) + ( + 10 + 2 + ) # Sum of results from workflow_a and workflow_b + self.assertEqual( + result, + expected_result, + f"Expected result to be {expected_result} but got {result}", + ) class TestComplicatedWorkFlow(unittest.TestCase): - def setUp(self): - from examples.tree_of_thoughts.workflow import SequentialWorkFlow, ParallelWorkFlow - - def start_node(x): + """Unit tests for a complex workflow combining + sequential and parallel components.""" + + def setUp(self) -> None: + def start_node(x: int) -> int: return x + 1 - def loop_node(x): + def loop_node(x: int) -> int: return x + 1 - def exit_node(x): + def exit_node(x: int) -> int: return x - def loop_processor(message, workflow, *args, **kwargs): - next_node = 'loop_node' if message < 10 else 'exit_node' + def loop_processor( + message: Any, + _workflow: WorkFlowBase, + *_: Any, + **__: Any, + ) -> Tuple[Any, str]: + next_node = "loop_node" if message < 10 else "exit_node" return message, next_node - def node_positive(x): + def node_positive(x: int) -> int: return x + 2 - def node_negative(x): + def node_negative(x: int) -> int: return x - 2 - def branching_processor(message, workflow, *args, **kwargs): + def branching_processor( + message: Any, + _workflow: WorkFlowBase, + *_: Any, + **__: Any, + ) -> Tuple[Any, str]: # noqa processed_value = message + 1 - next_node = 'positive' if processed_value > 10 else 'negative' + next_node = "positive" if processed_value > 10 else "negative" return processed_value, next_node - def sum_aggregation(results): + def sum_aggregation(results: dict) -> int: return sum(results.values()) - def setup_parallel_workflow(): - parallel_workflow = ParallelWorkFlow(executor_type='threadpool') + def setup_parallel_workflow() -> ParallelWorkFlow: + parallel_workflow = ParallelWorkFlow(executor_type="threadpool") while_loop_workflow = SequentialWorkFlow() - while_loop_workflow.add_node(loop_node, 'loop_node') - while_loop_workflow.add_node(exit_node, 'exit_node') - while_loop_workflow.add_edge('loop_node', loop_processor) - while_loop_workflow.set_entry_node('loop_node') - while_loop_workflow.set_exit_node('exit_node') + while_loop_workflow.add_node(loop_node, "loop_node") + while_loop_workflow.add_node(exit_node, "exit_node") + while_loop_workflow.add_edge("loop_node", loop_processor) + while_loop_workflow.set_entry_node("loop_node") + while_loop_workflow.set_exit_node("exit_node") branching_workflow = SequentialWorkFlow() - branching_workflow.add_node(node_positive, 'positive') - branching_workflow.add_node(node_negative, 'negative') - branching_workflow.add_edge('positive', branching_processor) - branching_workflow.add_edge('negative', branching_processor) - branching_workflow.set_entry_node('positive') - branching_workflow.set_exit_node('negative') - - parallel_workflow.add_workflow('while_loop', while_loop_workflow) - parallel_workflow.add_workflow('branching', branching_workflow) + branching_workflow.add_node(node_positive, "positive") + branching_workflow.add_node(node_negative, "negative") + branching_workflow.add_edge("positive", branching_processor) + branching_workflow.add_edge("negative", branching_processor) + branching_workflow.set_entry_node("positive") + branching_workflow.set_exit_node("negative") + + parallel_workflow.add_workflow("while_loop", while_loop_workflow) + parallel_workflow.add_workflow("branching", branching_workflow) parallel_workflow.aggregation_fn = sum_aggregation return parallel_workflow - def final_processing(x): + def final_processing(x: int) -> int: return x + 100 self.large_workflow = SequentialWorkFlow() - self.large_workflow.add_node(start_node, 'start') - self.large_workflow.add_node(setup_parallel_workflow(), 'parallel') - self.large_workflow.add_node(final_processing, 'final') - self.large_workflow.add_edge('start', 'parallel') - self.large_workflow.add_edge('parallel', 'final') - self.large_workflow.set_entry_node('start') - self.large_workflow.set_exit_node('final') - - def test_complicated_workflow(self): + self.large_workflow.add_node(start_node, "start") + self.large_workflow.add_node(setup_parallel_workflow(), "parallel") + self.large_workflow.add_node(final_processing, "final") + self.large_workflow.add_edge("start", "parallel") + self.large_workflow.add_edge("parallel", "final") + self.large_workflow.set_entry_node("start") + self.large_workflow.set_exit_node("final") + + def test_complicated_workflow(self) -> None: + """Test the execution of the complicated workflow.""" initial_value = 5 result = self.large_workflow(initial_value) expected_result = 117 - self.assertEqual(result, expected_result, "The workflow did not produce the expected output.") - + self.assertEqual( + result, + expected_result, + "The workflow did not produce the expected output.", + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/examples/tree_of_thoughts/code/workflow.py b/examples/tree_of_thoughts/code/workflow.py index 053175417..3dac75da1 100644 --- a/examples/tree_of_thoughts/code/workflow.py +++ b/examples/tree_of_thoughts/code/workflow.py @@ -1,60 +1,157 @@ +# -*- coding: utf-8 -*- +""" +This module provides implementations for workflow management, +including sequential and parallel workflows. + +Classes: + WorkFlowBase: + Base class for workflows. + It contains the logic for processing nodes and edges in a workflow. + Processor: + Protocol for defining processors used in workflows. + SequentialWorkFlow: + Implementation of a sequential workflow. + AggregationCallable: + Protocol for aggregation functions used in workflows. + ParallelWorkFlow: + Implementation of a parallel workflow. +""" from concurrent.futures import ThreadPoolExecutor -from typing import (Callable, - Dict, - Protocol, - Tuple, - Any, - Optional, - Union, - runtime_checkable, - Literal - ) -from abc import ABC, abstractmethod -from dask.delayed import delayed -from dask.base import compute +from typing import ( + Callable, + Dict, + Tuple, + Any, + Optional, + Literal, +) +from abc import ABC, abstractmethod +from typing_extensions import Protocol +import typing_extensions class WorkFlowBase(ABC): + """ + Base class for workflows. + It contains the logic for processing nodes and edges in a workflow. + """ + def __init__(self) -> None: + """ + Initializes the WorkFlowBase object. + + Returns: + None + """ self.contexts: Dict[str, Any] = {} + def register_contexts(self, contexts: Dict[str, Any]) -> None: + """ + Registers the contexts for the workflow. + + Args: + contexts (Dict[str, Any]): + A dictionary containing context information. + + Returns: + None + """ self.contexts = contexts + @abstractmethod - def __call__(self, - initial_messages:Any, - *args:Any, - **kwargs: Any) -> Any: - pass + def __call__( + self, + initial_messages: Any, + *args: Any, + **kwargs: Any, + ) -> Any: + """ + Executes the workflow. + + This method is abstract and must be implemented by subclasses. + + Args: + initial_messages (Any): Initial input messages. + *args (Any): Additional arguments. + **kwargs (Any): Additional keyword arguments. + Returns: + Any: Output of the workflow execution. + """ -@runtime_checkable + +@typing_extensions.runtime_checkable class Processor(Protocol): - def __call__(self, - message: Any, - workflow: WorkFlowBase, - *args:Any, **kwargs:Any) -> Tuple[Any, str]: - return message, 'EXIT' - - + """ + Protocol for defining processors. + """ + + def __call__( + self, + message: Any, + workflow: WorkFlowBase, + *args: Any, + **kwargs: Any, + ) -> Tuple[Any, str]: + """ + Process the message. + + Args: + message (Any): Input message. + workflow (WorkFlowBase): Workflow instance. + *args (Any): Additional arguments. + **kwargs (Any): Additional keyword arguments. + + Returns: + Tuple[Any, str]: Processed message and next node. + """ + return message, "EXIT" + class SequentialWorkFlow(WorkFlowBase): + """ + Sequential workflow implementation. + """ + def __init__(self) -> None: + """ + Initializes the SequentialWorkFlow object. + + Returns: + None + """ super().__init__() self.nodes: Dict[str, Callable] = {} self.edges: Dict[str, Processor] = {} self.entry_node = None self.exit_node = None - - - def add_node(self, - agent: Callable, - name: str) -> None: + + def add_node(self, agent: Callable, name: str) -> None: + """ + Adds a node to the workflow. + + Args: + agent (Callable): Callable representing the node. + name (str): Name of the node. + + Returns: + None + """ if name in self.nodes: raise ValueError(f"Node {name} already exists.") self.nodes[name] = agent - - def add_edge(self, src_node: str, processor_or_dst_node: Any): + def add_edge(self, src_node: str, processor_or_dst_node: Any) -> None: + """ + Adds an edge to the workflow. + + Args: + src_node (str): Name of the source node. + processor_or_dst_node (Any): Processor or destination node. + + Returns: + None + """ if src_node not in self.nodes: raise ValueError(f"Node {src_node} does not exist.") if isinstance(processor_or_dst_node, Processor): @@ -62,88 +159,198 @@ def add_edge(self, src_node: str, processor_or_dst_node: Any): elif isinstance(processor_or_dst_node, str): dst_node = processor_or_dst_node if dst_node not in self.nodes: - raise ValueError(f"Destination node {dst_node} does not exist.") - def default_processor(message: Any, workflow: WorkFlowBase, *args: Any, **kwargs: Any) -> Tuple[Any, str]: + raise ValueError( + f"Destination node {dst_node} does not exist.", + ) + + def default_processor( + message: Any, + _workflow: WorkFlowBase, + *_: Any, + **__: Any, + ) -> Tuple[Any, str]: return message, dst_node + if src_node in self.edges: - raise ValueError(f"Edge already exists from {src_node}. To overwrite, remove the existing edge first.") + raise ValueError( + f"Edge already exists from {src_node}." + + "To overwrite, remove the existing edge first.", + ) self.edges[src_node] = default_processor else: - raise TypeError("processor_or_dst_node must be either a Processor instance or a string representing a node name.") - + raise TypeError( + "processor_or_dst_node must be either a Processor" + + "instance or a string representing a node name.", + ) def set_entry_node(self, node: str) -> None: + """ + Sets the entry node of the workflow. + + Args: + node (str): Name of the entry node. + + Returns: + None + """ assert node in self.nodes, f"Node {node} does not exist." self.entry_node = node - + def set_exit_node(self, node: str) -> None: + """ + Sets the exit node of the workflow. + + Args: + node (str): Name of the exit node. + + Returns: + None + """ assert node in self.nodes, f"Node {node} does not exist." self.exit_node = node - - def __call__(self, initial_message: Any, *args: Any, **kwargs: Any) -> Any: + + def __call__( + self, + initial_messages: Any, + *args: Any, + **kwargs: Any, + ) -> Any: + """ + Executes the workflow. + + Args: + initial_message (Any): Initial message. + *args (Any): Additional arguments. + **kwargs (Any): Additional keyword arguments. + + Returns: + Any: Output of the workflow execution. + """ if self.entry_node is None or self.exit_node is None: raise ValueError("Entry or exit node not set.") current_node = self.entry_node - current_message = self.nodes[current_node](initial_message, *args, **kwargs) + current_message = self.nodes[current_node]( + initial_messages, + *args, + **kwargs, + ) while current_node != self.exit_node: processor = self.edges[current_node] - current_message, next_node = processor(current_message, self, *args, **kwargs) + current_message, next_node = processor( + current_message, + self, + *args, + **kwargs, + ) current_node = next_node if current_node in self.nodes: - current_message = self.nodes[current_node](current_message, *args, **kwargs) + current_message = self.nodes[current_node]( + current_message, + *args, + **kwargs, + ) else: - break # This should not happen if workflow is correctly configured + break return current_message - - - + + class AggregationCallable(Protocol): + """ + Protocol for aggregation functions used in workflows. + """ + def __call__(self, results: Dict[str, Any]) -> Any: - pass - + """ + Defines the call signature for aggregation functions. + + Args: + results (Dict[str, Any]): + Dictionary containing results from different workflows. + + Returns: + Any: Aggregated result. + """ + + class ParallelWorkFlow(WorkFlowBase): - def __init__(self, - workflows: Optional[Dict[str, SequentialWorkFlow]] = None, - aggregation_fn: Optional[AggregationCallable] = None, - executor_type: Literal['threadpool', 'dask'] = 'threadpool') -> None: + """ + Parallel workflow implementation. + """ + + def __init__( + self, + workflows: Optional[Dict[str, SequentialWorkFlow]] = None, + aggregation_fn: Optional[AggregationCallable] = None, + executor_type: Literal["threadpool"] = "threadpool", + ) -> None: + """ + Initializes the ParallelWorkFlow object. + + Args: + workflows (Optional[Dict[str, SequentialWorkFlow]]): + Dictionary containing workflows. + aggregation_fn (Optional[AggregationCallable]): + Function for aggregating results. + executor_type (Literal["threadpool"], optional): + Type of executor. Defaults to "threadpool". + + Returns: + None + """ super().__init__() self.workflows = workflows if workflows else {} self.aggregation_fn = aggregation_fn self.executor_type = executor_type - + def add_workflow(self, name: str, workflow: SequentialWorkFlow) -> None: + """ + Adds a workflow to the parallel workflow. + + Args: + name (str): Name of the workflow. + workflow (SequentialWorkFlow): Sequential workflow object. + + Returns: + None + """ if name in self.workflows: raise ValueError(f"Workflow {name} already exists.") self.workflows[name] = workflow - - def __call__(self, initial_message: Any, *args: Any, **kwargs: Any) -> Any: + + def __call__( + self, + initial_messages: Any, + *args: Any, + **kwargs: Any, + ) -> Any: + """ + Executes the parallel workflow. + + Args: + initial_message (Any): Initial message. + *args (Any): Additional arguments. + **kwargs (Any): Additional keyword arguments. + + Returns: + Any: Output of the parallel workflow execution. + """ assert self.workflows, "No workflows added." results = {} - if self.executor_type == 'threadpool': + if self.executor_type == "threadpool": with ThreadPoolExecutor() as executor: - futures = {name: executor.submit(workflow, initial_message, *args, **kwargs) - for name, workflow in self.workflows.items()} + futures = { + name: executor.submit( + workflow, + initial_messages, + *args, + **kwargs, + ) + for name, workflow in self.workflows.items() + } for name, future in futures.items(): - results[name] = future.result() - elif self.executor_type == 'dask': - delayed_results = {name: delayed(workflow)(initial_message, *args, **kwargs) - for name, workflow in self.workflows.items()} - computed_results = compute(*delayed_results.values()) - results = dict(zip(delayed_results.keys(), computed_results)) + results[name] = future.result() if self.aggregation_fn: final_result = self.aggregation_fn(results) else: final_result = results return final_result - - - - - - - - - - - - From f3bde27dd4a72df5fa3473b7f4c122331c14d904 Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Mon, 22 Apr 2024 18:24:54 +0800 Subject: [PATCH 5/8] pass all precommit checks --- examples/tree_of_thoughts/code/workflow.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/examples/tree_of_thoughts/code/workflow.py b/examples/tree_of_thoughts/code/workflow.py index 3dac75da1..b00241e6b 100644 --- a/examples/tree_of_thoughts/code/workflow.py +++ b/examples/tree_of_thoughts/code/workflow.py @@ -22,12 +22,12 @@ Dict, Tuple, Any, + Protocol, Optional, Literal, + runtime_checkable, ) from abc import ABC, abstractmethod -from typing_extensions import Protocol -import typing_extensions class WorkFlowBase(ABC): @@ -80,7 +80,7 @@ def __call__( """ -@typing_extensions.runtime_checkable +@runtime_checkable class Processor(Protocol): """ Protocol for defining processors. @@ -165,10 +165,14 @@ def add_edge(self, src_node: str, processor_or_dst_node: Any) -> None: def default_processor( message: Any, - _workflow: WorkFlowBase, - *_: Any, - **__: Any, - ) -> Tuple[Any, str]: + workflow: WorkFlowBase, + *args: Any, + **kwargs: Any, + ) -> Tuple[Any, str]: # pylint: disable=unused-argument + # Default processor that + # forwards the message to the destination node. + # does not use the workflow, args, or kwargs. + _ = workflow, args, kwargs return message, dst_node if src_node in self.edges: From 81596d6f1283b6c80af204169913ad23fdd4c067 Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Mon, 22 Apr 2024 18:35:41 +0800 Subject: [PATCH 6/8] remvoe test.py, change figs/TOT.webp to figs/TOT.png, improve the readme.md --- examples/tree_of_thoughts/code/test.py | 257 ------------------ examples/tree_of_thoughts/figs/TOT.png | Bin 0 -> 219042 bytes examples/tree_of_thoughts/figs/TOT.webp | Bin 40826 -> 0 bytes .../notebooks/tree_of_thoughts.ipynb | 2 +- examples/tree_of_thoughts/readme.md | 4 +- 5 files changed, 4 insertions(+), 259 deletions(-) delete mode 100644 examples/tree_of_thoughts/code/test.py create mode 100644 examples/tree_of_thoughts/figs/TOT.png delete mode 100644 examples/tree_of_thoughts/figs/TOT.webp diff --git a/examples/tree_of_thoughts/code/test.py b/examples/tree_of_thoughts/code/test.py deleted file mode 100644 index 1dedf0b10..000000000 --- a/examples/tree_of_thoughts/code/test.py +++ /dev/null @@ -1,257 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module contains unit tests for the workflow module, -including sequential and parallel workflows. - -Classes: - TestSequentialWorkFlow: - Unit tests for the SequentialWorkFlow class. - TestSequentialWorkFlowWhileLoop: - Unit tests for the SequentialWorkFlow with a loop. - TestParallelWorkFlow: - Unit tests for the ParallelWorkFlow class. - TestComplicatedWorkFlow: - Unit tests for a complex workflow combining sequential - and parallel components. -""" - -import unittest -from typing import Any, Tuple -from workflow import ( - SequentialWorkFlow, - ParallelWorkFlow, - WorkFlowBase, -) - - -class TestSequentialWorkFlow(unittest.TestCase): - """Unit tests for the SequentialWorkFlow class.""" - - def setUp(self) -> None: - def start_node(x: int) -> int: - return x + 1 - - def node_positive(x: int) -> int: - return x + 2 - - def node_negative(x: int) -> int: - return x - 2 - - def processor( - message: Any, - _workflow: WorkFlowBase, - *_: Any, - **__: Any, - ) -> Tuple[Any, str]: # noqa - processed_value = message + 1 - next_node = "positive" if processed_value > 10 else "negative" - return processed_value, next_node - - self.workflow = SequentialWorkFlow() - self.workflow.add_node(start_node, "start") - self.workflow.add_node(node_positive, "positive") - self.workflow.add_node(node_negative, "negative") - self.workflow.add_edge("start", processor) - self.workflow.add_edge("positive", processor) - self.workflow.set_entry_node("start") - self.workflow.set_exit_node("negative") - - def test_workflow_execution(self) -> None: - """Test the execution of the workflow.""" - initial_value = 5 - result = self.workflow(initial_value) - expected_result = 7 - 2 - self.assertEqual( - result, - expected_result, - f"Expected {expected_result} but got {result}", - ) - - -class TestSequentialWorkFlowWhileLoop(unittest.TestCase): - """Unit tests for the SequentialWorkFlow class with a loop""" - - def setUp(self) -> None: - def start_node(x: int) -> int: - return x + 1 - - def loop_node(x: int) -> int: - return x - 1 - - def exit_node(x: int) -> int: - return x - - def loop_processor( - message: Any, - _workflow: WorkFlowBase, - *_: Any, - **__: Any, - ) -> Tuple[Any, str]: # noqa - processed_value = message + 1 - processed_value = message + 1 - next_node = "loop_node" if processed_value < 10 else "exit_node" - return processed_value, next_node - - self.workflow = SequentialWorkFlow() - self.workflow.add_node(start_node, "start") - self.workflow.add_node(loop_node, "loop_node") - self.workflow.add_node(exit_node, "exit_node") - self.workflow.add_edge("start", loop_processor) - self.workflow.add_edge("loop_node", loop_processor) - self.workflow.set_entry_node("start") - self.workflow.set_exit_node("exit_node") - - def test_loop_execution(self) -> None: - """Test the execution of the workflow with a loop.""" - initial_value = 8 # Start at 8, which will cause a loop. - result = self.workflow(initial_value) - expected_result = ( - 10 # Loop should increment from 8 to 9 to 10 and then exit. - ) - self.assertEqual( - result, - expected_result, - f"Expected to terminate at {expected_result} but got {result}", - ) - - -class TestParallelWorkFlow(unittest.TestCase): - """Unit tests for the ParallelWorkFlow class.""" - - def setUp(self) -> None: - # Define simple workflows for testing - def simple_workflow_a(x: int) -> int: - return x + 1 - - def simple_workflow_b(x: int) -> int: - return x + 2 - - def sum_aggregation(results: dict) -> int: - return sum(results.values()) - - # Create workflow instances - self.workflow_a = SequentialWorkFlow() - self.workflow_a.add_node(simple_workflow_a, "node_a") - self.workflow_a.set_entry_node("node_a") - self.workflow_a.set_exit_node("node_a") - - self.workflow_b = SequentialWorkFlow() - self.workflow_b.add_node(simple_workflow_b, "node_b") - self.workflow_b.set_entry_node("node_b") - self.workflow_b.set_exit_node("node_b") - - # Create Parallel Workflow - self.parallel_workflow = ParallelWorkFlow( - workflows={ - "workflow_a": self.workflow_a, - "workflow_b": self.workflow_b, - }, - aggregation_fn=sum_aggregation, - executor_type="threadpool", - ) - - def test_parallel_execution(self) -> None: - """Test the execution of the parallel workflow.""" - initial_value = 10 - result = self.parallel_workflow(initial_value) - expected_result = (10 + 1) + ( - 10 + 2 - ) # Sum of results from workflow_a and workflow_b - self.assertEqual( - result, - expected_result, - f"Expected result to be {expected_result} but got {result}", - ) - - -class TestComplicatedWorkFlow(unittest.TestCase): - """Unit tests for a complex workflow combining - sequential and parallel components.""" - - def setUp(self) -> None: - def start_node(x: int) -> int: - return x + 1 - - def loop_node(x: int) -> int: - return x + 1 - - def exit_node(x: int) -> int: - return x - - def loop_processor( - message: Any, - _workflow: WorkFlowBase, - *_: Any, - **__: Any, - ) -> Tuple[Any, str]: - next_node = "loop_node" if message < 10 else "exit_node" - return message, next_node - - def node_positive(x: int) -> int: - return x + 2 - - def node_negative(x: int) -> int: - return x - 2 - - def branching_processor( - message: Any, - _workflow: WorkFlowBase, - *_: Any, - **__: Any, - ) -> Tuple[Any, str]: # noqa - processed_value = message + 1 - next_node = "positive" if processed_value > 10 else "negative" - return processed_value, next_node - - def sum_aggregation(results: dict) -> int: - return sum(results.values()) - - def setup_parallel_workflow() -> ParallelWorkFlow: - parallel_workflow = ParallelWorkFlow(executor_type="threadpool") - while_loop_workflow = SequentialWorkFlow() - while_loop_workflow.add_node(loop_node, "loop_node") - while_loop_workflow.add_node(exit_node, "exit_node") - while_loop_workflow.add_edge("loop_node", loop_processor) - while_loop_workflow.set_entry_node("loop_node") - while_loop_workflow.set_exit_node("exit_node") - - branching_workflow = SequentialWorkFlow() - branching_workflow.add_node(node_positive, "positive") - branching_workflow.add_node(node_negative, "negative") - branching_workflow.add_edge("positive", branching_processor) - branching_workflow.add_edge("negative", branching_processor) - branching_workflow.set_entry_node("positive") - branching_workflow.set_exit_node("negative") - - parallel_workflow.add_workflow("while_loop", while_loop_workflow) - parallel_workflow.add_workflow("branching", branching_workflow) - parallel_workflow.aggregation_fn = sum_aggregation - - return parallel_workflow - - def final_processing(x: int) -> int: - return x + 100 - - self.large_workflow = SequentialWorkFlow() - self.large_workflow.add_node(start_node, "start") - self.large_workflow.add_node(setup_parallel_workflow(), "parallel") - self.large_workflow.add_node(final_processing, "final") - self.large_workflow.add_edge("start", "parallel") - self.large_workflow.add_edge("parallel", "final") - self.large_workflow.set_entry_node("start") - self.large_workflow.set_exit_node("final") - - def test_complicated_workflow(self) -> None: - """Test the execution of the complicated workflow.""" - initial_value = 5 - result = self.large_workflow(initial_value) - expected_result = 117 - self.assertEqual( - result, - expected_result, - "The workflow did not produce the expected output.", - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/examples/tree_of_thoughts/figs/TOT.png b/examples/tree_of_thoughts/figs/TOT.png new file mode 100644 index 0000000000000000000000000000000000000000..cb63b56e9d4c2c24c83cbc52e871430a9b503c39 GIT binary patch literal 219042 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%0A{4bYM|eu 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 diff --git a/examples/tree_of_thoughts/notebooks/tree_of_thoughts.ipynb b/examples/tree_of_thoughts/notebooks/tree_of_thoughts.ipynb index dc01b9a98..cdcdb6d10 100644 --- a/examples/tree_of_thoughts/notebooks/tree_of_thoughts.ipynb +++ b/examples/tree_of_thoughts/notebooks/tree_of_thoughts.ipynb @@ -25,7 +25,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "![Image adopted from the original paper](../figs/TOT.webp)" + "![Image adopted from the original paper](../figs/TOT.png)" ] }, { diff --git a/examples/tree_of_thoughts/readme.md b/examples/tree_of_thoughts/readme.md index 9138dd790..f51c351c1 100644 --- a/examples/tree_of_thoughts/readme.md +++ b/examples/tree_of_thoughts/readme.md @@ -1,4 +1,6 @@ -"This folder contains three examples showcasing interesting tasks and algorithms that can be completed using AgentScope. The main folder is 'notebooks,' which contains three runnable Jupyter notebooks: +"This folder contains three examples showcasing interesting tasks and algorithms that can be completed using AgentScope. The goal of this example is to implement and compare three prompting strategies—ReAct for external services, Reflect-Improve for enhancing output quality, and Tree of Thoughts for boosting reasoning in large language models (LLMs). + + The main folder is 'notebooks,' which contains three runnable Jupyter notebooks: - **react_example.ipynb** demonstrates how to equip the ReAct agent with a customized service, enabling it to complete tasks involving web searches, reasoning, and writing files to the computer. - **complicated_flow.ipynb** illustrates how to build a reflection-improvement workflow using AgentScope to generate output with better quality. From dd1e8feeaf1ee03af91aa4ec0617bfb5603cd268 Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Wed, 24 Apr 2024 20:03:21 +0800 Subject: [PATCH 7/8] implement dblp search --- examples/tree_of_thoughts/readme.md | 4 +- src/agentscope/service/web/search.py | 370 ++++++++++++++++++++++++++- 2 files changed, 370 insertions(+), 4 deletions(-) diff --git a/examples/tree_of_thoughts/readme.md b/examples/tree_of_thoughts/readme.md index f51c351c1..63181e36b 100644 --- a/examples/tree_of_thoughts/readme.md +++ b/examples/tree_of_thoughts/readme.md @@ -1,4 +1,4 @@ -"This folder contains three examples showcasing interesting tasks and algorithms that can be completed using AgentScope. The goal of this example is to implement and compare three prompting strategies—ReAct for external services, Reflect-Improve for enhancing output quality, and Tree of Thoughts for boosting reasoning in large language models (LLMs). +This folder contains three examples showcasing interesting tasks and algorithms that can be completed using AgentScope. The goal of this example is to implement and compare three prompting strategies—ReAct for external services, Reflect-Improve for enhancing output quality, and Tree of Thoughts for boosting reasoning in large language models (LLMs). The main folder is 'notebooks,' which contains three runnable Jupyter notebooks: @@ -6,4 +6,4 @@ - **complicated_flow.ipynb** illustrates how to build a reflection-improvement workflow using AgentScope to generate output with better quality. - **tree_of_thoughts.ipynb** provides an implementation of the latest 'Tree of Thoughts' algorithm, which efficiently improves the capability of large language models to perform multi-step reasoning. -The other folders contain supplementary materials, and you can find more details within the corresponding notebooks." \ No newline at end of file +The other folders contain supplementary materials, and you can find more details within the corresponding notebooks. \ No newline at end of file diff --git a/src/agentscope/service/web/search.py b/src/agentscope/service/web/search.py index fd72b7536..6973eb14f 100644 --- a/src/agentscope/service/web/search.py +++ b/src/agentscope/service/web/search.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- """Search question in the web""" -from typing import Any - +from typing import Any, Literal from agentscope.service.service_response import ServiceResponse from agentscope.utils.common import requests_get from agentscope.service.service_status import ServiceExecStatus @@ -194,3 +193,370 @@ def google_search( for result in results ], ) + + +def dblp_search( + search_type: Literal["publication", "author", "venue"], + question: str, + num_results: int = 30, + first_hit: int = 0, + num_completion: int = 10, +) -> ServiceResponse: + """ + Search DBLP database based on the type specified. + + Args: + search_type (`Literal["publication", "author", "venue"]`): + Type of search to perform, options are + "publication", "author", or "venue". + question (`str`): + The search query string. + num_results (`int`, defaults to `30`): + The total number of search results to fetch. + firts_hit (`int`, defaults to `0`): + The first hit in the numbered sequence of search results to return + num_completion (`int`, defaults to `10`): + The number of completions to generate for the search query. + + Returns: + `ServiceResponse`: Depending on the type, + the response structure will vary. + The detailed documentation will adjust based on the type parameter. + """ + mapping = { + "publication": dblp_search_publications, + "author": dblp_search_authors, + "venue": dblp_search_venues, + } + if search_type not in mapping: + raise ValueError( + f"Invalid type: {type}. Must be one of {list(mapping.keys())}.", + ) + selected_function = mapping[search_type] + dblp_search.__doc__ = selected_function.__doc__ + return selected_function( + question, + num_results, + first_hit, + num_completion, + ) + + +def dblp_search_publications( + question: str, + num_results: int = 30, + first_hit: int = 0, + num_completion: int = 10, +) -> ServiceResponse: + """ + Search publications in the DBLP database + via its public API and return structured + publication data. + + Args: + question (`str`): + The search query string to look up + in the DBLP database. + num_results (`int`, defaults to `30`): + The number of search results to fetch. + firts_hit (`int`, defaults to `0`): + The first hit in the numbered sequence + of search results to return + num_completion (`int`, defaults to `10`): + The number of completions to generate + for the search query. + + Returns: + `ServiceResponse`: A dictionary containing `status` and `content`. + The `status` attribute is from the ServiceExecStatus enum, + indicating success or error. + The `content` is a list of parsed publication data if successful, + or an error message if failed. + Each item in the list contains publication information + includes title, authors, venue, pages, year, type, DOI, and URL. + + Example: + .. code-block:: python + search_results = dblp_search_publications(question="Extreme + Learning Machine", + num_results=3, + results_per_page=1, + num_completion=1) + print(search_results) + + It returns the following structure: + + .. code-block:: python + + { + 'status': , + 'content': [ + { + 'title': 'Power transformers fault diagnosis + based on a meta-learning approach to kernel + extreme learning machine with opposition-based + learning sparrow search algorithm.', + 'venue': 'J. Intell. Fuzzy Syst.', + 'pages': '455-466', + 'year': '2023', + 'type': 'Journal Articles', + 'doi': '10.3233/JIFS-211862', + 'url': 'https://dblp.org/rec/journals/jifs/YuTZTCH23', + 'authors': 'Song Yu, Weimin Tan, Chengming Zhang, + Chao Tang, Lihong Cai, Dong Hu' + }, + { + 'title': 'Performance comparison of Extreme Learning + Machinesand other machine learning methods + on WBCD data set.', + 'venue': 'SIU', + 'pages': '1-4', + 'year': '2021', + 'type': 'Conference and Workshop Papers', + 'doi': '10.1109/SIU53274.2021.9477984', + 'url': 'https://dblp.org/rec/conf/siu/KeskinDAY21', + 'authors': 'Ömer Selim Keskin, Akif Durdu, + Muhammet Fatih Aslan, Abdullah Yusefi' + } + ] + } + """ + + url = "https://dblp.org/search/publ/api" + params = { + "q": question, + "format": "json", + "h": num_results, + "f": first_hit, + "c": num_completion, + } + search_results = requests_get(url, params) + + if isinstance(search_results, str): + return ServiceResponse(ServiceExecStatus.ERROR, search_results) + + hits = search_results.get("result", {}).get("hits", {}).get("hit", []) + parsed_data = [] + for hit in hits: + info = hit.get("info", {}) + title = info.get("title", "No title available") + venue = info.get("venue", "No venue available") + pages = info.get("pages", "No page information") + year = info.get("year", "Year not specified") + pub_type = info.get("type", "Type not specified") + doi = info.get("doi", "No DOI available") + url = info.get("url", "No URL available") + authors = info.get("authors", {}).get("author", []) + authors_info = info.get("authors", {}).get("author", []) + if isinstance( + authors_info, + dict, + ): # Check if there's only one author in a dict format + authors_info = [authors_info] + authors = ", ".join( + [author["text"] for author in authors_info if "text" in author], + ) + data = { + "title": title, + "venue": venue, + "pages": pages, + "year": year, + "type": pub_type, + "doi": doi, + "url": url, + "authors": authors, + } + parsed_data.append(data) + return ServiceResponse(ServiceExecStatus.SUCCESS, parsed_data) + + +def dblp_search_authors( + question: str, + num_results: int = 30, + first_hit: int = 0, + num_completion: int = 10, +) -> ServiceResponse: + """ + Search for author information in the DBLP database + via its public API and return structured author data. + + Args: + question (`str`): + The search query string to look up + authors in the DBLP database. + num_results (`int`, defaults to `30`): + The total number of search results to fetch. + firts_hit (`int`, defaults to `0`): + The first hit in the numbered sequence + of search results to return + num_completion (`int`, defaults to `10`): + The number of completions to generate + for the search query. + + Returns: + `ServiceResponse`: A dictionary containing `status` and `content`. + The `status` attribute is from the + ServiceExecStatus enum, indicating the success or error of the search. + The `content` is a list of parsed author + data if successful, or an error message if failed. + Each item in the list contains author information + including their name, URL, and affiliations. + + Example: + .. code-block:: python + + search_results = dblp_search_authors(question="Liu ZiWei", + num_results=3, + results_per_page=1, + num_completion=1) + print(search_results) + + It returns the following structure: + + .. code-block:: python + + { + 'status': , + 'content': [ + { + 'author': 'Ziwei Liu 0001', + 'url': 'https://dblp.org/pid/05/6300-1', + 'affiliations': 'Advantech Singapore Pte Ltd, + Singapore; + National University of Singapore, + Department of Computer Science, Singapore' + }, + { + 'author': 'Ziwei Liu 0002', + 'url': 'https://dblp.org/pid/05/6300-2', + 'affiliations': 'Nanyang Technological University, + S-Lab, Singapore; + Chinese University of Hong Kong, + Department of Information Engineering, + Hong Kong' + } + ] + } + """ + url = "https://dblp.org/search/author/api" + params = { + "q": question, + "format": "json", + "h": num_results, + "f": first_hit, + "c": num_completion, + } + search_results = requests_get(url, params) + if isinstance(search_results, str): + return ServiceResponse(ServiceExecStatus.ERROR, search_results) + hits = search_results.get("result", {}).get("hits", {}).get("hit", []) + parsed_data = [] + for hit in hits: + author = hit["info"]["author"] + author_url = hit["info"]["url"] + affiliations = [] + notes = hit["info"].get("notes", {}) + note_entries = notes.get("note", []) + if isinstance(note_entries, dict): + note_entries = [note_entries] + for note in note_entries: + if note["@type"] == "affiliation": + affiliations.append(note["text"]) + affiliations = "; ".join(affiliations) + entry_dict = { + "author": author, + "url": author_url, + "affiliations": affiliations, + } + parsed_data.append(entry_dict) + return ServiceResponse(ServiceExecStatus.SUCCESS, parsed_data) + + +def dblp_search_venues( + question: str, + num_results: int = 30, + first_hit: int = 0, + num_completion: int = 10, +) -> ServiceResponse: + """ + Search for venue information in the DBLP database + via its public API and return structured venue data. + + Args: + question (`str`): + The search query string to look up venues in the DBLP database. + num_results (`int`, defaults to `30`): + The total number of search results to fetch. + firts_hit (`int`, defaults to `0`): + The first hit in the numbered sequence of search results to return + num_completion (`int`, defaults to `10`): + The number of completions to generate for the search query. + + Returns: + `ServiceResponse`: A dictionary containing `status` and `content`. + The `status` attribute is from the ServiceExecStatus enum, + indicating the success or error of the search. + The `content` is a list of parsed venue data if successful, + or an error message if failed. + Each item in the list contains venue information including + its name, acronym, type, and URL. + + Example: + .. code-block:: python + + search_results = dblp_search_venues(question="AAAI", + num_results=1, + results_per_page=1, + num_completion=1) + print(search_results) + + It returns the following structure: + + .. code-block:: python + + { + 'status': , + 'content': [ + { + 'venue': 'AAAI Conference on Artificial Intelligence + (AAAI)', + 'acronym': 'AAAI', + 'type': 'Conference or Workshop', + 'url': 'https://dblp.org/db/conf/aaai/' + }, + { + 'venue': ''AAAI Fall Symposium Series', + 'acronym': 'No acronym available', + 'type': 'Conference or Workshop', + 'url': 'https://dblp.org/db/conf/aaaifs/' + } + ] + } + """ + url = "https://dblp.org/search/venue/api" + params = { + "q": question, + "format": "json", + "h": num_results, + "f": first_hit, + "c": num_completion, + } + search_results = requests_get(url, params) + if isinstance(search_results, str): + return ServiceResponse(ServiceExecStatus.ERROR, search_results) + + hits = search_results.get("result", {}).get("hits", {}).get("hit", []) + parsed_data = [] + for hit in hits: + venue = hit["info"]["venue"] + acronym = hit["info"].get("acronym", "No acronym available") + venue_type = hit["info"].get("type", "Type not specified") + url = hit["info"]["url"] + entry_dict = { + "venue": venue, + "acronym": acronym, + "type": venue_type, + "url": url, + } + parsed_data.append(entry_dict) + return ServiceResponse(ServiceExecStatus.SUCCESS, parsed_data) From 597319669be5e99c24a8c43c664729c12fd285f5 Mon Sep 17 00:00:00 2001 From: HONGYI001 Date: Wed, 24 Apr 2024 20:12:35 +0800 Subject: [PATCH 8/8] Revert "implement dblp search" This reverts commit dd1e8feeaf1ee03af91aa4ec0617bfb5603cd268. --- examples/tree_of_thoughts/readme.md | 4 +- src/agentscope/service/web/search.py | 370 +-------------------------- 2 files changed, 4 insertions(+), 370 deletions(-) diff --git a/examples/tree_of_thoughts/readme.md b/examples/tree_of_thoughts/readme.md index 63181e36b..f51c351c1 100644 --- a/examples/tree_of_thoughts/readme.md +++ b/examples/tree_of_thoughts/readme.md @@ -1,4 +1,4 @@ -This folder contains three examples showcasing interesting tasks and algorithms that can be completed using AgentScope. The goal of this example is to implement and compare three prompting strategies—ReAct for external services, Reflect-Improve for enhancing output quality, and Tree of Thoughts for boosting reasoning in large language models (LLMs). +"This folder contains three examples showcasing interesting tasks and algorithms that can be completed using AgentScope. The goal of this example is to implement and compare three prompting strategies—ReAct for external services, Reflect-Improve for enhancing output quality, and Tree of Thoughts for boosting reasoning in large language models (LLMs). The main folder is 'notebooks,' which contains three runnable Jupyter notebooks: @@ -6,4 +6,4 @@ This folder contains three examples showcasing interesting tasks and algorithms - **complicated_flow.ipynb** illustrates how to build a reflection-improvement workflow using AgentScope to generate output with better quality. - **tree_of_thoughts.ipynb** provides an implementation of the latest 'Tree of Thoughts' algorithm, which efficiently improves the capability of large language models to perform multi-step reasoning. -The other folders contain supplementary materials, and you can find more details within the corresponding notebooks. \ No newline at end of file +The other folders contain supplementary materials, and you can find more details within the corresponding notebooks." \ No newline at end of file diff --git a/src/agentscope/service/web/search.py b/src/agentscope/service/web/search.py index 6973eb14f..fd72b7536 100644 --- a/src/agentscope/service/web/search.py +++ b/src/agentscope/service/web/search.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- """Search question in the web""" -from typing import Any, Literal +from typing import Any + from agentscope.service.service_response import ServiceResponse from agentscope.utils.common import requests_get from agentscope.service.service_status import ServiceExecStatus @@ -193,370 +194,3 @@ def google_search( for result in results ], ) - - -def dblp_search( - search_type: Literal["publication", "author", "venue"], - question: str, - num_results: int = 30, - first_hit: int = 0, - num_completion: int = 10, -) -> ServiceResponse: - """ - Search DBLP database based on the type specified. - - Args: - search_type (`Literal["publication", "author", "venue"]`): - Type of search to perform, options are - "publication", "author", or "venue". - question (`str`): - The search query string. - num_results (`int`, defaults to `30`): - The total number of search results to fetch. - firts_hit (`int`, defaults to `0`): - The first hit in the numbered sequence of search results to return - num_completion (`int`, defaults to `10`): - The number of completions to generate for the search query. - - Returns: - `ServiceResponse`: Depending on the type, - the response structure will vary. - The detailed documentation will adjust based on the type parameter. - """ - mapping = { - "publication": dblp_search_publications, - "author": dblp_search_authors, - "venue": dblp_search_venues, - } - if search_type not in mapping: - raise ValueError( - f"Invalid type: {type}. Must be one of {list(mapping.keys())}.", - ) - selected_function = mapping[search_type] - dblp_search.__doc__ = selected_function.__doc__ - return selected_function( - question, - num_results, - first_hit, - num_completion, - ) - - -def dblp_search_publications( - question: str, - num_results: int = 30, - first_hit: int = 0, - num_completion: int = 10, -) -> ServiceResponse: - """ - Search publications in the DBLP database - via its public API and return structured - publication data. - - Args: - question (`str`): - The search query string to look up - in the DBLP database. - num_results (`int`, defaults to `30`): - The number of search results to fetch. - firts_hit (`int`, defaults to `0`): - The first hit in the numbered sequence - of search results to return - num_completion (`int`, defaults to `10`): - The number of completions to generate - for the search query. - - Returns: - `ServiceResponse`: A dictionary containing `status` and `content`. - The `status` attribute is from the ServiceExecStatus enum, - indicating success or error. - The `content` is a list of parsed publication data if successful, - or an error message if failed. - Each item in the list contains publication information - includes title, authors, venue, pages, year, type, DOI, and URL. - - Example: - .. code-block:: python - search_results = dblp_search_publications(question="Extreme - Learning Machine", - num_results=3, - results_per_page=1, - num_completion=1) - print(search_results) - - It returns the following structure: - - .. code-block:: python - - { - 'status': , - 'content': [ - { - 'title': 'Power transformers fault diagnosis - based on a meta-learning approach to kernel - extreme learning machine with opposition-based - learning sparrow search algorithm.', - 'venue': 'J. Intell. Fuzzy Syst.', - 'pages': '455-466', - 'year': '2023', - 'type': 'Journal Articles', - 'doi': '10.3233/JIFS-211862', - 'url': 'https://dblp.org/rec/journals/jifs/YuTZTCH23', - 'authors': 'Song Yu, Weimin Tan, Chengming Zhang, - Chao Tang, Lihong Cai, Dong Hu' - }, - { - 'title': 'Performance comparison of Extreme Learning - Machinesand other machine learning methods - on WBCD data set.', - 'venue': 'SIU', - 'pages': '1-4', - 'year': '2021', - 'type': 'Conference and Workshop Papers', - 'doi': '10.1109/SIU53274.2021.9477984', - 'url': 'https://dblp.org/rec/conf/siu/KeskinDAY21', - 'authors': 'Ömer Selim Keskin, Akif Durdu, - Muhammet Fatih Aslan, Abdullah Yusefi' - } - ] - } - """ - - url = "https://dblp.org/search/publ/api" - params = { - "q": question, - "format": "json", - "h": num_results, - "f": first_hit, - "c": num_completion, - } - search_results = requests_get(url, params) - - if isinstance(search_results, str): - return ServiceResponse(ServiceExecStatus.ERROR, search_results) - - hits = search_results.get("result", {}).get("hits", {}).get("hit", []) - parsed_data = [] - for hit in hits: - info = hit.get("info", {}) - title = info.get("title", "No title available") - venue = info.get("venue", "No venue available") - pages = info.get("pages", "No page information") - year = info.get("year", "Year not specified") - pub_type = info.get("type", "Type not specified") - doi = info.get("doi", "No DOI available") - url = info.get("url", "No URL available") - authors = info.get("authors", {}).get("author", []) - authors_info = info.get("authors", {}).get("author", []) - if isinstance( - authors_info, - dict, - ): # Check if there's only one author in a dict format - authors_info = [authors_info] - authors = ", ".join( - [author["text"] for author in authors_info if "text" in author], - ) - data = { - "title": title, - "venue": venue, - "pages": pages, - "year": year, - "type": pub_type, - "doi": doi, - "url": url, - "authors": authors, - } - parsed_data.append(data) - return ServiceResponse(ServiceExecStatus.SUCCESS, parsed_data) - - -def dblp_search_authors( - question: str, - num_results: int = 30, - first_hit: int = 0, - num_completion: int = 10, -) -> ServiceResponse: - """ - Search for author information in the DBLP database - via its public API and return structured author data. - - Args: - question (`str`): - The search query string to look up - authors in the DBLP database. - num_results (`int`, defaults to `30`): - The total number of search results to fetch. - firts_hit (`int`, defaults to `0`): - The first hit in the numbered sequence - of search results to return - num_completion (`int`, defaults to `10`): - The number of completions to generate - for the search query. - - Returns: - `ServiceResponse`: A dictionary containing `status` and `content`. - The `status` attribute is from the - ServiceExecStatus enum, indicating the success or error of the search. - The `content` is a list of parsed author - data if successful, or an error message if failed. - Each item in the list contains author information - including their name, URL, and affiliations. - - Example: - .. code-block:: python - - search_results = dblp_search_authors(question="Liu ZiWei", - num_results=3, - results_per_page=1, - num_completion=1) - print(search_results) - - It returns the following structure: - - .. code-block:: python - - { - 'status': , - 'content': [ - { - 'author': 'Ziwei Liu 0001', - 'url': 'https://dblp.org/pid/05/6300-1', - 'affiliations': 'Advantech Singapore Pte Ltd, - Singapore; - National University of Singapore, - Department of Computer Science, Singapore' - }, - { - 'author': 'Ziwei Liu 0002', - 'url': 'https://dblp.org/pid/05/6300-2', - 'affiliations': 'Nanyang Technological University, - S-Lab, Singapore; - Chinese University of Hong Kong, - Department of Information Engineering, - Hong Kong' - } - ] - } - """ - url = "https://dblp.org/search/author/api" - params = { - "q": question, - "format": "json", - "h": num_results, - "f": first_hit, - "c": num_completion, - } - search_results = requests_get(url, params) - if isinstance(search_results, str): - return ServiceResponse(ServiceExecStatus.ERROR, search_results) - hits = search_results.get("result", {}).get("hits", {}).get("hit", []) - parsed_data = [] - for hit in hits: - author = hit["info"]["author"] - author_url = hit["info"]["url"] - affiliations = [] - notes = hit["info"].get("notes", {}) - note_entries = notes.get("note", []) - if isinstance(note_entries, dict): - note_entries = [note_entries] - for note in note_entries: - if note["@type"] == "affiliation": - affiliations.append(note["text"]) - affiliations = "; ".join(affiliations) - entry_dict = { - "author": author, - "url": author_url, - "affiliations": affiliations, - } - parsed_data.append(entry_dict) - return ServiceResponse(ServiceExecStatus.SUCCESS, parsed_data) - - -def dblp_search_venues( - question: str, - num_results: int = 30, - first_hit: int = 0, - num_completion: int = 10, -) -> ServiceResponse: - """ - Search for venue information in the DBLP database - via its public API and return structured venue data. - - Args: - question (`str`): - The search query string to look up venues in the DBLP database. - num_results (`int`, defaults to `30`): - The total number of search results to fetch. - firts_hit (`int`, defaults to `0`): - The first hit in the numbered sequence of search results to return - num_completion (`int`, defaults to `10`): - The number of completions to generate for the search query. - - Returns: - `ServiceResponse`: A dictionary containing `status` and `content`. - The `status` attribute is from the ServiceExecStatus enum, - indicating the success or error of the search. - The `content` is a list of parsed venue data if successful, - or an error message if failed. - Each item in the list contains venue information including - its name, acronym, type, and URL. - - Example: - .. code-block:: python - - search_results = dblp_search_venues(question="AAAI", - num_results=1, - results_per_page=1, - num_completion=1) - print(search_results) - - It returns the following structure: - - .. code-block:: python - - { - 'status': , - 'content': [ - { - 'venue': 'AAAI Conference on Artificial Intelligence - (AAAI)', - 'acronym': 'AAAI', - 'type': 'Conference or Workshop', - 'url': 'https://dblp.org/db/conf/aaai/' - }, - { - 'venue': ''AAAI Fall Symposium Series', - 'acronym': 'No acronym available', - 'type': 'Conference or Workshop', - 'url': 'https://dblp.org/db/conf/aaaifs/' - } - ] - } - """ - url = "https://dblp.org/search/venue/api" - params = { - "q": question, - "format": "json", - "h": num_results, - "f": first_hit, - "c": num_completion, - } - search_results = requests_get(url, params) - if isinstance(search_results, str): - return ServiceResponse(ServiceExecStatus.ERROR, search_results) - - hits = search_results.get("result", {}).get("hits", {}).get("hit", []) - parsed_data = [] - for hit in hits: - venue = hit["info"]["venue"] - acronym = hit["info"].get("acronym", "No acronym available") - venue_type = hit["info"].get("type", "Type not specified") - url = hit["info"]["url"] - entry_dict = { - "venue": venue, - "acronym": acronym, - "type": venue_type, - "url": url, - } - parsed_data.append(entry_dict) - return ServiceResponse(ServiceExecStatus.SUCCESS, parsed_data)