txtai

Форк
0
/
59_Whats_new_in_txtai_7_0.ipynb 
594 строки · 115.7 Кб
1
{
2
  "cells": [
3
    {
4
      "cell_type": "markdown",
5
      "metadata": {
6
        "id": "e3wdiK5fGUoZ"
7
      },
8
      "source": [
9
        "# 💡 What's new in txtai 7.0\n",
10
        "\n",
11
        "txtai 7.0 brings a number of major feature enhancements. Highlights include:\n",
12
        "\n",
13
        "- Semantic Graph 2.0\n",
14
        "  - Graph search\n",
15
        "  - Advanced graph traversal\n",
16
        "  - Graph RAG\n",
17
        "\n",
18
        "- Embeddings\n",
19
        "  - Default configuration format now JSON\n",
20
        "  - Move ids storage outside of configuration when content is disabled\n",
21
        "\n",
22
        "- Pipelines\n",
23
        "  - Training support for LoRA / QLoRA\n",
24
        "\n",
25
        "- API\n",
26
        "  - Binary transport support\n",
27
        "\n",
28
        "These are just the big, high level changes. There are also many improvements and bug fixes.\n",
29
        "\n",
30
        "This notebook will cover all the changes with examples.\n",
31
        "\n",
32
        "**Standard upgrade disclaimer below**\n",
33
        "\n",
34
        "While everything is backwards compatible, it's prudent to backup production indexes before upgrading and test before deploying."
35
      ]
36
    },
37
    {
38
      "cell_type": "markdown",
39
      "metadata": {
40
        "id": "p8BbfjrhH-V2"
41
      },
42
      "source": [
43
        "# Install dependencies\n",
44
        "\n",
45
        "Install `txtai` and all dependencies."
46
      ]
47
    },
48
    {
49
      "cell_type": "code",
50
      "execution_count": null,
51
      "metadata": {
52
        "id": "-OXsTQgaGQPM"
53
      },
54
      "outputs": [],
55
      "source": [
56
        "%%capture\n",
57
        "!pip install git+https://github.com/neuml/txtai#egg=txtai[api,graph,pipeline-train] datasets autoawq"
58
      ]
59
    },
60
    {
61
      "cell_type": "markdown",
62
      "metadata": {
63
        "id": "n4EXrtcYIIYE"
64
      },
65
      "source": [
66
        "# Semantic Graph 2.0\n",
67
        "\n",
68
        "The biggest change and reason this is a major release is the addition of a number of new graph-driven patterns. Let's jump right into with that.\n",
69
        "\n",
70
        "## Graph search\n",
71
        "\n",
72
        "The first feature we'll test out is running a search that returns results as a graph. With this change, not only do we get search results, we get how these search results relate to each other.\n",
73
        "\n",
74
        "We'll use a [prompt dataset on the Hugging Face Hub](https://huggingface.co/datasets/fka/awesome-chatgpt-prompts) for all examples."
75
      ]
76
    },
77
    {
78
      "cell_type": "code",
79
      "execution_count": null,
80
      "metadata": {
81
        "id": "hzPD8_cQJNtN"
82
      },
83
      "outputs": [],
84
      "source": [
85
        "from datasets import load_dataset\n",
86
        "\n",
87
        "import txtai\n",
88
        "\n",
89
        "# Load dataset\n",
90
        "ds = load_dataset(\"fka/awesome-chatgpt-prompts\", split=\"train\")\n",
91
        "\n",
92
        "def stream():\n",
93
        "  for row in ds:\n",
94
        "    yield (row[\"act\"], f\"{row['act']} {row['prompt']}\")\n",
95
        "\n",
96
        "# Build sparse keyword index\n",
97
        "embeddings = txtai.Embeddings(content=True, graph={\"approximate\": False})\n",
98
        "embeddings.index(stream())\n",
99
        "\n",
100
        "graph = embeddings.search(\"Linux terminal\", 5, graph=True)"
101
      ]
102
    },
103
    {
104
      "cell_type": "code",
105
      "execution_count": null,
106
      "metadata": {
107
        "id": "1v4s_pT5k8ZX",
108
        "outputId": "adfc0161-a377-46af-bfa0-e157f0bdd64d"
109
      },
110
      "outputs": [
111
        {
112
          "data": {
113
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABOwAAAGVCAYAAABNUG4rAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8WgzjOAAAACXBIWXMAAA9hAAAPYQGoP6dpAACZRUlEQVR4nOzdebgbddk+8HtmkkxmJpnkLF3pQgulgBYKKGtLC7IVEOqCLW4oCggqqMArIALuCMqLCqKyCP6UwovIUkrZwS6AyCJUgYIUulC6nCXrTJJJZn5/HDIkZ19yzmS5P9fVqyfb5JuzJnee7/MIc+fOdUBERERERERERERVQfR6AURERERERERERPQBBnZERERERERERERVhIEdERERERERERFRFWFgR0REREREREREVEUY2BEREREREREREVURBnZERERERERERERVhIEdERERERERERFRFWFgR0REREREREREVEUY2BEREREREREREVURBnZERERERERERERVhIEdERERERERERFRFWFgR0REREREREREVEUY2BEREREREREREVURBnZERERERERERERVxOf1AoiIaGgcAI4gwZH8cAQJglOAULC6/vd6cURERERERDRiDOyIiKqYAwFZtRVmZApMfQqMyDSY+hQ4UqDHdYVCDkpiC9T4JiiJLVDiWyAbbRDgeLByIiIiIiIiGi4GdkREVSirtKB96iHomHIwbL/SdaadBwQJEHqvo3OkAIzoDBiRaYDY9etdtEw0b3kWLZufgWy2j9XyiYiIiIiIaASEuXPnsvSCiKgKOBCQHLcX2qbNQ6p1NmAXAFEa+YHfP06obT1aN61BeOdrrLojIiIiIiKqYqywIyKqAunoDGyesxQ5tbUrYAMqE9aVHCfVvDtSrbMRMNowdd0d0GJvV+b4REREREREVFGssCMi8pAt+rFt1iK0TT8ccOzKhXT93mkBEES0blyFiW+uhGhbo3+fRERERERENGgM7IiIPJKOzsCmOafCUpoAQRz7BTg2/GYnpq1bxmo7IiIiIiKiKsLAjojIA23T5mHrnovHrqquL+9X201+/V60blrj3TqIiIiIiIjIxR52RERjyAGwY+ZR2D5rUdcZgodhHeCGhVv3+gQKviDGb3gMvc+gJSIiIiIiorHiwR4sIqLGVRbWVZntsxZhx8yjvF4GERERERFRw2NgR0Q0RtqmzavasK5o+6xFaJs2z+tlEBERERERNTQGdkREYyAdndHVs64GbN1zMdLRGV4vg4iIiIiIqGExsCMiGmW26MemOad2DZioBY6NTXNOhS36vV4JERERERFRQ2JgR0Q0yrbNWgRLafJ2GuxQiBIspQnbqnz7LhERERERUb1iYEdENIrS0Rlom344INTYr1tBRNv0w7k1loiIiIiIyAM19gqSiKh2OBCwec7S2tkK251jY/OcpXAgeL0SIiIiIiKihsLAjoholCTH7YWc2lo7W2G7EyXk1FYkx+3p9UqIiIiIiIgaCgM7IqJR0jZtHmAXvF7GyNiFrsdBREREREREY4aBHRHRKMgqLUi1zq7d6roiUUKqZTaySovXKyEiIiIiImoYDOyIiEZB+9RDar+6rsix0TH1EK9XQURERERE1DAY2BERVZgDAR1TDq796roiUUL7lIM5fIKIiIiIiGiMMLAjIqqwrNoK2694vYyKsv0Kciq3xRIREREREY0FBnZERBVmRqZ4cr+fnTsBq88+oCLHWjAzivbL55edZ+hTy07PmTMHt912W0XuT1VV3H///YhGoxU5HhERERERUS1jYEdEdW/69Om49tpr8cQTT2D16tX429/+hi996Utl1znooINw8803Y+3atVi1ahWuu+46zJ49u+w6K1aswMKFCwe8P1OfgsKVR2LfSaEKPoqB3f6v7Zh/wwujc3A7D1MvDyLPO+883HzzzWXnLViwAHfccQeefvppPPLII/j0pz/d41DNzc146qmncMcdd7jnGYaBBx54AF/5yldGZ/1EREREREQ1hIEdEdW9X//613jjjTdw/PHHY8GCBbjggguwZcsW9/IFCxbgmmuuwQMPPICjjz4aJ5xwAl588UXcfPPNPUK7wTAi00a8Zp9YZf3iBAlG5IMKu9122w3Tp0/HmjVr3PMOPfRQXHzxxbj66qsxb948fOpTn8Lzzz/f41AXXXQRXn/99R7nL1++HCeffDKCweDoPAYiIiIiIqIa4fN6AUREoykajWLatGm4++67kclkAAAbNmzAhg0b3OtceOGF+OMf/4h77rnHPe+WW27B1KlT8e1vfxtf+9rXBn1/DoAnvtdVVbbm7ANgOw5+9uRGXPnURsxsVvC/H5+Fg6bqMCwbN/1zK3725DtwHOC0Aybi3MOm4v5X23DmQZPx9MY41m1L4yO7hPFuIosl+05Ah2HhK399DdGgD1cdvztaND9ueOZdfP+RrsdSPMYBv/4nAOCt7x6CG555F5/48Dh8aIKGF99N4ot3voot8SwA4MpFu+Ez+0xAs+rD5lgWP3hsA/66bmfvD0wQYEamwgEgoCvkfPHFF2HbtnuVc845B3/4wx/wwgtdVX7JZBLJZLLsMAsXLoSu61ixYgU+97nPlV323nvvIRaL4YADDsDatWsH/TknIiIiIiKqN6ywI6K6FovF8Pbbb+MHP/gBjj76aEyaNKns8unTp2OXXXbBypUre9x25cqV2H///REIBAZ9f44g4eDfvggAmHfDC4hcvgpXPrURil/Eo2fMxeP/7cDUn63Fgt+9gCX7jMeXD/hgPR+eoCFvO9j1yqfxxTtfBQAcPasZj7zRgdYfrMKfX9qGPy3ZGyftPQ77/eo5zL/hBXxn/lTsN7nvrbef228iPrfsP5jwozUwcgX88JiZ7mWvvJfCQdf9E81XrMKPH38bt31mb+za1Hd1myMF4Ahdk29nz56Nd955x70sGAxir732wvjx43Hvvffi0UcfxVVXXYXW1lb3OqFQCN/5znfw05/+tM/72LBhw7CqGomIiIiIiOoJAzsiqntnnHEG3njjDZx11llYvnw57r77bhx00EEA4A452LmzZ2XZzp074ff7EYlEBn1fjuTv9fwT9mxBp5nHr9dugVVwsDmexW/WbsHSuRPc68QzBfz0yXdgFRyYVlfl2gvvJnHPf3bCdoA7X96OKZEgfv7URhiWjdd2GHhlWxr77xLucz2/e3YL3unMIJu3cfu/tpdd9/Z/bcfOtNV17Fd24PWdBg6d3v9jdcSuwmxd15FKpdzzdV2HKIo44ogjcPbZZ+Okk05CLpfDj3/8Y/c65513HpYvX45Nmzb1efx0Oo1wuO/HQ0RERERE1Ai4JZaI6l57ezuuueYaXHPNNdB1HV/96ldxzTXXYNGiRYjFYgCAcePG4d133y273bhx42DbNjo7Owd9X8UKtO6mNyn48AStbPKqKAjYHM+4p99NZOE45bfbkcq5Hxvvh3jby84rQAv0fp8AsC35wXXTuQLC8gfXPW/eVHzlo5MwJRKE4zgIBSS0aL0Hju7jE31AIYtEIoFQ6IPKPsMwAADLli3De++9BwD43e9+h/vuu8+tvps7dy5OPfXUfo+vaVqPbbRERERERESNhoEdETWURCKB3/3ud/jCF76AXXbZBa+99hq2bt2K4447rsfE0+OOOw4vv/wy8vn8oI8vOAUAgG2XJ29bYhm88G4Sh/227ymudve0bhQdNj2Cy4+agaNufAkvbU3CcYAXzv0oBhp1Idhdn4v169eXbV1NpVJuUNfjNoKAAw88ELvssgseeeQRAEAgEIAsy3jiiSfwmc98Bm1tbQCAmTNn4q677hr5AyQiIiIiIqph3BJLRHUtHA7jnHPOwa677gpRFBEMBvH5z3/e7W0HAL/4xS9w+umnY/HixVAUBaFQCF/60pdw/PHH4/rrry87ns/nQyAQcP/5fOXvewgFC0BXFdxuLYp7/gOvt2NCKICvHbwLZJ8IUQD2aFWxYGZ0dD8BfdCDPhRsBztTOYiCgC9/ZBI+PEEb8HbFwG716tXYb7/9IIof/Bm5++67sXTpUowbNw6yLOPMM8/Ec889B9M08ec//xmLFy/G0qVLsXTpUtxwww3YuHEjli5dio6ODgDApEmTEI1G3aEVREREREREjYoVdkRU1yzLwvjx4/Gb3/wGzc3NyGazeP311/GNb3zDnRr75JNP4vzzz8cZZ5yBCy+8EKqqoqOjA+eee26P8Ojqq68uO/3888/jjDPOcE8LTgFCIYfLH92Aaz++B/7wqT1x1VObcNXfN+KYm/6Fnx+/G77/sV0R9Il4q93EL1f13c9tND30RjvuXrcDL3/7IGTzNv780jas3Rjv9zZCIedWEL755pvYvHkzDjvsMKxevRoA8Mc//hGRSAR33nkngK7PzaWXXgqgqzddOp12j5VIJJDP57Fjxw73vBNPPBHLly93vy5ERERERESNSpg7d+7Y7cEiIqoBM2fOxE033YSrr7661+mxA/nvgV+HEZ0BCANtMK0hjgO1cwN2/+dv3bP22WcfnH/++TjttNNGfHhVVbFs2TJ86UtfGlLPQCIiIiIionrEwI6IqBd77703DjnkEPzlL38ZcsXX1tkfR9u0eYBYR0XMdh6tG9dg8hvLvV4JERERERFR3aujV5NERJXz6quv4tVXXx3WbZXElvoK6wBA9HU9LiIiIiIiIhp1HDpBRFRhSrw+gy01sdnrJRARERERETUEBnZERBUmG20QLdPrZVSUL5/BJMWBrus9JuMSERERERFRZTGwIyKqMAEOmrc8C9gFr5dSGXYBE7a/AAFAIBBAU1MTWltbEYlEIMuy16sjIiIiIiKqOyyTICIaBS2bn0HbjCO8XkZlCCJCb/0d7WY7RFGEoiiQZRl+vx+BQACO46BQKCCTycA066uykIiIiIiIyAsM7IiIRoFstiPUth6p5t0BUfJ6OcNnFxDqeBOy2d510raRTqeRTqcBwA3vfD4fQqEQNE2DbdvIZrMwTRO2bXu5eiIiIiIioprEwI6IaJS0blqDVOtsr5cxMqKE1k1r+rzYNE23qi4QCEBRFPh8PqiqCkVR4DgOLMuCYRjI5/NjtWoiIiIiIqKaxsCOiGiUhHe+hoDRhlywqTar7OwCAplOhHe+Pqir53I55HI5AIDP54OiKAgEAggEApBl2Q3vMpkMstnsaK6ciIiIiIiopjGwIyIaJQIcTF13B9468OteL2V4BBFT1y2DAGfIN83n80gmkwAAURQRDAYRDAZ79L3LZrMwDKPSKyciIiIiIqppDOyIiEaRFnsbrRtXoW36fECoocHcjo3Wjauhxd4Z8aFs24ZhGG4wV9r3TtM0qKoK27aRy+VgGAb73hERERERUcNjYEdENMqmvvMYUpP2RSag10ZoZxfgz8Qw8c2Vo3L4vvreKYqCYDDIvndERERERNTwGNgREY0iVVWhqir2+O89eGXvL3m9nMERRExbtwyibY36XZX2vZMkCaqquttm2feOiIiIiIgaFQM7IqJRIAgCwuEwAoFA11bQtn9jsngvtu71Ca+XNqDJr98LLfb2mN9voVBw+94BXWEn+94REREREVEjYmBHRFRhkiQhEolAEAQkEgm3gqx10xoUfEFsn7XI4xX2bcKbK9G6aY3XywCAsr53xaEV7HtHRERERESNgIEdEVEFybKMcDiMfD6PRCLRI0gav+ExAKjK0G7Cmw9i/IbHvV5GrzKZDDKZDICuvnfFyjv2vSMiIiIionrEwI6IqEJCoRAURUEmkynb2llKADBhw2OQ8hls3XMx4NiAKI3pOsvYNiAImPz6vVVTWTeQ0r53oihC07Qefe/y+TxM02TfOyIiIiIiqknC3LlzHa8XQURUy0RRhK7r8Pl8SKVSbiXYQNLRGdg051RYSpM302MdG36zE9PWLfOkZ91oKPa9E0URgiCw7x0REREREdUkBnZERCPg9/uh6zocx0EikRjydkxb9GPbrEVom3742FXb2QVAENG6cRUmvrlyTKbBeqG0710xvGPfOyIiIiIiqgUM7IiIhklRFGiaBsuykEgk4DjD/3Wajs7A5jlLkVNbuwK10Qju3j9uwGjD1HV31E1V3WAU+935/X4IggAAbt870zRhWfUZWhIRERERUW1iYEdENESCICAcDkOWZaTT6YpttXQgIDluT7RNm4dUy+zKVdy9X1EX7ngDMztfgW/zS7ByjdvbrbTvXenWWfa9IyIiIiKiasHAjohoCCRJgq7rEEURyWTSHX5QaVmlBR1TD0H7lINh+5WuM+08IEjA+xVivXIcwCkAYtdMIdEy0bLlWTRvfgay2Y5IJAJRFNHZ2Tkq665FqqpClmVIksS+d0REREREVBUY2BERDZIsywiHwygUCkgkEigUCqN+nw4E5NQWGPpUmPoUGNFpMPUpcKRAj+sKhRyU+Gao8c1QElugJjYjYLRDwAe/5n0+H5qampBIJFhJ1gtZlqEoCvveERERERGRpxjYERENgqZpUFUVmUwGyWTS07U4ABxBgiP64Ig+CHa+659TQD+1d67iRNuOjo7RXmpNY987IiIiIiLyis/rBRARVTNRFN2AK5lMIpPJeL0kCAAEpwAUCkBh6FVy6XQaTU1NCAaDVfF4qpVlWW4oJ4oiVFVFIBBAIBCALMvse0dERERERKOGgR0RUR/8fj90XYfjOIjFYsjn814vqSKK/dmKFYM0MNu2kUql3NPFvnc+n8/9HmHfOyIiIiIiqhQGdkREvVAUBZqmwbIsJBIJOE59dQ8wDANNTU1QFAWmaXq9nJpjGIYbzJX2vStunbZtG5ZlIZ1Os+8dERERERENGQM7IqISgiAgFAohGAzCMAyk02mvlzQqCoUCMpkMVFVlYDdC2WzW3RJb2vdOlmV36yz73hERERER0VAwsCMiep8kSdB1HaIoIh6PI5fLeb2kUWUYBoLBIFRV5TbOChls37tMJsPtyERERERE1CcGdkREAAKBAMLhMGzbRiwWQ6FQ8HpJo862bWQyGXdbbL1t+/Vaf33vwuEwQqEQ+94REREREVGvGNgRUcMr9h3LZDJIJpNeL2dMFavsFEVhaDTK2PeOiIiIiIgGi4EdETUsQRCg6zr8fj9SqVRD9nKzbRumabLKboyV9r3z+XxQVdXtexcMBt3wjn3viIiIiIgaEwM7ImpIPp8Puq4DAOLxeEOHIqW97Op1yEY1y+fzSCQSANj3joiIiIiIujCwI6KGEwwGEQqF3KCk0bcfOo4D0zTdibGN/vnw0mD63hV7D3ILMxERERFR/WJgR0QNJRwOIxgMwjAMVpOVKG6LVVW1LDAib3XvexcMBuH3+3v0vTMMoyEGpRARERERNQoGdkTUECRJgq7rkCQJiUTC7R9GXRzHgWEY0DQNhmGwyq4KDabvXT6fh2mayOVyHq+WiIiIiIhGgoEdEdW9QCCAcDgM27bR2dnJSqQ+FLfFssqu+vXV987v9yMQCLDvHRERERFRjWNgR0R1rbh1MJvNIplMcgrqAIpVdqZpMtisEd373imKgmAw2GvfO04CJiIiIiKqDQzsiKguCYIAXdfh9/uRSqVgmqbXS6oJpb3sksmk18uhYTBN0/1+763vneM4yOVy7HtHRERERFTFGNgRUd3x+XzQdR2CICAej8OyLK+XVFMMw0A4HGagUwfY946IiIiIqDYxsCOiuhIMBhEKhdweXxyeMHSZTAaqqkLTNLdPGtW+wfa9y2azrEglIiIiIvIYAzsiqhvhcBjBYBCmaXJowgil02noug6fz4d8Pu/1cqjC+ut7V9w+a9u2G94x+CYiIiIiGlsM7Iio5omi6IZLiUTC3QJIw5fNZpHP56FpGuLxuNfLoVHWV987VVWhKIrb9840TQa4RERERERjgIEdEdW0QCCAcDgMx3HQ2dnJnmsVlE6nEYlE4Pf72QewgXTve6coCgKBAPveERERERGNIQZ2RFSzin3WstkskskkHMfxekl1JZfLwbIsqKrKKrsGlc/n3WnBoihCURTIssy+d0REREREo4yBHRHVHEEQoOs6/H4/0uk0DMPwekl1yzAMVtkRgK6+d+l0Gul0GgD73hERERERjSYGdkRUU3w+H3RdhyAIiMfjDJFGWbHKTtM0xGIxr5dDVYR974iIiIiIRg8DOyKqGbIsIxwOI5/PI5FIsIJnjKTTaUSjUQQCAfYso14N1PfOcRxYloVMJsOhMEREREREg8DAjohqQigUgqIoME0TqVTK6+U0FMuykMvloGkaAzsa0GD63hUKBWQyGfa9IyIiIiLqAwM7IqpqoihC13X4fD4kk0lkMhmvl9SQ0uk0mpqaIMsyK6Ro0HrreyfLMnw+H0KhEPveERERERH1gYEdEVUtv98PXdfhOA5isRj7YHmoOAlUVVUGdjRspX3vAoEAFEVh3zsiIiIiol4wsCOiqqSqKlRVhWVZSCQScBzH6yU1vHQ6jebmZgSDQVY60ojlcjl3izX73hERERERlWNgR0RVRRAEhMNhyLKMdDoNwzC8XhK9r9h3TFVVBnZUUex7R0RERERUTpg7dy7LVoioKkiShEgkAkEQkEwmOeCgCkmShKamJqRSKYZ2NCZK+94JggDHcdj3joiIiIjqHivsiKgqyLKMcDiMQqGAWCzGF+FVqlAouL3sGNjRWBhM3zvLsmAYBvveEREREVHdYGBHRJ4LhUJQFAWZTMbdFkfVq9jLTlEUbk+kMdVX37ti7zv2vSMiIiKiesHAjog8I4oidF2Hz+dDMplkxVaNsG27rJcdB4KQF9j3joiIiIjqGQM7IvKE3++HrutwHAexWIxb2WqMYRgIBoNQFIWDQchztm0jnU4jnU4DKO97FwqFoGka+94RERERUU1hYEdEY05RFGiaBsuykEgkWKFVg2zbhmma7rZYfg2pmvTW987n87HvHRERERHVDAZ2RDRmBEFAOByGLMswDMOthqHaZBgGFEWBqqr8WlLVYt87IiIiIqpFDOyIaExIkgRd1yGKIuLxuPsCmmqX4zhulZ1hGKyyo6pX2vdOEAQoioJgMNij7102m+VWbyIiIiLyFAM7Ihp1siwjHA6jUCggFouhUCh4vSSqkGIvO1bZUa1xHAeGYbjBXGnfO03ToKoqbNtGLpeDYRjse0dEREREY4qBHRGNquIL30wm41a2UP0oVtmpqspm/lTTuve9K1beFavw2PeOiIiIiMYSAzsiGhWiKELXdfh8PiSTSWQyGa+XRKOkuC1WVVWkUimvl0M0YqV97yRJgqqq7rbZYt+7fD4P0zTZ946IiIiIRgUDOyKqOL/fj3A4DACIxWKsRqlzxa2FmqZx6yDVnUKh0GvfO5/PB13X2feOiIiIiEYFAzsiqihFUaBpGizLQiKR4CCCBlGsstM0jVufqW5173sXDAbd8I5974iIiIiokhjYEVHFhMNhBINBGIbBAQQNyDAMhEIhGIbBwSLUEDKZjLvdv7++d6ZpwrIsj1dLRERERLWEgR0RjZgkSdB1HaIoIh6Pu72fqLFkMhmoqgpN05BIJLxeDtGYKu17J4oiNE1j3zsiIiIiGjYGdkQ0IoFAAOFwGLZtIxaLsbKqwRmGgXA4DJ/Px96F1LBs2y7bGq6qKmRZZt87IiIiIho0BnZENGzFnk2ZTAapVIr96giZTMadGMsqO6Iu7HtHREREREPFwI6IhkwQBOi6Dr/fj1QqBdM0vV4SVRHDMKDrOqvsiHpR2veu2O/O7/e7QR773hERERERwMCOiIaouKVLEATE43G+oKQestks8vk8NE1DPB73ejlEVcuyLPd3KPveEREREVEpBnZENGjBYBChUAj5fB6JRIJbt6hP6XQakUgEfr+foS7RILDvHRERERGVYmBHRIMSDocRDAZhGAbS6bTXy6Eql8vlYFkWNE1DLBbzejlENae0750sy1AUhX3viIiIiBoIAzsi6pcoiohEIpAkCYlEgtuyaNDS6TSi0SgCgQByuZzXyyGqWdls1v3dy753RERERI2BgR0R9SkQCCAcDsO2bXR2dqJQKHi9JKohlmUhl8tBVVUGdkQV0r3vnaqqCAQC7HtHREREVGcY2BFRr1RVhaZpyGazSCaTcBzH6yVRDTIMg1V2RKPEtm2kUin3NPveEREREdUPBnZEVEYQBOi6Dr/fj1QqBdM0vV4S1bBilZ2maQzsiEYZ+94RERER1Q8GdkTkKlZlCIKAeDzOXkhUEel0Gk1NTZBlmVv0iMZIad87n88HVVXZ946IiIiohjCwIyIAQDAYRCgUQj6fRyKRYPUFVUw+n0c2m3W3WBPR2Cr+Xgf673uXyWSQyWQ8Xi0RERERAQzsiAhAKBSCoigwTbOsHxJRpRSr7ILBIAMBIg/11/cuHA4jFAqx7x0RERFRFWBgR9TARFGEruvw+XxIJBKsfqJRUwwAVFVlYEdURbr3vQsGg/D7/WV97yzLgmEYnBRORERENIYY2BE1qEAggHA4DMdx0NnZyRdiNOoMw0BTU5NbzUlE1aWvvnfFIM+2beTzeRiGwb53RERERKOMgR1RA1JVFaqqIpfLIZlMwnEcr5dEDaBQKCCTyUBVVQZ2RFWur753fr8f0WiUfe9GiQPAESQ4kh+OIEFwChAKVtf/Xi+OiIiIxhQDO6IGIggCwuEwAoFA2TYoorFiGAaCwSCr7IhqyGD63tm2jUwmA9M0+SbQIDkQkFVbYUamwNSnwIhMg6lPgSMFelxXKOSgJLZAjW+CktgCJb4FstEGAfxcExER1Sth7ty5/EtP1AB8Ph90XYcgCEgkEtzORJ4JhUKQZRkdHR18YU9U40r73gmCAMdx2PduAFmlBe1TD0HHlINh+5WuM+08IEiA0E8dneMATgEQu95vFy0TzVueRcvmZyCb7WOwciIiIhpLDOyIGoAsywiHw+4WJ9u2vV4SNTBRFNHc3MwqT6I6U9r3ThAECILg9r0zTRO5XM7rJXrGgYDkuL3QNm0eUq2zAbsAiNLID/z+cUJt69G6aQ3CO19j1R0REVGdYGBHVOdCoZC7/bB0SxORlzRNQzAYZJUdUZ0q7XsniqJbfdeIfe/S0RnYPGcpcmpr5YK67t4/bsBow9R1d0CLvV35+yAiIqIxxcCOqE6Joghd1+Hz+ZBKpRrqxRFVP0EQ0NzcjEwmg3Q67fVyiGiUKYqCYDAISZLKts7Wc987W/Rj26xFaJt+OODYoxPU9bjTAiCIaN24ChPfXAnRZvsLIiKiWsXAjqgO+f1+6LoOx3GQSCSQz+e9XhJRD8VpxR0dHdymTdRAeut75zgOcrlc3fS9S0dnYNOcU2EpTYAgjv0CHBt+sxPT1i1jtR0REVGNYmBHVGeKIYhlWUgkEnVZtUD1oVhll81muV2bqEH5fD4oioJAIFA3fe/aps3D1j0Xj11VXV/er7ab/Pq9aN20xrt1EBER0bD4vF4AEVWGIAgIh8OQZRnpdJrN/KnqOY4D0zShqioMw2CVHVEDyufzSCaTAMr73vn9fgQCAbfvXTabhWmaHq+2fw6AHTOPwvZZi7rOEDwM6wA3LNy61ydQ8AUxfsNj6GcGLREREVUZBnZEdUCSJEQiEQiCgHg8XpMVCdSYDMOAoihQVZVVdkQNzrbtst8Dxb53Pp8Pfr8fmqbBtm03vKu2kL8srKsyxXVN2PCYxyshIiKiwWJgR1TjZFlGOBxGoVBALBaruhcwRAMxDAOapsE0zbroXUVElWGapltVV9r3TlVVKIpSVX3v2qbNq9qwrmj7rEWQ8hlujyUiIqoRDOyIalgoFIKiKMhkMu6WIqJaY5qmW2XH72Mi6k02m0U2mwVQ3veuGOR52fcuHZ3R1bOuBmzdczGUxLscREFERFQDPBhbRUQjJYoiotEogsEgkskkQw6qeYZhQJZlSJLHPZ+IqOoV+961t7ejo6MDhmHAcRz4/X5EIhG0traiqakJiqKM+lps0Y9Nc07tGjBRCxwbm+acClv0e70SIiIiGgADO6Ia4/f70dTUBFEUEYvFkMlkvF4S0YhlMhnYtg1N07xeChHVENu2kU6n0dHRgba2NqRSKeTzeUiShFAohNbWVjQ3N0PTNIhi5Z/2bpu1CJbS5O002KEQJVhKE7ZV+fZdIiIi4pZYopqiKAo0TYNlWUgkEnAcx+slEVVMOp2Gruvw+XzI5/NeL4eIalBp37tAIABFUXrte2ea5oh/z6SjM9A2/XBAqLHZq4KItumHI7J9HbfGEhERVTFW2BHVAEEQoOs6QqEQTNNEPB5nWEd1J5vNIp/Ps8qOiCoil8shHo+jra0NnZ2dbg88WZbR1NSElpYWRCIRyLI85GM7ELB5ztLa2QrbnWNj85ylcFBjYSMREVEDYYUdUZWTJAm6rkMURcTj8TFvpk00ltLpNCKRCKvsiKiiin3vgK4+sIqiQJZl+P1+BAIBOI6DQqGATCbjVuj1JzluL+TU1tFe9ugRJeTUViTH7Ql952ter4aIiIh6wcCOqIrJsoxwOIxCoYBYLIZCoeD1kohGVS6Xc6vs4vG418shojpU7HuXTqcBwA3vfD4fQqEQNE2DbdvIZrMwTRO23bOKrm3aPMAu1E7vut7YBbRNm8fAjoiIqEoxsCOqUpqmQVVVZDIZToGlhlKssvP7/bAsy+vlEFGdG0zfO8uyYBgG8vk8skoLUq2zPV51BYgSUi2zkVVaIJvtXq+GiIiIumFgR1Rliv3q/H4/UqnUoLbmENWTXC4Hy7KgaRpisZjXyyGiBpLL5dzWEz6fD4qiIBAIIBAIQJZlOI6D9ZMW1H51XZFjo2PqIZj0xgNer4SIiIi64dAJoiri8/nQ1NQESZIQi8UY1lHDSqfTbm8pIiIvFPvetbe3o6OjA4ZhoGDb2D5+//oI6wBAlNA+5WAOnyAiIqpCDOyIqoSiKIhGoygUCujs7GTDfWpolmUhl8txYiwRVYVi37v3MhLyvqDXy6ko268gp7Z4vQwiIiLqhoEdURUIh8MIhUIwTRPxeByO43i9JCLPpdNp+Hw+yLLs9VKIqAb99a9/xfz58yt6TDMypaLHq7RXvn0gTthz6OGboU/tcd6NN96Iz372s/3e7rrrrsO8efMGdR/77rsvbrnlliGvjYiIqFGxhx2RhyRJgq7rkCQJ8Xjc7ZtDRF3b0bLZLFRVRTab9Xo5RFSFbrzxRjz55JO4/fbbe1z26U9/uuL3Z+pTADsPiL0/hf7s3Am44RNdAykEQYAWkJDKflAxf/Y963H7v7ZXfF1F+/zvc0O/kZ2HqU9B07aXhnSzj3zkI2hqasKaNWvc8/bdd19ccsklmDp1KjZt2oSf/vSneOWVVwAAL7/8MvL5PBYuXIinnnpq6OskIiJqMAzsiDwSCAQQDodh2zY6OztRKBS8XhJR1TEMA01NTZBlmaEdEXnOiEwDhL77193+r+1uIDe9KYgN3z0U0372NOKZobe5EAXAHouCe0GCEelZYTeQJUuW4P7773dP67qOX//617j22mvxwAMP4MQTT8SvfvUrfPzjH0cqlQIALF++HEuWLGFgR0RENAjcEkvkAU3TEIlEYFkWYrEYwzqiPhSr7NjLjoiGasWKFVi4cCEA4OMf/zjuuOMOnHHGGXj88cfx2GOPlW33/MEPfoALLrjAPR0KhfDSSy9h0qRJkCQJt912G84555yuCjtBwG9O3gOPfHUuhCHOavjGoVPwn+8chPbL5+PxM/fDnuNU97K3vnsIvrtwOtaecwBSP1qAvcdrKFx5JM45ZBes+/ZBSPxwAW77zN6IKj4sO/VD6LzicDx/7kcxu9sxTt67FQBw2gET8cK5H8X3jtwV7106D1u/Nw/nHvbBlt65k0P4+9f2x87LD8eGa07DT3/2M0QikUE9Dp/Ph0MPPRT//Oc/3fOOPPJI7NixA/fccw8sy8I999yD9vZ2HHnkke51nnvuORxwwAFQVbW3wxIREVEJBnZEY0gQBEQiESiKglQqhUQiwX51RANIp9MQRRHBYH01eieisTVz5kxkMhkce+yx+O53v4tvfetbmDJl4J50hUIBF198MT7zmc/g8FnjcdLerfj0nPH44p2vYih/wr928C44/aOTcPJtr2D8j9bgnn/vxH2n7QO/9EHqd9oBE/Hl/3sN+mV/x/o2AwBw8t7jcPjvXsDsq5/B0bOa8eSZ++O6p7eg9Yer8fLWFH6+aLc+7/NDEzQYVgFTf7oWpy77N646fnfMbFYAdFXvXbLyLUz68Rrsc+0/MH78eJx77rmDeizTpk1DMBjEO++84543a9YsrF+/vux669evx6xZs9zT27dvRy6Xw+677z6o+yEiImpkDOyIxojP50NTUxN8Ph/i8ThM0/R6SUQ1oVAouL3siIiGKxaL4f/9v/+HfD6PF154Ae+99x5mz549qNtu3boVP73ql/jTkr1x46f2xFf/+hq2JYfWd/acQ3bBFY++jf+2myjYDq57egsUv4SDpurudX737Lt4o82A7QBWoSsN/OWqTeg083gvmcOqtzvx6vY01m6Mo2A7+Ou6Hdhvl3Cf99mWtvC/qzcjbzv4+4YY3unMYO7kEADglfdSWLsxjrztYEfKwp/+cgc+8pGPDOqxhMNhZDIZ2LbtnqeqKpLJZNn1kslkjwrpdDoNXddBRERE/WMPO6IxEAwGEQqFkM/nkUgkyp7gEtHA0uk0mpuboSgKw24iGpaOjo6y06ZpDumNgMf+vgbf+q6ArYkcVrzePuT737VJwZ+W7I1CSWO6gCRiSiQIIA4A2Bzr2atze+qDYNCwbMTMfMnpAkKBvnvqld4WANK5AsJy1/V3a1HwixN2x0em6AgFJPjsg5HPD67XXjKZRDAYhCiK7nMawzB6BHGhUAidnZ1l52mahkQiMaj7ISIiamQM7IhGWTgcRjAYhGEYSKfTXi+HqCbZto1MJgNVVZHJZLiVnIgqyjCMsm3348aN63GdC849B6/uSGNKRMbXD52C65/eMqT72BzL4DsPvImH3+jo8zr2GP5u++3i2XizzcCX/u8fiGfy+Ib1EH58xfcHddtNmzYhk8lg1113xYYNGwAAb775ZllfQACYPXs2/vznP7unJ0yYgEAggP/+97+VeyBERER1iltiiUaJKIrudMtEIsGwjmiEDMOAIAhQFMXrpRBRFZEkCYFAwP3n9/uHfIzXX38dhx56KFpbW6GqKs4666yyyxcsWIBjjzoSX7zzVXxu2X/wo2NmYs7EoQ3D+e2z7+KKo2dij9auqr6wLOGkvVv7rZAbTXrQh2S2gEQ2jykRGV/6wucGfdt8Po9nnnmmbAvtE088gQkTJmDx4sXw+XxYvHgxWltb8cQTT7jXOfDAA/Hiiy/CMIyKPhYiIqJ6xMCOaBQEAgE0NTUBADo7O5HN9tziQkRDY9s2TNOEoigQhjqakYjq1ne+8x384x//cP/de++9Qz7GihUr8OKLL+Kee+7BnXfeieeeew4AoOs69thjD1xxxRW45n//FztiKby0NYUfPPY2/nLqhxD0Df6p9PVPb8FtL7yHv37hw+i84nD85zsH49R9Jwx5rZVywQNv4oS9WhC74nDc84UP4/HHHxvS7e+8806cdNJJ7ulEIoHzzjsPp556KlavXo1TTz0V3/rWt8r62p1wwgm48847K/YYiIiI6pkwd+5c7isiqiBVVaFpGrLZLJLJJLfuEVWQIAhoaWmBYRis0CCiIRFFEZIkQZKkXj8uchwHtm2jUCigUCiUfbx+/68hHd0VqKc3DRwHaucG7P7P3w75ptdffz1uv/12rF27dsDr7rvvvjjvvPNw+umnD2eVREREDYeBHVGFCIIAXdfh9/uRTqfZGJ9olGiaBkVR0N7ezkCciFzF4K23ME4URbcytxjIlQZxpcFcf4Ohts7+ONqmzQPEOmoDbefRunENJr+x3OuVEBERUYk6erZB5B2fzwdd1yEIAuLxOCzL8npJRHWr2BxeVVX2hiRqIIIg9FshV7pVvjSMy+fzPUK54VISW+orrAMA0df1uIiIiKiq1NkzDqKxFwwGEQqFkM/nkUgk+n1nnohGznEcmKYJVVVhmiZ/5ojqRDGQ62vram+BnG3byOVyPbaujhYlXp/BVjSz3eslEBERUTcM7IhGIBQKQVEUmKaJVCrl9XKIGkZx+ISqqvzZI6oh/VXIieIHAxwcx3HDt1wu16OnnFfb4WWjDaJlwvbXz7RqXz6DcX4LaG1FoVBANptlj1AiIqIqwMCOaBhEUYSu6/D5fEgkEpwCSzTGHMeBYRjQNA2GYbDKjqhK9Fch11sgZ9s28vk8stlsWShXrf0pBTho3vIs2qYfDojSwDeodnYBTZufQSqZRDAYhM/ng6ZpUFXVrV7k71giIiJvMLAjGiK/3w9d1+E4Djo7O0d16w0R9a24LVbTNCSTSa+XQ9QQhjNpNZ/Pu9tWiyFdLQdALZufQduMI7xeRmUIIpo3P4NMJoNMJgOg63mOoiju/8FgEI7jwLIsmKbJPr1ERERjhIEd0RCoqgpVVZHL5ZBMJqu2AoCoUaTTaYRCIRiGwfCcqAJEUew3lCvtI1faN663bav1SjbbEWpbj1Tz7rVdZWcXEOp4E7LZXna2ZVluKCeKIlRVRSAQQCAQgCzLcBwH+XwepmlyhwEREdEoYmBHNAiCICAcDiMQCMAwDPZ2IaoSmUzGDdJZZUc0sGqYtFoPWjetQap1ttfLGBlRQuumNf1exbbtsj6hqqpClmX4fD53twH73hEREY0OBnZEAyg+KRUEAfF4nFtBiKqMYRgIh8OssiNCVyDXV4VctUxarQfhna8hYLQhF2yqzSo7u4BAphPhna8P6Walb1rKsgxFUdj3joiIaJQIc+fO5Z4+oj7IsoxwOIx8Po9EIsEnn0RVqqmpCYVCAYlEwuulEI264Uxa7b5dtZoHO9SKdHQG3jrw60BJCFozHAe7PXcdtNg7FTlcad+7YijMvndEREQjwwo7oj6EQiEoigLTNMu2gxBR9TEMw53cnM/nvV4O0YjU+6TVeqHF3kbrxlVomz4fEMSBb1AtHButG1dXLKwD2PeOiIhoNDCwI+pGFEX3hX8ymXSnphFR9cpms8jn89A0DfF43OvlEPWrtBqudLtqceBDaYVSaQDXfdsqq769N/HNlYiP/zCsYLQ2tsbaBfgzMUx8c+Xo3QX73hEREVUEAzuiEn6/330yGYvFWKlDVEPS6TQikQj8fj+3X5GnOGm1cYi2hWnrlnVtja0Fgohp65ZBtMfudyT73hEREQ0Pe9gRvU9RFGiaBsuykEgkuJWIqAZFo1EAQCwW83QdVN+Kk1Z7q5Drb9Jqbx9TfYjNXIhNsz7u9TIGNPm1ewacDDtWfD4fVFVl3zsiIqI+sMKOGp4gCAiHw5BlGel0mtsziGqYYRissqMR62/SarF6rsi27X4r5PjmT/1TFAXjkv+Bs1HF5ukf83o5fZrw5sqqCesAuAO9gP773mUyGbYnISKihsTAjhqaJEnQdR2iKCIejyOXy3m9JCIagVwuB8uyoGkaq+yoX8OZtGpZFietUhlVVaFpGgzDQHTng8jlctg+a5HXy+phwpsPYvyGx71eRp/663sXDocRCoXY946IiBoOt8RSw5JlGeFwGIVCAfF4nH1TiOqE3+9HNBplCN/g+qqQ6y2Q62vbKgM56k+xB1v36vy2afOwdc/FgGN7O4jCtgFBwOTX762qyrqhkmUZwWDQ3Tpb/Jm1LAuGYXBrORER1S0GdtSQik+yM5kMksmk18shogqLRCIQRRGdnZ1eL4VGSW+TVkvP623Sam/BHN+soeEIhUJQFAWpVAqmafa4PB2dgU1zToWlNAGC2MsRRpljw292Ytq6ZdBib4/9/Y+S7n3vBEGAbdvI5/MwDIOtEIiIqK4wsKOGIooidF2Hz+dDKpViTxSiOuXz+dDU1IREIoFsNuv1cmgYioMdhjpptbePiSopFAohGAwO+DzCFv3YNmsR2qYfPnbVdnYBEES0blyFiW+uHNNpsGOttO9d8XcC+94REVE9YWBHDcPv90PXdTiOg0QigXw+7/WSiGgU6boOSZJYZVelepu0Wvpxb5NW+wrliMZKcUhVMpkc9JsB6egMbJ6zFDm1tStQG43g7v3jBow2TF13R11V1Q1Wse9d8fdHsf8k+94REVGtYmBHDUFRFGiaBsuykEgk2JOIqAFIkoTm5mYkk0lWWnikvwq5viat9hbM8Xc2VQNd1xEIBJBIJIbcH9OBgOS4PdE2bR5SLbMrV3H3fkVdqH09WjetQXjn6xDAnxf2vSMionrAwI7qmiAI7rvhhmEgnU57vSQiGkPhcBh+vx8dHR1eL6Uu9Vch19uk1e4DHThplWpFJBKB3+8fVljXXVZpQcfUQ9A+5WDYfqXrTDsPCBJQUlnag+MATgEQfQAA0TLRsuVZNG9+BrLZPqI11TP2vSMiolrFwI7qliRJ0HUdoigimUxyWiRRA5IkCU1NTexZOUz9hXGS9EF1UH+TVovVc0S1SBAE6LoOv9+PeDxe0XDHgYCc2gJDnwpTnwIjOg2mPgWOFOi5jkIOSnwz1PhmKIktUBObETDaWU03ROx7R0REtYSBHdWlQCCAcDgM27aRSCS49YGogbHKrm9DnbTaV4UcAzmqR4IgIBKJQJIkxOPxMel96wBwBAmO6IMj+iDY+a5/TgH91N7RMCmKgmAwWNb3zrZtZDIZmKbJ6l8iIvIUAzuqO5qmQVVVZDIZJJNJr5dDRB4TRRHNzc1Ip9MwTdPr5Yyp0kmrvYVyvQ126Gu4A1Ej8SKsI2/11vfOcRzkcjn2vSMiIk/4vF4AUaWUbltJpVIN98KciHpXrJYoBvn1VDEx3EmruVyOk1aJ+iCKIiKRCERRRCwW489Hg8hms+7k39K+d8Ugr9j3zjRNtlkhIqIxwcCO6oLP54Ou6wCAWCzGd8KJqIxhGAgGg1AUBYZheL2cIemvQq63wQ6FQgG5XI6TVomGQRRFRKNRAGBY18Dy+TwSiQSA8r53fr8fgUDA7XuXzWb5BjEREY0aBnZU8xRFgaZpsCwLyWSSvZSIqAfbtmGaJhRFqbq+RMOZtFp8oVgaylXTYyKqRZIkIRKJAOgK6/h8goCuvx+pVMo9Xex75/P54Pf7oWkabNt2wzt+3xARUaUwsKOaFg6HEQwGYRgG0um018shoipmGAYURYGqqmP6+2I4k1bz+by7bZWTVolGXzGscxwH8XicP2/UJ9M03aq60r53qqpCURT2vSMioophYEc1SZIk6LoOSZKQSCTcniNERH1xHAeGYUBVVRiGUbGKNFEU+w3lSvvIlfaN623bKhGNPZ/Ph0gkAtu2EYvFWK1Kg9a9752iKAgEAux7R0REFcHAjmpOIBBAOByGbdvo7Ozku5dENGjFbbFDqbIb7qTVfD7PSatEVa4Y1hUKBcTjcYZ1NGz5fB7JZBJA1xs5iqJAlmX2vSMiomFjYEc1RdM0qKqKbDaLZDLJJ9ZENCSO48A0Taiq6vYaEgShzwo5Tlolql9+vx+RSASWZSGRSPA5BVWMbdtIp9PuG0Pse0dERMMhzJ07l89OqOoJggBd1+H3+5FOp/nOJBENSfcwrthnCECfk1a7b1flYAei+hEIBKDrOizLQjwe93o51EACgQAURYHf74cgCHAcx+17Z5om8vm810skIqIqwQo7qno+nw+6rkMQBMTjcViW5fWSiKjKDHXSaqFQgCRJblNwTlolahzFsC6XyyGRSHi9HGowuVzO7WfHvndERNQfBnZU1YLBIEKhEPL5PBKJBLcMEDWoYgDXWyhXOtihdNJqcbBDaYVc6e+Q5uZmN7QjosYgyzLC4bDbWoPIS4Ppe1coFJDJZLi7hIioATGwo6oVDocRDAZhmiZSqZTXyyGiUTTcSauWZQ170qphGAiFQm6VHRHVt+KbgAzrqBr11vdOlmX4fD6EQiH2vSMiakAM7KjqiKKISCQCSZKQSCSQzWa9XhIRjVBx0mr3gQ5eTlrNZDJQVRWapnFbHFGdUxQFoVCIbwJSzTBN062qK+17p6qq24eVfe+IiOobAzuqKoFAAOFwGLZto7Ozk1UvRDWiv0mrxeq5Itu23fAtl8v1qJAbyz5y6XQauq7D5/PxBQ9RnSoG84ZhuNVLRLVkoL53juPAsixkMhm+0U1EVEcY2FHVKD6hLm5VYfN3ourSVxjX32AHy7KqetJqNptFPp+HqqqssiOqQ8XnFul0mv0qqS6w7x0RUeNgYEeeEwQBuq7D7/cjlUrxyQWRR/qrkJMkyb1e6WCHfD7vDnao1UmrhmGwyo6oDmmaBlVV+dyC6hb73hER1TcGduQpn88HXdchCALi8Tgsy/J6SUR1azQmrdaDYpWdpmmIx+NeL4eIKiAUCkFRFCSTSWQyGa+XQzQmBtP3zrIsGIbBN6iIiGoAAzvyTHFaWz6fRyKRqLsQgGisFQc7jOWk1XqRTqcRiUTg9/v5xgFRjQuHw5BlmYOrqKH11feu2PuOfe+IiKofAzvyRPGdb05rIxq83iatln7c26TV4laY0oCOw1x6yuVysCwLmqYhFot5vRwiGiZd1xEIBJBMJhlCEL2Pfe+IiGoTAzsaU6Iour2i+M43UU/9VchV66TVepFOpxGNRhEIBNyqBCKqHcWwLpFI8GeYqA/se0dEVDsY2NGY8fv90HUdjuMgFouxdwY1pP4q5HqbtGrbdtVPWq0XlmUhl8tBVVW+2CeqMcUt7eyHSzQ0vfW98/l87HtHRFQFGNjRmFBV1X0RnEwmGTZQ3arEpNVi9RyNPcMwWGVHVEMEQUAkEoEkSQzriEaIfe+IiKoLAzsaVYIgIBwOIxAIwDAMGIbh9ZKIRoSTVutbscpO0zQGdkRVrntYx+ofosrp3vcuGAwiGAz26HuXzWb5/J6IaJQwsKsjDgBHkOBIfjiCBMEpQChYXf97sB5JkhCJRCAIAvvJUM0onbTaWyjX22CHYpVc8WMGcrUtnU6jqakJsiyzgoCoSgmCgGg0ClEUEYvFOEyHaBTZtl32xntp3ztN06CqKvveERGNAgZ2NcqBgKzaCjMyBaY+BUZkGkx9Chwp0OO6QiEHJbEFanwTlMQWKPEtkI02CBi9bamyLCMcDiOfzyORSPAPN1WN4U5a7V4hxxeH9SufzyObzULTNAZ2RFVIFEX3DUGGdURjj33viIjGhjB37lw2E6shWaUF7VMPQceUg2H7la4z7TwgSIDQTx2d4wBOARC7MlrRMtG85Vm0bH4Gstle0TWGQiEoigLTNJFKpSp6bKLB6K9CrrfBDt0HOnDSKkmShKamJqRSKWQyGa+XQ0TvE0UR0WgUABCLxfiGIFEVKfa98/v9bpsQ9r0jIho+BnY1wIGA5Li90DZtHlKtswG7AIjSwDccyPvHCbWtR+umNQjvfG1EVXeiKELXdfh8Pr7IpVE1nEmrvYVyDOSoP+FwGH6/Hx0dHV4vhYjwQasNx3EQj8cZ1hFVMUEQoCgKgsFgWXjHvndERIPHwK7KpaMzsHnOUuTU1soFdd29f9yA0Yap6+6AFnt7yIfw+/3QdR2O4yCRSLD8nUZkOJNWewvm+GKORqJYZZdOp92tP0TkDUmSEI1GYds2YrEY33AhqjGlfe+K4V2x5YhhGHzORkTUCwZ2VcoW/dg2axHaph8OOPboBHU97rQACCJaN67CxDdXQrStQd1MURRomgbLspBIJPgkmgYkimK/oVz3SaulQRwnrdJYCoVCkGUZ7e2VbR1ARIPn8/kQiURQKBQQj8f5PIOoxgUCAXfirCiKcByHfe+IiHrBwK4KpaMzsGnOqbCUJkAQB75BpTk2/GYnpq1b1m+1nSAICIfDkGUZ6XSape3kGu6k1d4+JvKSKIpobm5mlR2RR4oV/AzriOqTJElQVbVH37t8Pg/TNNn3jogaGgO7KtM2bR627rl47Krq+vJ+td3k1+9F66Y1PS6WJAm6rkMURSSTSeRyOQ8WSV4RBKHPCrn+Jq32FswRVbtilV1HRwfDAqIx5Pf7EYlEYFkW4vG418shojGgqir73hERvY+BXZVwAOyYeRS2z1rk9VJ6mPDmSozf8BiKEYwsywiHw+673dyWWJ+GM2m1t1COAQfVumKVnWEYfLFANEYCgQB0XUcul0MikfB6OUTkgWAwiGAwyL53RNSwfF4vgLpUa1gHwF3XhA2PQdM0qKqKTCaDZDLp8cpoJIYzaTWfzyObzXLSKjUU27ZhmiYURYFpmvyeJxplxTcGGdYRNbZMJoNMJgOgq+JWURT3/2Aw6Pa9M00TljW43ttERLWEgV0VaJs2r2rDuqLtsxYh5BfQ2v4Sksmk+8eTqldpNVxvFXLdBzsUA7hcLsdJq0TdGIaBYDAIVVWRTqe9Xg5R3SqGddlslm8MEpHLsiw3lBNFEZqmwe/3IxAIQJZl9r0jorrEwM5j6eiMrp51NeCt6cdCansbwUyb10shDH7SKoCyLaqWZfXYukpE/XMcB6ZpQlVVmKbJnxuiURAMBhEOh2GaJlKplNfLIaIqZdt2WaCvqipkWYbP54Ou6+x7R0R1gz3sPGSLfqw/7EJYwai3AyYGyy7An4lh9tqrIdosOx9txUmr3Qc6cNIqkTcEQUBzczOy2SzDBKIKUxQFoVAIhmGwipWIho1974ionrDCzkPbZi2CpTQBgjjwlauBKMFSmrBt1iJMXn+/16upef1NWi1WzxUVt6YWt6x2D+XYU4to9DmOA8MwoGkan/QTVZCqqtA0Del0mtUwRDQiffW9KwZ57HtHRLWEgZ1H0tEZaJt+OFBSJVUTBBFt0w9HZPs6aLG3vV5N1RvOpFXLsjhplahKFbfFqqrKKjuiCigOs0qlUjBN0+vlEFEd6d73TlVVBAIB9r0joprBwM4DDgRsnrMUcGxAqIGtsN05NjbPWYrZq6+EgMYOkvqrkJOkD762pYMd8vl82WAHBnJEtaVYZWeaJrecE41AKBSCoigM64ho1Nm2XfZGG/veEVEtYGDngeS4vZBTW71exvCJEnJqK5Lj9oS+8zWvVzOqRjpptXget84R1Q/TNKEoClRV5RRLomEKh8OQZZmT54nIE4ZhuMGcLMtQFAU+n8+t+mXfOyKqBgzsPNA2bR5gF2pj0ERf7ALaps2r+cCuONiBk1aJaCgMw3Ab5LPKjmhoSsM6bkMjIq9ls1n3dxH73hFRNWFgN8aySgtSrbO9XsbIiRJSLbORVVogm+1er6ZPvU1aLf24t0mrtm0jm832mLhKRFSUyWTcRvmJRMLr5RDVDF3XEQgEkEgkkMvlvF4OEVEZ9r0jomrCwG6MtU89pPar64ocGx1TD8GkNx7wdBn9Vchx0ioRjZZ0Og1d1+Hz+ZDP571eDlHVi0Qi8Pv9iMfjrFIhoqrHvndE5DUGdmPIgYCOKQfXR1gHAKKE9ikHY+IbK0Z1+ER/FXK9TVq1bZuTVolo1GWzWeTzeWiahng87vVyiKqWIAiIRCLw+XwM64ioZg2m751lWUin02yXQ0QVwcBuDGXVVth+xetlVJTtV5BTWyAbbcM+RiUmrRar54iIxlI6nXarhhhCEPVUDOskSUIsFmM1KhHVhb763smy7G6dZd87IhopBnZjyIxMAQD8dvFsxDN5XPzQWx6vqDIMfWq/gV21TVqdM2cOLrjgApx22mkVOV5/Jk2ahOuvvx5LlizhH2uiOpTL5WBZFlRVZZUdUTeCICAajUIURcTjcYZ1RFSXBtv3LpPJcCo2EQ3JiAK7G2+8Efvssw/y+Twsy8J///tfXHPNNXj11Vcrtb66YupTADuPc+5dP2r3Mb0piA3fPRTNV6xCPDPwE+PHz9wP9/1nJ369dsvw7tDOIxOZAl/buj5Dud4GOxSr5Iofdw/kzjrrLMyePRvf+c53hreufpx33nm4+eab3dNLlizBSSedhN133x1r167tcZ/nnHMOFi5ciBkzZuDOO+/EL37xi7LLDzroIJx33nmYNm0atm/fjl/+8pd4+umnAQDvvfceXnnlFXz605/GsmXLKv5YiMh7hmGwyo6oG1EUEYlEIAgCYrEYhzcRUUPor+9dOBxGKBRi3zsiGjRx4Kv071e/+hUOO+wwHHXUUVi3bl2PMGMkfL7KFwCWbrEca0ZkGiDUSf+69/kkH3ItM9HU1ARd16GqKnw+HxzHQS6XQyqVQjweR0dHB3bu3In29nakUikkk0mk02lkMhlYljUq21lL+9sV7bbbbpg+fTrWrFnjnrdz507ceOON+Nvf/tbrcTZv3oxf/epX+Pvf/97jsl122QXXXHMNbrjhBsyfPx/XXnstfvGLX2CXXXZxr7N8+XIsXbq0Ao+IiKpRscpO0zSvl0JUFURRRDQaZVhHRA3PMAx0dnaira0NiUQClmVBkiRomobW1lY0NzcjHA57+hqViKrXiAO7onw+j+XLl2PSpEloamrq9TqTJk3CSy+9hE984hNYsWIFnnzySVx88cVuMHfAAQdg1apVOOWUU/Dggw/i1ltvBQAcf/zxuPvuu7Fq1Srccsst2HPPPd1jhkIhXHXVVVi1ahX+9re/YenSpXjppZfcy2+88Uacd955+O1vf4unn34ahx12GA4++GD85S9/wapVq/DII4/g4osvhizL7m1WrFiB008/HX/+85/x9NNP47rrroOu67j44ouxatUq3Hfffdh333173Mfvfvc7PP3007jtttswbtw4nHXWWXjiiSfw0EMPYeERR3RV2AkCbjllL1xz4iwAXRVxhSuPxOf3m4j1FxyM9svn45ZT9oJP/KAq7VMfHof1FxyMjisOx+8/uSfuP20fXHbUjEF9XW45ZS/8/pN74vZTP4TYDw7Hq+cfhAUzowCAq0/YHfN3jeLKRbsj/oPDseLLXY9JC0j49Ul74O2LDsV7l87DrZ/ZC7osla33SwdMwvoLDsamS+YhqU7EI488gqOPPho33XQT7r//flxyySUQBAGZTAYtLS14/vnncdJJJ+G+++7DQw89BADYc8898Yc//AFPPfUU7rvvPnziE58AACxcuBBf+cpXMH/+fKxduxZr1651H8+pp56Kv/3tb1i1ahVuvPFGzJjxweeh+HW77bbb8Mwzz2DmzJk9Ph8LFizAiy++WBYQPvHEE3jqqacQi8V6/RwuX74ca9euRTqd7nHZoYceitdffx2rV6+G4zhYvXo1/v3vf+PEE090r/Pyyy9j/PjxZWslovqSTqfh9/sRCAS8XgqRpyRJQjQaBQDEYjH2lyUiel82m0U8HkdbWxs6OzuRy+UgCAJkWUZzczNaWlqg6zr8fr/XSyWiKlGxwE6WZXziE59AZ2cnEolEv9c98sgjsWTJEnzmM5/Bvvvui9NPP929TFVV7LHHHvjkJz+Jr371q9h///1xySWX4Cc/+QmOPPJIPPbYY7j++usRCoUAAN/97nehKAqOP/54nHnmmTjhhBN63N9JJ52E66+/Hoceeij+8Y9/IJvN4oc//CEWLlyIL3/5y/jIRz6Cz3/+82W3OeaYY3D++efjmGOOwYQJE/CnP/0J//jHP7Bw4UKsXLkSl1xySdn1jzvuOFx11VVYsGABDMPATTfdhEQigaOPPhq/+93vcNn3L4Pkl9GX42Y344Bf/xMfvuYfOHK3JnxuvwkAgFmtCm5bsjfOvf8NjPvhavxzcwLH7NHc/xejm8/sMx6//8e7aL5iFf780nbccspeAIALV/wXq9+J4aKV/0Xk8lU44Y8vAwBu/vSeaFZ9mHvtc9jt50/DL4r4zcmzy4758b1bceB1z2O3q56GLXW9QD3hhBNw5pln4vjjj4eu67jgggvKbrNgwQJ87nOfw4knnoiWlhbccMMNuOuuu3DkkUfiO9/5Ds4++2wceOCBeOqpp3DzzTdj9erVOOyww3DYYYcBAE455RQsXrwY3/rWt3DEEUfgiSeewLXXXltWifnxj38cl112GQ477DC88847PT4Xs2fP7vX84eqtik8URcyaNcs9nc/nsXnzZsyePbvHdYmoPliWhVwuxyo7amjFsM5xHIZ1RET9yOfzSCQSaG9vR0dHB0zThOM4CAQCiEajaG1tRTQaRTAY9HqpROShEQd23/zmN7Fq1So8/fTTOO6443D++ecPuPXhd7/7HVKpFHbu3IlbbrmlLGSTJAm/+tWv3KacJ5xwAh588EG8+OKLyOfzuP3225FIJDBv3jyIoohjjz0WN9xwA1KpFNra2nDbbbf1uL+VK1fiP//5D4CudzZeeuklrF+/HrZt491338Xdd9+Nj3zkI2W3ueuuu7B9+3akUimsWbMG8XgcTzzxBGzbxiOPPILdd9+9LCh68MEHsWHDBliWhSeeeAKKomDZsmUoFAp46KGH0NQUxfSmvn/h/ujxd5DKFfBeMoeH3+jA/ruEAQCf2WcCnvhvJx5+owMF28FN/9yKN9qG1u9g5fp2/H1DDLYD3Pr8VuzapKBZ7X27cavmxyc/PB7fuO8NxDN5GJaNyx/dgM/sMx4lRX/44WNvI57Jw7Q+eDJ+6623YufOnUilUvjtb3+LRYsWlfWv+/3vf49UKuV+XV988UU8+uijsG0bb731Fu677z4sWrSoz8exZMkS3HDDDdi0aRMKhQKWLVuGYDCIOXPmuNe56667sHHjRti23Wtza13Xy/pKjNSzzz6LD33oQ1i4cCEkScLChQux7777uoFyUTqdRjgcrtj9ElH1SafT8Pl8ZRXbRI3C5/MhGo2iUCgwrCMiGoJi37uOjg60tbUhnU6jUCi4fe+KW2dVVfV6qUQ0xkbcJO43v/kNbr/9dowbNw7XXnstZs2aVbYltTfvvfde2cfjx493T6dSqbJAZcKECXj++efLbv/uu+9iwoQJiEaj8Pv92LZtm3tZ6cd9nbf33nvj3HPPxe677w5ZliFJEjZu3Fh2nfb2dvfjTCZTdto0TYiiiGAw6K61+/U7OjrKTgNAKNB3b4JtyZz7cTpXQFTp+tJM1gPYHC+fJrQ5lu3zOAMfu+sJdFj2ocPoGWjt2hSEJAp4638OKTvfdhxMDH+w1WtTrOeEo7a2Nvj9fjiOgx07diAQCKC5udkN7Uq/DpMnT8a8efOwatUq9zxRFPv93pk8eTJ+/OMfl70I8Pl8mDBhwgePtZevf6lEItEjTBuJjRs34qKLLsJZZ52FK664Av/617/w8MMP9+i/qGkakslkxe6XiKpPPp9HNpuFqqrIZof2e5qolvl8PkQiERQKBcTjcTiO4/WSiIhqlmEY7kAKWZYRDAbh9/uhaRpUVYVt27AsC4ZhsEcoUZ2r2FSHnTt34kc/+hFuvvlmPPnkk9i5c2ef1500aZIbaE2cOBE7duxwL+v+JG/79u2YPHly2XmTJ0/G9u3bEYvFYFkWJk6cWHa87rq/y/uzn/0M999/P771rW8hk8ngs5/9LE466aShPeAxsjWRw0FT9bLzpkZl/GNzZY5vd3tOvTmWRcF2MOWna8uq54qKVYLdbwcAM2fOxJYtXdNm99hjD+RyOUiShObmri28TU1NbqCXSCSwZs0a/OhHP4LjOGX/NE2Dz+eDJElQFMU9f/v27bjmmmvwzDPPuN8nxcvcxzPAO/rr16+v+NbUp556Ck899ZR7+k9/+hOWL1/unvb5fJg6dSrWrx+96cBEVB0Mw0BTUxNkWWZoRw3B7/cjEonAsiwkEgmGdUREFZTNZt3nEz6fD6qqwu/3u0FecVeRaZrI5XIDHI2Iak3FetgBwOuvv47nn3++rCddb84880yEQiGMGzcOp59+OlauXNnndR988EEsWrQI++67LyRJwtKlSxGNRrFmzRp3e+pZZ52FUCiElpYWfOELXxhwnaFQCMlkEplMBjNmzMApp5wy5Mc6Vu56ZQc+tnsTjp7VDEkU8OWPTMIerZUrh96RzGG3FsU9vT2Vw32v7sRvTt4DLWpXw9MJoQAWf6h1wGN94hOfgCAIyOVy+OxnP4tHH30UsVjMrUJMp9MwDAOZTAYrVqzAfvvt525t9vl82GOPPfChD30IgUAAyWQSkydPRjgcRjgchq7rWLFiBc455xzMmTMHzc3NmDJlCk488URMnToV48aNgyiKCIfDaG5uRnNzM5qamhCNRhGJRKDrOsLhMF544QUccMABCIfDUFUViqJA0zSEw2EEAgF3alMwGIQkSRBF0W0kL4oiJElCIBAoq6Dbe++9IUkSVFXFmWeeiUgkUhbY7bvvvtixYwfefvvtSn3ZiKhKFavs2MuOGkEgEHDDOlbWERGNrr763hXfOGHfO6L6U7EKu6Kbb74Zf/jDH3Drrbdi+/btvV7nqaeewp133glN0/Doo4/i5ptv7vN4L7zwAq666ipcfvnlaG1txVtvvYVvfOMbbgj085//HJdffjkefPBBtLW14W9/+1vZFNne/PjHP8b555+P8847D6+99hoefvhhLFy4cNiPebAE2xrybd5oM/Dlu17D9Ytno1Xz465XduDJtzqRzVemN8yv1m7GLafshfbL52PtO3GcdNsr+PL/vYYrjp6Bf3zjI2hR/dieyuH/XtmBe//T1usxhELXuzkrVqzA73//e7S0tODZZ5/FlVdeiVwu574rlMlkYJomgK6tpGeffTbOO+88fOc734Eoinj77bdxww03oLOzE/feey8OP/xw3HXXXRAEAYcffjhuvvlmJJNJfO9738OECRNgGAZefvllrFq1yv2DlcvlkMlkIAiCuxW3+LEoiti4cSPeffddzJ8/H88++ywEQcAXv/hFfPGLX3Qfz5o1a/Dyyy/jwgsvBABccMEFOOaYY9zLly5diocffhg///nP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",
114
            "text/plain": [
115
              "<Figure size 1600x500 with 1 Axes>"
116
            ]
117
          },
118
          "metadata": {},
119
          "output_type": "display_data"
120
        }
121
      ],
122
      "source": [
123
        "import matplotlib.pyplot as plt\n",
124
        "import networkx as nx\n",
125
        "\n",
126
        "def plot(graph):\n",
127
        "    labels = {x: f\"{graph.attribute(x, 'id')} ({x})\" for x in graph.scan()}\n",
128
        "    options = {\n",
129
        "        \"node_size\": 1500,\n",
130
        "        \"node_color\": \"#0277bd\",\n",
131
        "        \"edge_color\": \"#454545\",\n",
132
        "        \"font_color\": \"#fff\",\n",
133
        "        \"font_size\": 9,\n",
134
        "        \"alpha\": 1.0\n",
135
        "    }\n",
136
        "\n",
137
        "    fig, ax = plt.subplots(figsize=(16, 5))\n",
138
        "    pos = nx.spring_layout(graph.backend, seed=0, k=0.9, iterations=50)\n",
139
        "    nx.draw_networkx(graph.backend, pos=pos, labels=labels, **options)\n",
140
        "    ax.set_facecolor(\"#303030\")\n",
141
        "    ax.axis(\"off\")\n",
142
        "    fig.set_facecolor(\"#303030\")\n",
143
        "\n",
144
        "    plt.show()\n",
145
        "\n",
146
        "plot(graph)"
147
      ]
148
    },
149
    {
150
      "cell_type": "markdown",
151
      "metadata": {
152
        "id": "caDteWUVK5jI"
153
      },
154
      "source": [
155
        "We now see a graph of not only the search results but how they relate to each other!"
156
      ]
157
    },
158
    {
159
      "cell_type": "markdown",
160
      "metadata": {
161
        "id": "dPdgwyZhk8ZX"
162
      },
163
      "source": [
164
        "## Advanced graph traversal\n",
165
        "\n",
166
        "Before 7.0, the main way to traverse a graph was via the `showpath` method. This method finds the shortest path between two graph nodes. What if we want more control over how a path is traversed? Enter advanced graph traversal."
167
      ]
168
    },
169
    {
170
      "cell_type": "code",
171
      "execution_count": null,
172
      "metadata": {
173
        "id": "B1KRPrcnk8ZX",
174
        "outputId": "2a2f7658-0f5b-4620-cc34-6b66e2496282"
175
      },
176
      "outputs": [
177
        {
178
          "data": {
179
            "image/png": "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o3b/b33rW3XKKafoC1/4wn6fa9q0abrmmmt07rnn1u2eyQR2NdC07UUFcp0qhpKNmbY7tgL5HjVtWyGpv52pUi0RCoVkmqZCoZDK5bIsy6ppBcVQQZ5hGDu11oZCIXm9/f8XBHnAvnFdV7lcTpFIRJZl8T0zAVUqnCs/UysTXguFAlXNu2CapgqFAiEmAKDujXb77g9/+EMtXLhQl156qZ566qlq++4555yjj33sY/rTn/6kH//4x3us6Pvwhz+sOXPm6NJLL61ed+WVV47Ya9KnnnpK5557rl566SVJ0ubNm3X88cfvdJwVbxuR+9sbh7SG9e3TD9ax7TEFvB5tTBf0yyc36dt/Xzdi95GLzRgysBtthmHok5/8pD7zmc9IkpLJpD73uc/pda97nSKRiDo6OvTjH/9Yf//733e67UEHHaQbb7xRy5YtqwaKmzZt0rPPPqv3vOc9uvHGG8f0sQwXgV0NGHI1Y/lNeuWYi2q9lH1jeDRj+Y07lcFWWuIsy5Lf75dpmopGo4pGo9V22Xp4wea6bjXIG2ioIM80zeovikqQt2OIRygBvGZglV1fX1+tl4MxwITXfVcZqJROp2u9FAAARtVw2nfL5bLWrFmjk08+Wffdd5+k/tdop556qtasWaNisah0Or3H9t1AICC/369EIjHo/GPdvmvF2vqnvHvGLna57UNH6nfPbtV5v31OhbKjeZMiOmxKeOTuwCnLirVV99YdDZU3fXe0aNEipdNpvfzyy5KkcDisFStW6Ac/+IG2bdumxYsX66qrrtL73vc+rV69uno7wzD01a9+VU8//fRO57ztttv01a9+lcAOg0V616h17QPqnLlYMobe+LMuuY5a1z6oSO+ruz2sUnXn8XgUCoWqlXelUqlabVFv+xbsLsjbcY+8QCCw2yCvXC5TLYEJK5fLKRqNKpfLEWiPU0x4HRmV34v18GYWAAD14O6779b555+vaDSqTCajww8/XJK0fPly2bZd7Zw67LDDdOmll+qggw7Stm3bdN111+muu+7SSSedpPPPP1+GYeiWW26RJJ100km6/PLLlclk9IMf/EDf/OY39dJLL+lXv/pVtX33P/7jP+TxePTDH/5Qp556qs4991xNnjxZmUxG9957r37xi1/IdV1dffXVkqQbbrhBjuPof//3f3X33XfrT3/6k0499VT19fXJMAz9+7//u0476xyFAgH97ZUeXfznl9SZ7X8j077qFF148wpdeFyb2hMh/X11jz7wuxeULvQ/b/7VuYfp5IOSiga8WtWZ0+fvfFn3r+7d4+euJezXwa1h/fQfG2SV+l+LvrA1qxe2vjYQ7pUvHKefPbZR7zpisg5uMfXoupQu+MOL2tTX//xtUsSv750xRycflJQr6Q/PbtUXl76sou0qEvDq1+fO13EzFitkXKpVq1ZVP5dDueiii3TCCSfooosuUm9vrz72sY9pyZIlampq0jPPPKP//u//1rZt2yT1Vy1eddVVes973qP29nadfPLJyuVyg8534okn6rHHHqt+vGHDBv3v//5v9eMHHnhAr776qubPnz8osDv//PO1evVqbd68WXPnDt6a7JlnntHkyZM1a9YsrVmzZo+f47HWQEnR+DN11VL5rZ7+qTGNwLHlt3o0ddXS4d/EcZTL5dTd3a1UKiXHcRSNRtXc3KxoNFptQ61nrutWg8ZMJqNUKqWuri51dnaqt7dX2WxWpVJJXq9XpmkqHo+rpaVFra2tSiQSampqkmmag0I+YDyr7FEWiURqvRSMsGAwqFgsppaWFkWjUUlSOp1WV1eX+vr6COv2gs/nUyAQYO86AAAG6Ovr08MPP6y3ve1tkqSzzjpLt95666BjotGorr76at1999065ZRTdOWVV+qyyy7TggULdP/99+vnP/+5HnzwQR1//PE6/vjjVSqVqoUVlmXpz3/+s0477TSl02mlUin19fXphBNO0P/93/9p27Zt6ujo0CWXXKKTTjpJl1xyiZYsWaJFixYpn8/r3/7t3yRJn/zkJ3X66afr97//vUyzf5+6WCymRCKhCy+8UCeddJJOvPYJHfStR+RK+vW5hw96DO85copOu+4pHXjVwzogHtJ/LG6vXvfXl3t0+Hcf1aSvPajfPbtVv//X+YoG9vy6uStX0oqtWf38PYfqnPmT1Z4IDXncR94wXe+76XlN/+9l2txX1K/Oe21tt3zwSG3OFDXn249owff/oSOnRfXlUw6UJHkM6cZntuigq5bp1NNO04oVK/TNb35zp/N7vV5dfvnlWrhwoT7ykY+os7NTF110kRYsWKALLrhAb37zm7V27VpdddVVg263ZMkSXXjhhVq0aNGQz4/mzp2rV199dZePP5lMatasWVq1alX1smnTpum9732vvv/9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OX5TM+JBpa44QbHg2AZ3qStO0BFTIru8/n/OnqtvvO2gvTqn4zdVDPe3xX75y1/WOeecs19rrFiwYIGuv/76ETkXAAAAsDsEdgAA1LnrrrtOTz31lN74xjcOuvwDH/iAnnrqKX3uc5/b53Nb8TZJ0vpUQfHLH1C6sO+tscfPjOuODy9Q5+WL1XX5Yv3z02/Q505ol9+762q3+OUP6LktWUnSV0+bpT+9f/6g6y+8ZaW+dNcre72WXGyGZsyYoUWLFunmm2+WJM2fP1/XXHON/vrXv+r+++/XNddco9mzZw+63YIFC/S73/1ODz/8sG666SYdeeSR1eueeeYZlctlnXTSSXu9HgAAAGBvENgBANAA1qxZo3e84x2DLjvrrLO0evXq/TqvFWuTnPJ+nUOSTp/XojsuWKC7X+rS3G8/qpYrHtT5v31eh02JaFpTcKfjfZ5RbFl1yrJibXrPe96je+65R+Vy/+OLxWL685//rHe84x067bTT9Pzzz+vqq6+Wx+OpXv/DH/5QN910k0488UT97ne/0w9+8ANFo9HqqW+77Tade+65o7d2AAAAQAR2AAA0hLvvvlvHH398NTw64ogjJEnPPffcoOMOO+ww/eIXv9ADDzygP/7xj3rb294mSUomk3rsscc0bdq06rF+v18rfv5lHTszqZnJkOyrTlE85Kte/8k3ten5S96orssX6y//dpTmTQrvcn3fP/MQfevv6/TDhzrUlStJklZuy+mCP7yodb356vk/9LppWvm5Y7XuS8dLkuyrTtGCaVGddVirvnTSTJ0+r0WpK05Q6ooTJEnXn3OovnfGnOr9HNxi6pYPzNfmryzStq8u1v+974idF2N4lYvP0IknnqjHH3+8evFDDz2ku+++W5lMRuVyWTfccIOmTZtW/Zyccsop2rp1q26++WaVSiXdfPPN6urq0imnnFI9x2OPPabXve51Cod3/bkAAAAA9heBHQAADaCvr08PP/xwNYA766yzdOuttw46JhqN6uqrr9bdd9+tU045RVdeeaUuu+wyLViwQD09PXrkkUf09re/vXr8CSeeqG25sh5d37fT/f37sQfogjdM01k3PKvJX1+mm5/bpls/eOSQ7a1zWk3NbjF109Nb9vg4zjysVcdc/YQO+tbDgy6/9YVOfeP+tbpjRZfilz+g+OUP7HTbsN+jez56lJ7bktXs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",
180
            "text/plain": [
181
              "<Figure size 1600x500 with 1 Axes>"
182
            ]
183
          },
184
          "metadata": {},
185
          "output_type": "display_data"
186
        }
187
      ],
188
      "source": [
189
        "g = embeddings.graph.search(\"\"\"\n",
190
        "MATCH P=({id: \"Poet\"})-[*1..2]->({id: \"Rapper\"})\n",
191
        "RETURN P\n",
192
        "LIMIT 5\n",
193
        "\"\"\", graph=True)\n",
194
        "\n",
195
        "plot(g)"
196
      ]
197
    },
198
    {
199
      "cell_type": "markdown",
200
      "metadata": {
201
        "id": "yJIHr_9zk8ZY"
202
      },
203
      "source": [
204
        "The query above finds the top 5 connections between a `Poet` and a `Rapper` using a graph query. Graph queries use the [openCypher](https://github.com/opencypher/openCypher) query standard."
205
      ]
206
    },
207
    {
208
      "cell_type": "markdown",
209
      "metadata": {
210
        "id": "MvlWX0yYk8ZY"
211
      },
212
      "source": [
213
        "## Graph RAG\n",
214
        "\n",
215
        "Graph path traversal opens up a different type of RAG process. A standard RAG process typically runs a single vector search query and returns the closest matches. Those matches are then passed into a LLM prompt and used to limit the context and help ensure more factually correct answers are generated. Graphs enable more complex analysis.\n",
216
        "\n",
217
        "We'll use the graph path from the previous example for a more complex RAG query."
218
      ]
219
    },
220
    {
221
      "cell_type": "code",
222
      "execution_count": null,
223
      "metadata": {
224
        "id": "zC_yDuyKk8ZY",
225
        "outputId": "3f52332c-de63-4e94-b2ce-03c1c21fe597"
226
      },
227
      "outputs": [
228
        {
229
          "name": "stdout",
230
          "output_type": "stream",
231
          "text": [
232
            "The roles that are similar to both a rapper and poet are:\n",
233
            "\n",
234
            "1. Composer: A composer creates music for various forms of art, including songs and poems. They work with different instruments and tools to bring the lyrics to life, making the music harmonious and engaging.\n",
235
            "\n",
236
            "2. Novelist: A novelist creates captivating stories with engaging characters and plotlines. They can write in various genres, such as science fiction, romance, or historical fiction. The goal is to write a story that keeps readers engaged and entertained.\n",
237
            "\n",
238
            "3. Movie Critic: A movie critic evaluates and reviews movies, discussing aspects like plot, themes, acting, direction, and more. They aim to express their feelings about the movie and how it impacted them, while also providing constructive criticism.\n",
239
            "\n",
240
            "4. Motivational Speaker: A motivational speaker inspires and empowers their audience by sharing words of wisdom and encouragement. They can talk about various topics, but the goal is to make their audience feel motivated and inspired to achieve their goals.\n"
241
          ]
242
        }
243
      ],
244
      "source": [
245
        "from txtai import LLM\n",
246
        "\n",
247
        "llm = LLM(\"TheBloke/Mistral-7B-OpenOrca-AWQ\")\n",
248
        "\n",
249
        "def rag(question, text):\n",
250
        "    prompt = f\"\"\"<|im_start|>system\n",
251
        "    You are a friendly assistant. You answer questions from users.<|im_end|>\n",
252
        "    <|im_start|>user\n",
253
        "    Answer the following question using only the context below. Only include information specifically discussed.\n",
254
        "\n",
255
        "    question: {question}\n",
256
        "    context: {text} <|im_end|>\n",
257
        "    <|im_start|>assistant\n",
258
        "    \"\"\"\n",
259
        "\n",
260
        "    return llm(prompt, maxlength=4096)\n",
261
        "\n",
262
        "context = \"\\n\".join(g.attribute(node, \"text\") for node in list(g.scan()))\n",
263
        "\n",
264
        "print(rag(\"What roles are similar to both a rapper and poet?\", context))\n"
265
      ]
266
    },
267
    {
268
      "cell_type": "markdown",
269
      "metadata": {
270
        "id": "gb-7zteQk8ZZ"
271
      },
272
      "source": [
273
        "Let's compare these results with the results from a standard RAG query. We'll pull the 6 most similar rows to have the same sized dataset as what is in the graph above."
274
      ]
275
    },
276
    {
277
      "cell_type": "code",
278
      "execution_count": null,
279
      "metadata": {
280
        "id": "jYEUfWbFk8ZZ",
281
        "outputId": "f4bb6f16-f360-4991-d0ab-47eabebdfa0f"
282
      },
283
      "outputs": [
284
        {
285
          "name": "stdout",
286
          "output_type": "stream",
287
          "text": [
288
            "The roles most similar to both a rapper and poet are the Composer and the Song Recommender. Both roles involve creating music or recommending songs based on given lyrics or themes.\n"
289
          ]
290
        }
291
      ],
292
      "source": [
293
        "question = \"What roles are most similar role to both a rapper and poet?\"\n",
294
        "context = \"\\n\".join(x[\"text\"] for x in embeddings.search(question, limit=6))\n",
295
        "print(rag(question, context))"
296
      ]
297
    },
298
    {
299
      "cell_type": "markdown",
300
      "metadata": {
301
        "id": "kQUDymlVk8ZZ"
302
      },
303
      "source": [
304
        "As we can see, the Graph RAG approach yields a more comprehensive answer. The standard RAG answer isn't bad, it's just not as complete."
305
      ]
306
    },
307
    {
308
      "cell_type": "markdown",
309
      "metadata": {
310
        "id": "TrMC9Seqk8ZZ"
311
      },
312
      "source": [
313
        "# Embeddings\n",
314
        "\n",
315
        "There are a couple backwards compatible changes to the embeddings database format. The default configuration format moving forward is `json`. While `pickle` configuration is still supported, txtai is moving towards a readable configuration format. This is to have maximum compatability with the Hugging Face Hub, when uploading models. The `pickle` format is generally not recommended when sharing indexes."
316
      ]
317
    },
318
    {
319
      "cell_type": "code",
320
      "execution_count": null,
321
      "metadata": {
322
        "id": "_N1IwubTk8ZZ",
323
        "outputId": "2f91d501-6a70-4ff2-abf1-a39c8f5a78dd"
324
      },
325
      "outputs": [
326
        {
327
          "name": "stdout",
328
          "output_type": "stream",
329
          "text": [
330
            "{\n",
331
            "  \"autoid\": 2,\n",
332
            "  \"backend\": \"faiss\",\n",
333
            "  \"build\": {\n",
334
            "    \"create\": \"2024-02-21T16:23:26Z\",\n",
335
            "    \"python\": \"3.8.18\",\n",
336
            "    \"settings\": {\n",
337
            "      \"components\": \"IDMap,Flat\"\n",
338
            "    },\n",
339
            "    \"system\": \"Linux (x86_64)\",\n",
340
            "    \"txtai\": \"7.0.0\"\n",
341
            "  },\n",
342
            "  \"dimensions\": 384,\n",
343
            "  \"offset\": 2,\n",
344
            "  \"path\": \"sentence-transformers/all-MiniLM-L6-v2\",\n",
345
            "  \"update\": \"2024-02-21T16:23:26Z\"\n",
346
            "}\n",
347
            "ID List: [0, 1]\n"
348
          ]
349
        }
350
      ],
351
      "source": [
352
        "import json\n",
353
        "import pickle\n",
354
        "\n",
355
        "from txtai import Embeddings\n",
356
        "\n",
357
        "# Create a default index\n",
358
        "embeddings = Embeddings()\n",
359
        "embeddings.index([\"test1\", \"test2\"])\n",
360
        "embeddings.save(\"index\")\n",
361
        "\n",
362
        "# Read standard configuration\n",
363
        "with open(\"index/config.json\") as f:\n",
364
        "    print(json.dumps(json.load(f), sort_keys=True, default=str, indent=2))\n",
365
        "\n",
366
        "# Read ids\n",
367
        "with open(\"index/ids\", \"rb\") as f:\n",
368
        "    print(\"ID List:\", pickle.load(f))"
369
      ]
370
    },
371
    {
372
      "cell_type": "markdown",
373
      "metadata": {
374
        "id": "a1X1_fHdk8ZZ"
375
      },
376
      "source": [
377
        "When no configuration is specified, notice that a `config.json` file is created along with an `ids` file. Ids are no longer stored within the configuration both for `json` and `pickle` configuration. When loading an existing index, the ids are automatically read and moved when saving a new version."
378
      ]
379
    },
380
    {
381
      "cell_type": "markdown",
382
      "metadata": {
383
        "id": "mGpwVhuwk8Za"
384
      },
385
      "source": [
386
        "# LoRA / QLoRA support\n",
387
        "\n",
388
        "Two new parameters have been added to the `HFTrainer` pipeline, `lora` and `quantize`. When both of those are enabled, models are trained using QLoRA. Custom settings are also supported."
389
      ]
390
    },
391
    {
392
      "cell_type": "code",
393
      "execution_count": null,
394
      "metadata": {
395
        "id": "isP662sdk8Za",
396
        "outputId": "e72b4f64-671d-42db-b388-c8a702d9fc04",
397
        "colab": {
398
          "referenced_widgets": [
399
            "b6e77e11948f42429b587fc0cb07faa5"
400
          ]
401
        }
402
      },
403
      "outputs": [
404
        {
405
          "name": "stdout",
406
          "output_type": "stream",
407
          "text": [
408
            "trainable params: 8,355,840 || all params: 470,041,600 || trainable%: 1.7776809541963945\n"
409
          ]
410
        },
411
        {
412
          "data": {
413
            "application/vnd.jupyter.widget-view+json": {
414
              "model_id": "b6e77e11948f42429b587fc0cb07faa5",
415
              "version_major": 2,
416
              "version_minor": 0
417
            },
418
            "text/plain": [
419
              "  0%|          | 0/3 [00:00<?, ?it/s]"
420
            ]
421
          },
422
          "metadata": {},
423
          "output_type": "display_data"
424
        },
425
        {
426
          "name": "stdout",
427
          "output_type": "stream",
428
          "text": [
429
            "{'train_runtime': 0.3832, 'train_samples_per_second': 7.829, 'train_steps_per_second': 7.829, 'train_loss': 9.008923212687174, 'epoch': 3.0}\n"
430
          ]
431
        }
432
      ],
433
      "source": [
434
        "from txtai.pipeline import HFTrainer\n",
435
        "\n",
436
        "trainer = HFTrainer()\n",
437
        "model, _ = trainer(\n",
438
        "    \"ahxt/LiteLlama-460M-1T\",\n",
439
        "    [{\"label\": 0, \"text\": \"sample text\"}],\n",
440
        "    maxlength=16,\n",
441
        "    task=\"language-generation\",\n",
442
        "    quantize=True,\n",
443
        "    lora=True,\n",
444
        ")"
445
      ]
446
    },
447
    {
448
      "cell_type": "markdown",
449
      "metadata": {
450
        "id": "myQTbsHsk8Za"
451
      },
452
      "source": [
453
        "# Binary transport support\n",
454
        "\n",
455
        "The API added support for reading and writing binary content. These changes will be pushed to the API clients in a future release. These changes include:\n",
456
        "\n",
457
        "- Images and media content\n",
458
        "- Encoding binary JSON and using MessagePack"
459
      ]
460
    },
461
    {
462
      "cell_type": "code",
463
      "execution_count": null,
464
      "metadata": {
465
        "id": "TkC2pJIvk8Za",
466
        "outputId": "6d4ef215-c914-4edd-b819-c3ec802db9d9"
467
      },
468
      "outputs": [
469
        {
470
          "name": "stdout",
471
          "output_type": "stream",
472
          "text": [
473
            "Overwriting index.yml\n"
474
          ]
475
        }
476
      ],
477
      "source": [
478
        "%%writefile index.yml\n",
479
        "\n",
480
        "embeddings:"
481
      ]
482
    },
483
    {
484
      "cell_type": "code",
485
      "execution_count": null,
486
      "metadata": {
487
        "id": "xmoseDnbk8Za"
488
      },
489
      "outputs": [],
490
      "source": [
491
        "!CONFIG=index.yml nohup uvicorn \"txtai.api:app\" &> api.log &\n",
492
        "!sleep 90"
493
      ]
494
    },
495
    {
496
      "cell_type": "code",
497
      "execution_count": null,
498
      "metadata": {
499
        "id": "F6IdEWsIk8Za",
500
        "outputId": "2dba53b1-c81a-418e-b2f6-411e3445a03e"
501
      },
502
      "outputs": [
503
        {
504
          "name": "stdout",
505
          "output_type": "stream",
506
          "text": [
507
            "b'0'\n",
508
            "b'\\x00'\n"
509
          ]
510
        }
511
      ],
512
      "source": [
513
        "import requests\n",
514
        "\n",
515
        "requests.post(\"http://localhost:8000/add\", json=[\"test\"])\n",
516
        "requests.get(\"http://localhost:8000/index\")\n",
517
        "\n",
518
        "print(requests.get(\"http://localhost:8000/count\", headers={\"Accept\": \"application/json\"}).content)\n",
519
        "print(requests.get(\"http://localhost:8000/count\", headers={\"Accept\": \"application/msgpack\"}).content)"
520
      ]
521
    },
522
    {
523
      "cell_type": "markdown",
524
      "metadata": {
525
        "id": "Njc8wa09k8Zb"
526
      },
527
      "source": [
528
        "Notice the subtle but important difference between the two outputs. The first response is a `0` character as JSON. The second response is the `\\x00` character and can be intrepreted as a `0` using MessagePack. See below."
529
      ]
530
    },
531
    {
532
      "cell_type": "code",
533
      "execution_count": null,
534
      "metadata": {
535
        "id": "w_KkrUEBk8Zb",
536
        "outputId": "dc3f180c-808a-4752-f8f1-bc7ca3158fc9"
537
      },
538
      "outputs": [
539
        {
540
          "name": "stdout",
541
          "output_type": "stream",
542
          "text": [
543
            "0\n"
544
          ]
545
        }
546
      ],
547
      "source": [
548
        "import msgpack\n",
549
        "print(msgpack.loads(requests.get(\"http://localhost:8000/count\", headers={\"Accept\": \"application/msgpack\"}).content))"
550
      ]
551
    },
552
    {
553
      "cell_type": "markdown",
554
      "metadata": {
555
        "id": "tvnMO1Eai6Gy"
556
      },
557
      "source": [
558
        "# Wrapping up\n",
559
        "\n",
560
        "This notebook gave a quick overview of txtai 7.0. Updated documentation and more examples will be forthcoming. There is much to cover and much to build on!\n",
561
        "\n",
562
        "See the following links for more information.\n",
563
        "\n",
564
        "- [7.0 Release on GitHub](https://github.com/neuml/txtai/releases/tag/v7.0.0)\n",
565
        "- [Documentation site](https://neuml.github.io/txtai)"
566
      ]
567
    }
568
  ],
569
  "metadata": {
570
    "accelerator": "GPU",
571
    "colab": {
572
      "gpuType": "T4",
573
      "provenance": []
574
    },
575
    "kernelspec": {
576
      "display_name": "Python 3",
577
      "name": "python3"
578
    },
579
    "language_info": {
580
      "codemirror_mode": {
581
        "name": "ipython",
582
        "version": 3
583
      },
584
      "file_extension": ".py",
585
      "mimetype": "text/x-python",
586
      "name": "python",
587
      "nbconvert_exporter": "python",
588
      "pygments_lexer": "ipython3",
589
      "version": "3.8.18"
590
    }
591
  },
592
  "nbformat": 4,
593
  "nbformat_minor": 0
594
}
595

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.